Geeks_Z の Blog Geeks_Z の Blog
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)

Geeks_Z

AI小学生
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)
  • Python

  • MLTutorials

  • 卷积神经网络

  • 循环神经网络

  • Transformer

  • VisionTransformer

  • 扩散模型

  • 计算机视觉

  • PTM

  • MoE

  • LoRAMoE

  • LongTailed

  • 多模态

  • 知识蒸馏

  • PEFT

    • Survey

    • LoRA

      • LoRA
      • LoRA综述
      • LoRA-GA
        • 文章解读
          • 基础回顾
          • 对齐全量
          • 求解过程
          • 一般结果
          • 实验效果
          • 文章小结
        • ChatGPT全文翻译 ⬇️
        • 0. 摘要
        • 1. 引言
        • 2. 相关工作
          • 2.1 初始化
          • 2.2 参数高效微调(PEFT)
          • 2.3 LoRA 的变体
        • 3. 方法
          • 3.1 LoRA 的回顾
          • LoRA 的初始化
          • 3.2 梯度近似 (Gradient Approximation)
          • 引理 3.1
          • Theorem 3.1
          • 3.3 缩放稳定性 (Scale Stability)
        • 4. 实验
          • 基线方法
          • 4.1 自然语言理解实验
          • 模型和数据集
          • 实现细节
          • 结果
          • 4.2 大语言模型实验
          • 模型与数据集
          • 实现细节
          • 结果
          • 4.3 消融实验 (Ablation Study)
          • 消融实验结果
        • 5. 结论
      • LoRA-Pro
      • LoRA+
      • MoSLoRA
      • AM-LoRA
      • MiLoRA
    • PrefixTuning

    • PromptTuning

    • P-Tuning

    • Adapter

    • Propulsion
  • 对比学习

  • 小样本学习

  • 迁移学习

  • 零样本学习

  • 集成学习

  • Mamba

  • PyTorch

  • CL

  • CIL

  • 小样本类增量学习FSCIL

  • UCIL

  • 多模态增量学习MMCL

  • LTCIL

  • DIL

  • 论文阅读与写作

  • 分布外检测

  • GPU

  • 深度学习调参指南

  • AINotes
  • PEFT
  • LoRA
Geeks_Z
2024-09-01
目录

LoRA-GA

解读来源:对齐全量微调!这是我看过最精彩的LoRA改进(一) (opens new window)

文章解读

众所周知,LoRA是一种常见的参数高效的微调方法。LoRA利用低秩分解来降低微调参数量,节省微调显存,同时训练好的权重可以合并到原始权重上,推理架构不需要作出改变,是一种训练和推理都比较友好的微调方案。此外,https://kexue.fm/archives/10001 (opens new window)还讨论过LoRA的不对称性,指出给A,B 置不同的学习率能取得更好的效果,该结论被称为“LoRA+”。

基础回顾

首先我们再来温习一下LoRA。假设预训练参数为W0∈Rn×m,那么全量微调时的更新量自然也是一个n×m 阵,LoRA将更新量约束为低秩矩阵来降低训练时的参数量,即设W=W0+AB,其中A∈Rn×r,B∈Rr×m 及r≪min(n,m),用新的W 换模型原参数,并固定W0 变,只训练A,B,如下图所示:

为了使得LoRA的初始状态跟预训练模型一致,我们通常会将A,B 一全零初始化,这样可以得到A0B0=0,那么初始的W 是W0。但这并不是必须的,如果A,B 是非全零初始化,那么我们只需要将W 置为

(1)W=(W0−A0B0)+AB

也就是说将固定不变的权重从W0 为W0−A0B0,同样可以满足初始W 于W0 一条件。

需要指出的是,LoRA往往只是显存不足的无奈之选,因为一般情况下全量微调的效果都会优于LoRA,所以如果算力足够并且要追求效果最佳时,请优先选择全量微调。这也是LoRA-GA的假设之一,因为它的改进方向就是向全量微调对齐。使用LoRA的另一个场景是有大量的微型定制化需求,我们要存下非常多的微调结果,此时使用LoRA能减少储存成本。

