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
      • LoRA-Pro
        • 文章解读
          • 对齐全量
          • 逐步对齐
          • 简化目标
          • 完整结果
          • 最优参数
          • 一般讨论
          • 实验结果
          • 文章小结
        • ChatGPT全文翻译 ⬇️
        • 0. 摘要
        • 1. 引言
        • 2. 相关工作
          • 2.1 参数高效微调
          • 2.2 低秩适应
        • 3. 方法
          • 3.1 回顾低秩适应
          • 3.2 LoRA 与完整微调的比较
          • 3.3 等效梯度的低秩适应
        • 4. 实验结果
        • 5. 结论
      • 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-Pro

  • 解读来源:对齐全量微调!这是我看过最精彩的LoRA改进(二) (opens new window)
  • 文章:LoRA-Pro: Are Low-Rank Adapters Properly Optimized? (opens new window)

文章解读

“LoRA-GA”通过梯度SVD来改进LoRA的初始化,从而实现LoRA与全量微调的对齐。当然,从理论上来讲,这样做也只能尽量对齐第一步更新后的W1,LoRA-Pro同样是想着对齐全量微调,但它对齐的是每一步梯度,从而对齐整条优化轨迹,这正好是跟LoRA-GA互补的改进点。

对齐全量

LoRA的参数化方式是

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

其中W0∈Rn×m 预训练权重,A∈Rn×r,B∈Rr×m 新引入的训练参数,A0,B0 它们的初始化值。 上一节我们说到,全量微调很多时候效果都优于LoRA,所以全量微调就是LoRA最应该对齐的方向。为了定量描述这一点,我们分别写出全量微调和LoRA微调在SGD下的优化公式,结果分别是

(2)Wt+1=Wt−ηGt

和

(3)At+1=At−ηGA,t=At−ηGtBt⊤,Bt+1=Bt−ηGB,t=Bt−ηAt⊤GtWt+1=Wt−AtBt+At+1Bt+1≈Wt−η(AtAt⊤Gt+GtBt⊤Bt)

其中L 损失函数,η 学习率,还有Gt=∂L∂Wt、GA,t=∂L∂At=∂L∂WtBt⊤=GtBt⊤ 及GB,t=∂L∂Bt=At⊤∂L∂Wt=At⊤Gt。

LoRA-GA的想法是,我们至少要让全量微调和LoRA的W1 可能相近,于是它最小化目标

(4)argminA0,B0⁡‖A0A0⊤G0+G0B0⊤B0−G0‖F2

其最优解可以通过对G0 行SVD求得,这样我们就可以求出最优的A0,B0 为A,B 初始化。

逐步对齐

LoRA-Pro的想法更彻底,它希望对齐全量微调和LoRA的每一个Wt。可是要怎样才能做到这一点呢?难道每一步都要最小化‖AtAt⊤Gt+GtBt⊤Bt−Gt‖F2 ? 这显然是不对的,因为At,Bt 由优化器根据At−1,Bt−1 它们的梯度确定的,并不是可自由调节的参数。

看上去已经没有能够让我们修改的地方了?不,LoRA-Pro非常机智地想到:既然“At,Bt 由优化器根据At−1,Bt−1 它们的梯度确定的”,后面的At−1,Bt−1 梯度我们都没法改,那我们还可以改优化器呀!具体来说,我们将At,Bt 更新规则改为:

(5)At+1=At−ηHA,tBt+1=Bt−ηHB,t

其中HA,t,HB,t 定,但它们的形状跟A,B 致。现在可以写出

(6)Wt+1=Wt−AtBt+At+1Bt+1≈Wt−η(HA,tBt+AtHB,t)

这时候我们就可以调整HA,t,HB,t,让这个Wt+1 SGD的Wt+1 可能相近了:

(7)argminHA,t,HB,t⁡‖HA,tBt+AtHB,t−Gt‖F2

下面我们来求解这个优化问题。简单起见,在求解过程中我们省略下标t,即考虑

(8)argminHA,HB⁡‖HAB+AHB−G‖F2

简化目标

由于HA,HB 间没有约束,所以HA,HB 优化是独立的,因此我们可以采取先优化HA 优化HB 策略(当然反过来也可以)。当我们优化HA ,HB 相当于是常数,为此,我们可以先考虑如下简化的等价命题

