LoRA 的完整数学结构(Guest Lecture)
分类: 预训练与微调 · 难度: 进阶 · 关联讲座: L18
LoRA(Low-Rank Adaptation, Hu et al. 2022)是参数高效微调(PEFT)的代表方法,通过在预训练权重上注入低秩分解矩阵 ΔW=BA 实现任务适配,训练参数量可减少数万倍,且推理时零额外开销。本文展开 LoRA 的完整数学结构,包括参数化、初始化、缩放因子和梯度分析。
📐 LoRA 的完整数学结构
LoRA 参数化:对预训练权重矩阵 W0∈Rd×k,注入低秩扰动:
W=W0+ΔW=W0+BA
其中 B∈Rd×r,A∈Rr×k,秩 r≪min(d,k)。
初始化:A∼N(0,σ2),B=0(确保训练开始时 ΔW=0,不破坏预训练权重)。
前向传播(带缩放 α):
h=W0x+rαBAx
- α 是固定超参(通常等于 r),控制学习率与秩无关
- 推理时合并:Wmerged=W0+rαBA,零推理开销
参数量对比(GPT-3 175B,d=12288,r=4):
| 组件 | 原始参数量 | LoRA 参数量 | 节省比例 |
|---|
| Wq,Wv(每层) | 2×122882≈302M | 2×2×12288×4≈196K | 1500x |
| 全模型 | 175B | ~4.7M(r=4,仅 Wq,Wv) | 37000x |
梯度分析:反向传播只流经 A,B,W0 梯度不积累也不存储 → Adam 状态减少同样比例。
🔢 低秩近似的数值直觉
假设 W0∈R4×4,秩为 r=2:
W0=0.50.40.10.30.30.60.20.10.10.20.50.20.20.30.10.4
SVD 分解得奇异值:σ=[1.2,0.8,0.3,0.1]
保留前 2 个奇异值的低秩近似误差(Frobenius 范数):
∥ΔW∥F2=σ32+σ42=0.09+0.01=0.10
而总能量 ∑σi2=1.44+0.64+0.09+0.01=2.18,低秩近似保留了 95.4% 的信息。
关键洞察:预训练权重的更新矩阵 ΔW 内在维度(intrinsic dimensionality)非常低——这解释了为什么 LoRA 有效:任务适应所需的”新信息”体积很小。
💡 为什么低秩有效?
预训练大模型捕获了通用知识,微调只是”调整方向”。类比:一位钢琴家学习弹奏一首新曲,不需要重学手指运动的所有肌肉协调(预训练知识),只需微调特定曲目的节奏和力度(低秩 ΔW)。
Aghajanyan et al. 2021 的实验:在预训练模型上做任意下游任务,其实只需要 r≤100 的低维子空间就能近似最优性能——这是 LoRA 的理论依据。
“Without Regret” 的语境(John Schulman 的视角):LoRA 的局限在于秩固定,而任务复杂度未知。自适应 rank(AdaLoRA)和 rank 增长策略(类似 AdaGrow 的思路)可能弥合与全参数微调的差距而不增加推理代价。
⚠️ 常见误区
-
误区:rank 越大越好 → 正确:rank 增大到某点后性能不再提升但内存/时间增加,通常 r∈{4,8,16} 已足够,r=64 基本等同全参微调。
-
误区:LoRA 只能用于注意力层 → 正确:可应用于任意线性层(FFN、embedding),但实验表明 Wq,Wv 通常比 Wk,Wo 更重要。
-
误区:LoRA 合并后等同于全参微调 → 正确:合并后的 Wmerged 秩受限于 rank(W0)+r,而全参微调的更新矩阵可以是满秩的,在复杂任务上仍有差距。