← Archives

从低秩更新、目标层选择到参数效率与方法边界,系统精读 LoRA 的核心机制、实验与实践决策。

论文精读18 分钟

Last updated on 2026-08-19

LoRA:大语言模型的低秩适配

论文:Edward J. Hu et al., LoRA: Low-Rank Adaptation of Large Language Models, arXiv:2106.09685v2(2021)

精读日期:2026-08-19

原文:arXiv:2106.09685

论文的核心命题

LoRA 解决的不是“如何让模型学会任务”这个问题本身,而是“如何用很少的任务专属参数表示微调造成的权重变化”。作者冻结预训练权重 W₀,不直接学习一个与 W₀ 同尺寸的更新矩阵 ΔW,而是学习两个窄矩阵 BA

W=W0+ΔW=W0+BA,BRd×r, ARr×k, rmin(d,k)W = W_0 + \Delta W = W_0 + BA, \qquad B\in\mathbb{R}^{d\times r},\ A\in\mathbb{R}^{r\times k},\ r\ll\min(d,k)

前向传播变为:

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

训练时只更新 A、B;部署时可把 BA 合并进 W₀,因此不增加推理深度。论文在 RoBERTa、DeBERTa、GPT-2 和 GPT-3 上显示:LoRA 用远少于全参数微调的可训练参数,能够达到或超过所比较的全参数微调和其他参数高效方法。

论文结构与论证路线

  1. 现实瓶颈:每个任务保存一份完整微调模型,在百亿到千亿参数规模下成本失控。
  2. 核心假设:下游适配所需的权重更新 ΔW 具有很低的“内在秩”。
  3. 方法设计:用 BA 约束 ΔW,冻结 W₀,仅训练低秩因子。
  4. 工程收益:少训练参数、少优化器状态、少检查点存储;合并后无额外推理时延。
  5. 实验证据:跨模型、跨 NLU/NLG 任务比较性能;再用矩阵位置、秩和子空间相似性消融解释其有效性。
  6. 边界:层选择主要依赖启发式;小秩并非所有任务都必然充分;合并权重时同一批次混用多个任务适配器不方便。

1. 全参数微调为什么昂贵?

1.1 训练参数只是账面成本,真正昂贵的是完整训练状态

全参数微调会让每个参数参与反向传播。以 Adam/AdamW 为例,训练通常需要同时保存:

  • 模型权重;
  • 梯度;
  • 一阶动量;
  • 二阶动量;
  • 混合精度训练时还可能保留 FP32 主权重;
  • 前向激活、通信缓冲区和临时张量。

因此,“模型参数占多少显存”远小于“训练这个模型需要多少显存”。论文在 GPT-3 175B 的设置中报告:LoRA 将训练显存从约 1.2 TB 降到 350 GB,原因不是基础模型消失了,而是冻结参数不再需要梯度和大部分优化器状态(p.5)。

1.2 每个任务复制完整模型,存储和部署成本线性增长

全参数微调后,每个任务都有一套与原模型同尺寸的权重。论文给出的例子是:GPT-3 175B 的一个完整检查点约 350 GB;若服务 100 个任务,独立存储接近 35 TB。LoRA 若每个任务只存 35 MB 的增量,则总量约为共享基础模型 350 GB 加上 3.5 GB 任务参数,即约 354 GB(p.5,脚注 4)。

这说明全参数微调的部署难点不仅是“一次训练贵”,还包括:

  • 多任务检查点复制;
  • 网络分发和磁盘 I/O;
  • 模型切换时加载完整权重;
  • 多 GPU 分片训练的通信;
  • 每个任务独立回滚、版本管理和灾备。

1.3 论文中的量化对比

  • GPT-3 175B:LoRA 可把可训练参数减少约 10,000 倍
  • 训练显存最多降低约 3 倍
  • 在论文设置中,训练吞吐从每张 V100 的 32.5 tokens/s 提升到 43.1 tokens/s,约 25% 加速
  • r=4 且只适配 Wq、Wv 时,任务检查点从约 350 GB 降到约 35 MB。

这些数字来自 2021 年论文的 GPT-3 175B 实验配置,应理解为“机制收益的量级示例”,不应直接套用到所有现代模型、优化器和量化训练方案。


2. “冻结原模型参数”意味着什么?

冻结不是删除,也不是不使用。它意味着 W₀ 仍然完整参加前向计算和反向链式求导,但优化器不更新它。

2.1 计算图层面

对 LoRA 层:

h=W0x+BAx.h = W_0x + BAx.

在前向传播中,W₀x 仍贡献绝大部分基础能力;BAx 是任务专属修正。反向传播仍需要把梯度传给更早层的激活,但不计算或不保存 W₀ 的参数梯度,也不为 W₀ 维护 Adam 状态。