(9)argminH⁡‖HB−X‖F2

其中H∈Rn×r,B∈Rr×m,X∈Rn×m。如果r=m B 逆,那么我们直接可以变为解方程组HB=X,即H=XB−1。当r<m ,我们就要诉诸优化手段,注意到HB−X 于H 线性的,所以这实质就是线性回归的最小二乘问题,它是有解析解的,答案是

(10)H=XB⊤(BB⊤)−1

其中B⊤(BB⊤)−1 是矩阵B “伪逆 (opens new window)”。不了解这个答案也不要紧,我们现场推一下。首先,记l=‖HB−X‖F2,直接求H 导数得到

(11)∂l∂H=2(HB−X)B⊤=2(HBB⊤−XB⊤)

然后让它等于零就可以解出式(10)。可能有些读者不大了解矩阵求导法则,其实根据求导的链式法则,我们就不难想到∂l∂H 2(HB−X) B 某种方式相乘起来,然后我们约定∂l∂H 形状跟H 样,即n×r,那么由2(HB−X) B 乘来凑出一个n×r 结果,也只有2(HB−X)B⊤ 。

同理,‖AH−X‖F2 H 导数就是2A⊤(AH−X),由此可以得到

(12)argminH⁡‖AH−X‖F2⇒H=(A⊤A)−1A⊤X

完整结果

有了结论(10) (12),我们就可以着手求解(8) 。首先我们固定HB,那么根据式(10) 到

(13)HA=(G−AHB)B⊤(BB⊤)−1

注意式(8) 目标函数具有一个不变性:

(14)‖HAB+AHB−G‖F2=‖(HA+AC)B+A(HB−CB)−G‖F2

其中C 任意r×r 矩阵。也就是说,HA 解可以加/减任意具有AC 式的矩阵,只需要HB /加对应的CB 行。根据该性质,我们可以将式(13) HA 化成

(15)HA=GB⊤(BB⊤)−1

代回目标函数得

(16)argminHB⁡‖AHB−G(I−B⊤(BB⊤)−1B)‖F2

根据式(12)

(17)HB=(A⊤A)−1A⊤G(I−B⊤(BB⊤)−1B)

留意到GB⊤,A⊤G 好分别是A,B 梯度GA,GB,以及再次利用前述不变性,我们可以写出完整的解

