PEFT 文档

前缀调优 (Prefix tuning)

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

前缀调优 (Prefix tuning)

前缀调优 (Prefix tuning) 通过在输入序列前添加一系列特定于任务的向量来进行学习,同时保持预训练模型冻结。这些前缀参数被插入到模型的所有层中。

论文摘要如下:

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

PrefixTuningConfig

class peft.PrefixTuningConfig

< >

( task_type: typing.Union[str, peft.utils.peft_types.TaskType, NoneType] = None peft_type: typing.Union[str, peft.utils.peft_types.PeftType, NoneType] = None auto_mapping: typing.Optional[dict] = None base_model_name_or_path: typing.Optional[str] = None revision: typing.Optional[str] = None inference_mode: bool = False num_virtual_tokens: int = None token_dim: int = None num_transformer_submodules: typing.Optional[int] = None num_attention_heads: typing.Optional[int] = None num_layers: typing.Optional[int] = None modules_to_save: typing.Optional[list[str]] = 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_projection` 为 `True`,则用于转换前缀嵌入的两层 MLP。
  • prefix_projection (bool) — 是否对前缀嵌入进行投影。

输入形状:(`batch_size`, `num_virtual_tokens`)

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

< > 在 GitHub 上更新