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
      • 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-11
目录

LoRA+

《LoRA+: Efficient Low Rank Adaptation of Large Models》 (opens new window)

解读来源:配置不同的学习率,LoRA还能再涨一点? (opens new window)

为了使LoRA的效果尽可能接近最优,权重B 学习率应该要大于权重A 学习率

ηBηA=O(n)

论文解读

给LoRA的两个矩阵分配不同的学习率,LoRA的效果还能进一步提升。该结论出自论文《LoRA+: Efficient Low Rank Adaptation of Large Models》 (opens new window)(下称“LoRA+”)。咋看之下,该结论似乎没有什么特别的,因为配置不同的学习率相当于引入了新的超参数,通常来说只要引入并精调超参数都会有提升。“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通常都是用于Dense层,但原论文的分析是基于权重左乘输入的,而实现中基本上都是输入右乘权重,为了避免理解上的困难,本文的记号跟实现对齐,即假设层的输入是X∈Rb×n,层的运算是XW=X(W0+AB)。由于“LoRA+”的结论跟预训练权重无关,因此不失一般性可以设W0=0,那么层运算简化为Y=XAB∈Rb×m。

“LoRA+”的结论是**:为了使LoRA的效果尽可能接近最优,权重B 学习率应该要大于权重A 学习率。**

注意,为了使初始模型等价于原始预训练模型,LoRA通常会将A,B 一全零初始化。笔者一开始以为,该结论是由于全零初始化导致的,所以应该依赖于全零初始化的位置,但仔细阅读后发现,“LoRA+”所声称的结论跟全零初始化无关,也就是说,表面上A,B 对称的,但实际上它们有着固有的不对称性,以至于不管选择A 是B 全零初始化,结论都是B 学习率要大于A。这就有意思起来了。 然而,不得不说的是“LoRA+”原论文的讲解写得相当让人费解,所以下面都是笔者用自己的思路尽量简化后的推导。大体上,它基于两点假设:

  1. 数值稳定:模型每一层的输出值都应该是数值稳定的,跟网络宽度无关;
  2. 贡献相当:为了使LoRA最优,A,B 个矩阵对效果应该有同等程度的贡献。

数值稳定

首先,数值稳定说的是X,XA,XAB 每个分量都应该是O(1) 别的,而不依赖于网络宽度n,m,这里的O(1) 要描述的是它关于网络宽度的阶是零阶,并不代表它的绝对值就接近于1。这个假设应该没有什么争议,很难想象一个数值不稳定的网络能够能有好的预测效果。不过有些读者可能会质疑“XA O(1)”的必要性,因为X 输入、XAB 输出,要求它俩的数值稳定性很合理,但XA 是中间变量,它也必须数值稳定吗? 单看前向传播来说,XA 数值稳定性确实不是必要的。但如果XA 值不稳定同时XAB 值稳定的话,那么有两种情况:XA 值偏大、B 值偏小,根据求导公式,这将导致A 梯度偏小、B 梯度偏大;反过来,XA 值偏小、B 值偏大,这将导致A 梯度偏大、B 梯度偏小。总而言之,XA 数值不稳定会导致A,B 梯度不稳定,从而增加优化难度,所以还是加上XA 数值稳定性为条件比较好。

这个数值稳定性条件容易让我们联想到“LeCun初始化 (opens new window)”,它说的是如果W∈Rn×m 独立同分布地采样自“均值为0、方差为1/n”的分布,那么XW 个分量的数量级,大致上就跟X 分量相同。按照相同的策略,如果输入X 经是O(1),那么为了使得XA,XAB 分量数量级都是O(1),A,B 该分别用1/n,1/r 方差初始化(后面均值默认为0,不再重复写出)。

当然,前面说了LoRA为了保证初始化的恒等性,A,B 一要选择全零初始化,但这不大重要,我们只需要意识到1/n,1/r 方差可以让XA,XAB 保持数值稳定性,那么就可以猜测训练完成后的A,B,很可能也近似地也有1/n,1/r 方差。鉴于r≪n,所以这等价于说A 分量绝对值会明显小于B 分量绝对值,这就是A,B 对称性的源头。

贡献相当

接着,我们来看第二个假设:A,B 该对效果有同等程度上的贡献,这个假设看上去也很合理,因为在LLM+LoRA的场景,通常有m=n,即A,B 参数量相同,那么它们对效果的贡献相同是合理的,如果m≠n,我们也可以进一步将这个假设推广为效果贡献正比于参数数量。衡量效果的最基本指标自然是损失函数,这里记为L。 我们要衡量A→A+ΔA,B→B+ΔB ,损失函数的变化:

(1)L(A+ΔA,B+ΔB)−L(A,B)≈⟨∂L∂A,ΔA⟩+⟨∂L∂B,ΔB⟩

这里使用了一阶线性近似,其中∂L∂A,∂L∂B A,B 梯度,⟨⋅,⋅⟩ (Frobenius)内积运算,右端两项就可以理解为A,B 效果的分别贡献。但注意线性近似的有效性取决于增量ΔA,ΔB 小量,但对于训练好的权重,它对于原始权重的增量还真未必是小量。所以退而求其次,我们将“贡献相当”假设改为“A,B 每一步更新中应该对效果有同等程度上的贡献”,由于单步更新的量通常很小,因此线性近似能比较好地满足。