(18){HA=GA(BB⊤)−1+ACHB=(A⊤A)−1GB(I−B⊤(BB⊤)−1B)−CB

最优参数

至此,我们求解出了HA,HB 形式,但解不是唯一的,它有一个可以自由选择的参数矩阵C。我们可以选择适当的C,来使得最终的HA,HB 备一些我们所期望的特性。

比如,现在HA,HB 不大对称的,HB 了−(A⊤A)−1GBB⊤(BB⊤)−1B 一项,我们可以将它平均分配到HA,HB ,使得它们更对称一些,这等价于选择C=−12(A⊤A)−1GBB⊤(BB⊤)−1:

(19){HA=[I−12A(A⊤A)−1A⊤]GA(BB⊤)−1HB=(A⊤A)−1GB[I−12B⊤(BB⊤)−1B]

这个C 是如下两个优化问题的解:

(20)argminC⁡‖HAB−AHB‖F2(21)argminC⁡‖HAB−G‖F2+‖AHB−G‖F2

第一个优化目标可以理解为让A,B 最终效果的贡献尽可能一样,这跟《配置不同的学习率,LoRA还能再涨一点?》 (opens new window)的假设有一定异曲同工之处,第二个优化目标则是让HAB、AHB 尽可能逼近完整的梯度G。以l=‖HAB−AHB‖F2 例,直接求导得

(22)∂l∂C=4A⊤(HAB−AHB)B⊤=4A⊤[GA(BB⊤)−1B+2ACB]B⊤

令它等于零我们就可以解出同样的C,化简过程比较关键的两步是[I−B⊤(BB⊤)−1B]B⊤=0 及A⊤GA=GBB⊤。

LoRA-Pro选择的C 有不同,它是如下目标函数的最优解

(23)argminC⁡‖HA−GA‖F2+‖HB−GB‖F2

这样做的意图也很明显:HA,HB 用来取代GA,GB ,如果在能达到相同效果的前提下,相比GA,GB 改动尽可能小,不失为一个合理的选择。同样求C 导数并让其等于零,化简可得

(24)A⊤AC+CBB⊤=−A⊤GA(BB⊤)−1

现在我们得到关于C 一个方程,该类型的方程叫做“Sylvester方程 (opens new window)”,可以通过外积符号写出C 解析解,但没有必要,因为直接数值求解的复杂度比解析解的复杂度要低,所以直接数值求解即可。总的来说,这些C 选择方案,都是在让HA,HB 某种视角下更加对称一些,虽然笔者没有亲自做过对比实验,但笔者认为这些不同的选择之间不会有太明显的区别。

一般讨论

我们来捋一捋到目前为止我们所得到的结果。我们的模型还是常规的LoRA,目标则是希望每一步更新都能逼近全量微调的结果。为此,我们假设优化器是SGD,然后对比了同样Wt 全量微调和LoRA所得的Wt+1,发现要实现这个目标,需要把更新过程中A,B 梯度GA,GB 成上面求出的HA,HB。

接下来就又回到优化分析中老生常谈的问题:前面的分析都是基于SGD优化器的,但实践中我们更常用的是Adam,此时要怎么改呢?如果对Adam优化器重复前面的推导,结果就是HA,HB 的梯度G 换成全量微调下Adam的更新方向U。然而,U 要用全量微调的梯度G 照Adam的更新规则计算而来,而我们的场景是LoRA,无法获得全量微调的梯度,只有A,B 梯度GA,GB。

不过我们也可以考虑一个近似的方案,前述HAB+AHB 优化目标就是在逼近G,所以我们可以用它来作为G 近似来执行Adam,这样一来整个流程就可以走通了。于是我们可以写出如下更新规则

估计梯度更新投影到(25)GA=∂L∂At−1,GB=∂L∂Bt−1HA=GA(BB⊤)−1HB=(A⊤A)−1GB(I−B⊤(BB⊤)−1B)G~=HAB+AHB}估计梯度Mt=β1Mt−1+(1−β1)G~Vt=β2Vt−1+(1−β2)G~2M^t=Mt1−β1t,V^t=Vt1−β2t,U=M^tV^t+ϵ}Adam更新UA=UB⊤,UB=A⊤UH~A=UA(BB⊤)−1+ACH~B=(A⊤A)−1UB(I−B⊤(BB⊤)−1B)−CB}投影到A,BAt=At−1−ηH~ABt=Bt−1−ηH~B

这也是LoRA-Pro最终所用的更新算法(更准确地说,LoRA-Pro用的是AdamW,结果稍复杂一些,但并无实质不同)。然而,且不说如此改动引入的额外复杂度如何,这个算法最大的问题就是它里边的滑动更新变量M,V 全量微调一样都是满秩的,也就是说它的优化器相比全量微调并不省显存,仅仅是通过低秩分解节省了参数和梯度的部分显存,这相比常规LoRA的显存消耗还是会有明显增加的。

一个比较简单的方案(但笔者没有实验过)就是直接用HA,HB 代GA,GB,然后按照常规LoRA的Adam更新规则来计算,这样M,V 形状就跟相应的A,B 致了,节省的显存达到了最大化。不过此时的Adam理论基础不如LoRA-Pro的Adam,更多的是跟《对齐全量微调!这是我看过最精彩的LoRA(一)》 (opens new window)一样,靠“SGD的结论可以平行应用到Adam”的信仰来支撑。

实验结果

LoRA-Pro在GLUE上的实验结果更加惊艳,超过了全量微调的结果:

不过论文也就只有这个实验了。看上去LoRA-Pro成文比较仓促,可能是看到LoRA-GA后觉得“撞车”感太明显,所以先赶出来占个坑吧。笔者刚刷到LoRA-Pro时,第一反应也是跟LoRA-GA撞车了,但仔细阅读之下才发现,它跟LoRA-GA实际上是同一思想下互补的结果。