对齐全量

LoRA-GA提出了一个非常深刻的优化点:通过W=(W0−A0B0)+AB 们可以保证W 初始值等于W0,即初始状态的LoRA与全量微调是等价的,那么我们是否还可以调整A0 B0,使得LoRA和全量微调在后续训练中也尽可能近似?比如最简单地,让经过第一步优化后的W1 可能相等?

越仔细回味,我们会越发现这个优化点是如此“直击本质”——LoRA的目标不就是“以小搏大”,希望能接近全量微调的效果吗?既然如此,尽可能对齐全量微调的后续更新结果,不就是最正确的改进方向?从逼近的角度来看,“W 初始值等于W0”相当于全量微调的零阶近似,保持后面的W1,W2,⋯ 近,则相当于是更高阶的近似,是合情合理的选择。

具体来说,假设我们的优化器是SGD,那么对于全量微调,我们有

(2)W1=W0−η∂L∂W0

其中L 损失函数,η 学习率。如果是LoRA的话,那么有

(3)A1=A0−η∂L∂A0=A0−η∂L∂W0B0⊤,B1=B0−η∂L∂B0=B0−ηA0⊤∂L∂W0W1=W0−A0B0+A1B1≈W0−η(A0A0⊤∂L∂W0+∂L∂W0B0⊤B0)

最后的近似省略了η 二阶项。现在两个W1 有相似的形式,为了让它们尽可能近似,我们可以考虑最小化

(4)arg⁡minA0,B0⁡‖A0A0⊤∂L∂W0+∂L∂W0B0⊤B0−∂L∂W0‖F2

其中‖⋅‖F2 矩阵的Frobenius范数 (opens new window)的平方,即矩阵每个元素的平方和。

求解过程

简单起见,我们记G0=∂L∂W0,那么目标(4) 以简写成

(5)arg⁡minA0,B0⁡‖A0A0⊤G0+G0B0⊤B0−G0‖F2

注意A0A0⊤G0、G0B0⊤B0 秩顶多为r,它们相加后的秩顶多为2r,我们假设2r<min(n,m),所以上述目标相当于寻找G0 一个秩不超过2r 最优近似。

我们先考虑G0 非负对角阵的情形,并且对角线元素已经按照从大到小的顺序排列。这个例子很简单,它的秩不超过2r 最优近似就是只保留对角线前2r 元素的新对角矩阵,这个结论叫做“Eckart-Young定理 (opens new window)”,而能让A0A0⊤G0+G0B0⊤B0 保留G0 前2r 对角线元素的A0,B0 以是(分块矩阵):

A0=(In)[:,:r],B0=(Im)[r:2r,:]

其中In,Im 别是n,m 单位阵,[:,:r] [r:2r,:] 是像Python切片那样,取前r 和第r+1∼2r 。注意我们说的是“可以是”,也就是说解并不唯一,说白了就是要把G0 前2r 对角线元素挑出来,A0A0⊤G0 G0B0⊤B0 挑一半,至于怎么分配就无所谓了。上面给出的解,对应的是A0A0⊤G0 出前r ,G0B0⊤B0 出第r+1∼2r 。

当G0 是对角阵时,我们将它SVD为UΣV,其中U∈Rn×n,V∈Rm×m 正交矩阵,Σ∈Rn×m 对角矩阵,对角线元素非负且从大到小排列。代入式(5) 得到

‖A0A0⊤G0+G0B0⊤B0−G0‖F2=‖A0A0⊤UΣV+UΣVB0⊤B0−UΣV‖F2=‖U[(U⊤A0)(U⊤A0)⊤Σ+Σ(B0V⊤)⊤(B0V⊤)−Σ]V‖F2=‖(U⊤A0)(U⊤A0)⊤Σ+Σ(B0V⊤)⊤(B0V⊤)−Σ‖F2

