LoRA、Adapter 与 Prompt Tuning 推导

分类: 预训练与微调 · 难度: 中级 · 关联讲座: L09

参数高效微调(PEFT)是现代大模型适配的核心范式。本文系统推导四种主流 PEFT 方法的数学结构:In-Context Learning 的机制分析、LoRA 的低秩分解、Prompt/Prefix Tuning 的软提示注入、以及 Adapter 的瓶颈模块设计。

📐 LoRA 完整推导

原始权重更新W=W0+ΔWW = W_0 + \Delta W,其中 W0Rd×kW_0 \in \mathbb{R}^{d \times k}(冻结)

低秩分解假设ΔW=BA\Delta W = BABRd×rB \in \mathbb{R}^{d \times r}ARr×kA \in \mathbb{R}^{r \times k}rmin(d,k)r \ll \min(d, k)

前向传播h=W0x+ΔWx=W0x+BAxh = W_0 x + \Delta W x = W_0 x + BAx

初始化策略AN(0,σ2)A \sim \mathcal{N}(0, \sigma^2)(高斯),B=0B = 0

这保证训练开始时 ΔW=BA=0\Delta W = BA = 0,完全不改变原始模型行为,训练更稳定。

缩放因子(原论文添加):实际使用 αrBA\frac{\alpha}{r} BA,其中 α\alpha 是固定超参数(通常 α=r\alpha = r),方便跨不同 rr 值比较学习率。

参数量对比d=k=4096d = k = 4096r=8r = 8):

  • Full fine-tuning:4096×4096=16,777,2164096 \times 4096 = 16,777,216
  • LoRA:(4096×8)+(8×4096)=65,536(4096 \times 8) + (8 \times 4096) = 65,536(节省 256 倍

推理时合并Wmerged=W0+BAW_{\text{merged}} = W_0 + BA,合并后与原始线性层完全等价,零推理延迟

📐 Prompt Tuning vs Prefix Tuning:结构对比

Prompt Tuning(Lester et al., 2021):仅在输入 embedding 层添加可训练的 soft prompt tokens:

hinput=[p1,p2,,pm, Emb(x1),,Emb(xn)]h_{\text{input}} = [p_1, p_2, \ldots, p_m,\ \text{Emb}(x_1), \ldots, \text{Emb}(x_n)]

其中 piRdp_i \in \mathbb{R}^d 是可学习的连续向量(非离散 token),只有 {p1,,pm}\{p_1, \ldots, p_m\} 参与梯度更新,参数量 = m×dm \times d

Prefix Tuning(Li & Liang, 2021):在每一层 Transformer 的 Key 和 Value 上拼接可训练前缀:

Kl=[PK(l); Kl],Vl=[PV(l); Vl]K_l' = [P_K^{(l)};\ K_l], \quad V_l' = [P_V^{(l)};\ V_l]

每层都有独立的 PK(l),PV(l)Rm×dkP_K^{(l)}, P_V^{(l)} \in \mathbb{R}^{m \times d_k},参数量 = L×2×m×dkL \times 2 \times m \times d_kLL 为层数)。

Prefix Tuning 更强大(每层都可调整),但参数量也更多;Prompt Tuning 极度精简。

📐 Adapter 模块的结构

Adapter 在每个 Transformer 子层后插入一个瓶颈模块:

Adapter(h)=h+f(hWdown)Wup\text{Adapter}(h) = h + f(h W_{\text{down}}) W_{\text{up}}

其中:

  • WdownRd×rW_{\text{down}} \in \mathbb{R}^{d \times r}:降维投影(rdr \ll d
  • WupRr×dW_{\text{up}} \in \mathbb{R}^{r \times d}:升维投影
  • ff:非线性激活(ReLU 或 GELU)
  • 残差连接:保证 Wup=0W_{\text{up}} = 0 初始化时 Adapter 不改变模型输出

Houlsby(串行)vs Pfeiffer(并行)

  • Houlsby:每层插 2 个 adapter(MHA 后 + FFN 后),性能更好
  • Pfeiffer:每层只插 1 个 adapter(FFN 后),参数更少,效率更高

📐 In-Context Learning(ICL)的机制分析

给定 kk 个示例 (x1,y1),,(xk,yk)(x_1, y_1), \ldots, (x_k, y_k) 和查询 xk+1x_{k+1},ICL 计算:

P(yx1,y1,,xk,yk,xk+1)πLM(yprompt)P(y \mid x_1, y_1, \ldots, x_k, y_k, x_{k+1}) \propto \pi_{LM}(y \mid \text{prompt})

关键发现(Min et al., 2022):示例的格式比示例的正确性更重要。实验将标签随机打乱(如把所有”正面”改成随机标签),ICL 性能几乎不下降!这说明模型主要从示例中学习的是:

  • 任务格式(输入/输出的结构)
  • 标签空间(有哪些可能的输出)
  • 输入的分布(什么样的输入是合法的)

而非从正确的 label 中学习因果关系。