从LoRA-Pro的结果来看,它包含了A⊤A BB⊤ 求逆,所以很明显A,B 一就不能用全零初始化了,比较符合直觉的正交初始化,即让初始的A⊤A,BB⊤ 单位阵(的若干倍)。刚好从《对齐全量微调!这是我看过最精彩的LoRA(一)》 (opens new window)我们可以看到,LoRA-GA给出的初始化正好是正交初始化,所以LoRA-Pro跟LoRA-GA可谓是“最佳搭档”了。

文章小结

本文介绍了另一个对齐全量微调的工作LoRA-Pro,它跟上一篇的LoRA-GA正好是互补的两个结果,LoRA-GA试图通过改进初始化来使得LoRA跟全量微调对齐,LoRA-Pro则更彻底一些,它通过修改优化器的更新规则来使得LoRA的每一步更新都尽量跟全量微调对齐,两者都是非常精彩的LoRA改进,都是让人赏心悦目之作。

ChatGPT全文翻译 ⬇️

0. 摘要

低秩适应(LoRA)已成为通过将原始矩阵重新参数化为两个低秩矩阵的乘积来进行参数高效微调基础模型的主要方法。尽管其效率较高,但 LoRA 的性能通常不如完整微调。本文提出了一种方法,称为 LoRA-Pro,以缩小这种性能差距。

首先,我们深入研究了 LoRA 和完整微调的优化过程。我们揭示了尽管 LoRA 采用低秩近似,但它忽略了完整微调的优化过程。为了解决这一问题,我们引入了一个新概念,称为“等效梯度”,该虚拟梯度使重新参数化矩阵的优化过程等效于 LoRA,并可用于量化 LoRA 与完整微调之间的差异。等效梯度是从矩阵 A 和 B 的梯度推导出的。为了缩小性能差距,我们的方法在优化过程中最小化等效梯度与从完整微调中获得的梯度之间的差异。通过解决该目标,我们推导出更新矩阵 A 和 B 的最优闭合解。我们的方法约束了优化过程,缩小了 LoRA 与完整微调之间的性能差距。

在自然语言处理任务上的广泛实验验证了我们方法的有效性。


1. 引言

基础模型 [1-5] 已经成为现代深度学习的基石。通过在大规模数据集上进行预训练,这些模型通常表现出卓越的泛化能力和多功能性。令人瞩目的是,某些基础模型甚至展示了突现属性 [6-7]。因此,基础模型已广泛应用于各种下游任务。

尽管这些优势明显,但基础模型庞大的参数数量限制了它们的广泛应用。庞大的参数量使得这些任务的微调成本非常高。为了应对此问题,近期研究集中在参数高效微调(PEFT)方法 [8-11]。PEFT 方法通过冻结基础模型并仅微调小规模的轻量化适配器,降低了微调成本。在大多数参数被冻结的情况下,PEFT 实现了更快的微调,并且需要更少的计算资源。

低秩适应 [8],也称为 LoRA,是最著名的 PEFT 方法之一,已在各个领域得到广泛采用。受以往工作的启发 [12-13],LoRA 假设模型适应过程中权重的变化表现出低秩结构。为了捕捉这一点,LoRA 通过将这些变化表示为两个低秩矩阵的乘积来重新参数化它们:W=W0+ΔW≈W0+sBA,其中 s 是一个缩放因子,A∈Rr×n 和 B∈Rm×r 是秩为 r≪min(m,n) 的低秩矩阵。LoRA 将可训练的参数数量从 m×n 减少到 r×(m+n),从而降低了微调成本。然而,尽管 LoRA 效率高,它的微调性能通常不如完整微调 [8, 14-16]。

本文提出了一种新型 PEFT 方法,称为 LoRA-Pro,旨在缩小 LoRA 与完整微调之间的性能差距。尽管 LoRA 通过重新参数化权重变化为两个低秩矩阵的乘积来进行低秩近似,但它未能在优化过程中逼近完整微调。为了衡量它们在优化过程中的差异,我们提出了一种新颖的概念,即 LoRA 优化的“等效梯度”。等效梯度描述了低秩近似后原始矩阵的梯度(尽管它不可直接训练),由矩阵 A 和 B 的梯度组成。因此,在 LoRA 微调过程中,我们的目标不仅是用低秩矩阵逼近原始矩阵,还要在梯度下降过程中最小化等效梯度与完整微调梯度之间的差异。这是通过为矩阵 A 和 B 选择合适的梯度来实现的,确保微调过程更加准确和高效。为此,我们将其形式化为一个优化问题,然后推导出该问题的理论解,给出更新矩阵 A 和 B 的最优梯度解。这些解确保等效梯度与完整微调的优化动态密切匹配。通过这种方式,我们增强了 LoRA 的有效性,缩小了 LoRA 与完整微调之间的性能差距。