既然要考虑每一步的更新量,那么就引导我们到了优化器的方向上。当前预训练和微调的主流优化器都是Adam,那么我们就以Adam为主要分析对象。我们知道,Adam优化器有两组滑动平均状态以及对应的超参β1,β2,这使得精准的分析比较困难,但就本文的目的而言,我们只需要一个数量级估计,因此我们试图只考虑一个极端的例子,并且认为它和一般情形具有相同的数量级估计结果。这个例子就是β1=β2=0,此时Adam退化为SignSGD (opens new window):

(2)ΔA=−ηAsign(∂L∂A),ΔB=−ηBsign(∂L∂B)

其中ηA,ηB 各自的学习率,“LoRA+”的结论就是ηB≫ηA。

将SignSGD的增量(2) 回式(1),那么就得到

(3)L(A+ΔA,B+ΔB)−L(A,B)≈−ηA‖∂L∂A‖1⏟ΔLA−ηB‖∂L∂B‖1⏟ΔLB

这里的‖⋅‖1 L1 数,即所有分量的绝对值之和。“贡献相当”即希望右端的ΔLA,ΔLB 数量级上是一致的。

快速推导

进一步的分析需要求出梯度的具体形式。再次设Y=XAB,那么可以求出:

∂L∂A=X⊤∂L∂YB⊤,∂L∂B=A⊤X⊤∂L∂Y

不了解矩阵求导的读者可能会困惑于以上结果的推导,其实笔者也不熟悉,但这里有个简单的技巧可以用。比如∂L∂A,我们知道它是一个n×r 矩阵(跟A 形状),同理∂L∂Y 一个b×m 矩阵,并且根据求导的链式法则不难知道∂L∂A 该是∂L∂Y、X、B 乘积,那么我们就按照矩阵乘法的规定去想这三个矩阵怎么相乘才能得到一个n×r 矩阵就是了。

求出∂L∂A,∂L∂B 具体形式之后,我们有一个快速的方式来理解LoRA+。首先,ΔLA 比于‖∂L∂A‖1,这是nr 分量绝对值的和,假如每个分量相当,那么这意味着ΔLA 致正比于nr;然后,∂L∂A 于B 一次的,可以大致认为∂L∂A 每个分量量级正比于B 分量量级,合并起来就是ΔLA 时正比于nr B 量级;同理,ΔLB 致上也同时正比于mr A 量级。前面我们在“数值稳定”一节说了,为了前向的数值稳定性,B 量级应该会大于A 量级(正比于它们的近似标准差1/r,1/n,于是为了ΔLA ΔLB 大小相当,那么应该有近似:

ηA×nr×1/r≈ηB×mr×1/n⇒ηBηA≈nmnr

考虑到实际使用时常有m=n r=O(1),那么可以简单记为

ηBηA=O(n)

但是还没完,我们要检查一下结果是否自洽,因为我们用到的条件之一是“前向的数值稳定性”,至今为止还只是一个理想的假设。如何让假设尽可能成立呢?战胜一个假设的方法是引入另一个假设: 在Adam优化器中,如果两个参数的学习率之比是λ,那么经过长期的训练后,这两个参数的数量级之比也是λ。

根据Adam的近似式(2),每步增量的数量级确实正比于学习率,但总的更新结果又不完全是每一步简单叠加,所以这个假设给人的感觉就是“看上去有点道理,但又不完全有道理”。但不要紧,假设通常都是这样子的,有点道理就行,剩下的就只能靠信仰了。在这个假设之下,如果我们用ηBηA=O(n) 学习率训练,那么B,A 个参数的数量级之比也是O(n),而我们之前期望它们有近似的标准差1/r,1/n,这两个之比正好是O(n),结果完全自洽!

原论文的结果跟上述结果略有不同,它给出的答案是O(n),这是因为原论文考虑的是ΔA,ΔB Y 同等程度的增量,但Y 是模型层的输出,并不代表最终效果,因此是欠妥的。尽管原论文也试图将Y 增量跟L 增量联系起来,但并没有仔细展开运算,导致计算结果出现偏差。此外,原论文的推导,原则上也只适用于b=1,r=1,m=n 特殊情形,b>1,r>1 一般情况是直接沿用的,这意味着分析过程其实是不够通用的。

当然,具体是O(n) 是O(n) 实不大重要,实际还是得调。但LoRA+在各种尺寸的模型上做了实验,r 遍是8,n 768到4096不等,最后得出推荐默认的学习率比例是24=16,这正好跟n/r 不多,因此最优值更接近于O(n) 不是O(n)。

文章小结

这篇文章中,我们介绍并推导了一个名为“LoRA+”的结果,它支持LoRA的两个低秩矩阵A,B 在固有的不对称性,不管将哪个矩阵全零初始化,都应该将B 学习率设置得大于A,以达到更优的效果。

#LoRA
上次更新: 2025/06/25, 11:25:50
LoRA-Pro
MoSLoRA

← LoRA-Pro MoSLoRA→

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