PEFT 文档

前缀微调

Hugging Face's logo
加入 Hugging Face 社区

并获得增强型文档体验

开始

前缀微调

前缀微调 在输入序列之前添加一系列特定于任务的向量,这些向量可以在保持预训练模型冻结的情况下进行学习。前缀参数被插入到模型的所有层中。

论文中的摘要是

微调是利用大型预训练语言模型执行下游任务的实际方法。但是,它会修改所有语言模型参数,因此需要为每个任务存储一个完整的副本。在本文中,我们提出了前缀微调,一种用于自然语言生成任务的轻量级微调替代方案,它保持语言模型参数冻结,但优化了一个小的连续特定于任务的向量(称为前缀)。前缀微调从提示中汲取灵感,允许后续的标记关注此前缀,就好像它是“虚拟标记”一样。我们将前缀微调应用于 GPT-2 以进行表格到文本的生成,以及应用于 BART 以进行摘要。我们发现,通过仅学习 0.1% 的参数,前缀微调在完整数据设置中获得了相当的性能,在低数据设置中优于微调,并且更好地推断到训练期间未见过的主题示例.

PrefixTuningConfig

class peft.PrefixTuningConfig

< >

( peft_type: Union = None auto_mapping: Optional = None base_model_name_or_path: Optional = None revision: Optional = None task_type: Union = None inference_mode: bool = False num_virtual_tokens: int = None token_dim: int = None num_transformer_submodules: Optional = None num_attention_heads: Optional = None num_layers: Optional = None encoder_hidden_size: int = None prefix_projection: bool = False )

参数

  • encoder_hidden_size (int) — 前缀编码器的隐藏层大小。
  • prefix_projection (bool) — 是否投影前缀嵌入。

这是用于存储 PrefixEncoder 配置的配置类。

PrefixEncoder

class peft.PrefixEncoder

< >

( config )

参数

用于编码前缀的torch.nn模型。

例子

>>> from peft import PrefixEncoder, PrefixTuningConfig

>>> config = PrefixTuningConfig(
...     peft_type="PREFIX_TUNING",
...     task_type="SEQ_2_SEQ_LM",
...     num_virtual_tokens=20,
...     token_dim=768,
...     num_transformer_submodules=1,
...     num_attention_heads=12,
...     num_layers=12,
...     encoder_hidden_size=768,
... )
>>> prefix_encoder = PrefixEncoder(config)

属性:

  • embedding (torch.nn.Embedding) — 前缀编码器的嵌入层。
  • transform (torch.nn.Sequential) — 如果prefix_projectionTrue,则用于转换前缀嵌入的双层 MLP。
  • prefix_projection (bool) — 是否投影前缀嵌入。

输入形状: (batch_size, num_virtual_tokens)

输出形状: (batch_size, num_virtual_tokens, 2*layers*hidden)

< > 在GitHub上更新