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 Tuning | 0.1% | ~300K |
| Adapter | 3% | ~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)
适用场景
✓ 推荐
- • 生成任务
- • 翻译、摘要
- • 多任务场景
✗ 不推荐
- • 分类任务
- • 实时推理
- • 超长序列
----