LoRA Adapters/zh
| Article | |
|---|---|
| Topic area | deep learning |
| Prerequisites | Transformer, AdamW, Backpropagation |
概述
LoRA(Low-Rank Adaptation,低秩适配)是一种参数高效微调方法,通过向冻结的预训练模型的各层注入可训练的小型秩分解矩阵来工作。该方法由 Hu 等人于 2021 年提出,LoRA 将选定的权重更新重新参数化为两个低秩因子的乘积,仅训练这些因子,同时保持原始权重不变。所得的“适配器”通常仅包含基础模型 0.01% 到 1% 的参数,却能在下游任务上恢复全量微调的大部分性能。由于适配器权重在推理时可以合并回基础权重,LoRA 在部署阶段不引入任何额外延迟,这使其区别于早期那些会在前向传播中插入额外层的适配器方法。[1]LoRA 已成为大型语言模型、扩散模型和 Vision Transformer 的主流微调方案,也是社区共享适配器枢纽的基础构件,这些适配器用于将模型专门化到特定任务、风格或角色上。
动机
对现代基础模型进行全量微调意味着要更新每一个参数,然后为每个任务存储一份完整的模型副本。对于一个 16 位精度下的 70B 参数语言模型,每个微调后的检查点大约占用 140 GB;训练期间所需的优化器状态还要再大上几倍。当同一个基础模型需要被专门化到数百个任务、用户或领域时,这种做法是不切实际的。
LoRA 的动机来自这样一条经验观察:一次微调对预训练权重矩阵所施加的变化往往位于一个低秩子空间中。若 $ W_0 \in \mathbb{R}^{d \times k} $ 是预训练权重矩阵、$ W_0 + \Delta W $ 是微调后的版本,那么对 $ \Delta W $ 做奇异值分解通常会发现少数几个奇异方向就承载了大部分能量。Hu 等人据此认为,针对具体任务的适配的“本征秩”足够小,以至于可以将 $ \Delta W $ 直接参数化为一个低秩乘积而不损失表达能力。
形式化定义
LoRA 将所选权重矩阵的更新 $ \Delta W $ 替换为如下因式分解形式 $ {\displaystyle \Delta W = \frac{\alpha}{r}\, B A,} $ 其中 $ A \in \mathbb{R}^{r \times k} $、$ B \in \mathbb{R}^{d \times r} $,秩 $ r $ 远小于 $ \min(d, k) $(常取 4、8、16 或 64),$ \alpha $ 为一个常数缩放因子。修改后层的前向传播变为 $ {\displaystyle h = W_0 x + \frac{\alpha}{r}\, B A x.} $ 原始矩阵 $ W_0 $ 被冻结,不接收任何梯度更新。仅有 $ A $ 和 $ B $ 被训练。
在初始化时,$ A $ 从高斯分布(或 Kaiming 分布)中采样,$ B $ 被置为零,使得初始步骤下 $ \Delta W = 0 $,网络的预测与预训练模型完全一致。随后,通过乘积 $ BA $ 的梯度流打破对称性,适配器开始学习一个针对具体任务的更新。
缩放因子 $ \alpha/r $ 将适配器的有效学习率与秩解耦。否则,在参数值不变的情况下将 $ r $ 加倍会使 $ \Delta W $ 的幅值也加倍;$ 1/r $ 因子抵消了这一效应,使得在某个秩下调好的超参数能够合理地迁移到另一秩。常见的约定是设 $ \alpha = r $ 或 $ \alpha = 2r $。
LoRA 的应用位置
在 Transformer 中,LoRA 最常被应用于注意力机制的投影矩阵——查询、键、值和输出投影 $ W_Q $、$ W_K $、$ W_V $、$ W_O $。原始论文发现,仅对 $ W_Q $ 和 $ W_V $ 进行适配在 GLUE 风格的任务上就已足够;而面向大型语言模型的较新做法则会对全部四个注意力投影外加前馈网络的上投影和下投影都施加 LoRA,因为指令跟随和推理类任务能从更广泛的覆盖中获益。
LoRA 可以应用于任何线性层,包括 embedding 表和输出的 softmax 头,不过对嵌入表施加 LoRA 时需要谨慎,因为其反向传播会经过非标准的索引选取操作。卷积核可以被重排为二维矩阵并以类似方式适配,这正是 LoRA 用于视觉模型和扩散模型的基础。
训练与推理
在训练期间,优化器状态——梯度、Adam/AdamW 动量以及混合 精度 的主权重——仅为 $ A $ 和 $ B $ 分配。在秩为 8 并对 $ W_Q, W_V $ 进行适配的设置下,一个 7B 参数语言模型的可训练参数量从 7B 降至约 4M,相当于约 1700 倍的缩减。对应的显存节省再结合梯度检查点和 4 位权重量化,正是 QLoRA 等技术能够在单张消费级 GPU 上微调 65B+ 模型的关键。
在推理时,适配器可以被合并进基础权重: $ {\displaystyle W_{\text{merged}} = W_0 + \frac{\alpha}{r}\, B A.} $ 一旦合并,修改后的层就与全量微调过的层无异,且不会带来任何延迟或显存开销。另一种做法是让适配器保持不合并状态,在运行时作为加性分支应用;这使得可以在同一基础模型上热切换不同的适配器而无需重新加载权重,正是多租户适配器服务以及图像生成工具中“适配器库”的基础。
变体与扩展
围绕 LoRA 的思路衍生出了一大批方法:
- QLoRA(Dettmers 等人,2023 年)——将 LoRA 与冻结基础权重的 4 位量化相结合,使用 NF4 数据类型和双重量化。适配器以 16 位训练,梯度则流经反量化后的基础权重。这使得在单张 24 GB GPU 上对 30B+ 模型进行微调成为可能。[2]
- DoRA(Weight-Decomposed Low-Rank Adaptation,权重分解低秩适配)——将 $ W_0 $ 分解为一个幅值向量和一个方向矩阵,仅对方向部分施加 LoRA。在原始 LoRA 表现欠佳的任务上,经验上能更好地缩小与全量微调的差距。
- AdaLoRA ——使用类似奇异值分解的参数化(带显式奇异值)来跨层学习秩分配,并在训练过程中剪除不重要的方向。
- LoRA+ ——为 $ A $ 和 $ B $ 使用不同的学习率,其动机是 $ B $ 从零开始所引入的不对称性。论文建议 $ \eta_B / \eta_A \approx 16 $。
- VeRA ——在所有层之间共享随机投影矩阵,仅训练每层一个小型缩放向量,在保持相似质量的同时相比 LoRA 实现 10 倍参数缩减。
- LoRA 用于扩散模型 —— Stable Diffusion 及相关模型的主流微调方法。社区枢纽分发着数十万个风格、角色和概念 LoRA,每个通常在 10–200 MB 之间。
对比
LoRA 处于更广泛的参数高效微调(PEFT)方法图景之中:
- 全量微调 ——质量上限最高,成本也最高。适用于任务领域远离预训练数据、且可以接受为每个任务保留一个专用模型的场景。
- 适配器模块(Houlsby 等人,2019 年)——在 Transformer 子层之间插入小型瓶颈网络。在推理时引入额外的参数和前向传播延迟;没有合并回基础权重的选项。
- 前缀微调与提示微调 ——在输入或每个注意力层前面拼接可学习的向量。参数极少;对初始化敏感,对于需要大幅改变行为的任务较难调好。
- BitFit ——仅训练偏置项。极其廉价但表达能力有限。
LoRA 的吸引力在于它占据了一个甜蜜点:在大多数微调任务上达到与全量微调相当的质量、参数量与前缀微调相当、合并后在推理阶段没有任何额外开销,并且具有干净的可组合性(针对不同概念训练的多个 LoRA 可以线性组合,但需要注意若干前提条件)。
局限性
LoRA 假设具体任务的更新近似于低秩。对于需要大量注入知识的任务——例如把模型训练到一种新语言或一个庞大的新事实语料上——为匹配全量微调所需的秩可能高到使参数节省优势消失。仅使用 LoRA 式更新从零开始进行预训练通常并不有效。
选择 LoRA 的应用位置及秩仍然是一项经验性工作。常见的默认值(秩 8 或 16,仅作用于注意力投影)在语言模型的指令微调上效果良好,但在代码、数学或多模态适配上可能表现不足,这些场景通常需要在更多层上施加更高且统一的秩。
适配器组合并不总是线性的:把若干独立训练的 LoRA 堆叠或相加可能产生相互干扰,在扩散模型中尤为明显,为此人们提出了专门的合并算法(TIES、DARE)和正交化技术以缓解串扰。
最后,LoRA 缩小了但并未消除其与全量微调之间的差距。在衡量狭窄技术能力的基准(数学推理、代码合成)上,调优良好的全量微调仍以一个小但可测量的差距优于 LoRA,且差距在非常低的秩下会进一步扩大。