我们的主要贡献总结如下:

  • 我们发现 LoRA 逼近了低秩矩阵,但未能逼近完整参数微调的优化过程。这一缺陷是 LoRA 与完整微调之间性能差距的原因之一。
  • 我们引入了等效梯度的概念,使我们能够量化 LoRA 与完整微调之间的优化过程差异。通过最小化这种差异,我们推导出了 LoRA 的最优闭合更新解。
  • 在自然语言处理任务上的广泛实验验证了我们方法的有效性。

2. 相关工作

2.1 参数高效微调

由于基础模型的巨大规模,近年来的研究重点集中在开发参数高效的微调方法 [8-11, 14-16]。这些方法旨在通过只调整模型的一小部分参数来降低微调的成本。通常,这些方法可以分为两类。

第一类是适配器微调 [9, 10, 17-20],其核心思想是在模型的特定层中插入一些小型的神经网络模块,称为适配器。在微调过程中,模型的主体部分保持冻结,只有轻量化的适配器模块被微调,从而显著减少了微调的内存占用。

第二类是提示微调 [11, 21-24]。提示微调通过在输入数据中添加专门设计的提示或可学习的标记来适应特定任务,而不是直接修改基础模型的内部参数。

本文我们关注的是低秩适应(LoRA) [8],它是适配器微调领域内一个著名的方法。

2.2 低秩适应

低秩适应,最初称为 LoRA [8],已演变为一个广泛的类别,涵盖基于低秩近似的参数高效微调方法 [8, 14-16, 25-33]。LoRA 假设预训练模型权重的变化表现出低秩结构。因此,它将这些变化重新参数化为低秩矩阵的乘积,从而减少了微调的成本。

针对该方法的不同方面,已经提出了多个 LoRA 的变体。例如,DoRA [14] 通过引入一个可学习的幅度向量来重新缩放低秩矩阵的归一化乘积,从而改进了 LoRA [8]。另一个变体 rsLoRA [27] 引入了一个新的缩放因子,以稳定高秩场景下的训练。LoRA+ [28] 通过对两个低秩矩阵应用不同的学习率,进一步改进了 LoRA。此外,Galore [33] 通过将完整参数训练的梯度投影到低秩空间,减少了预训练和微调过程中的内存占用。


3. 方法

在本节中,我们首先回顾 LoRA [8](第 3.1 节)。接下来,我们从优化的角度对比了 LoRA 和完整微调(第 3.2 节)。最后,在第 3.3 节中,我们指出 LoRA 在优化过程中未能逼近完整微调,并提出 LoRA-Pro 作为解决方案,以缩小这一性能差距。

3.1 回顾低秩适应

首先,让我们回顾一下低秩适应(LoRA) [8]。LoRA 的核心思想围绕着识别标准微调过程中变化矩阵 ΔW 的低秩结构展开。这个洞见使得 LoRA [8] 可以将变化矩阵重新参数化为两个低秩矩阵的乘积:

(1)W=W0+ΔW=W0+sBA

这里,W0∈Rm×n 表示预训练的权重矩阵,B∈Rm×r 和 A∈Rr×n 是低秩矩阵,s 是缩放因子。对于 LoRA [8],s=αr,而对于 rsLoRA [

27],s=αr。这里,α 是超参数,r≪min(m,n) 表示秩。因此,LoRA 将微调参数的数量从 m×n 大幅减少至 r×(m+n)。

3.2 LoRA 与完整微调的比较

尽管 LoRA 在多个领域得到了广泛的应用,但其性能仍然不如完整微调。在本节中,我们回顾并比较了 LoRA 和完整微调的优化过程。在完整微调中,我们使用微分来分析损失变化与权重变化之间的关系:

(2)dL=⟨∂L∂W,dW⟩F