2.2 优化层面

  • W₀.requires_grad = false:预训练权重数值固定;
  • A、B.requires_grad = true:训练信号只改变低秩分支;
  • 论文用高斯随机初始化 A、零初始化 B,因此训练开始时 BA=0,初始模型行为与预训练模型一致;
  • 缩放因子 α/r 控制更新分支的幅度。

2.3 能力与风险层面

冻结主干带来两个相反效果:

  • 保护:不直接改写所有预训练表征,降低小数据下大范围漂移和遗忘的风险;
  • 约束:模型只能通过所选层的低秩方向表达任务变化。若任务与预训练分布相差极大,或需要大规模知识/语言体系重构,小秩更新可能不够。

所以,“冻结”不是“模型不学习”,而是“学习被限制在一个小而可控的参数子空间中”。


3. 为什么低秩矩阵 BA 可以表示参数更新?

3.1 线性代数上的严格事实

任何秩不超过 r 的矩阵 ΔW 都可以分解为 BA。如果完整更新矩阵的奇异值分解为:

ΔW=UΣV,\Delta W=U\Sigma V^\top,

取最大的 r 个奇异值及其奇异向量,就得到最佳的秩 r 近似:

ΔWr=UrΣrVr.\Delta W_r=U_r\Sigma_rV_r^\top.

B=U_rΣ_rA=V_rᵀ,则 ΔW_r=BA。因此,LoRA 的数学问题不是“两个矩阵能不能相乘得到更新”,而是“任务所需更新能否被低秩近似且损失很小”。

3.2 参数量为什么骤降

直接学习 ΔW∈R^{d×k} 需要 dk 个参数;学习 B∈R^{d×r}A∈R^{r×k} 只需:

r(d+k)r(d+k)

个参数。若 d=k=12,288r=4

  • 完整矩阵:约 1.51 亿参数;
  • 低秩因子:约 9.83 万参数;
  • 单个矩阵的参数量约缩小 1,536 倍。

3.3 统计/表示学习上的假设

LoRA 依赖一个经验假设:预训练模型已经学习了大量通用特征,下游任务通常只需重加权或放大少数方向,而非重写整个表示空间。论文给出三类证据:

  1. 在 GPT-3 的 WikiSQL 和 MultiNLI 上,r=1~8 已能达到稳定性能(Table 6,p.10);
  2. r=8r=64 学到的首要奇异方向显著重叠(Figure 3,p.11);
  3. ΔW 更像是在放大 W 中已经存在但未被强调的方向,而不是简单复制 W 的主方向(Table 7,p.12)。

这不是普遍数学定理。作者明确提醒:如果下游任务语言与预训练语言完全不同,接近全秩的更新可能优于小秩 LoRA(p.10,脚注 6)。

不同秩学到的子空间相似性

读图要点r=8r=64 的首个方向高度重叠,额外维度未必提供同等稳定的任务信号;这为“小秩足够”提供经验解释。


4. LoRA 插入到哪些层?

4.1 原论文研究范围

Transformer 自注意力中通常有四个投影矩阵:

  • Wq:Query 投影;
  • Wk:Key 投影;
  • Wv:Value 投影;
  • Wo:注意力输出投影。

每个 Transformer 块的 MLP 还有两个主要线性矩阵。LoRA 原论文原则上允许作用于任意稠密矩阵,但实验为了简洁和参数效率,只适配自注意力投影矩阵,冻结 MLP;MLP、LayerNorm 和 bias 的系统研究被留作未来工作(p.5)。

4.2 论文的推荐证据

在 GPT-3 175B、固定约 18M 可训练参数预算下,论文比较不同插入位置(Table 5,p.10):

  • 只做 WqWk:整体较弱;
  • 只做 WvWo:更好一些;
  • 同时做 Wq + Wv:综合表现最好或接近最好;
  • Wq、Wk、Wv、Wo 全做、但每个矩阵使用更小的秩:MultiNLI 最佳,WikiSQL 与 Wq+Wv 并列。

LoRA 插入矩阵消融

论文的重要结论不是“永远只插 q、v”,而是:在固定参数预算下,把较小秩分散到多个有用矩阵,往往优于把更大秩集中在单一矩阵。

4.3 实践中的选择逻辑

这部分是基于论文机制的实践扩展,不是原论文逐项验证:

  • 预算极紧、先求稳定基线:从 attention 的 q_proj、v_proj 开始;
  • 任务更复杂或预算较宽:扩展到 k_proj、o_proj
  • 需要改变知识组合、风格和推理路径:可再覆盖 MLP 的 up/down/gate 投影;
  • 视觉语言、多模态或非标准架构:应根据模块命名和梯度/消融结果选层,不能机械照搬 q、v
  • 最可靠的方法仍是小规模消融:固定总可训练参数,比较“更多层+小秩”和“少数层+大秩”。

