LoRA 将权重更新 ΔW 分解为两个小矩阵 BA(低秩分解),只需训练约原来千分之一的参数量,同时保留原始模型作为稳定起点,使单卡微调 7B 模型成为可能。
LoRA: Low-Rank Adaptation of Large Language Models (2021) 提出了一个一张餐巾纸就能解释清楚的想法。它的影响与其复杂程度完全不成比例,而原因在于论文几乎随口提到的一个工程特性。
微调(Fine-tuning)通过一个同形状的 Learned change ΔW 来更新权重矩阵 W。如果 W 很大,存储和优化一个完整尺寸的 ΔW 代价高昂——每个参数都需要优化器状态(optimizer state),最终每个任务都会得到一个完整的模型副本。LoRA 完全冻结 W,将更新表示为两个窄矩阵的乘积:
W_adapted = W + BA W : d x k (frozen)
B : d x r (trained)
A : r x k (trained)
r << min(d, k)
只有 A 和 B 是被训练的。以一个维度数千、秩 r 仅为 8 为例,该层训练参数数量下降了一个数量级,主导微调内存占用的优化器状态也随之大幅减少。B 被初始化为零,使适配后的模型最初与原始模型完全相等——这是一个细节小事,却带来了巨大的稳定效果。
该方法只有在有用的更新确实是低秩的情况下才有效——即,将预训练模型适配到下游任务只需要沿相对较少的几个方向改变它。论文将这一点陈述为一种假设,基于先前关于微调内在维度的研究,而非将其作为事实来主张。
在阅读时注意这一点是个好习惯。论文区分了它能够证明的主张——这种参数化在这些任务上与全量微调相匹配——和它所相信的解释——更新本质上是低秩的。前者是证据;后者是解读。把两者混为一谈的论文,使你无法在怀疑故事的同时接受结果,而你经常恰恰想要做到这一点。
参数高效微调并不是新东西。LoRA 之所以取代了其他替代方案,是因为 BA 与 W 具有相同的形状,因此训练得到的更新可以在训练后被加入到原始权重中。部署的模型因此是一个普通大小、普通形态的模型,没有额外的层、没有额外的深度、也没有额外的推理延迟。
对比一下 adapter 方式——在现有层之间插入新模块。这些方式训练的参数也少,但它们会在每次前向传播中增加顺序计算,而顺序计算恰恰是你在 decode 阶段负担不起的。一种节省训练内存却增加服务延迟的方法是权衡;一种节省训练内存却不增加任何服务时间成本的方法则不是。这个不对称性就是 LoRA 胜出的全部原因。
可合并性还有第二层含义,论文预见到了这一点,并且在商业上具有决定性意义:由于 adapter 是一个小的独立对象,你可以将它独立保存。数千个任务特定或客户特定的 adapter 可以挂载在一个共享的基模型上,按请求切换。这正是"一个模型服务多个微调"背后的架构,而它之所以存在,仅仅是因为更新是加性的且很小的。
这篇论文是练习"先读消融实验"这一习惯的好样本,因为它的消融实验回答了从业者真正关心的两个问题。
要适配哪些矩阵。 一个 transformer 层有多个投影——query、key、value、output 以及前馈权重。论文比较了在固定参数预算下将适配应用到不同子集的效果,报告称在更多类型的矩阵上分散预算,胜过了集中在一个类型上用更高秩。这是一个可以直接付诸实践的发现,它无法从方法描述中推导出来。
多少秩才够。 论文报告了跨不同秩的性能,在某些设置下非常小的秩——个位数的低秩——表现出了竞争力。论文还进一步检查了不同秩学习到的子空间之间的重叠,这是一种解释性的尝试,而不仅仅是报告结果。
这两行内容在一个只给出标题数字的摘要中是不可见的。而这两者正是消融实验存在的意义:不是"我们的方法有效",而是"我们的结果依赖于哪些选择"。对比一下那些只报告一种配置和一个数字的论文——那里没有东西可以应用,因为你无法判断你可以改变什么。
论文明确提出了一个读者容易忽略的注意事项:报告的参数和内存 reduction 是针对特定模型和设置的。那些引人注目的倍数是那个配置的properties,而非方法的常数,把它们当作常数来引用是一种常见的误读。
直接衍生出来的是量化适配(quantised adaptation)——将基模型以低精度格式冻结,在其上以更高精度训练 adapter,这使得大模型的微调可以在单个消费级 GPU 上完成。从那里开始,实际问题变成了:秩的选择、应用于 adapter 的缩放因子、目标哪些层、以及一个服务器能承载多少个 adapter;这些都是工程问题,而它们之所以存在,仅仅是因为底层想法足够简单,可以在其上继续构建。
当一篇论文快速在领域中传播时,原因通常不是它的想法比其他方案更聪明。而是它能够与人们已经在做的所有事情组合——不需要服务变更、不需要架构变更、不需要重新训练基模型。在评估任何方法论文时问这个问题:不是"这更好吗",而是"采用它会迫使我改变什么"。