前两个等号都是简单的代换,第三个等号是因为正交变换不改变Frobenius范数(请读者自行证明一下)。经过这样的转换,我们发现逼近的对象重新转变为对角阵Σ,自变量则变成了U⊤A0、B0V⊤,那么按照G0 对角矩阵时所给出的解,我们得到

A0=U(In)[:,:r]=U[:,:r],B0=(Im)[r:2r,:]V=V[r:2r,:]

一般结果

现在我们就得到了LoRA的一种初始化方法:

LoRA-GA 选取一批样本,计算初始梯度G0=∇W0L,对梯度SVD为G0=UΣV,取U 前r 初始化A,取V 第r+1∼2r 初始化B。

这样LoRA + SGD得到的W1 跟全量微调的W1 可能相近了。此外,梯度最重要的是方向,其模长不大重要,所以初始化结果我们还可以乘以个scale,LoRA本身也可以乘以个scale,即W=(W0−λA0B0)+λAB,这些都是LoRA常见的超参数,这里就不展开讨论了。顺便提一下,形式上跟LoRA-GA比较相似的是PiSSA (opens new window),它是对W0 SVD来初始化A,B,这在理论支持上就不如LoRA-GA了,是一个纯粹的经验选择。

当然,可能有读者会发现目前的推导都是基于SGD优化器的假设,那么对于我们更常用的Adam优化器,结论是否要做出改变呢?理论上是要的。我们在《配置不同的学习率,LoRA还能再涨一点?》 (opens new window)讨论过,对于Adam来说,第一步优化结果是W1=W0−ηsign(G0) 不是W1=W0−ηG0,这样重复前面的推导,我们可以得到优化目标为

(9)arg⁡minA0,B0⁡‖A0sign(A0⊤G0)+sign(G0B0⊤)B0−sign(G0)‖F2

由于符号函数sign 存在,我们没法求出它的解析解,所以针对Adam的理论分析就只能止步于此了。

在这个背景下,对于Adam优化器,我们有三个选择:

1、信仰:直接引用SGD的结果,相信它也可以在Adam中发挥同样的效果;
2、硬刚:用优化器直接去最小化目标(9),由于目标比较简单,计算量尚能接受;
3、投机:直觉上将G0 成sign(G0),然后代入SGD的结论,可能更贴合Adam。

看起来原论文选择的是第1个方案,论文的实验结果确实也支持这一选择。

实验效果

论文的实验结果还是比较惊艳的,尤其是在GLUE上取得了最接近全量微调的效果:

20240206105857

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

在LLAMA2-7b上的表现也可圈可点:

20240206105857

注意使用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 固定。修改后的层表示为:

y=(W+ηBA)x

其中,x 是该层的输入,y 是输出,η 是缩放因子。这种方法显著减少了需要微调的参数数量,从而降低了每一步的计算和内存成本。

尽管 LoRA 具有这些优势,但大量实验证据表明(参见 [6, 7, 8, 9]),LoRA 的收敛速度显著慢于全微调。这种较慢的收敛速度往往会增加总体计算成本(以浮点运算数 (FLOPs) 衡量),并且有时会导致较差的测试性能。在我们的实验中,我们通常观察到 LoRA 需要 5-6 倍的迭代次数和 FLOPs 才能在相同的学习率下达到与全微调相同的性能,如图 1 所示。

为了研究收敛缓慢的原因,我们对 LoRA 适配器权重的初始化策略进行了深入研究。已知使用相同目标(例如语言模型)微调预训练模型通常比重新初始化新参数(例如分类头)收敛得更快 [10]。这一观察促使我们质疑,LoRA 的默认随机初始化适配器权重(LoRA 使用 Kaiming 初始化 [11],并将 B 设为零 [4])是否是导致其收敛缓慢的原因。在我们的实验中,我们发现不同的 LoRA 初始化策略会显著影响结果,且默认初始化效果不佳。

为了实现与全微调相当的收敛速度,我们的目标是使 BA 的更新与 W 的更新尽可能接近。先前的研究表明,梯度下降在低维子空间中进行 [12, 13]。如果我们能在初始步骤中准确近似完整模型的梯度,则后续步骤也可以得到近似,从而加速 LoRA 的收敛。