5. LoRA、prompt tuning 与 adapter 有什么区别?

先区分两个容易混淆的词:

  • prompting:不训练模型参数,改变输入中的自然语言指令或示例;
  • prompt tuning / prefix tuning:训练一组连续的“软提示”向量,属于参数高效微调。
方法学什么放在哪里主干是否冻结推理代价主要限制
Prompting不学习参数;人工/程序构造文本指令输入 token增加输入 token,通常不改网络结构对措辞敏感;能力上限受模型现有行为约束
Prompt tuning / Prefix tuning连续软 token 或各层前缀激活输入嵌入或每层 attention 的 K/V 前缀通常是占上下文长度并增加一定 attention 计算优化可能不稳定;较小模型常弱;不可直接读成自然语言
Adapter小型瓶颈 MLP/模块Transformer 块内部,通常串行插入新增顺序计算,可能增加时延需要改变网络执行路径;模块深度造成同步开销
LoRA权重更新的低秩因子 A、B现有线性层的并行增量分支合并后可为零额外时延表达受秩和目标层限制;多适配器同批动态混用较复杂
Full fine-tuning全部或大部分原权重全模型推理结构通常不变训练显存、检查点、部署与遗忘风险最高

Adapter 为何比 LoRA 更可能增加时延?

Adapter 通常在原块之后再串行执行一个瓶颈网络,等于增加网络深度。LoRA 的 BAxW₀x 是并行相加,并可在部署前合并成 W=W₀+BA。论文在 GPT-2 Medium 上报告:批量为 1、序列长 128 时,两个 adapter 变体比 Fine-Tune/LoRA 慢约 20.7% 和 30.3%(Table 1,p.4;更完整实验见 Appendix B)。

Adapter 推理时延

Prompt tuning 与 LoRA 的核心差异

Prompt tuning 改变“模型看到什么上下文”;LoRA 改变“线性变换如何处理表征”。前者主要在输入/激活空间增加条件,后者在权重空间学习任务更新。论文还指出,prefix 方法会占用可用序列长度,且其性能不一定随可训练参数增加而单调提升;LoRA 的实验曲线更稳定(Figure 2,p.8;Table 15,p.23)。


6. 什么时候 fine-tune,什么时候只做 prompt 或 linear probing?

原论文直接比较了 full fine-tuning、prefix 类方法、adapter、BitFit 和 LoRA,但没有系统研究现代 instruction prompting,也没有把 linear probing 作为主要基线。下面是以论文机制为依据的决策框架。

6.1 先用 prompting 的情形

优先只做 prompt,如果:

  • 任务能清楚写成指令,通用模型已经具备所需知识和输出能力;
  • 没有或只有极少标注数据;
  • 需要快速验证需求、建立零样本/少样本基线;
  • 任务频繁变化,训练、部署和版本管理成本不值得;
  • 可接受提示词敏感性和较长输入带来的成本。

不要一开始就微调。先确认失败来自“模型不知道怎么按要求做”,而不是检索、数据质量、评价指标或输出解析的问题。

6.2 先做 linear probing 的情形

Linear probing 固定编码器,只训练一个线性分类/回归头。优先使用它,如果:

  • 任务是分类、回归、检索打分等固定输出空间;
  • 想测试预训练表征是否已经线性可分;
  • 数据不多,希望减少过拟合;
  • 需要一个便宜、可解释、可重复的基线;
  • 部署允许保留一个很小的任务头。

它的诊断意义很强:若 linear probe 已经很好,复杂微调的边际收益可能很小;若很差,说明任务需要非线性重组或模型内部表征改变。

6.3 选择 LoRA / 其他 PEFT 的情形

优先 LoRA,如果:

  • prompting 的质量或稳定性不够,但基础模型能力大体合适;
  • 有中小规模高质量任务数据;
  • 需要生成任务、风格控制、领域行为或工具调用格式稳定化;
  • 一个基础模型要承载多个任务/客户;
  • 训练显存、检查点和发布速度受限;
  • 不能接受 adapter 的额外推理时延。

6.4 选择全参数微调的情形

考虑 full fine-tuning,如果:

  • 目标域与预训练域差异很大,低秩或少量参数更新持续欠拟合;
  • 有足够多且覆盖面广的高质量训练数据;
  • 任务需要深度改变模型的语言、知识体系或多层表征;
  • 单一任务价值高,能承担专属训练和部署成本;
  • 消融已证明提高 LoRA 秩、扩大目标层仍无法接近全参数微调;
  • 需要把任务能力永久整合进一个独立模型,而不是外挂可切换模块。

6.5 建议的升级顺序

自然语言 prompt / few-shot
        ↓ 质量或稳定性不足
