Skip to content

LoRA

约 3202 字大约 11 分钟

LLMFine-tuning

2026-02-25

LoRA框架示意图[参考文献1]
LoRA框架示意图[参考文献1]

什么是 LoRA

Low-rank adaptation, LoRA 低秩适应/适配,是一种大模型微调方法,通过为预训练大模型的稠密层注入低秩分解的可训练旁路矩阵,冻结预训练主模型权重,仅在下游任务的特定数据集上训练该旁路的可训练参数,从而得到一个新的、在目标下游任务上性能更优的模型。

LoRA关键在于仅通过训练旁路的极小参数量,即可实现媲美全量微调的下游任务性能,从而能够优化模型训练阶段的显存占用(主要从优化器状态、模型参数、梯度三方面优化)。

其核心原理是假设大模型适配下游任务时,权重的更新量 ΔW\Delta W 具有 “低内在秩”(low intrinsic rank)。

为什么 LoRA

在学习、使用 LoRA 前必须明晰的一件事就是“为什么是LoRA”,什么问题导致要用 LoRA,其动机与选择;凭什么 LoRA,为什么不用其他的;局限是什么,演进几何?具体来说就是,问题-动机-设计选择-为什么不-局限与演进。

问题

问题,问题是我准备了一桌饭,来了两桌客人,这个饭怎么吃?

LoRA 作为一种大模型非全量微调的微调方法,其基本背景问题就是全量微调在百亿、千亿大模型上训练时间长、显存占用大,存储与分发成本高,任务切换必须替换整套权重的多重问题。其基本目的就是在不降低或者不过分降低模型微调效果的情况下,大幅降低算法时间、空间复杂度。

动机

其动机是下游任务适配所需全量权重 ΔW\Delta W 更新具有内在低秩结构。因为预训练大模型本身已具备较好的通用语言能力,微调过程更多是对少数任务相关方向的调整,而非对全参数空间的重构。

换句话说,预训练大模型,特别是100B+的大模型,本身已经具有较强的基础能力,所谓下游任务适配,仅仅是强化某方面的能力,而不是拓展、学习非常新的东西,因此只需要修改权重中的很小的一部分。

设计选择

LoRA 冻结预训练权重 (W0W_0),仅对更新量进行分解:

ΔW=BA,rmin(d,k)\Delta W = BA,\quad r \ll \min(d,k)

前向传播形式为:

h=W0x+αrBAxh = W_0 x + \frac{\alpha}{r} BAx

该设计具有三个特征: 其一,参数规模从 (d×k)(d\times k) 降至 (r(d+k))(r(d+k)),显著减少可训练参数; 其二,采用零初始化保证训练初期模型输出与预训练模型一致,提升稳定性; 其三,训练完成后可将低秩项合并至原权重,实现与原模型等价的推理路径,从而避免额外延迟。

原论文[参考文献1]实验证明,在语言建模与下游任务上,LoRA 在极低参数预算下可接近甚至达到全量微调性能。

为什么不使用其他方法

与全量微调相比,LoRA 显著降低训练资源需求并支持多任务权重共享,因此在大规模模型下更具可行性。

与 Adapter 方法相比,LoRA 不引入新的串行层结构,避免了推理路径变长与延迟增加的问题。

与 Prefix Tuning 相比,LoRA 直接作用于权重映射而非输入表示,表达能力更强且不占用序列长度。

与 BitFit 相比,LoRA 提供更丰富的参数更新空间,适用于更复杂任务。

因此,LoRA 在“参数效率—性能—推理结构稳定性”三者之间实现了更均衡的权衡。

局限与演讲

LoRA 的前提是更新具有低秩结构,该假设在多数语言任务上成立,但在高复杂度推理或跨模态任务中,固定秩可能限制表达能力。此外,秩的选择缺乏统一理论指导,不同层的重要性分布也存在差异。

围绕这些局限,后续研究形成若干演进方向:量化结合(如 QLoRA)以进一步降低硬件门槛;自适应秩分配(如 AdaLoRA)提升参数利用效率;权重分解与重启策略(如 DoRA、ReLoRA)用于突破单次低秩限制;以及多任务与专家结构结合以缓解任务干扰问题。

