LoRA 论文精读:为什么它能用极少参数逼近全量微调?

LoRA 几乎已经成了“大模型参数高效微调”的代名词。

无论是做 LLM 指令微调,还是在 AIGC 圈里训练风格权重,很多人都会提到 LoRA。但如果只把它理解成“一个省参数的小技巧”,其实远远不够。

LoRA 真正重要的地方在于,它提出了一个更强的判断:

大模型在适配下游任务时,真正需要学习的更新,也许本来就集中在一个很低维的子空间里。

这篇文章基于论文《LoRA: Low-Rank Adaptation of Large Language Models》,系统梳理 4 个问题:

  1. LoRA 想解决什么问题?
  2. 它的方法本质是什么?
  3. 它的实验结果到底强在哪里?
  4. 为什么它能用这么少的参数完成任务适配?

一、LoRA 解决的是什么问题?

在现代 NLP 里,最常见的范式是:

  • 先做大规模预训练
  • 再针对具体任务做微调

这个流程在模型规模还不夸张的时候没太大问题,但到了 GPT-3 这样的时代,情况完全不同了。

以 175B 参数的 GPT-3 为例,如果你为每个下游任务都做一次 full fine-tuning,那么从工程上看,几乎等于每个任务都要维护一份完整的大模型副本。这样带来的问题非常直接:

  • 训练成本高
  • 显存开销大
  • 存储压力大
  • 多任务部署困难

所以问题并不是“能不能微调”,而是:

能不能只训练很少一部分参数,就让模型学会一个新任务?

这就是 LoRA 所处的问题背景。


二、LoRA 之前,大家怎么做参数高效微调?

LoRA 并不是第一个尝试减少微调成本的方法。在它之前,比较有代表性的方案主要有两类。

1. Adapter

Adapter 的做法是在 Transformer 层里插入一个小型瓶颈模块。这个模块通常先把特征降维,再升回原维度,只训练新增的小模块,而冻结原模型参数。

它的优点是:

  • 可训练参数少
  • 微调成本比 full fine-tuning 小

但缺点也很明显:

  • 它是串行插入的,会让网络更深
  • 推理时会引入额外延迟
  • 部署结构不再和原模型完全一致

2. Prefix Tuning / Prompt Tuning

另一条路线是不去改中间层,而是在输入侧增加可训练的虚拟 token,也就是连续 prompt。

这种方法的好处是参数也很少,但问题在于:

  • 训练往往更难调
  • 稳定性不如直接更新权重
  • 会占用输入序列长度

这意味着,如果模型上下文窗口本来就紧张,Prefix 方法会直接挤压真实输入内容的空间。


三、LoRA 的核心想法是什么?

LoRA 的关键不在“少训练几个参数”,而在于它对微调更新的结构做了一个假设。

论文认为:

预训练模型在适配下游任务时,权重变化量 ΔW\Delta WΔW 具有低秩特性。

换句话说,模型并不一定需要在整个高维参数空间中大幅重写自己。很多时候,它只需要沿着少数几个关键方向进行修正,就足以完成新任务适配。

这就是 LoRA 的理论直觉。


四、LoRA 是怎么做的?

传统全量微调的做法,是直接更新原始权重矩阵 WWW

LoRA 不直接更新它,而是这样处理:

  1. 冻结原始预训练权重 W0W_0W0
  2. 引入一个增量矩阵 ΔW\Delta WΔW
  3. 但不直接学习完整的 ΔW\Delta WΔW,而是把它写成两个低秩矩阵的乘积

公式可以写成:

h=W0x+ΔWx=W0x+BAx h = W_0x + \Delta Wx = W_0x + BAx h=W0x+ΔWx=W0x+BAx

其中:

  • A∈Rr×kA \in \mathbb{R}^{r \times k}ARr×k
  • B∈Rd×rB \in \mathbb{R}^{d \times r}BRd×r
  • r≪min⁡(d,k)r \ll \min(d, k)rmin(d,k)

由于 rank rrr 很小,所以需要训练的参数量会远小于直接训练整个权重矩阵。


五、LoRA 为什么没有额外推理延迟?

这是 LoRA 相比 Adapter 最重要的工程优势之一。

Adapter 的额外模块是串行插入原网络中的,所以推理时必须真的经过这个新模块,导致延迟增加。

