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 模块的输出为 ,则最终输出为:

Adapter-Tuning(Houlsby et al., 2019)的原始设计中,每个 Transformer 层在注意力子层和前馈子层之后各插入一个 Adapter。由于 Adapter 输出维度与输入一致,它可以直接加在残差连接处,无需改变模型的主体数据流。

1.3 前向形式(数学推导)

对于 Transformer 第 层,输入为 为 batch size, 为序列长度, 为隐藏维度),标准前向过程为:

Adapter 在 之后插入瓶颈路径,完整的第 层前向形式为:

其中瓶颈维度 通常取 不等。若 ,则 Adapter 的参数量为:

相比全量微调 ,参数量减少约 64 倍

1.4 为什么能低成本适配

  1. 瓶颈强迫信息压缩:输入向量 必须压缩到 维瓶颈空间,再重建回 维。这一压缩-重建过程迫使 Adapter 学习对当前任务最关键的跨任务表征
  2. 残差注入避免破坏预训练知识:由于是加在残差路径上而非替换原始输出,原始模型的知识得以保留,Adapter 只需学习”如何轻微调整”预训练表征。
  3. 并行结构不增加推理延迟: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 前缀如何影响注意力计算(数学推导)

设序列长度为 ,前缀长度为 ,则拼接后的 key 矩阵和 value 矩阵为:

注意力输出对每个 query 向量 (第 个 token 对应的 query)为:

这可以展开为两部分贡献:

关键性质:前缀 不出现在 query 侧,因此前缀对注意力的影响全部通过 key 和 value 通道,即它们决定了每个 token 在聚合信息时”参考”哪些隐藏状态。相比直接修改 (全量训练),Prefix Tuning 仅修改注意力计算的”上下文起点”。

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 序列为 ,对应的嵌入为 ,则 Prompt Tuning 的输入为:

其中 为可学习的 维向量,与 token 嵌入处于同一空间,但没有对应的离散 token(故称”soft”)。

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 数学形式

为预训练好的 token 嵌入矩阵(冻结),可学习的 prompt 矩阵 ,则输入序列的嵌入为:

前向通过 L 层 Transformer:

最终预测通常取 位置(最后一个 prompt token)的隐藏状态来预测:

3.4 参数量

,则仅 参数,是 Adapter 的约

3.5 适合的任务类型

  • 少样本分类:只需少量标注数据即可通过优化 soft prompt 获得不错的分类性能。
  • 零样本跨域迁移:在不同领域间迁移时,soft prompt 的调整比全量微调更稳定,不易过拟合。
  • 模型探针(Probing)研究:用于探测预训练模型中已有的知识。

4. 与 LoRA 的对比

4.1 表达能力

方法表达能力说明
Adapter中等瓶颈结构本质上限制了表达能力,适合学习任务相关的”修正量”,但难以捕捉需要大幅改造模型行为的复杂适配
Prefix Tuning较强前缀向量在每一层的 K/V 通道注入信息,信息流更丰富,适合需要全局语义调整的生成任务
Prompt Tuning较弱仅在输入层注入,信息需经过 L 层前向传播才能发挥作用,信号衰减明显
LoRA较强低秩分解在理论上等价于全量微调的一个子空间,表达能力上界更高

从数学角度看,LoRA 的低秩更新 与 Adapter 的瓶颈映射 本质上都是对原始权重矩阵的低秩逼近,但 LoRA 直接作用于注意力矩阵或 FFN 的权重更新,Adapter 则是作用于激活值的残差路径。

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 参数初始化

方法初始化策略理由
AdapterDown-projection 初始化为零矩阵;Up-projection 用随机正交初始化零初始化保证训练初期 Adapter 输出为零,模型等价于预训练状态;正交初始化避免梯度过小
Prefix Tuning前缀向量初始化为随机向量(服从正态分布)并做 LayerNorm随机初始化提供足够的多样性;LayerNorm 稳定尺度
Prompt Tuningprompt 向量初始化为预训练 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(soft prompt 向量)
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. 三者核心对比表

维度AdapterPrefix TuningPrompt TuningLoRA
插入位置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 方法,只有最适合任务特点的方法