LoRA 解读:用低秩适配高效微调大模型
LoRA 冻结预训练权重,只在每层训练一对小的低秩矩阵,可训练参数最多减少 1 万倍、显存减少 3 倍,质量不降,且推理零额外延迟。
快速答案
LoRA(低秩适配)微调大模型时根本不动原权重:它冻结整个预训练网络,只在每个 Transformer 层注入一对很小的、可训练的低秩分解矩阵。和用 Adam 全量微调 GPT-3 175B 相比,LoRA 的可训练参数最多少 1 万倍、显存需求少 3 倍,而在 RoBERTa、DeBERTa、GPT-2、GPT-3 上的质量与全量微调持平甚至更好;而且不像 adapter 那样会拖慢推理——LoRA 推理时零额外延迟。
全量微调为什么撑不住了
过去的标准做法是:预训练一个大模型,再为每个下游任务全量微调所有参数。模型不大时没问题,大了就崩。全量微调出来的 GPT-3 是 175B 参数,每个任务都得存一份独立副本,光是存储和上线几十份就贵到不可接受;训练时 Adam 还要为每个权重多存两份张量,优化器状态直接吃满显存。行业需要的是:把一个冻结的基座只特化一次,再把每个任务存成小到能随时换进换出的东西。
LoRA 怎么做
LoRA 的赌注是:模型在适配时需要的那个变化量本身是低秩的——你不需要对权重矩阵做满秩更新,一个很薄的更新就够。所以对一个冻结的权重矩阵 W(形状 d x k),LoRA 把更新写成 W + B·A,其中 B 是 d x r、A 是 r x k,秩 r 极小(常取 1 到 8)。只有 A 和 B 参与训练,W 始终冻结。A 用随机高斯初始化、B 初始化为零,因此第零步适配器贡献为零,训练恰好从原始预训练模型起步。
让 LoRA 胜过早期 adapter 方法的关键细节,在部署那一刻:因为更新就是 B·A,上线前可以直接把它加回 W 合并掉。合并后的模型架构、参数量都和原模型一模一样,所以推理时没有任何额外延迟——LoRA 的开销只在训练阶段付。要换任务,就减掉一个 B·A、再加上另一个。
关键结果
- 可训练参数: 相比用 Adam 全量微调的 GPT-3 175B,LoRA 把可训练参数最多砍掉 1 万倍。
- 显存: 同一对比下显存需求降到三分之一,因为冻结权重不再有优化器状态。
- 质量: 在 RoBERTa、DeBERTa、GPT-2、GPT-3 上,LoRA 与全量微调持平或更好——更少的可训练参数在他们的实验里没有带来质量损失。
- 推理零代价: 不同于会往前向过程里插额外模块的 adapter,合并后的 LoRA 权重不增加任何推理延迟。
- 检查点体积: 因为只存
A和B,每个任务的 LoRA 检查点是几兆,而不是一份 GPT-3 副本动辄几百 GB。 - 低秩证据: 作者还做了适配中秩亏缺的实证分析,解释了为什么这么小的
r就够用。
为什么至今仍重要
LoRA 是把大模型微调变成「人人可做」的那个方法。如今任何人用一块消费级显卡,就能特化一个冻结基座,再把结果存成几兆的文件分发出去——这正是开源生态里到处是各种任务、各种风格 LoRA 检查点的原因。我的判断:真正经久的洞见不是低秩这个技巧本身,而是部署这条路——能合并回去做到零延迟,才让它取代 adapter 成为默认选择,也为后来的 QLoRA 这类工作铺路,后者靠量化冻结基座把省显存推得更远。
局限与存疑
LoRA 是一种近似,不是免费午餐。把更新限制在秩 r 意味着它无法表达所有适配;那些需要从基座行为做大幅、满秩偏移的任务,可能不如全量微调,而 r 取多少、给哪些权重矩阵加 LoRA,至今仍带几分经验主义。那个刷屏的 1 万倍和 3 倍,特指 GPT-3 175B 配 Adam 的对比——换到更小的模型、或更省显存的优化器上,收益会缩水。2021 年的实验主要围绕 Transformer 的注意力权重矩阵展开;LoRA 该怎样铺到所有子层、秩又如何与任务难度相互作用,都被留作开放的实证问题。还有,合并保持零延迟只在「一个模型实例服务一个任务」时成立——把多个不同 LoRA 塞进同一次前向批处理,会重新引入论文未讨论的开销。
常见问题
LoRA 是什么、到底做了什么?
LoRA 是 Low-Rank Adaptation(低秩适配)的缩写。它微调大模型的方式是:冻结全部预训练权重,只训练加在每层上的一对小低秩矩阵,从而在几乎不改动任何原参数的前提下完成适配。
LoRA 能把训练成本降多少?
相比用 Adam 全量微调的 GPT-3 175B,LoRA 把可训练参数最多减少 1 万倍、显存减少 3 倍,因为冻结权重不再携带优化器状态。
LoRA 会拖慢推理吗?
不会。因为低秩更新就是 B·A,上线前可以加法合并进原权重矩阵,所以上线模型保持原始体积、不增加任何推理延迟——这是它相对 adapter 的关键优势。
LoRA 和全量微调一样准吗?
在论文实验里是的:尽管可训练参数少得多,LoRA 在 RoBERTa、DeBERTa、GPT-2、GPT-3 上与全量微调持平或更好。当任务需要对基座做大幅、高秩改动时,它可能落后。
为什么这么小的秩就管用?
LoRA 假设适配所需的权重更新本身是低秩的,论文用秩亏缺的实证分析支撑这一点——秩小到 1 到 8 往往就足以恢复全量微调的质量。
一句话:冻结那个庞然大物,每个任务训一条薄矩阵,推理时再免费合并回去。阅读 arXiv 原文。