LoRA 的核心贡献不在于“压缩模型”,而在于提出了一种结构保持、低秩参数化的权重更新方式,在理论上基于低内在秩假设,在工程上满足大模型部署的关键约束。其成功体现了过参数化模型在下游适配过程中存在低维有效子空间这一结构特性,也为后续参数高效微调方法奠定了基本范式。

LoRA 原理

两个参数——rank

线性代数中,矩阵的秩(rank)表示矩阵中线性无关的行 / 列向量的最大数量,反映矩阵所张成的向量空间的维度。

而 rank, rr 秩,在LoRA中是指旁路矩阵 B(d×r),A(r×k)B_{(d\times r)},A_{(r\times k)} 中的关键维度。rr 是矩阵的最大可能秩(实际上训练得到的 ΔW\Delta W 的秩小于等于 rr)。

其数值意义可解释为微调时的调整方向,即 rr 越小,低秩矩阵的参数越少,对预训练权重的调整越 “聚焦核心方向”;rr 越大,调整方向越多,参数也越多。

一般 rr 可取值2,4,8,16,若任务简单,则取 2-4 即可;若任务较为复杂,例如基于自然语言的控制指令生成,此时需要8-16。当 rr 取16以上时,并不能得到更好的效果,甚至可能会不如低秩LoRA得到的模型,因为更高的 rr 引入了一定的噪声而非有效信息。

两个参数——alpha

LoRA中的 alpha 是其前向传播公式

h=W0x+αrBAxh=W_0x + \frac{\alpha}{r} BAx

中的旁路系数的一部分,它是一个缩放因子,也即LoRA的梯度平衡器。

其核心作用是平衡低秩矩阵的梯度幅度,减少超参数调优成本。

一方面,低秩矩阵 BABA 的参数数量远少于 W0W_0​,若直接训练 BABA,其梯度幅度会远小于全量微调时 W0W_0 ​的梯度幅度,导致训练不稳定(更新过慢或过冲)。α\alpha 可通过缩放,让 BABA 的梯度幅度与全量微调时 W0W_0 ​的梯度幅度相当,保证训练收敛性。

另一方面,若没有 α\alpha ,调整 rr 时需同步调整学习率(rr 减小→学习率需增大,否则更新不足);引入 α\alpha 后,可固定 α\alpha(如 α=16\alpha=16),仅调整 rr 即可,无需频繁调学习率,从而大幅降低超参调优成本。

一般而言,α\alpha 的取值为 16 或者 2r2r,优先固定为 1616 而无需过分在意其数值,当训练不收敛时可再将其调整为 2r2r.

LoRA 为什么

为什么 “低秩” 能解决大模型适配问题?

预训练大模型已学到通用语言知识,其本身已经在一个比较好的解上了,而在适配下游特定任务时,只需要修改部分参数,对“关键特征参数”进行微小调整,而这些少量的参数能够使用低秩矩阵空间表示,因此“低秩”能够解决大模型适配问题。

简而言之,微调本质是在已有特征基底上重新加权,而不是创造全新特征空间,因此只需要低秩调整。

其技术方法是: 冻结预训练权重 W0W_0,仅训练两个低秩矩阵 A(d×r)A_{(d×r)}B(r×k)B_{(r×k)},权重更新量 ΔW=BA\Delta W = BA,前向传播为:h=(W0+αrΔW)x=W0x+αrBAxh=(W_0+\frac{\alpha}{r}\Delta W)x = W_0 x + \frac{\alpha}{r}BAx.

为什么要加αr\frac{\alpha}{r},如上文上述,主要是为了对齐全量微调的梯度。

低秩分解如何压缩参数?

首先输入维度 kk,输出维度 dd,那么对于权重矩阵 W0(d×k)W_{0(d\times k)},其参数量为 d×kd\times k ( GPT-3 的注意力头维度 d=12288,单矩阵参数约 1500 万).

