LoRA-GA
文章解读
众所周知,LoRA是一种常见的参数高效的微调方法。LoRA利用低秩分解来降低微调参数量,节省微调显存,同时训练好的权重可以合并到原始权重上,推理架构不需要作出改变,是一种训练和推理都比较友好的微调方案。此外,https://kexue.fm/archives/10001 (opens new window)还讨论过LoRA的不对称性,指出给
基础回顾
首先我们再来温习一下LoRA。假设预训练参数为

为了使得LoRA的初始状态跟预训练模型一致,我们通常会将
也就是说将固定不变的权重从
需要指出的是,LoRA往往只是显存不足的无奈之选,因为一般情况下全量微调的效果都会优于LoRA,所以如果算力足够并且要追求效果最佳时,请优先选择全量微调。这也是LoRA-GA的假设之一,因为它的改进方向就是向全量微调对齐。使用LoRA的另一个场景是有大量的微型定制化需求,我们要存下非常多的微调结果,此时使用LoRA能减少储存成本。
对齐全量
LoRA-GA提出了一个非常深刻的优化点:通过
越仔细回味,我们会越发现这个优化点是如此“直击本质”——LoRA的目标不就是“以小搏大”,希望能接近全量微调的效果吗?既然如此,尽可能对齐全量微调的后续更新结果,不就是最正确的改进方向?从逼近的角度来看,“
具体来说,假设我们的优化器是SGD,那么对于全量微调,我们有
其中
最后的近似省略了
其中
求解过程
简单起见,我们记
注意
我们先考虑
其中
当
前两个等号都是简单的代换,第三个等号是因为正交变换不改变Frobenius范数(请读者自行证明一下)。经过这样的转换,我们发现逼近的对象重新转变为对角阵
一般结果
现在我们就得到了LoRA的一种初始化方法:
LoRA-GA 选取一批样本,计算初始梯度
这样LoRA + SGD得到的
当然,可能有读者会发现目前的推导都是基于SGD优化器的假设,那么对于我们更常用的Adam优化器,结论是否要做出改变呢?理论上是要的。我们在《配置不同的学习率,LoRA还能再涨一点?》(opens new window) 讨论过,对于Adam来说,第一步优化结果是
由于符号函数
在这个背景下,对于Adam优化器,我们有三个选择:
1、信仰:直接引用SGD的结果,相信它也可以在Adam中发挥同样的效果;
2、硬刚:用优化器直接去最小化目标,由于目标比较简单,计算量尚能接受;
3、投机:直觉上将换成 ,然后代入SGD的结论,可能更贴合Adam。
看起来原论文选择的是第1个方案,论文的实验结果确实也支持这一选择。
实验效果
论文的实验结果还是比较惊艳的,尤其是在GLUE上取得了最接近全量微调的效果:

平均来说,训练数据量越少,相对提升的幅度越大,这表明LoRA-GA对齐全量微调的策略,不仅有助于提高最终效果,还能提高训练效率,即可以用更少的训练步数就能达到更优的效果。
在LLAMA2-7b上的表现也可圈可点:

