Prefix Tuning

基于连续提示的高效微调方法

核心思想

Prefix Tuning在每一层的注意力输入前添加一组可训练的连续向量(虚拟token), 这些前缀向量作为任务的"指令",引导模型生成期望的输出。

# 原始输入
[x₁, x₂, ..., xₙ]
# 添加前缀后
[p₁, p₂, ..., pₖ, x₁, x₂, ..., xₙ]
# p为可训练前缀向量,k为前缀长度

架构示意

输入层
[Prefix Embedding] + [Input Tokens]
每层注意力
[Prefix K,V] + [真实 K,V]
输出
生成目标序列

关键特点

层级别前缀

每个Transformer层都有独立的前缀参数

仅修改注意力

前缀只影响Key和Value的计算

重参数化

使用MLP生成前缀,训练更稳定

参数效率

方法可训练参数GPT-2 Medium
全参数微调100%348M
Prefix Tuning0.1%~300K
Adapter3%~10M

代码示例

# 使用PEFT实现Prefix Tuning
from peft import PrefixTuningConfig, get_peft_model
config = PrefixTuningConfig(
num_virtual_tokens=20, # 前缀长度
task_type="SEQ_2_SEQ_LM"
)
model = get_peft_model(model, config)

适用场景

✓ 推荐
  • • 生成任务
  • • 翻译、摘要
  • • 多任务场景
✗ 不推荐
  • • 分类任务
  • • 实时推理
  • • 超长序列
----