LoRA: Low-Rank Adaptation of Large Language Models
论文笔记:LoRA: Low-Rank Adaptation of Large Language Models
元信息
| 项目 | 内容 |
|---|---|
| 机构 | Microsoft Research |
| 日期 | June 2021 (arXiv), ICLR 2022 |
| 项目主页 | github.com/microsoft/LoRA |
| 链接 | arXiv |
一句话总结
提出冻结预训练权重 ,仅训练低秩增量 ()的参数高效微调方法,在 GPT-3 175B 上以 0.01% 的可训练参数 达到全量微调的性能水平。
核心贡献
低秩参数化假说: 提出大语言模型适应下游任务时的权重变化 具有低”内在秩”(intrinsic rank),因此可以用低秩矩阵分解高效近似
零额外推理延迟: 训练完成后 可直接合并到 中,推理时无需额外计算,与全量微调的模型架构完全相同
极致参数效率: 在 GPT-3 175B 上仅需 4.7M 可训练参数(全量的 0.01%),VRAM 需求降低约 2/3
模块化可组合: 冻结的 可与多个任务的 LoRA 模块快速切换,无需为每个任务存储完整模型
问题背景
要解决的问题
大语言模型(如 GPT-3 175B)的全量微调需要存储和更新所有参数,计算和存储成本极高
每个下游任务需要一份完整的模型副本,部署多任务系统时资源开销不可接受
现有方法的局限
Adapter layers(Houlsby 2019): 在 Transformer 层间插入小型前馈网络,但引入推理延迟——即使瓶颈维度很小,大 batch/小模型场景下延迟增加 20-30%
Prefix Tuning(Li & Liang 2021): 在输入前添加可训练的虚拟 token,但占用有效序列长度,且优化困难,性能随前缀长度非单调变化
直接微调子集(BitFit 等): 仅训练偏置或特定参数,参数效率有限且性能天花板低
本文的动机
先前研究(Aghajanyan 2020)表明预训练语言模型具有很低的”内在维度”(intrinsic dimensionality),暗示权重更新 可能存在低秩结构——LoRA 将这一直觉形式化为具体的参数化方案
方法详解
核心思想
对预训练权重矩阵 ,冻结 不更新
添加低秩旁路:
其中 ,,秩
初始化策略
: 使用 Kaiming 均匀分布(标准随机高斯)初始化
: 初始化为零矩阵
效果: 训练开始时 ,模型行为与预训练完全一致,确保训练稳定性
缩放因子
实际前向传播为:
是一个常数超参数(通常等于第一次实验设定的 值)
当调整 时, 起到类似学习率缩放的作用,避免重新调整学习率
论文中 通常设为第一次调参时的 值,后续只需调
应用位置
LoRA 可应用于 Transformer 中的任意权重矩阵:(注意力模块)和 (FFN 模块)
论文主要实验: 仅在 和 上应用 LoRA(实验表明效果最佳)
固定参数预算下: 将 LoRA 分散到更多矩阵(低 )优于集中在少数矩阵(高 ),说明 的秩不需要很高
与全量微调的关系
当 时,LoRA 退化为全量微调
LoRA 不会缩小模型的搜索空间维度——它只是约束了更新的秩,而非模型的表达能力
训练时 不接收梯度更新,因此无需存储 的优化器状态,显著节省内存
关键公式
公式1: LoRA 前向传播
含义: 输出为预训练权重的原始输出加上低秩增量的贡献
符号说明:
- : 冻结的预训练权重
- : 低秩分解的上投影矩阵
- : 低秩分解的下投影矩阵
- : 秩(核心超参数,通常 1, 2, 4, 8, 16, 64)
- : 缩放常数
公式2: 推理时权重合并
含义: 推理时将低秩增量合并到原权重中,消除额外计算开销
关键性质: 合并后的模型与全量微调的模型在架构上完全相同,不引入推理延迟
公式3: 可训练参数量
含义: 总可训练参数量仅与秩 、模型维度 和应用 LoRA 的层数 成正比
对比: 全量微调参数量为 (注意力矩阵)+ FFN 参数
公式4: 参数效率(GPT-3 175B 为例)
含义: 在 GPT-3 上 仅应用于 时,可训练参数仅为全量的万分之一
符号说明: 96 层 × 2 矩阵 × ×
公式5: 内在秩的经验验证
含义: 比较 学到的子空间与 学到的子空间的重叠度,发现 已覆盖 的绝大部分方向,证实权重变化确实低秩
发现: 和 的内在秩非常低( 已足够捕获大部分信息)
实验结果
GPT-3 175B(Few-shot + LoRA Fine-tuning)
| 方法 | 可训练参数 | WikiSQL Acc | MNLI-m Acc | SAMSum R1/R2/RL |
|---|---|---|---|---|
| Fine-Tune | 175.0B | 73.8 | 89.5 | 52.0/28.0/44.5 |
| BitFit | 14.2M | 71.3 | 91.0 | — |
| Prefix (emb) | 3.2M | 63.1 | 88.6 | — |
| Prefix (layer) | 20.2M | 70.4 | 89.7 | — |
| Adapter-H | 7.1M | 71.9 | 89.8 | — |
| Adapter-L | 40.1M | 73.2 | 91.5 | — |
| LoRA | 4.7M | 73.4 | 91.7 | 53.8/29.8/45.9 |
LoRA 以 0.01% 的参数量达到或超越全量微调性能
在 SAMSum 摘要任务上甚至超过全量微调,可能因为低秩约束起到了正则化效果
GPT-2 Medium / Large
在 E2E NLG 任务上,LoRA () 以 0.35M 可训练参数(GPT-2 Medium)匹配全量微调性能
训练 VRAM 降低约 2/3(GPT-3 175B: 1.2TB → 350GB)
秩 的消融实验
| 秩 | WikiSQL | MNLI-m | 参数量 |
|---|---|---|---|
| 1 | 73.4 | 91.3 | 1.2M |
| 2 | 73.3 | 91.5 | 2.4M |
| 4 | 73.4 | 91.7 | 4.7M |
| 8 | 73.7 | 91.6 | 9.4M |
| 64 | 73.4 | 91.4 | 75.5M |
极低秩()已足够,增大 不带来显著提升,甚至可能略有下降
这有力支持了”权重更新具有低内在秩”的假说
局限性
不适用于所有任务: 当目标任务与预训练任务差异极大时(如跨模态),低秩假设可能不成立
无法动态选择秩: 不同层、不同矩阵的最优秩可能不同,论文使用统一的 ——后续 AdaLoRA 解决了此问题
Batch 内多任务推理: 虽然可以快速切换 LoRA 模块,但同一 batch 内不同样本使用不同 LoRA 时需要额外工程(后续 [S-LoRA, Punica] 解决)
与 Adapter 的正交性未充分探索: LoRA 与 Adapter、Prefix Tuning 是否可以有效组合?论文未深入研究
仅实验了 NLG/NLU 任务: 未在视觉、多模态等领域验证
相关概念
AdaLoRA: 自适应分配不同层的秩,解决 LoRA 统一 的局限
QLoRA: 将 量化为 4-bit 再施加 LoRA,进一步降低内存需求
Adapter: 在 Transformer 层间插入小型前馈网络,LoRA 的前身方法
Prefix Tuning: 在输入前添加可训练虚拟 token 的 PEFT 方法
InfLoRA: 将 LoRA 扩展到持续学习场景
低秩分解: LoRA 的核心数学工具,将 矩阵分解为两个小矩阵的乘积
GPT-3: LoRA 的主要实验平台,175B 参数的自回归语言模型
笔记创建时间: 2026-04-03