其中,dL 和 dW 分别表示参数 W 和损失 L 的变化,∥⋅∥F 是 Frobenius 范数。为了最小化损失函数,我们通常设置 dW=−∂L∂W≡−g(为简化省略学习率),这导致 dL=−∥∂L∂W∥F2≤0。

在 LoRA 优化中,给定 W=W0+sBA,我们使用链式法则计算微分:

(3)dL=⟨∂L∂W,dW⟩F=⟨∂L∂W,∂W∂ATdA+∂W∂BTdB⟩F=⟨∂L∂A,dA⟩F+⟨∂L∂B,dB⟩F

类似地,LoRA 设置 dA=−∂L∂A≡−gALoRA 和 dB=−∂L∂B≡−gBLoRA,因此 dL=−∥∂L∂A∥F2−∥∂L∂B∥F2≤0。进一步地,通过链式法则我们推导出:

(4)gALoRA=∂L∂W∂W∂A=sBTg,gBLoRA=∂L∂W∂W∂B=sgAT

3.3 等效梯度的低秩适应

定义 3.1(等效梯度)

在 LoRA 优化的背景下,我们定义等效梯度为:

(5)g~≡∂W∂ATgA+∂W∂BTgB=sBgA+sgBA

其中,s 是缩放因子,gA 和 gB 分别是 A 和 B 的梯度。

从公式 (3) 中我们可以看到,矩阵 A 和 B 的变化通过链式法则与矩阵 W 的变化紧密相连:

(6)dW=∂W∂ATdA+∂W∂BTdB=−(sBgALoRA+sgBLoRAA)

相比于完整微调,这相当于使用等效梯度 g~=sBgALoRA+sgBLoRAA 来更新 W。然而,在 LoRA 的优化过程中,这一关键关系被忽视了。因此,我们假设通过精心调整 A 和 B 的梯度,使得 LoRA 下的等效梯度 g~ 能够逼近完整微调的梯度 g,就可以有效地缩小 LoRA 与完整微调之间的性能差距。

基于这一关系,我们在定义 1 中引入了等效梯度的概念。等效梯度描述了低秩适应后矩阵 W 的梯度,尽管 W 不是可训练的参数。为了缩小性能差距,我们的目标是精心选择合适的 gA 和 gB,以最小化等效梯度 g~ 和完整微调梯度 g 之间的距离。因此,我们的目标函数为:

(7)mingA,gB∥g~−g∥F2s.t.g~=sBgA+sgBA,dL≤0

定理 3.1

假设矩阵 B∈Rm×r 和 A∈Rr×n 都是满秩的。对于目标函数 mingA,gB∥g~−g∥F2,其解为:

(8)gA=1s(BTB)−1BTg+XA=1s2(BTB)−1gALoRA+XA(9)gB=1s[I−B(BTB)−1BT]gAT(AAT)−1−BX=1s2[I−B(BTB)−1BT]gBLoRA(AAT)−1−BX

其中,X∈Rr×r 是一个任意矩阵。


闭式解

幸运的是,目标函数 (7) 有一个闭式解。根据定理 3.1,我们得到了更新矩阵 A 和 B 的最优梯度,确保等效梯度能够最好地逼近完整微调的梯度。此外,我们还发现 gA 和 gB 可以分别表示为 gALoRA 和 gBLoRA,这表明我们并不显式地拥有完整微调的梯度 g。因此,我们的方法是在 LoRA 的标准反向传播中调整 A 和 B 的梯度,并使用定理 3.1 中的闭式解来进行更新。


定理 3.2

在使用定理 3.1 的闭式解更新矩阵 A 和 B 时,我们的更新步骤如下:

(10)A←A−γgA(11)B←B−γgB

其中,γ≥0 表示学习率。我们的方法确保了损失的下降,与标准的梯度下降算法类似,其表达式为:

(12)dL=−γ{⟨gALoRA,1s2(BTB)−1gALoRA⟩F+⟨gBLoRA,1s2[I−B(BTB)−1BT]gBLoRA(AAT)−1⟩F}≤0

