LoRA

别名:Low-Rank Adaptation / 低秩适配

冻结原模型,只训练两个低秩矩阵,用很小参数量完成领域适配。

更新于 2026/11/08
微调参数高效训练

一句话定义

LoRA 不改动预训练权重,只在原有线性层旁边挂一对低秩矩阵 A、B,训练时只更新这两个小矩阵,让模型用很小的参数代价适配新任务。

为什么需要它

全量微调要更新整个模型、保存完整副本,还要为每个任务准备一套权重;显存和存储成本都很高。LoRA 把可训练参数从 d×k 降到 r(d+k),优化器状态和梯度也随之减少。同一份基座模型可以挂多套适配器,按任务切换。

怎么工作

对输入 x,原层输出 W₀x,旁路输出 (α/r)BAx,两者相加:

h = W₀x + (α/r)BAx

  • A 是 r×k 的降维矩阵,B 是 d×r 的升维矩阵,r 远小于 d、k。
  • A 随机初始化,B 初始化为 0,所以训练开始时旁路不改变原模型输出。
  • 训练只更新 A、B;W₀ 保持冻结。
  • 推理时可以把 (α/r)BA 合并进 W₀,不增加额外延迟。

LoRA:冻结 W₀,只训练低秩旁路 A/B

关键点与取舍

  • 秩 r:常用 8–64;越大容量越强,可训练参数也越多,过大就接近全量微调。
  • 目标模块:通常先加在注意力的 Q/V 投影,也可以覆盖 FFN 和更多层;范围越大,参数越多。
  • 缩放 α:控制旁路相对原层的影响强度,常按 α/r 使用。
  • 合并:合并后推理零额外延迟,但不能再单独卸载某个适配器;多租户通常保留未合并的适配器,按请求切换。

常见误区

  • LoRA 不是”只训练某几层”,而是冻结原权重、训练旁路;原层仍然参与前向。
  • 不是秩越大越好;任务简单时更小的 r 往往够用。
  • LoRA 更擅长调整行为、风格和任务格式,注入大量新知识的效果有限;后者通常要结合 RAG 或继续预训练。
  • 训练显存不只由可训练参数决定,激活值和 batch 仍然占大头;QLoRA 才能进一步压低基座权重的占用。

用在哪里

  • 单卡或少卡做领域、风格适配,比如客服话术、代码风格、固定格式输出。
  • 一个基座服务多个任务:每个任务一套 LoRA,按请求切换,不必保存多份完整模型。
  • 与 量化 组合成 QLoRA,在 4 bit 基座上训练,进一步降低显存。
  • 如果任务需要大规模知识更新或大幅改变模型能力,全量微调或继续预训练可能更合适。

QLoRA

QLoRA 先把基座量化到 4 bit,再训练 LoRA 适配器;显存更低,但反量化、精度损失和算子支持要一起评估。

相关概念

  • SFT:LoRA 最常搭配的训练阶段。
  • 量化:QLoRA 的前置步骤。
  • DPO:可与 LoRA 组合的偏好优化方法。