LoRA: Low-Rank Adaptation of Large Language Models
Hu et al. (Microsoft) · ICLR 2022 · 2022
阅读原文假设微调的权重增量是低秩的,只训练两个小矩阵的乘积——参数效率提升百倍、推理零开销,开源微调生态的基石。
核心要点
- 核心假设出奇简单:ΔW ≈ BA(秩 r 通常取 4–64)就够了——过参数化模型的「任务适应」自由度远小于其参数量暗示的规模。
- 与 adapters 的关键差异:LoRA 与原权重并行相加,推理时可合并(W + BA),没有额外延迟——这决定了它在产业界的胜出。
- 缩放因子 α/r 与初始化(B=0, A 随机)的细节对稳定性影响巨大,社区长期依赖这些「论文附录级」的经验。
- 秩的选择任务依赖:风格/知识注入可能需要更高秩,简单行为对齐低秩足够——「有效秩」的测量后来成为一个研究方向。
背景
GPT-3(175B)之后,「全量微调」在工程上成了奢侈品:优化器状态让训练内存达到参数的数倍(AdamW 需要参数、动量、方差三份 fp32 副本,175B 模型的训练状态轻松超过 1TB 显存)——只有拥有集群的机构玩得起。当时已有的参数高效微调(PEFT)方案各有余病:
- Adapters(Houlsby 2019,瓶颈层串行插入):省参数但串行增加推理延迟,且每层多一次小矩阵乘;部署侧不可接受
- Prefix-tuning / P-tuning(2021,可学习的前缀 token):不增加权重但吃掉有效上下文长度,且优化困难(训练不稳定、对初始化敏感)
- BitFit(只调 bias):省到极致但容量太低
另一条理论线:Aghajanyan et al.(2021)发现预训练模型微调时的「内在维度」(intrinsic dimension)只有几百到几千——也就是说任务适应在低维子空间里就能完成。LoRA 把这个观察变成了产品。
动机
微软团队(Edward Hu 等)的问题清单很明确:(1) 微调参数降到 0.1% 以下;(2) 推理零额外延迟( adapters 的死穴);(3) 与被调层解耦、可插拔合并;(4) 效果至少持平全量微调。低秩假设是同时满足四条的最短路径:如果 ΔW 本来就低秩,那就直接参数化它——W’ = W + BA,训练时只更新 BA。
方法
参数化:对目标权重 W₀ ∈ R^(d×k),冻结 W₀,学习 B ∈ R^(d×r) 与 A ∈ R^(r×k),前向为 h = W₀x + (α/r)·BAx。秩 r 取 1-64;α 是缩放因子(控制 LoRA 分支的幅度,与学习率解耦)。
初始化的巧思:A 用高斯随机初始化、B 初始化为全零——训练开始时 BA = 0,模型与预训练完全一致,从一个「已收敛」的点出发。这个细节避免了随机旁路破坏预训练分布(prefix-tuning 的病根之一)。
应用位置的消融:GPT-3 上只对注意力的 W_q、W_v 加 LoRA(保持 W_k、W_o 冻结)已足够;论文发现「同时调 q+v」优于「只调 q」或「调全部四矩阵同参数预算」。MLP 也可以挂(后续社区实践常全挂)。
无推理延迟的秘密:训练结束后 W’ = W₀ + BA 一次性合并回原矩阵——数学上与全量微调的权重完全同构,部署侧零改动。这与 adapters 的串行结构形成本质区别。
权重切换:同一个基座 + 多个 LoRA 头(客服版/代码版/风格版),切换成本是一次矩阵加法——「基座 + 差量」的分发模式由此成立。
实验设置
- 模型:RoBERTa base/large(GLUE)、DeBERTa XXL(GLUE)、GPT-2 medium/large(E2E NLG 生成)、GPT-3 175B(WikiSQL、MNLI-matched、SAMSum——论文的重头戏:直接对比全量微调)
- PEFT 对照:adapters(Houlsby/Pfeiffer)、prefix-tuning(P-tuning)、bitfit,统一参数预算比较
- 全量微调基线:GPT-3 175B 上真的跑了全量微调做对照(这是它比后续论文诚实的地方)
- 超参搜索:每个任务对 r(1/2/4/8/16/64)、α、学习率做网格;报告最优配置
- 评测:GLUE 分数、BLEU/ROUGE(生成)、人工可训练参数量与显存峰值
结果
- GPT-3 175B:LoRA(r=4,只挂 q/v,可训练参数降至万分之一量级)在 WikiSQL/MNLI/SAMSum 上匹配或小幅超过全量微调——百倍参数压缩无质量损失
- 显存:论文报告 GPT-3 级全量微调的训练内存需求在 TB 量级(含优化器状态),LoRA 压到数百 GB 量级——单机多卡可行了;具体口径以原文表格为准
- vs adapters:同参数预算下 LoRA 略优,且推理零延迟(adapters 每层 +串行开销)
- vs prefix-tuning:稳定性碾压(prefix 对超参/初始化极敏感,LoRA 一次调通)
- 秩消融:r=1 在 GPT-3 上已拿到大部分收益;r=8 与 r=64 差距很小——「任务适应的内在维度」低得惊人,验证了 Aghajanyan 的内在维度理论
- 训练吞吐:因为不用为冻结权重存优化器状态,反向传播也只需对 LoRA 分支求梯度
有趣的洞见
低秩假设的几何图景。预训练把模型放进损失曲面的「窄谷」,微调只是在谷底附近小幅滑动——谷的横截面维度就是任务适应的自由度。LoRA 的成功不是「低秩分解这个代数技巧好」,而是「预训练模型的解空间本来就薄」。这解释了为什么:简单行为对齐 r=1-8 就够、注入全新知识(数学/代码)需要更高秩甚至全参数——薄的方向谷装不下新维度的知识。
LoRA 真正的革命是分发革命。技术论文部分其实很薄(核心公式一页讲完),但它把「模型」拆成了「基座(只读、昂贵、少数机构生产)+ 差量(可写、便宜、人人可产)」。Stable Diffusion 社区的 LoRA 交易(CivitAI 上几万个性风格/人物/概念 LoRA)、开源 LLM 的「基座 + 下游 LoRA 权重」部署模式,全部建立在这个「权重即文件、差量即产品」的结构上。QLoRA(2023)再叠加 4bit 量化基座,把 65B 模型的微调塞进单张 48G 卡—— democratization 的最后一公里。
「附录级细节」统治生态。α/r 缩放、B=0 初始化、学习率与秩的耦合(调 r 后要重调 lr)……这些细节全部来自论文附录与社区踩坑,没有理论指导。一个「为什么我没早点想到」的简单想法,落地质量全在工程细节——这是「研究品味 × 工程约束」互相成就的典范案例。
批判性评价
最弱的一环:低秩假设有系统性例外。需要「新知识」的微调(数学推理、代码、多语种注入)中 LoRA 明显弱于全参数微调,后续工作(DoRA 的解耦幅度-方向、PiSSA 的主成分初始化、LoRA+ 的双学习率、高秩变体)都在修这个边。「为什么任务增量是低秩的」至今只有现象学解释。另外 LoRA 的流行部分掩盖了数据质量在微调中的主导地位——实践中「调 LoRA 超参」的收益常常不如「洗训练数据」。
依然重要的理由:它是开源微调生态的物理基础——没有「基座 + 差量」的结构,就没有千人千面的下游模型生态,大模型的应用形态会被 API 锁死。作为参数高效化方向的分水岭,它终结了 adapters/prefix 的路线之争,也把「内在维度」这个理论观察变成了产业基础设施。