Skip to content

什么是 LoRA?它的原理是什么?为什么能减少训练参数? ​

  • 标签:

🏛 业务架构师 ​

LoRA(Low-Rank Adaptation)是最主流的参数高效微调方法。

原理:微调的本质是给原权重矩阵 W 找一个增量 ΔW。LoRA 的核心假设是ΔW 是低秩的——领域适配所需的变化集中在少数"方向"上。于是不动 W,在旁边加旁路 B·A(A 是 d×r 降维矩阵,B 是 r×d 升维矩阵,r 远小于 d,常取 8~64)。前向变为 W·x + B·A·x,训练只更新 A、B,W 冻结。初始化 A 随机小值、B 为零,保证训练开始时旁路不影响原模型。

为什么能减少参数:以 4096×4096 的权重矩阵为例,全量微调要更新 1600 万参数;LoRA r=16 时只需 (4096×16)×2 ≈ 13 万,缩小百倍以上。整个 7B 模型全部关键层加旁路,可训练参数占比不到 1%。连带效应:梯度和优化器状态(显存大头)也只按这 1% 计算——训练显存从数百 GB 降到消费级可负担。

推理友好:训练完可把 B·A 合并回 W(W' = W + B·A),推理零额外延迟;也可不合并,一份基座挂多个 LoRA 适配器按需切换——多业务复用的理想形态。

业务定位:LoRA 把微调的门槛从"集群级"降到"单卡级",是 2026 年企业定制模型的事实标准。理解它的价值不在数学而在经营:让"每个业务有自己的模型个性"成为低成本选项。

🏗 系统架构师 ​

LoRA = Low-Rank Adaptation:冻结预训练权重 W,旁路用两个小矩阵 B、A 的乘积表达权重增量,微调只训 B 和 A。

原理:

  • 前向计算:h = Wx + (α/r)·BAx,W 冻结,A(r×d,高斯初始化)、B(d×r,零初始化)——零初始化保证训练起点与原模型完全一致;
  • 推理时 BA 可合并进 W(W' = W + BA),不增加任何推理延迟——这是它对 Adapter 方法的架构性优势。

为什么能减少训练参数:

  • 低秩假设:预训练权重在领域适配时的改变量 ΔW 具有很低的"本征秩"(Aghajanyan 等的 Intrinsic Dimension 研究:微调所需参数自由度远小于参数总量)——领域适配是在巨大权重空间里做一个低维方向的小扰动;
  • 参数账:d=4096 的权重层,全量是 d²≈1600 万参数;LoRA 取 r=16 时只有 2×d×r≈13 万,约 0.8%;7B 模型全量微调训 70 亿参数,LoRA 通常只训几百万到几千万;
  • 连带节省:梯度和 Adam 优化器状态都与可训练参数成正比,显存从"训不动"降到单卡可训——工程上这是比参数量更关键的节省。

架构价值:底座不动 + 适配器小文件(几十 MB),支持一份 GPU 资产多业务热插拔(vLLM multi-LoRA),是多租户模型服务平台的标准形态。

💻 全栈开发专家 ​

LoRA(Low-Rank Adaptation):冻结预训练权重 W₀,在旁边挂一个可训练的低秩增量 ΔW = B·A,前向变成 h = W₀x + (α/r)·B·A·x。

为什么能减少训练参数:A 是 r×k、B 是 d×r,r 取 8~64 时,参数量从 d×k(如 4096×4096=1600 万)降到 r×(d+k)(r=16 时约 13 万,1% 以下)。优化器状态(Adam 的动量/方差)只给可训练参数,这部分显存缩水更夸张——所以 LoRA 省的不只是参数存储,训练总显存往往降一个数量级。

为什么低秩可行:预训练权重是「满秩」的,但微调带来的变化量 ΔW 有很低的本征秩——新任务相对基座的适配信息集中在一个低维子空间里(原论文实验:子空间相似性分析显示 r=8 就能覆盖大部分任务差异)。类比:一个博学的教授转岗做审计,不需要重构大脑,只要学一小套新思维模式。

推理零开销的秘诀:训练完 W = W₀ + BA 合并成普通权重矩阵,部署形态和原模型完全一样;不合并也行(vLLM 多 LoRA 热切换),代价是每次前向多一次小矩阵乘。

一句话:LoRA 押注「适配 << 重塑」,实验证明这个赌注在绝大多数任务上成立——这就是它能成为工业默认微调方案的原因。