LoRA 的数学原理是什么?为什么低秩分解能近似全量微调的效果?
LoRA 的数学原理是什么?为什么低秩分解能近似全量微调的效果?
这道题考的是 LoRA 低秩分解的核心数学原理,以及为什么通过降维能实现接近全量微调的效果。面试官想看你能不能把"大参数矩阵 → 低秩矩阵"这个近似过程讲清楚。
我从四个方面来讲:LoRA 的基本思想、低秩的数学本质、为什么低秩能 work、以及 scaling rate 这个实战细节。
LoRA 是什么?—— 不重建大楼,只加固承重墙
全量微调的问题在哪?模型有 d×d 这么大一个参数矩阵,你要更新的就是这个矩阵。GPT-3 的 Attention 层是 50272 × 50272 的矩阵,一个矩阵就 250 亿参数。全量微调意味着你显存里要放下整个模型 + 优化器状态 + 梯度,光 optimizer states 就得存四份梯度。
LoRA 干了件什么事?它说:别直接动 W,你学一个新的 ΔW,然后把它拆成两个小矩阵相乘。
核心公式长这样:
h = Wx + (α/r)BAx
W 是冻结的预训练权重。BA 是两个可训练的小矩阵,B 是 d×r,A 是 r×d,所以参数量是 d×r + r×d,而不是原来的 d×d。α 通常设成 r 或者 2r,相当于一个缩放系数。
打个比方。全量微调像是拆掉整栋楼重建。LoRA 像是只加固那几根关键承重墙,其他地方刷个漆就完事。
参数降了多少?假设 d=50272,r=8。那么原来要更新的参数量是 50272² ≈ 25 亿,现在只需要 50272×8 + 8×50272 ≈ 80 万。差了 30000 倍。
低秩的数学本质—— 为什么矩阵可以"降维"?
要理解 LoRA 为什么能 work,得先搞懂什么叫"低秩"。
矩阵的秩(rank)是什么?就是你这矩阵里,线性无关的行或列的最大数量。如果一个 100×100 的矩阵,秩只有 10,说明这里面 90 列都是多余的——它们可以由其他列线性组合出来。
举个例子。假设你有三列:[1,2,3]、[2,4,6]、[3,6,9]。第三列等于前两列相加,这个矩阵的秩就是 2,而不是 3。信息量没有你想的那么大。
SVD 分解(奇异值分解)干的就是这件事。任何矩阵 W 都可以写成:
W = U × Σ × Vᵀ
U 和 V 是正交矩阵,Σ 是对角矩阵,对角线上是奇异值。奇异值的大小告诉你每个方向有多重要。通常前几个奇异值就占了 99% 的能量,后面那些基本是噪声。
所以你要近似 W,不需要保留全部 d 个奇异值。取前 r 个就够了,误差可控。这就是低秩近似的数学基础。
再打个比方。你有张高清照片,相邻像素颜色其实差不多。你不需要存储每个像素的信息,存几个关键点 + 插值规则,照片看起来差不多,但体积小了几十倍。矩阵也一样,满秩不代表满信息。
为什么低秩能近似全量微调?—— 三个原因
这是这道题的核心。你得能解释清楚:为什么把 ΔW 限制成低秩 BA,还能达到接近全量微调的效果?
1. 预训练模型已经学够了
模型预训练时学的是通用能力——语法、语义、世界知识。这些能力对应的是参数空间里某些特定的方向。
微调下游任务时,你不需要重新学这些通用能力。你只需要在预训练学到的特征基础上,往某个特定方向"歪"一下。
这个"歪一下"的动作,对应的 ΔW,它的有效维度其实很低。就像你要让一个已经瞄准靶心的箭稍微偏左一点,你不需要把弓拆了重做,调整几个角度参数就够了。
2. ΔW 本身就是秩亏的
这个是 LoRA 论文的核心假设:微调产生的 ΔW,它的有效秩远小于 d。
怎么理解?预训练模型权重 W 往往已经接近最优解附近了。在这个邻域内,loss 曲面的曲率变化是平滑的,有效的参数更新方向就那么几个。
数学上可以说:ΔW 的奇异值谱是"快速衰减"的。前几个奇异值占了绝大部分,后面那些很小很小的值,对输出影响微乎其微,扔掉也不心疼。
3. 实验证明一切
论文里做了实验。GPT-2 分别用 r=4、r=8、r=64 训练,效果几乎一样。r=4 只用了 4 个维度来更新模型,但性能没有明显下降。
这说明什么?下游任务的有效更新方向,真的就那么几个。r=4 已经够 capture 主要矛盾了,r=64 是在 overkill。
scaling rate 与实战细节
还有一个细节,面试时能说出来会很加分:α/r 这个缩放因子。
公式是 h = Wx + (α/r)BAx。
A 和 B 怎么初始化的?A 用随机初始化,B 初始化为零。这样 BA 的初始值就是零矩阵,ΔW = 0。训练从原始预训练模型的输出开始,然后逐渐学习新的方向。
这个设计保证了训练的稳定性。你不会因为随机初始化导致输出偏移太大,模型可以渐进地学习。
α/r 为什么这么设计?因为 r 决定了你更新的"分辨率"。r 越小,BA 的表达能力越弱,但训练越稳定。α/r 这个比值相当于一个全局增益,控制低秩分支的影响力。
通常 α 设为 r 或者 2r。这样 α/r ≈ 1-2,意味着低秩分支的初始贡献权重和原始 W 差不多。
训练完成后,BA 可以直接加到 W 上,合并成一个新的权重矩阵 W' = W + BA。推理的时候完全等价于全量微调,没有额外的计算开销。
面试怎么答
基础版
LoRA 通过低秩矩阵分解来更新权重。它把原本 d×d 的权重更新 ΔW 表示成两个小矩阵 B 和 A 的乘积,参数量从 d×d 降到 d×r + r×d。GPT-3 用 r=8 的 LoRA,参数量从 250 亿降到约 1800 万。
核心公式是 h = Wx + (α/r)BAx,α/r 是缩放系数。
低秩能 work 的原因是:预训练模型已经学够了通用特征,微调只需要在参数空间里沿少数几个方向做调整。ΔW 本身的有效秩远小于 d,实验也证明 r=4/8/64 效果几乎没差别。
加分版
你可以补充:LoRA 的显存优化优势主要来自减少了 optimizer states 的存储。单层反向传播的峰值显存其实没有减少,减少的是需要梯度计算和优化的参数总量。
还可以提到 QLoRA。它把权重存成 4-bit,LoRA 部分用 16-bit 计算,实现了更高效率的微调。本质上是把"高精度存储 + 高精度计算"改成了"低精度存储 + 高精度计算"。
初始化时让 ΔW=0 从零开始,这个设计保证了训练的稳定性,模型可以渐进学习而不是一开始就剧烈偏移。
一句话总结
LoRA 通过低秩分解把参数量从 d×d 压缩到 d×r + r×d,微调效果不打折的原因是预训练模型已学够通用特征、ΔW 本身秩亏、实验证明少数几个方向就够 capture 任务本质。