LoRA 不一样。它本质上是在训练阶段学习一个低秩增量 BABABA。训练结束后,这个增量可以直接合并回原始权重:

W=W0+BA W = W_0 + BA W=W0+BA

这样一来,部署时模型结构与原始模型完全一致。

这意味着:

  • 没有新增推理路径
  • 没有结构性推理开销
  • 多任务切换时只需切换小规模 LoRA 权重

这也是 LoRA 后来能广泛落地的重要原因。


六、LoRA 的两个关键设计细节

1. 为什么把 B 初始化为 0?

论文采用的初始化方式是:

  • A 随机初始化
  • B 初始化为全零

这样训练一开始就有:

ΔW=BA=0 \Delta W = BA = 0 ΔW=BA=0

也就是说,模型一开始的输出与原始预训练模型完全一致。

这有两个好处:

  • 避免训练初期向模型注入随机噪声
  • 让优化从“先不改模型”开始,更稳定地学习任务相关增量

2. 为什么要乘一个 α/r\alpha / rα/r

LoRA 在实际计算中通常写成:

h=W0x+αrBAx h = W_0x + \frac{\alpha}{r} BAx h=W0x+rαBAx

这个缩放因子的作用是控制增量更新的幅度。

因为当 rank rrr 改变时,矩阵乘积 BABABA 的数值范围也会变化。加入 α/r\alpha / rα/r 后,尝试不同 rank 时不需要每次都重新大范围搜索学习率。论文里常见的做法是令 α=r\alpha = rα=r,相当于把整体缩放保持在 1 附近。


七、LoRA 加在哪些矩阵上?

在 Transformer 的 self-attention 中,通常有四个关键权重矩阵:

  • WqW_qWq
  • WkW_kWk
  • WvW_vWv
  • WoW_oWo

论文最后的经验选择是:

主要对 WqW_qWqWvW_vWv 做 LoRA 适配。

原因并不是它们在理论上唯一正确,而是实验表明,在固定参数预算下,同时适配 WqW_qWqWvW_vWv,比只把预算集中在单个矩阵上更有效。

这说明 LoRA 的效果不仅和 rank 大小有关,也和适配位置的选择强相关。


八、实验结果:LoRA 到底强在哪里?

论文的实验设计覆盖了多个模型规模和任务类型:

  • RoBERTa base / large:GLUE
  • DeBERTa XXL:GLUE
  • GPT-2 Medium / Large:E2E NLG
  • GPT-3 175B:WikiSQL、MNLI-m、SAMSum

1. 在理解任务上,LoRA 追平甚至超过全量微调

GLUE 上的结果非常直接:

  • RoBERTa base:Full FT 86.4,LoRA 87.2
  • RoBERTa large:Full FT 88.9,LoRA 89.0
  • DeBERTa XXL:Full FT 91.1,LoRA 91.3

这说明 LoRA 不是一个“省资源但掉点”的方案。至少在这些理解任务上,它已经非常接近 full fine-tuning 的替代品。

2. 在生成任务上,LoRA 同样很强

GPT-2 在 E2E NLG 上的结果也很亮眼:

  • GPT-2 Medium:Full FT BLEU 68.2,LoRA 70.4
  • GPT-2 Large:Full FT BLEU 68.5,LoRA 70.4

而对应的 LoRA 可训练参数量只有:

  • GPT-2 Medium:约 0.35M
  • GPT-2 Large:约 0.77M

也就是说,它不仅更省参数,效果反而更好。

3. 在 GPT-3 175B 上,LoRA 真正证明了自己

最关键的是 GPT-3 175B 这组实验。

  • WikiSQL:LoRA 与 Full FT 持平,甚至略超
  • MNLI-m:Full FT 89.5,LoRA 91.7
  • SAMSum:LoRA 在 Rouge-1、Rouge-2、Rouge-L 上都优于 Full FT

更重要的是训练成本差异:

  • GPT-3 Full Fine-tuning:约 175,255.8M 可训练参数
  • GPT-3 LoRA:最低约 4.7M 可训练参数

这意味着:

  • 可训练参数减少约 10,000 倍
  • 显存需求降低约 3 倍
  • 训练吞吐更高

论文报告,在 GPT-3 175B 上,LoRA 的训练速度比全量微调大约快 25%。


