LoRA(低秩适配)
Low-Rank Adaptation,一种参数高效微调方法。冻结预训练权重,只训练一对低秩矩阵 A 和 B(ΔW = BA),将可训练参数量压缩数百倍。已成为大模型微调的事实标准。
一句话理解
LoRA 的核心假设:微调时权重的变化量 ΔW 是低秩的——不需要调整所有方向,只调最重要的几个方向就够了。
公式
W′=W+ΔW=W+BA- W∈Rd×d:冻结的预训练权重(不更新)
- B∈Rd×r,A∈Rr×d:可训练的低秩矩阵
- r≪d:秩,通常取 4、8、16
为什么能省这么多
以 d=4096 为例:
| 全量微调 | LoRA (r=8) | |
|---|---|---|
| 可训练参数 | d2=16,777,216 | 2dr=65,536 |
| 压缩倍数 | 1× | 256× |
参数量从 1677 万降到 6.5 万,训练显存大幅下降。
为什么有效
微调任务通常只需要调整模型在特定任务上的"偏好",这种调整的自由度远小于模型的总参数量。换句话说,ΔW 的有效维度(秩)很低,用一对小矩阵就能表达。
NOTE
低秩的直觉 4096 维空间里有 4096 个方向可以调整,但对于"学会翻译中文"这个任务,可能只需要调整其中 8 个关键方向——其余方向的变化量接近于零。LoRA 就是只训练这 8 个方向。
实现细节
- A 使用随机高斯初始化,B 初始化为零矩阵 → 训练开始时 ΔW=BA=0,模型行为与预训练一致
- 通常只对 Transformer 的 WQ、WV 注意力矩阵应用 LoRA
- 推理时可将 BA 合并到 W 中,不增加推理延迟
与相关技术的对比
| 方法 | 可训练参数 | 需要完整模型权重 | 推理开销 |
|---|---|---|---|
| 全量微调 | 100% | 是 | 无 |
| LoRA | ~0.1-1% | 是 | 无(可合并) |
| Prefix Tuning | ~0.1% | 是 | 少量 |
| Prompt Tuning | < 0.01% | 是 | 少量 |
| Adapter | ~1-5% | 是 | 有 |
变体
- QLoRA:在 4-bit 量化基础上应用 LoRA,将微调 65B 模型的显存需求降到单张 48GB GPU
- DoRA:将权重分解为方向和大小分别调整,效果更接近全量微调