注意使用LoRA的主要场景是显存不足,但LoRA的初始化需要求出所有训练参数的完整梯度,这可能会由于显存不足而无法实现。为此,原论文提出的技巧是我们可以一个个参数串行地求梯度,而不是同时求所有训练参数的梯度,这样就可以把单步计算的显存降下来。串行求梯度虽然会降低效率,但初始化本身是一次性工作,因此稍慢点也无妨。至于怎么实现这个操作,不同框架有不同方法,这里也不展开讨论了。
文章小结
本文介绍了LoRA的一个新改进LoRA-GA。虽然LoRA的各种变体并不鲜见,但LoRA-GA以非常直观的理论指导折服了笔者,其改进思路给人一种“确认过眼神,它就是对的论文”的感觉,再配上可圈可点的实验结果,整个过程如行云流水,让人赏心悦目。
ChatGPT全文翻译 ⬇️
0. 摘要
微调大规模预训练模型在计算和内存成本方面是极其昂贵的。LoRA 作为最流行的参数高效微调 (PEFT) 方法之一,通过微调具有显著更少参数的辅助低秩模型,提供了一种成本效益高的替代方案。虽然 LoRA 显著降低了每次迭代的计算和内存需求,但大量的实验证据表明,LoRA 收敛速度远慢于全微调,最终导致总体计算量增加且通常表现出更差的测试性能。在本文中,我们对 LoRA 的初始化方法进行了深入研究,并表明在不改变架构和训练算法的情况下,精心的初始化可以显著提高效率和性能。具体而言,我们引入了一种新颖的初始化方法,LoRA-GA(低秩自适应的梯度近似),该方法在第一个步骤中将低秩矩阵乘积的梯度与全微调的梯度对齐。我们的广泛实验表明,LoRA-GA 达到了与全微调相当的收敛速度(因此比原始 LoRA 以及最近的各种改进方法快得多),同时在性能上也达到了相当甚至更好的水平。例如,在使用 T5-Base 的 GLUE 数据集子集上,LoRA-GA 平均比 LoRA 提升了 5.69%。在更大的模型上,如 Llama 2-7B,LoRA-GA 在 MT-bench、GSM8K 和 Human-eval 上分别显示出 0.34%、11.52% 和 5.05% 的性能提升。此外,我们观察到相较于原始 LoRA,LoRA-GA 具有 2-4 倍的收敛速度提升,验证了其加速收敛和提升模型性能的有效性。代码可在 GitHub 上获得。
1. 引言
微调大规模语言模型(LLMs)对于启用先进的技术至关重要,例如指令微调 [1]、基于人类反馈的强化学习 (RLHF)[2],以及将模型适应于特定的下游应用。然而,随着模型规模的不断增长,全面微调所需的计算和存储成本高得令人望而却步。为了解决这些挑战,参数高效微调(PEFT)方法(如低秩自适应 (LoRA) [4])应运而生,并引起了广泛关注。
与直接更新模型参数不同,LoRA 在模型的线性层(如自注意力模块中的 Q、K、V 和 O 矩阵 [5])中引入了辅助的低秩矩阵 B 和 A,同时保持原始层权重 W 固定。修改后的层表示为:
其中,
尽管 LoRA 具有这些优势,但大量实验证据表明(参见 [6, 7, 8, 9]),LoRA 的收敛速度显著慢于全微调。这种较慢的收敛速度往往会增加总体计算成本(以浮点运算数 (FLOPs) 衡量),并且有时会导致较差的测试性能。在我们的实验中,我们通常观察到 LoRA 需要 5-6 倍的迭代次数和 FLOPs 才能在相同的学习率下达到与全微调相同的性能,如图 1 所示。
为了研究收敛缓慢的原因,我们对 LoRA 适配器权重的初始化策略进行了深入研究。已知使用相同目标(例如语言模型)微调预训练模型通常比重新初始化新参数(例如分类头)收敛得更快 [10]。这一观察促使我们质疑,LoRA 的默认随机初始化适配器权重(LoRA 使用 Kaiming 初始化 [11],并将 B 设为零 [4])是否是导致其收敛缓慢的原因。在我们的实验中,我们发现不同的 LoRA 初始化策略会显著影响结果,且默认初始化效果不佳。
为了实现与全微调相当的收敛速度,我们的目标是使
为此,我们引入了一种新颖的初始化方法,LoRA-GA(低秩梯度近似)。通过用完整梯度矩阵的特征向量初始化
其中
我们的贡献可以总结如下:
- 我们提出了 LoRA-GA,这是一种新颖的 LoRA 初始化方法,通过近似低秩矩阵的梯度与完整权重矩阵的梯度加速收敛。
- 我们确定了非零初始化下的缩放因子,确保适配器输出的方差与适配器的秩和输入的维度无关。
- 我们通过广泛的实验验证了 LoRA-GA,相比于传统 LoRA 显著提升了性能和收敛速度。例如,在 T5-Base 模型上,LoRA-GA 在 GLUE 子集上的表现优于 LoRA 平均 5.69%。在更大的模型 Llama 2-7B 上,LoRA-GA 在 MT-bench、GSM8K 和 Human-eval 上的性能分别提升了 0.34%、11.52% 和 5.05%,并且收敛速度提高了 2-4 倍。
2. 相关工作
2.1 初始化
在初始化过程中保持方差稳定性的重要性已被广泛认可,旨在防止梯度爆炸或梯度消失现象的发生。Xavier 初始化 [20] 确保了在使用线性激活函数的网络中,正向传播和反向传播中的稳定性。He 初始化 [11] 将此解决方案扩展到使用 ReLU 激活的网络中。与这些不同,LSUV 初始化 [21] 选择一个小批量数据,执行正向传播以确定输出方差,并随后对其进行归一化以确保稳定性。Tensor 程序 [22] 已成为调优大模型中各种超参数(包括初始化)的有力工具。
2.2 参数高效微调(PEFT)
为了在有限的硬件资源下微调越来越大的语言模型,研究人员开发了各种参数高效微调(PEFT)方法。一种方法是基于适配器的方法 [23, 24, 25, 26],它将新层集成到模型的现有层中。通过仅微调这些插入的层(通常具有较少的参数),大大减少了资源消耗。然而,此方法在正向和反向传播期间引入了额外的延迟,因为计算必须穿越新增的层。另一种方法是基于软提示的方法 [10, 27, 28, 29, 30],它在模型的输入前附加可学习的软提示(提示),以适应模型的特定任务。该方法利用了预训练模型的内在能力,只需适当的提示即可适应下游任务。尽管该方法有效,但它也在推理期间带来了额外的计算开销和延迟。
2.3 LoRA 的变体
LoRA 是最流行的 PEFT 方法之一,它通过在现有层旁引入低秩矩阵的乘积来近似微调期间的权重变化。为了改进 LoRA 的结构,已有多种方法提出。AdaLoRA[31] 使用 SVD 动态修剪不重要的权重,允许在固定参数预算内向重要区域分配更多的秩。DoRA[8] 通过为低秩矩阵乘积添加可学习的幅度来增强模型的表达能力。此外,LoHA[32] 和 LoKr[33] 分别采用了哈密顿积和克罗内克积。
尽管取得了这些进展,原始的 LoRA 仍然是最受欢迎的方法之一,得益于其稳健的库和硬件支持。因此,在不改变 LoRA 结构的情况下进行改进是至关重要的。最近的一些方法也侧重于这一方面。ReLoRA[34] 建议定期将学习的适配器合并到权重矩阵中,以增强 LoRA 的表现力。LoRA+[35] 提出为 LoRA 中的两个矩阵使用不同的学习率,以提高收敛速度。rsLoRA[36] 引入了一个新的缩放因子,使输出的缩放与秩无关。尽管我们的稳定缩放方法看起来类似于 rsLoRA,rsLoRA 假设 BA = 0 初始化,因此更新 ∆BA 时秩是不变的。而我们的稳定缩放方法确保非零初始化的 BA 在从开始时就对秩和输入维度保持不变。
最近,PiSSA[37] 提出通过对原始矩阵 W 进行 SVD 来初始化 A 和 B。我们的方法则基于不同的思路,即近似权重矩阵 W 的梯度,涉及对采样的梯度进行 SVD 并适当缩放初始化矩阵,如第 3 节所述。
3. 方法
在这一部分中,我们分析了 LoRA 的初始化并介绍了我们的方法 LoRA-GA。LoRA-GA 由两个关键部分组成:(1)近似完整微调的梯度方向,以及(2)确保初始化过程中的秩和尺度稳定性。我们逐一介绍这些部分,并随后展示它们在 LoRA-GA 中的集成。
3.1 LoRA 的回顾
LoRA 的结构基于这样的假设,即微调的更新是低秩的 [13],LoRA[4] 提出了使用两个低秩矩阵的乘积来表示原始矩阵
其中
LoRA 的初始化
在 LoRA 的默认初始化方案 [4, 38] 中,矩阵
如果额外的项
其中,
3.2 梯度近似 (Gradient Approximation)
我们的目标是确保第一步更新
其中
考虑一个学习率为
为了衡量其与完整微调的缩放更新
引理 3.1
假设损失函数为
通过将引理 3.1 中的梯度代入公式 (1),我们可以将判准重写为:
该判准评估适配器的梯度与完整微调梯度方向的近似程度,最小化它可以使 LoRA 的梯度与完整微调的梯度更接近,并带有缩放因子
Theorem 3.1
定理 3.1 考虑以下优化问题:
[ \min_{A_{\text{init}}, B_{\text{init}}} |\eta^2 \nabla_W L \cdot A_{\text{init}}^T A_{\text{init}} + \eta^2 B_{\text{init}} B_{\text{init}}^T \cdot \nabla_W L - \zeta \nabla_W L|_F ]
如果 (\nabla_W L) 的奇异值分解(SVD)为 (\nabla_W L = USV^T),那么该优化问题的解为:
[ B_{\text{init}} = \sqrt{\frac{\zeta}{\eta}} U_{I_A}, \quad A_{\text{init}} = \sqrt{\frac{\zeta}{\eta}} V^T_{I_B} ] 其中,(|I_A| = |I_B| = r),且 (I_A \cup I_B = {i \mid 1 \leq i \leq 2r, i \in \mathbb{N}})。
这个定理为 LoRA-GA 提供了一个适当的初始化方案,并通过 SVD 的结果确定初始矩阵的结构和缩放因子。
3.3 缩放稳定性 (Scale Stability)
受 rsLoRA [36] 和 Kaiming 初始化 [11] 启发,我们定义了稳定性准则:
定义 3.1 当
前向稳定性:如果适配器的输入是独立同分布 (i.i.d.) 且具有 2 阶矩
,则其输出的 2 阶矩保持 。 后向稳定性:如果适配器输出的损失梯度是
,则相对于输入的梯度保持 。
定理 3.2 给定定理 3.1 中提出的初始化,假设
- 当
时,适配器是前向缩放稳定的; - 当
时,适配器是后向缩放稳定的。
与 Kaiming 初始化 [11] 的结果类似,我们观察到无论是
4. 实验
在本节中,我们评估了 LoRA-GA 在各种基准数据集上的性能。首先,我们使用 T5-Base 模型评估了自然语言理解(NLU)能力,测试了 GLUE 数据集的一个子集 [14]。随后,我们使用 Llama 2-7B 模型评估对话 [16, 40]、数学推理 [17, 41] 和编程能力 [18, 42]。最后,我们进行了消融实验,证明了我们方法的有效性。
基线方法
为了证明 LoRA-GA 的有效性,我们与以下几种基线方法进行了对比:
- 全参数微调(Full-Finetune):使用所有参数进行微调,所需资源最多。
- 原始 LoRA [4]:通过在线性层中插入低秩矩阵积 BA 进行微调。A 使用 Kaiming 初始化,B 初始化为零。
- 保持原有结构的 LoRA 变体:包括几种保持原始 LoRA 结构的方法:
- rsLoRA [36] 引入了一个新的缩放因子,以稳定 LoRA 的输出。
- LoRA+ [35] 为 LoRA 中的两个矩阵使用不同的学习率进行更新。
- PiSSA [37] 在训练开始时对权重矩阵 W 进行 SVD,并根据较大奇异值初始化 A 和 B。
- 修改结构的 LoRA 变体:包括几种修改原始 LoRA 结构的方法:
- DoRA [8] 通过增加可学习的幅度来增强模型的表达能力。
- AdaLoRA [31] 通过 SVD 动态修剪不重要的权重,从而允许在固定的参数预算下向重要区域分配更多的秩。
4.1 自然语言理解实验
模型和数据集
我们使用 GLUE 基准的多个数据集微调了 T5-Base 模型,包括 MNLI、SST-2、CoLA、QNLI 和 MRPC。使用开发集上的准确率作为主要评估指标。
实现细节
我们使用提示调优来微调 T5-Base 模型。这涉及将标签转换为标记(例如,“positive”或“negative”),并使用这些标记的归一化概率作为分类的预测概率。超参数在附录 D.1 中提供。每个实验使用 3 个不同的随机种子进行,并报告平均性能。
结果
如表 1 所示,LoRA-GA 始终优于原始 LoRA 和其他基线方法,表现与全参数微调相当。尤其是在较小的数据集(如 CoLA 和 MRPC)上,LoRA-GA 表现出色,能够更快收敛,并有效利用有限的训练数据。

