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
论文的核心命题
LoRA 解决的不是“如何让模型学会任务”这个问题本身,而是“如何用很少的任务专属参数表示微调造成的权重变化”。作者冻结预训练权重 W₀,不直接学习一个与 W₀ 同尺寸的更新矩阵 ΔW,而是学习两个窄矩阵 B 和 A:
前向传播变为:
训练时只更新 A、B;部署时可把 BA 合并进 W₀,因此不增加推理深度。论文在 RoBERTa、DeBERTa、GPT-2 和 GPT-3 上显示:LoRA 用远少于全参数微调的可训练参数,能够达到或超过所比较的全参数微调和其他参数高效方法。
论文结构与论证路线
- 现实瓶颈:每个任务保存一份完整微调模型,在百亿到千亿参数规模下成本失控。
- 核心假设:下游适配所需的权重更新
ΔW具有很低的“内在秩”。 - 方法设计:用
BA约束ΔW,冻结W₀,仅训练低秩因子。 - 工程收益:少训练参数、少优化器状态、少检查点存储;合并后无额外推理时延。
- 实验证据:跨模型、跨 NLU/NLG 任务比较性能;再用矩阵位置、秩和子空间相似性消融解释其有效性。
- 边界:层选择主要依赖启发式;小秩并非所有任务都必然充分;合并权重时同一批次混用多个任务适配器不方便。
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 层:
在前向传播中,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。如果完整更新矩阵的奇异值分解为:
取最大的 r 个奇异值及其奇异向量,就得到最佳的秩 r 近似:
令 B=U_rΣ_r、A=V_rᵀ,则 ΔW_r=BA。因此,LoRA 的数学问题不是“两个矩阵能不能相乘得到更新”,而是“任务所需更新能否被低秩近似且损失很小”。
3.2 参数量为什么骤降
直接学习 ΔW∈R^{d×k} 需要 dk 个参数;学习 B∈R^{d×r} 和 A∈R^{r×k} 只需:
个参数。若 d=k=12,288、r=4:
- 完整矩阵:约 1.51 亿参数;
- 低秩因子:约 9.83 万参数;
- 单个矩阵的参数量约缩小 1,536 倍。
3.3 统计/表示学习上的假设
LoRA 依赖一个经验假设:预训练模型已经学习了大量通用特征,下游任务通常只需重加权或放大少数方向,而非重写整个表示空间。论文给出三类证据:
- 在 GPT-3 的 WikiSQL 和 MultiNLI 上,
r=1~8已能达到稳定性能(Table 6,p.10); r=8与r=64学到的首要奇异方向显著重叠(Figure 3,p.11);ΔW更像是在放大W中已经存在但未被强调的方向,而不是简单复制W的主方向(Table 7,p.12)。
这不是普遍数学定理。作者明确提醒:如果下游任务语言与预训练语言完全不同,接近全秩的更新可能优于小秩 LoRA(p.10,脚注 6)。

读图要点:r=8 与 r=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):
- 只做
Wq或Wk:整体较弱; - 只做
Wv或Wo:更好一些; - 同时做
Wq + Wv:综合表现最好或接近最好; - 对
Wq、Wk、Wv、Wo全做、但每个矩阵使用更小的秩:MultiNLI 最佳,WikiSQL 与Wq+Wv并列。

论文的重要结论不是“永远只插 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 的 BAx 与 W₀x 是并行相加,并可在部署前合并成 W=W₀+BA。论文在 GPT-2 Medium 上报告:批量为 1、序列长 128 时,两个 adapter 变体比 Fine-Tune/LoRA 慢约 20.7% 和 30.3%(Table 1,p.4;更完整实验见 Appendix B)。

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。

正确解读:LoRA 在这些任务和设置下,以约万分之一到万分之二的可训练参数达到相当或更好的验证/测试指标。不能据此推断 LoRA 在所有任务上必然优于全参数微调;随机种子波动、超参数预算和任务覆盖都有限。
7.2 “秩越大越好”吗?
不是。Table 6(p.10)中,Wq+Wv 在 WikiSQL 上从 r=1 到 r=64 的结果都约在 73.3–73.8,MultiNLI 约在 91.3–91.6。附录 Table 18 在 GPT-2 Medium 的 E2E NLG 上显示,不同指标峰值出现在 r=4~16 附近,继续增大没有持续收益。

实际含义: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;
ΔW与W的关系: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。