LoRA、Adapter 与 Prompt Tuning 推导
分类: 预训练与微调 · 难度: 中级 · 关联讲座: L09
参数高效微调(PEFT)是现代大模型适配的核心范式。本文系统推导四种主流 PEFT 方法的数学结构:In-Context Learning 的机制分析、LoRA 的低秩分解、Prompt/Prefix Tuning 的软提示注入、以及 Adapter 的瓶颈模块设计。
📐 LoRA 完整推导
原始权重更新:W=W0+ΔW,其中 W0∈Rd×k(冻结)
低秩分解假设:ΔW=BA,B∈Rd×r,A∈Rr×k,r≪min(d,k)
前向传播:
h=W0x+ΔWx=W0x+BAx
初始化策略:A∼N(0,σ2)(高斯),B=0
这保证训练开始时 ΔW=BA=0,完全不改变原始模型行为,训练更稳定。
缩放因子(原论文添加):实际使用 rαBA,其中 α 是固定超参数(通常 α=r),方便跨不同 r 值比较学习率。
参数量对比(d=k=4096,r=8):
- Full fine-tuning:4096×4096=16,777,216
- LoRA:(4096×8)+(8×4096)=65,536(节省 256 倍)
推理时合并:Wmerged=W0+BA,合并后与原始线性层完全等价,零推理延迟。
📐 Prompt Tuning vs Prefix Tuning:结构对比
Prompt Tuning(Lester et al., 2021):仅在输入 embedding 层添加可训练的 soft prompt tokens:
hinput=[p1,p2,…,pm, Emb(x1),…,Emb(xn)]
其中 pi∈Rd 是可学习的连续向量(非离散 token),只有 {p1,…,pm} 参与梯度更新,参数量 = m×d。
Prefix Tuning(Li & Liang, 2021):在每一层 Transformer 的 Key 和 Value 上拼接可训练前缀:
Kl′=[PK(l); Kl],Vl′=[PV(l); Vl]
每层都有独立的 PK(l),PV(l)∈Rm×dk,参数量 = L×2×m×dk(L 为层数)。
Prefix Tuning 更强大(每层都可调整),但参数量也更多;Prompt Tuning 极度精简。
📐 Adapter 模块的结构
Adapter 在每个 Transformer 子层后插入一个瓶颈模块:
Adapter(h)=h+f(hWdown)Wup
其中:
- Wdown∈Rd×r:降维投影(r≪d)
- Wup∈Rr×d:升维投影
- f:非线性激活(ReLU 或 GELU)
- 残差连接:保证 Wup=0 初始化时 Adapter 不改变模型输出
Houlsby(串行)vs Pfeiffer(并行):
- Houlsby:每层插 2 个 adapter(MHA 后 + FFN 后),性能更好
- Pfeiffer:每层只插 1 个 adapter(FFN 后),参数更少,效率更高
📐 In-Context Learning(ICL)的机制分析
给定 k 个示例 (x1,y1),…,(xk,yk) 和查询 xk+1,ICL 计算:
P(y∣x1,y1,…,xk,yk,xk+1)∝πLM(y∣prompt)
关键发现(Min et al., 2022):示例的格式比示例的正确性更重要。实验将标签随机打乱(如把所有”正面”改成随机标签),ICL 性能几乎不下降!这说明模型主要从示例中学习的是:
- 任务格式(输入/输出的结构)
- 标签空间(有哪些可能的输出)
- 输入的分布(什么样的输入是合法的)
而非从正确的 label 中学习因果关系。