4.2 大语言模型实验
模型与数据集
我们在多个基准数据集上评估了 Llama 2-7B 模型的表现,包括用于对话的 MT-Bench 数据集 [40],用于数学推理的 GSM8K 数据集 [41],以及用于代码生成和测试的 HumanEval 数据集 [42]。我们使用这些数据集来评估模型在处理多样性和复杂性任务上的表现。
实现细节
我们使用与自然语言理解实验中相似的提示调优技术,并根据任务类型对生成超参数进行了适当的调整(例如,在对话任务中使用
结果
表 2 显示了 Llama 2-7B 模型在 MT-Bench、GSM8K 和 HumanEval 数据集上的表现。LoRA-GA 在 GSM8K 和 HumanEval 数据集上显著优于其他方法,展示了其在复杂任务中的有效性。尽管在 MT-Bench 上稍稍落后于 DoRA,但 LoRA-GA 使用的参数更少,且训练时间比 DoRA 减少了约 30%。此外,如图 2(左)所示,LoRA-GA 的收敛速度明显快于 Vanilla LoRA,接近全参数微调的收敛速度。

4.3 消融实验 (Ablation Study)
为了评估非零初始化、稳定输出以及梯度近似对 LoRA-GA 的贡献,我们在五种不同的实验设置下进行了消融实验。每种设置的详细信息见表 3。
表 3 展示了不同初始化方法及其对应的设置,"+SO" 表示稳定输出,适当缩放参数以确保稳定性。"+GA" 指的是梯度近似,其中
方法 | |||
---|---|---|---|
LoRA | 0 | ||
Gaussian | |||
+SO | |||
+GA | |||
LoRA-GA |
表 4 显示了在 MT-Bench、GSM8K 和 Human-eval 上的不同设置的消融实验结果。
方法 | MT-Bench | GSM8K | Human-eval | GLUE 平均值 |
---|---|---|---|---|
Full-Finetune | 5.56±0.09 | 54.20±0.42 | 19.87±0.57 | 87.91 |
LoRA | 5.61±0.10 | 42.08±0.04 | 14.76±0.17 | 82.08 |
Gaussian | 5.62±0.11 | 38.21±0.06 | 14.76±0.68 | 81.88 |
+SO | 5.72±0.04 | 42.81±1.14 | 15.55±0.78 | 82.28 |
+GA | 5.48±0.02 | 46.65±1.17 | 16.15±0.78 | 82.54 |
LoRA-GA | 5.95±0.16 | 53.60±0.30 | 19.81±1.46 | 87.77 |
消融实验结果
从表 4 和表 6 可以看出,简单地将 LoRA 的初始化改为 Gaussian 并不会带来性能提升,甚至可能导致性能下降。然而,当与 "+SO"(稳定输出)或 "+GA"(梯度近似)结合时,性能有所提升。LoRA-GA 整合了这两种技术,优于其他方法。此外,图 2(左)和图 4 还显示,+SO 和 +GA 都加速了收敛速度,当两者结合时,训练损失曲线几乎接近全参数微调。这表明,输出稳定性和梯度近似在提升 LoRA 方面各自发挥了重要作用,分别解决了模型性能的不同方面。
5. 结论
在本文中,我们提出了一种新颖的低秩适配 (LoRA) 初始化方案 LoRA-GA,旨在加速其收敛速度。通过分析 LoRA 的初始化方法和更新过程,我们开发了一种新方法 LoRA-GA,该方法从一开始就通过近似低秩矩阵乘积的梯度与完整微调的梯度来加速模型的训练。
通过大量的实验,我们证明了 LoRA-GA 在性能上与完整微调相当,甚至在某些情况下优于原始的 LoRA。由于 LoRA-GA 仅修改了 LoRA 的初始化过程,而不改变模型的架构或训练算法,它提供了一种高效且易于实现的方法。此外,LoRA-GA 还可以与其他 LoRA 变体相结合,例如 ReLoRA [34],它定期将适配器与冻结权重合并,可能允许 LoRA-GA 在更多步骤中展示其优势。我们认为这是未来研究的一个有趣方向。