Adapter、Prefix Tuning 与 Prompt Tuning
概述
Adapter、Prefix Tuning 和 Prompt Tuning 是三类主流的参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)方法。它们的核心思想都是在不修改原始大模型参数的前提下,通过引入少量可学习模块或向量,使模型能够适配下游任务。三者在模型结构中的插入位置不同,因此各自的表达能力、训练效率和部署方式也存在显著差异。
1. Adapter
1.1 结构与插入位置
Adapter 通过在 Transformer 层的前馈网络(FFN)之后或注意力子层之后插入一个小型的瓶颈(Bottleneck)模块来实现参数高效微调。典型的 Adapter 结构包含两个线性映射层,中间夹着一个非线性激活函数:
原始 FFN 输出
│
▼
┌─────────────────────┐
│ Down-Projection │ W_down: d → r (r << d)
│ (d → r) │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Activation │ σ (通常为 ReLU 或 Gate)
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Up-Projection │ W_up: r → d
│ (r → d) │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Skip Connection │ Add & Norm
└─────────────────────┘
│
▼
继续后续 Transformer 层
1.2 上下游如何连接残差
Adapter 的残差连接遵循”并行插入”原则:设原始残差路径的输出为
在 Adapter-Tuning(Houlsby et al., 2019)的原始设计中,每个 Transformer 层在注意力子层和前馈子层之后各插入一个 Adapter。由于 Adapter 输出维度与输入一致,它可以直接加在残差连接处,无需改变模型的主体数据流。
1.3 前向形式(数学推导)
对于 Transformer 第
Adapter 在
其中瓶颈维度
相比全量微调
1.4 为什么能低成本适配
- 瓶颈强迫信息压缩:输入向量
必须压缩到 维瓶颈空间,再重建回 维。这一压缩-重建过程迫使 Adapter 学习对当前任务最关键的跨任务表征。 - 残差注入避免破坏预训练知识:由于是加在残差路径上而非替换原始输出,原始模型的知识得以保留,Adapter 只需学习”如何轻微调整”预训练表征。
- 并行结构不增加推理延迟:Adapter 前向计算与原始 FFN 并行(或顺序共享),在推理阶段可以通过权重融合将 Adapter 吸收进原始权重,零额外延迟。
1.5 适合的任务类型
- 文本分类(尤其是单标签分类):Adapter 压缩后的瓶颈表征适合判别性任务。
- 序列标注(NER、POS tagging):需要在 token 级别做出预测,适合 Adapter 的逐 token 注入。
- 跨语言迁移(多语言 BERT):每个语言可以有自己的 Adapter,互不干扰。
- 多任务学习:可以在一份预训练模型上同时挂载多个 Adapter,通过切换实现多任务切换。
2. Prefix Tuning
2.1 结构与插入位置
Prefix Tuning 的核心是在 Transformer 每一层的注意力计算之前,在 key 序列和 value 序列的头部预先拼接(prepend)若干个可学习的前缀向量。这些前缀向量不参与实际的 token 序列交互,仅在注意力计算时作为”虚拟 token”提供额外信息。
标准注意力输入:
Q = [Token tokens...] K = [Token tokens...] V = [Token tokens...]
↑ ↑ ↑
可学习前缀 可学习前缀 可学习前缀
Prefix Tuning 注意力输入:
Q = [P_Q^1 ... P_Q^m | Token tokens...] ← 仅 Q 前缀
K = [P_K^1 ... P_K^m | Token tokens...] ← K、V 前缀
V = [P_V^1 ... P_V^m | Token tokens...]
2.2 Prefix Key/Value 的作用
设可学习的前缀矩阵为
其中
注意力分数计算为:
由于
2.3 前缀如何影响注意力计算(数学推导)
设序列长度为
注意力输出对每个 query 向量
这可以展开为两部分贡献:
关键性质:前缀
2.4 参数量分析
Prefix Tuning 的可学习参数仅为前缀矩阵
其中
相比全量微调约 200 倍的参数压缩比。
2.5 适合的任务类型
- 文本生成(对话、摘要、翻译):Prefix Tuning 在 decoder-only 模型(如 GPT 系列)上表现尤为出色,因为前缀在每一层都提供了额外的生成”锚点”。
- 可控文本生成:可以通过学习不同的前缀向量来控制生成内容的属性(情感、主题、风格)。
- 少样本学习:前缀提供了额外的上下文空间,适合在少样本场景下注入任务相关先验。
3. Prompt Tuning
3.1 Soft Prompt 的含义
Prompt Tuning(Lester et al., 2021)本质上是 Prefix Tuning 的简化版本:它只在大模型的输入嵌入层(embedding)之前拼接可学习的 soft prompt 向量,而不涉及任何中间层的修改。
设原始输入 token 序列为
其中
3.2 与 Discrete Prompt 的区别
| 维度 | Discrete Prompt(离散提示) | Soft Prompt(可微调提示) |
|---|---|---|
| 形式 | 离散的文字模板,如 “The movie is [MASK]“ | 连续的向量,无对应真实 token |
| 可调性 | 不可梯度优化,需人工设计 | 可梯度反向传播优化 |
| 与模型关系 | 只影响输入嵌入,模型权重不变 | 只影响输入嵌入,模型权重不变 |
| 表达能力 | 受语言模型分词器 vocab 限制 | 理论上可以表达任意连续向量 |
| 任务适配效率 | 需要大量实验试错 | 通过优化直接搜索最优提示 |
离散 prompt 的典型代表是 PET(Pattern Exploiting Training)家族方法,它们通过手工设计的文字模板(如 “It was [MASK]“)来激活预训练模型的知识。Soft prompt 则将这个模板本身也变成了可学习的连续向量。
3.3 数学形式
设
前向通过 L 层 Transformer:
最终预测通常取
3.4 参数量
若
3.5 适合的任务类型
- 少样本分类:只需少量标注数据即可通过优化 soft prompt 获得不错的分类性能。
- 零样本跨域迁移:在不同领域间迁移时,soft prompt 的调整比全量微调更稳定,不易过拟合。
- 模型探针(Probing)研究:用于探测预训练模型中已有的知识。
4. 与 LoRA 的对比
4.1 表达能力
| 方法 | 表达能力 | 说明 |
|---|---|---|
| Adapter | 中等 | 瓶颈结构本质上限制了表达能力,适合学习任务相关的”修正量”,但难以捕捉需要大幅改造模型行为的复杂适配 |
| Prefix Tuning | 较强 | 前缀向量在每一层的 K/V 通道注入信息,信息流更丰富,适合需要全局语义调整的生成任务 |
| Prompt Tuning | 较弱 | 仅在输入层注入,信息需经过 L 层前向传播才能发挥作用,信号衰减明显 |
| LoRA | 较强 | 低秩分解在理论上等价于全量微调的一个子空间,表达能力上界更高 |
从数学角度看,LoRA 的低秩更新
4.2 训练效率
所有四种方法的训练参数量都远小于全量微调,但实际训练效率仍有差异:
- Prompt Tuning:最高效。只涉及输入嵌入层的优化,梯度只需反向传播一层 Embedding,显存占用最低。
- Prefix Tuning:较高。前缀在所有层同步更新,梯度流动路径长,但参数量仍小。
- Adapter:中等。需要额外的矩阵乘法和激活计算,显存占用比 Prefix Tuning 高(因为要缓存中间激活)。
- LoRA:与 Adapter 相近。梯度计算和显存占用类似,但实现更简洁。
4.3 推理开销
| 方法 | 推理时额外计算 | 合并可行性 |
|---|---|---|
| Adapter | 需执行额外的瓶颈前向(可融合) | 可合并,融合后零推理开销 |
| Prefix Tuning | 需计算拼接后的注意力(KV 头变长) | 不可合并,推理时仍需维护前缀向量 |
| Prompt Tuning | 需拼接 prompt 向量(序列变长) | 不可合并,推理时仍需维护 prompt 向量 |
| LoRA | 需要额外的矩阵乘法(可融合) | 可合并,融合后零推理开销 |
Prefix/Prompt Tuning 在推理时必须保留可学习的向量,因此推理吞吐量和延迟会有所增加(尤其在序列较长时)。Adapter 和 LoRA 通过权重融合可以将额外计算归零,更适合对延迟敏感的生产部署场景。
4.4 可合并性(Deployment)
可合并意味着 PEFT 权重可以与原始预训练权重合并为一份权重文件,推理时无需加载额外的适配器模块:
- Adapter(权重融合后):
,合并后无额外推理开销。 - LoRA:
,合并后无额外推理开销。 - Prefix/Prompt Tuning:无法真正合并到原始权重中。推理时需要在每一层或输入嵌入处动态注入学习到的向量,部署复杂度更高。
5. 工程实践流程
5.1 参数初始化
| 方法 | 初始化策略 | 理由 |
|---|---|---|
| Adapter | Down-projection 初始化为零矩阵;Up-projection 用随机正交初始化 | 零初始化保证训练初期 Adapter 输出为零,模型等价于预训练状态;正交初始化避免梯度过小 |
| Prefix Tuning | 前缀向量初始化为随机向量(服从正态分布)并做 LayerNorm | 随机初始化提供足够的多样性;LayerNorm 稳定尺度 |
| Prompt Tuning | prompt 向量初始化为预训练 embedding 空间中的”平均 token 嵌入”(取词表随机几行的均值) | 使初始 prompt 接近模型已知的语义空间,训练初期更稳定 |
5.2 学习率选择
| 方法 | 推荐学习率 | 说明 |
|---|---|---|
| Adapter | 瓶颈模块容量小,需大学习率加速收敛 | |
| Prefix Tuning | 前缀直接参与注意力,需较大学习率克服梯度衰减 | |
| Prompt Tuning | 仅优化 embedding,需非常大 lr;通常配合 AdamW 使用 | |
| LoRA | 与 Adapter 类似,lr 适中 |
通用原则:PEFT 方法的学习率通常比全量微调(
~ )高 1~2 个数量级,因为可学习参数少,需要更大的梯度步长。
5.3 冻结策略
| 方法 | 冻结部分 | 放开部分 |
|---|---|---|
| Adapter | 全部 Transformer 权重 + LayerNorm | 仅 Adapter 的 |
| Prefix Tuning | 全部 Transformer 权重 + LayerNorm | 仅 |
| Prompt Tuning | 全部 Transformer 权重 + LayerNorm + Token Embedding | 仅 |
| LoRA | 全部 Transformer 权重 + LayerNorm | 仅 |
5.4 保存与部署方式
Adapter 保存格式(权重可融合):
adapter_weights.bin = {down_weight, up_weight, adapter_scale}
merged_model.bin = pretrained_weights + adapter_delta
Prefix/Prompt 保存格式(需分离部署):
prefix_vectors.pt = {P_K, P_V} # 每层一组
prompt_vectors.pt = {P} # 仅输入层
LoRA 保存格式(权重可融合):
lora_weights.bin = {A, B, lora_alpha, lora_rank}
merged_model.bin = pretrained_weights + alpha * B * A
推荐合并流程:训练时保留 PEFT 权重用于继续训练;部署前将 PEFT 权重与预训练权重融合为一份 merged checkpoint,推理时直接加载,无任何额外模块依赖。
6. 常见问题
6.1 收敛慢
- 原因:Prompt Tuning 的 soft prompt 在训练初期信号很弱(需经过 L 层传播才能影响输出),导致梯度太小。
- 解决:使用较大的学习率(
级);在训练初期使用较长的 warmup 步数;用预训练 embedding 均值初始化 prompt。
6.2 前缀长度敏感
- 原因:
过长会挤压有效 token 序列的上下文空间(注意力计算中 token 占比下降); 过短则信息容量不足。 - 解决:从
开始尝试,根据任务复杂度逐步调整;在实验中绘制 vs 下游任务指标的曲线找最优区间。
6.3 训练不稳定
- 原因:Prefix Tuning 在深层 Transformer 中的梯度波动大;Adapter 的零初始化若未正确实现会导致死梯度。
- 解决:使用 LayerNorm 对前缀向量做尺度约束;对 Adapter 采用渐进式初始化(先训练下投影,再训练上投影);加入梯度裁剪(max norm = 1.0)。
6.4 效果对模板依赖强(Prompt Tuning 特有)
- 原因:Soft prompt 的最优值与具体的分类标签词(label words)位置高度相关。改变标签词或模板措辞会显著影响效果。
- 解决:保持模板措辞稳定;在少样本场景下固定使用手工设计的 label tokens 而非自由生成的标签描述。
7. 何时优先选用 Adapter / Prefix / Prompt,而非 LoRA
| 场景 | 推荐方法 | 理由 |
|---|---|---|
| 需要零推理开销的生产部署 | Adapter > LoRA | 两者均可融合,但 Adapter 在残差路径更稳定 |
| 少样本分类场景 | Prompt Tuning > LoRA | 实现最简,显存最低,少量样本下不易过拟合 |
| 可控文本生成 | Prefix Tuning | 前缀对生成过程的影响更直接,可实现多属性控制 |
| 多任务切换部署(同一模型服务多个任务) | Adapter | 可独立存储多个 Adapter,动态加载切换,部署灵活性高 |
| 跨语言/跨领域迁移 | Adapter | 每个语言/领域独立 Adapter,隔离性好,不相互干扰 |
| 需要高表达能力(复杂下游任务) | LoRA > Prefix Tuning | 低秩更新的理论表达能力上界更高 |
| 参数极度受限(极端低资源场景) | Prompt Tuning | 参数量最小(仅 |
总结:LoRA 适合大多数通用场景(表达能力 + 可合并性平衡)。但当需要高部署灵活性(动态切换 Adapter)、生成过程可控性(Prefix Tuning)或极致轻量化(Prompt Tuning)时,应选择对应的专用方法。
8. 三者核心对比表
| 维度 | Adapter | Prefix Tuning | Prompt Tuning | LoRA |
|---|---|---|---|---|
| 插入位置 | FFN/Attention 残差后 | 每层 K/V 前缀 | 输入嵌入前缀 | W_Q / W_K / W_V / FFN |
| 参数量 | ||||
| 表达能力 | 中等 | 较强 | 较弱 | 较强 |
| 推理开销 | 零(融合后) | 有(KV 变长) | 有(序列变长) | 零(融合后) |
| 可合并性 | 是 | 否 | 否 | 是 |
| 收敛速度 | 快 | 中等 | 慢 | 快 |
| 生成任务表现 | 一般 | 优秀 | 较差 | 优秀 |
| 分类任务表现 | 优秀 | 良好 | 良好 | 优秀 |
| 多任务部署 | 优秀 | 一般 | 一般 | 良好 |
| 实现复杂度 | 中等 | 中等 | 低 | 低 |
9. PEFT 方法选型建议
开始任务分析
│
▼
任务类型是生成式任务? ──是──► Prefix Tuning(首选)
│ LoRA(备选,强表达能力)
│ 否
▼
是否极度低资源? ──是──► Prompt Tuning(极致轻量)
│ 否
▼
需要多任务动态切换? ──是──► Adapter(独立存储,动态加载)
│ 否
▼
分类/序列标注任务? ──是──► Adapter 或 LoRA
│ (两者均可,部署需求决定)
│ 否
▼
需要可控生成/属性控制? ──是──► Prefix Tuning
│ 否
▼
默认推荐:LoRA
(综合表达能力 + 部署效率最优解)
10. 总结
三类 PEFT 方法的本质差异在于**“在哪里注入适配信息”**:
- Adapter 在隐藏状态空间做残差注入,信息通过残差加法直接融合进每层输出,信号强但受瓶颈容量限制。
- Prefix Tuning 在注意力计算空间注入,在信息聚合的源头施加影响,适合需要全局语义引导的生成任务。
- Prompt Tuning 在输入端注入,信息需经过完整的前向链路才能发挥作用,信号衰减最严重,但实现最简洁、参数量最小。
理解这三个”注入位置”的差异,就能理解为什么不同方法在不同任务上各有优劣——没有最好的 PEFT 方法,只有最适合任务特点的方法。