linear probe(适合固定标签任务)
        ↓ 表征不可线性读出,或任务需要生成
LoRA / 其他 PEFT
        ↓ 扩层、增秩、增加数据后仍欠拟合
部分层微调 → 全参数微调

每一步都应使用同一验证集和同一业务指标比较,不只看训练损失。模型适配方法应由任务差距、数据量、可接受成本和部署形态共同决定。


7. 关键实验怎么读?

7.1 GPT-3 175B 主结果

论文 Table 4(p.8)显示:

  • Full FT:175,255.8M 可训练参数;WikiSQL 73.8,MNLI-m 89.5,SAMSum 52.0/28.0/44.5;
  • LoRA 4.7M:WikiSQL 73.4,MNLI-m 91.7,SAMSum 53.8/29.8/45.9;
  • LoRA 37.7M:WikiSQL 74.0,MNLI-m 91.6,SAMSum 53.4/29.2/45.1。

GPT-3 175B 主结果

正确解读:LoRA 在这些任务和设置下,以约万分之一到万分之二的可训练参数达到相当或更好的验证/测试指标。不能据此推断 LoRA 在所有任务上必然优于全参数微调;随机种子波动、超参数预算和任务覆盖都有限。

7.2 “秩越大越好”吗?

不是。Table 6(p.10)中,Wq+Wv 在 WikiSQL 上从 r=1r=64 的结果都约在 73.3–73.8,MultiNLI 约在 91.3–91.6。附录 Table 18 在 GPT-2 Medium 的 E2E NLG 上显示,不同指标峰值出现在 r=4~16 附近,继续增大没有持续收益。

LoRA 秩消融

实际含义:r 是容量旋钮,不是性能单调旋钮。先用较小秩,观察验证集、不同种子稳定性和训练/推理预算,再扩秩或扩目标层。

7.3 小数据是否适合 LoRA?

Appendix F.3 的 Table 16(p.23)显示,在 MNLI 100 个样本时,LoRA 63.8,高于该实验中的 full fine-tuning 60.2;在完整数据上 LoRA 91.7,高于 full fine-tuning 89.5。这个结果支持“受限参数空间可能带来正则化/样本效率收益”的解释,但仍应看作特定模型与超参数下的证据。


8. 论文的强项、局限与后续思考

强项

  • 方法非常简单:线性层的并行低秩更新;
  • 工程收益明确:训练状态、检查点和任务切换成本显著下降;
  • 推理合并机制干净,不必新增顺序层;
  • 不只给性能表,还尝试用秩、目标矩阵与子空间分析解释机制;
  • 可与 prefix 等方法组合,方法具有正交性。

局限

  • 目标层选择依赖启发式,原论文主要研究 attention,不代表 MLP 不重要;
  • 低秩假设是经验事实,不是所有任务的保证;
  • 论文的模型和任务属于 2021 年环境,不能直接覆盖现代多模态、MoE、长上下文和量化微调;
  • 若把 LoRA 合并入基础权重,同一 batch 对不同样本动态选择不同适配器会更麻烦;
  • 对生成质量、安全、鲁棒性、遗忘和跨域泛化的评估仍有限;
  • “参数更少”不等于“训练激活成本按同等比例下降”,长上下文下激活和注意力仍可能主导显存。

术语表

术语本文采用的中文/说明
Full fine-tuning (FT)全参数微调;更新全部或绝大多数预训练权重
Low-Rank Adaptation (LoRA)低秩适配;用低秩因子表示任务更新
Frozen weights冻结权重;参与前向但不被优化器更新
Update matrix ΔW适配过程中累积的权重更新矩阵
Rank r低秩瓶颈维度,也是 LoRA 容量旋钮
Prompting仅通过自然语言指令/示例驱动模型,不训练参数
Prompt tuning训练连续软提示向量
Prefix tuning在输入或各层注意力中加入可训练前缀
Adapter串行插入的小型瓶颈网络模块
Linear probing冻结特征提取器,只训练线性任务头

来源锚点

  • 方法与公式:p.4,Eq. (3),Section 4.1;
  • 插入层:p.5,Section 4.2;
  • GPT-3 成本与检查点:p.5;
  • GPT-3 主结果与参数效率:p.8,Table 4 / Figure 2;
  • 插入矩阵与秩消融:p.10,Table 5 / Table 6;
  • 子空间相似性:p.11,Figure 3;
  • ΔWW 的关系:p.12,Table 7;
  • few-shot 与微调对比、adapter 时延:p.17,Table 8 / Figure 5;
  • 低数据与方法超参数扩展:p.23,Table 15 / Table 16;
  • GPT-2 秩扩展:p.26,Table 18。
论文精读#LoRA#大语言模型#参数高效微调#深度学习