为此,我们引入了一种新颖的初始化方法,LoRA-GA(低秩梯度近似)。通过用完整梯度矩阵的特征向量初始化 Ainit 和 Binit,低秩矩阵积 BA 的梯度可以与完整权重矩阵 W 的梯度方向对齐。数学上,我们的目标是确保:

Δ(BA)≈ζΔW

其中 ζ 是一个非零的正常数。

我们的贡献可以总结如下:

  1. 我们提出了 LoRA-GA,这是一种新颖的 LoRA 初始化方法,通过近似低秩矩阵的梯度与完整权重矩阵的梯度加速收敛。
  2. 我们确定了非零初始化下的缩放因子,确保适配器输出的方差与适配器的秩和输入的维度无关。
  3. 我们通过广泛的实验验证了 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] 提出了使用两个低秩矩阵的乘积来表示原始矩阵 W 的增量部分。这里,W 是模型中某一线性层的权重矩阵。例如,在 Transformer 中,它可以是自注意力层中的 Q、K、V 或 O 矩阵,或是 MLP 层中的权重矩阵。具体而言,LoRA 的数学表达形式如下:

W′=W0+ΔW=W0+αrBA:=W0+ηBA

其中 W′,W0∈Rm×n,B∈Rm×r,A∈Rr×n,并且 r≪min(m,n)。W0 是预训练的权重矩阵,在微调过程中保持冻结,而 A 和 B 是可训练的。

LoRA 的初始化

在 LoRA 的默认初始化方案 [4, 38] 中,矩阵 A 使用 Kaiming 均匀初始化 [11],而矩阵 B 初始化为全零。因此,BA=0,并且初始权重矩阵 W0′=W0,确保初始参数保持不变。

如果额外的项 ΔW=ηBA 最初是非零的(例如 [37]),则可以调整冻结参数以确保初始参数不变。这可以表达为:

W′=(W0−ηBinitAinit)+ηBA:=Wfrozen+ηBA

其中,Wfrozen=W0−ηBinitAinit 是冻结的,B 和 A 在这种情况下是可训练的。

3.2 梯度近似 (Gradient Approximation)

我们的目标是确保第一步更新 Δ(ηBA) 近似于权重更新 ΔW 的方向,即:

Δ(ηBA)≈ζΔW

其中 ζ 是某个非零正数。在第 3.3 节中我们将讨论如何选择 ζ,在此可以先将 ζ 视为一个固定常数。

考虑一个学习率为 λ 的梯度下降步骤,A 和 B 的更新分别为 ΔA=λ∇AL(Ainit) 和 ΔB=λ∇BL(Binit)。假设学习率 λ 较小,第一步时 ηBA 的更新可以表示为:

η(ΔBAinit+BinitΔA)=ηλ[∇BL(Binit)Ainit+Binit∇AL(Ainit)]

为了衡量其与完整微调的缩放更新 ζΔW=ζλ∇WL(W0) 的近似质量,我们使用这两个更新之间的 Frobenius 范数差异作为标准:

∥η(ΔBAinit+BinitΔA)−ζλ∇WL(W0)∥F=λ∥η∇BL(Binit)Ainit+ηBinit∇AL(Ainit)−ζ∇WL(W0)∥F

引理 3.1

假设损失函数为 L,且 y=W′x=(W0+ηBA)x,其中 y 是该层的输出,x 是输入,A 和 B 的梯度是 W′ 梯度的线性映射:

∇AL=BT∇W′L,∇BL=(∇W′L)AT

通过将引理 3.1 中的梯度代入公式 (1),我们可以将判准重写为:

λ∥η2∇W′L(W0)⋅AinitTAinit+η2BinitBinitT⋅∇WL(W0)−ζ∇WL(W0)∥F

该判准评估适配器的梯度与完整微调梯度方向的近似程度,最小化它可以使 LoRA 的梯度与完整微调的梯度更接近,并带有缩放因子 ζ:

