PEFT 文档
前缀调优
并获得增强的文档体验
开始使用
前缀调优
前缀调优将一系列特定于任务的向量前缀添加到输入序列中,这些向量可以在保持预训练模型冻结的同时进行学习。前缀参数被插入到模型的所有层中。
论文摘要如下:
微调是利用大型预训练语言模型执行下游任务的实际标准方法。然而,它修改了所有语言模型参数,因此每个任务都需要存储一个完整副本。在本文中,我们提出了前缀调优,这是一种用于自然语言生成任务的轻量级微调替代方案,它保持语言模型参数冻结,但优化了一个小的连续任务特定向量(称为前缀)。前缀调优从 Prompting 中汲取灵感,允许后续 tokens 关注此前缀,就好像它是“虚拟 tokens”一样。我们将前缀调优应用于 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 encoder_hidden_size: int = None prefix_projection: bool = False )
这是用于存储 PrefixEncoder 配置的配置类。
PrefixEncoder
用于编码前缀的 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
)