尽管定理 3.1 提供了优化问题 mingA,gB∥g~−g∥F2 的闭式解,但这并不意味着使用该解更新 A 和 B 就会减少损失。为了解决这一问题,我们有了定理 3.2,它确保在优化过程中损失会减少。该定理表明,损失的变化 dL 可以表达为两个正定二次型的和与一个负标量的乘积。这个关系确保了在更新过程中 dL≤0,从而持续推动优化过程朝着更低的损失前进。

定理 3.3

考虑优化问题:

(13)minX∥gA−gALoRA∥F2+∥gB−gBLoRA∥F2

其中,gA 和 gB 是定理 3.1 中的最优解。最优 X 可以通过解 Sylvester 方程得到:

(14)BTBX+XAAT=−1s2(BTB)−1gALoRAAT

当且仅当 BTB 和 −AAT 没有共享特征值时,该方程有唯一解。


X 的选择

虽然等效梯度本身与矩阵 X 没有直接关系,但 X 在更新矩阵 A 和 B 时起到了重要作用。我们选择适当的 X,使得 gA 和 gB 分别接近 gALoRA 和 gBLoRA。因此,我们最小化它们的 Frobenius 范数,如公式 (13) 所示。在实际操作中,BTB 和 AAT 通常没有共同特征值。因此,根据定理 3.3,我们可以确定唯一的最优 X 来更新矩阵 A 和 B。


4. 实验结果

在本节中,我们评估了我们提出的 LoRA-Pro 方法在多个自然语言理解数据集上的表现。为了提供全面的对比,我们包含了以下基线方法:1)完整微调和标准 LoRA [8];2)保持原始结构的 LoRA 变体,如 rsLoRA [27]、LoRA+ [28]、PiSSA [34];3)结构上有改动的 LoRA 变体,包括 DoRA [14] 和 AdaLoRA [35]。

结果如表 1 所示。我们在 GLUE 数据集的一个子集上微调了 T5-base 模型 [36]。从表 1 中可以看出,LoRA-Pro 在 5 个数据集中的 3 个数据集上取得了最高分数,并且在所有 5 个数据集上的平均得分也最高。此外,平均来看,LoRA-Pro 相较于标准 LoRA [8] 提升了 6.72 分。这些结果验证了我们方法的有效性。


表 1:在 GLUE 数据集的子集上使用 T5-base 进行微调的结果(完整微调和 LoRA 变体)。

方法 MNLI SST2 CoLA QNLI MRPC 平均分数
完整微调 86.33±0.00 94.75±0.21 80.70±0.24 93.19±0.22 84.56±0.73 87.91
LoRA 85.30±0.04 94.04±0.11 69.35±0.05 92.96±0.09 68.38±0.01 82.08
PiSSA 85.75±0.07 94.07±0.06 74.27±0.39 93.15±0.14 76.31±0.51 84.71
rsLoRA 85.73±0.10 94.19±0.23 72.32±1.12 93.12±0.09 52.86±2.27 79.64
LoRA+ 85.81±0.09 93.85±0.24 77.53±0.20 93.14±0.03 74.43±1.39 84.95
DoRA 85.67±0.09 94.04±0.53 72.04±0.94 93.04±0.06 68.08±0.51 82.57
AdaLoRA 85.45±0.11 93.69±0.20 69.16±0.24 91.66±0.05 68.14±0.28 81.62
LoRA-GA 85.70±0.09 94.11±0.18 80.57±0.20 93.18±0.06 85.29±0.24 87.77
LoRA-Pro 86.92±0.08 94.46±0.24 82.25±1.01 92.89±0.12 87.50±0.65 88.80

5. 结论

在本文中,我们提出了 LoRA-Pro,一种旨在缩小 LoRA 与完整微调之间性能差距的新方法。为此,我们引入了“等效梯度”的概念,它使我们能够量化 LoRA 与完整微调在优化过程中的差异。通过最小化这种差异,我们推导出了 LoRA 的最优闭式更新解。此外,我们证明了这些解在优化过程中确保了损失的减少。这些解不仅对微调矩阵进行了低秩近似,还保持了与完整微调优化的一致性,从而实现了更有效的微调。最后,我们通过在自然语言处理任务上的广泛实验验证了我们方法的有效性。

上次更新: 2025/06/25, 11:25:50
LoRA-GA
LoRA+

← LoRA-GA LoRA+→

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