minAinit,Binit∥η2∇WL⋅AinitTAinit+η2BinitBinitT⋅∇WL−ζ∇WL∥F

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 当 dout,din,r→∞ 时,适配器 ηBA 表现出两种不同类型的缩放稳定性:

  1. 前向稳定性:如果适配器的输入是独立同分布 (i.i.d.) 且具有 2 阶矩 Θr,dout,din(1),则其输出的 2 阶矩保持 Θr,dout,din(1)。

  2. 后向稳定性:如果适配器输出的损失梯度是 Θr,dout,din(1),则相对于输入的梯度保持 Θr,dout,din(1)。

定理 3.2 给定定理 3.1 中提出的初始化,假设 Ainit 和 Binit 中的正交向量从单位球体中随机选取,并且 η=Θr,dout,din(1/r),则适配器在缩放稳定性方面符合以下条件:

  1. 当 ζ=Θr,dout,din(dout/r2) 时,适配器是前向缩放稳定的;
  2. 当 ζ=Θr,dout,din(din/r2) 时,适配器是后向缩放稳定的。

与 Kaiming 初始化 [11] 的结果类似,我们观察到无论是 ζ=Θr,dout,din(dout/r2) 还是 ζ=Θr,dout,din(din/r2) 均可单独工作并确保收敛。因此,在所有后续实验中,我们采用 ζ=Θr,dout,din(dout/r2)。

4. 实验

在本节中,我们评估了 LoRA-GA 在各种基准数据集上的性能。首先,我们使用 T5-Base 模型评估了自然语言理解(NLU)能力,测试了 GLUE 数据集的一个子集 [14]。随后,我们使用 Llama 2-7B 模型评估对话 [16, 40]、数学推理 [17, 41] 和编程能力 [18, 42]。最后,我们进行了消融实验,证明了我们方法的有效性。

基线方法

为了证明 LoRA-GA 的有效性,我们与以下几种基线方法进行了对比:

  1. 全参数微调(Full-Finetune):使用所有参数进行微调,所需资源最多。
  2. 原始 LoRA [4]:通过在线性层中插入低秩矩阵积 BA 进行微调。A 使用 Kaiming 初始化,B 初始化为零。
  3. 保持原有结构的 LoRA 变体:包括几种保持原始 LoRA 结构的方法:
    • rsLoRA [36] 引入了一个新的缩放因子,以稳定 LoRA 的输出。
    • LoRA+ [35] 为 LoRA 中的两个矩阵使用不同的学习率进行更新。
    • PiSSA [37] 在训练开始时对权重矩阵 W 进行 SVD,并根据较大奇异值初始化 A 和 B。
  4. 修改结构的 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]。我们使用这些数据集来评估模型在处理多样性和复杂性任务上的表现。

实现细节

我们使用与自然语言理解实验中相似的提示调优技术,并根据任务类型对生成超参数进行了适当的调整(例如,在对话任务中使用 topp=0.95 和温度 T=0.8)。每个实验使用 3 个不同的随机种子进行,并报告了平均性能。

结果

表 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" 指的是梯度近似,其中 A 和 B 是通过奇异值分解初始化的正交矩阵。

方法 A 初始化 B 初始化 η
LoRA U(−3/din,3/din) 0 α/r
Gaussian N(0,1/dout) N(0,1/din) α/r
+SO dout4/γ⋅N(0,1/dout) dout4/γ⋅N(0,1/din) α/r
+GA V[1:r] U[r+1:2r] α/r
LoRA-GA V[1:r]⋅dout4/γ U[r+1:2r]⋅dout4/γ α/r

表 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 在更多步骤中展示其优势。我们认为这是未来研究的一个有趣方向。

上次更新: 2025/06/25, 11:25:50
LoRA综述
LoRA-Pro

← LoRA综述 LoRA-Pro→

最近更新
01
帮助信息查看
06-08
02
常用命令
06-08
03
学习资源
06-07
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Geeks_Z | MIT License
京公网安备 11010802040735号 | 京ICP备2022029989号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式