新增旁路矩阵 ΔW(d×k)=B(d×r)A(r×k)\Delta W_{(d\times k)} = B_{(d\times r)}A_{(r\times k)} 则仅含 dr+rk=r(d+k)d*r + r*k = r*(d+k) 个参数。当 r=4、d=k=12288 时,参数数量仅 4×(12288+12288)=98304,较满秩矩阵压缩约 150 倍。

为什么 LoRA 能 “少参数却高性能”?

LoRA 的性能不逊色于全量微调,核心源于对 “预训练模型特征” 的精准利用,LoRA的三个关键机制为:

  1. ΔW\Delta W 放大 “预训练中未强调的任务特征” ΔW\Delta W 与预训练权重 ΔW0\Delta W_0 的相关性较弱,但会放大 ΔW0\Delta W_0 中 “对下游任务重要但占比低” 的特征方向; 量化指标:r=4r=4 时,ΔW\Delta W 对目标特征的放大因子达 21.56.91/0.3221.5 \approx 6.91/0.32,即通过低秩矩阵聚焦关键特征,避免全量微调的 “全局扰动”。
  2. 低秩结构匹配适配任务的内在复杂度 大模型适配本质是 “在预训练特征空间中寻找任务相关子空间”,而多数 NLP 任务(包括控制领域的文本类任务)的子空间维度极低; 佐证:不同 rr 的 LoRA 模块学习到的子空间高度重叠(r=8r=8r=64r=64 的 subspace similarity>0.5),说明高秩部分多为噪声。
  3. 无推理延迟的工程优势 适配器、前缀调优等方法需在推理时额外计算或保留特殊 token,而 LoRA 可合并权重,与原始模型推理流程完全一致

其他关键内容

初始化、训练、部署

初始化:AA 采用随机高斯分布(N(0,σ2)N (0, σ²)),BB 初始化为全 0 矩阵 —— 确保训练初期 ΔW=0\Delta W=0,模型行为与预训练模型一致,避免训练不稳定;

梯度计算:仅对 AABB 求导,W0W_0 的梯度被冻结,GPU 显存占用骤降(GPT-3 训练从 1.2TB 降至 350GB);

部署合并:训练完成后,可直接计算 W=W0+BAW=W_0+BA,合并为原始维度的权重矩阵,推理时无额外延迟(与全量微调模型完全兼容),并且可能无缝切换不同的旁路,此时仅需要一个预训练模型再加上不同的微调矩阵 ΔWi\Delta W_i 就可以根据输入任务调用不同的、专配该下游任务的模型。

LoRA 在 transformer 何处最优

大模型的核心是 Transformer 架构,LoRA 的适配策略可针对性优化 “对控制任务重要的模块”。

以下数据均来自参考文献[1]

LoRA之于 Transformer,主要是在其自注意力模块包含 WqW_q(查询)、WkW_k(键)、WvW_v(值)、WoW_o(输出)四个矩阵。并且最优组合为:同时适配 WqW_qWvW_v,在相同参数预算下性能最佳(如 WikiSQL 任务准确率 73.7%,高于单独适配 WqW_q 的 70.4%);

对比

不同方法的对比

适配方法核心逻辑参数效率推理延迟
全量微调更新所有参数最低(100%参数)
适配器(Adapter)插入额外瓶颈层(如d→r→d)中(~1%参数)高(+20%-30%)
前缀调优(Prefix Tuning)优化输入层特殊token嵌入中(~0.5%参数)
LoRA低秩分解权重更新量最高(~0.01%参数)

由表可以看出,LoRA 在“参数效率”和“推理延迟”这两个工业最关键指标上不存在明显 trade-off,因此具有工程统治性优势。

参考文献

  1. Hu E J, Shen Y, Wallis P, et al. Lora: Low-rank adaptation of large language models[J]. Iclr, 2022, 1(2): 3.
  2. https://www.douyin.com/user/MS4wLjABAAAAmHpOwinAN7C6pJpSP-20hpWknuERPLIZiW5T99zsYeU?from_tab_name=main&modal_id=7605136025202986292