九、为什么小 rank 就够用了?

LoRA 最值得思考的地方,不是“它跑赢了”,而是“它为什么能跑赢”。

论文第 6 节做了几组解释性分析,结论非常关键。

1. 同时适配 Wq 和 Wv 效果最好

作者固定总参数预算,比较只适配单一矩阵和同时适配多个矩阵的效果。结果显示,同时适配 WqW_qWqWvW_vWv 更好。

这说明:

在参数预算固定时,覆盖更多关键矩阵,有时比把 rank 堆在单一矩阵上更有效。

2. 很小的 rank 就已经足够

实验显示,当同时适配 WqW_qWqWvW_vWv 时,非常小的 rank 就能带来很强的效果。有些任务里,甚至 r=1r = 1r=1 都已经有竞争力。

这背后的含义是:

下游任务需要的有效更新,并不分布在一个很高维的空间中,而是集中在少数几个关键方向里。

这就是“低秩更新”假设最直接的实证支持。

3. 主方向高度重合,后续方向更像噪声

论文还比较了不同 rank、不同随机种子训练得到的增量矩阵,发现最重要的前几个奇异方向高度重合,而后面的方向相似度很低。

这说明当 rank 从小变大时,并不是不断发现新的核心结构,更多时候只是把一些边缘方向也学进来。

因此,小 rank 足以抓住最有价值的那部分任务信息。


十、LoRA 学到的到底是什么?

论文还提出了一个更深的问题:

LoRA 学到的增量,是不是只是简单复制原模型已有的主方向?

作者的分析表明,答案并不是。

更准确地说,ΔW\Delta WΔW 与原始预训练权重 WWW 的主方向存在明显相关性,但它并不是机械地复制原始方向,而更像是在放大那些:

  • 原模型里本来就存在
  • 但对当前任务来说还不够突出
  • 因而需要被重新强调的方向

这意味着 LoRA 的作用更像是:

在预训练模型已有能力的基础上,对少数任务相关方向做定向增强和重组。

这也是为什么冻结大部分参数后,模型仍然可以有效完成适配。


十一、LoRA 和其他方法相比,核心优势是什么?

如果把 LoRA 放回整个参数高效微调的脉络中,它的优势可以概括为四点。

1. 相比 Full Fine-tuning

  • 参数量极少
  • 多任务存储成本更低
  • 训练和部署门槛更低

2. 相比 Adapter

  • 不引入串行结构
  • 不增加推理延迟
  • 部署时可以直接合并权重

3. 相比 Prefix / Prompt Tuning

  • 不占用输入序列长度
  • 通常更稳定
  • 更接近直接的权重适配

4. 相比传统低秩压缩方法

  • LoRA 不是压缩整个预训练模型
  • 它只对“任务增量更新”做低秩建模

这也是它最有辨识度的创新点。


十二、LoRA 这篇论文最重要的启发是什么?

如果把整篇论文压缩成一句话,那就是:

大模型的下游适配,可能并不需要重写整个模型;真正需要学习的,往往只是一个低维、结构化、任务相关的修正。

这句话背后有两层意义。

第一层是工程意义。

它让大模型微调这件事,从“昂贵、笨重、难部署”,变成了“可以更轻量、更灵活地落地”。

第二层是方法论意义。

它告诉我们,full fine-tuning 很可能在很多任务上是一种过度求解。模型真正需要的更新,也许远没有我们想象的那么复杂。

LoRA 的成功,不只是因为它省参数,而是因为它抓住了微调更新结构里的某种真实规律。


十三、结语

今天回头看,LoRA 之所以影响这么大,并不是因为它形式复杂,相反,恰恰是因为它足够简单。

它做的事情可以概括为:

  • 冻结原模型
  • 只学习低秩增量
  • 部署时再把增量合回去

但正是这个简单结构,兼顾了效果、效率、显存、部署和理论解释性。

这也是为什么直到今天,LoRA 依然是参数高效微调领域最重要的方法之一。

如果你后续还想继续深入,这篇论文后面最值得延伸阅读的方向包括:

  • Adapter、Prefix Tuning 与 LoRA 的系统对比
  • QLoRA 为什么能进一步降低显存门槛
  • LoRA 在扩散模型和多模态模型中的变体
  • 低秩更新假设是否适用于更广泛的参数适配问题
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