LoRA(低秩适配)

Low-Rank Adaptation,一种参数高效微调方法。冻结预训练权重,只训练一对低秩矩阵 A 和 B(ΔW = BA),将可训练参数量压缩数百倍。已成为大模型微调的事实标准。

一句话理解

LoRA 的核心假设:微调时权重的变化量 ΔW\Delta WΔW 是低秩的——不需要调整所有方向,只调最重要的几个方向就够了。

公式

W=W+ΔW=W+BAW' = W + \Delta W = W + BAW=W+ΔW=W+BA
  • WRd×dW \in \mathbb{R}^{d \times d}WRd×d:冻结的预训练权重(不更新)
  • BRd×rB \in \mathbb{R}^{d \times r}BRd×rARr×dA \in \mathbb{R}^{r \times d}ARr×d:可训练的低秩矩阵
  • rdr \ll drd:秩,通常取 4、8、16

为什么能省这么多

d=4096d = 4096d=4096 为例:

全量微调LoRA (r=8)
可训练参数d2=16,777,216d^2 = 16{,}777{,}216d2=16,777,2162dr=65,5362dr = 65{,}5362dr=65,536
压缩倍数256×

参数量从 1677 万降到 6.5 万,训练显存大幅下降。

为什么有效

微调任务通常只需要调整模型在特定任务上的"偏好",这种调整的自由度远小于模型的总参数量。换句话说,ΔW\Delta WΔW 的有效维度(秩)很低,用一对小矩阵就能表达。

NOTE

低秩的直觉 4096 维空间里有 4096 个方向可以调整,但对于"学会翻译中文"这个任务,可能只需要调整其中 8 个关键方向——其余方向的变化量接近于零。LoRA 就是只训练这 8 个方向。

实现细节

  • AAA 使用随机高斯初始化,BBB 初始化为零矩阵 → 训练开始时 ΔW=BA=0\Delta W = BA = 0ΔW=BA=0,模型行为与预训练一致
  • 通常只对 Transformer 的 WQW_QWQWVW_VWV 注意力矩阵应用 LoRA
  • 推理时可将 BABABA 合并到 WWW 中,不增加推理延迟

与相关技术的对比

方法可训练参数需要完整模型权重推理开销
全量微调100%
LoRA~0.1-1%无(可合并)
Prefix Tuning~0.1%少量
Prompt Tuning< 0.01%少量
Adapter~1-5%

变体

  • QLoRA:在 4-bit 量化基础上应用 LoRA,将微调 65B 模型的显存需求降到单张 48GB GPU
  • DoRA:将权重分解为方向和大小分别调整,效果更接近全量微调