Lora、Dola和Pissa模型对比分析


大模型微调

在大规模预训练模型的微调过程中,通常需要更新模型的所有参数。由于大模型的参数数量庞大,这种全参数微调方法带来了以下几个关键挑战:

全参数微调(Full Parameter Fine-Tuning)中,需要对初始权重矩阵 W W W反向传播计算梯度,进行梯度下降(Gradient descent),大规模数据矩阵的梯度计算量极大。因此,处理权重矩阵的方法可以有效提高微调的计算效率。

  • 计算资源消耗巨大:全参数微调会对计算能力提出极高要求,尤其是对于GPU和显存资源的需求。
  • 存储压力过大:大规模模型微调需要存储大量的梯度和中间计算结果,特别是当模型应用于多任务场景时。
  • 效率低下:由于需要更新整个模型的参数,全参数微调在训练速度和部署时的效率较低,尤其是在小数据集或特定任务上微调时,可能存在浪费资源的现象。

为了解决这些挑战,研究者们提出了一些参数高效微调的创新方法,比如LoraDolaPissa,它们能够有效减少需要更新的参数量,在保持模型性能的同时,大幅降低计算和存储开销。

Lora

LoRA (Low-Rank Adaptation of Large Language Models) 是微软研究院提出的一种PEFTarameter-Efficient Fine-Tuning)方法,专门针对LLM的微调问题。LoRA 的设计目标是在保持模型性能的同时,最大限度地减少微调所需的计算资源和存储空间。

模型原理

LoRA的核心原理是利用低秩矩阵来近似表示预训练模型的权重矩阵增量。具体来说,LoRA将预训练模型的原始权重矩阵冻结,利用两个低秩矩阵的乘积来更新。由于低秩矩阵的秩远小于原始矩阵的秩,因此LoRA 可以显著减少微调参数的数量。 在这里插入图片描述

低秩近似原理

对于预训练权重矩阵 W 0 ∈ R d × d W_0 \in \mathbb{R}^{d \times d} W0Rd×d,可以用一个低秩分解来表示参数更新 Δ W \Delta W ΔW,即:

W 0 + Δ W = W 0 + B A W_0 + \Delta W = W_0 + BA W0+ΔW=W0+BA

其中 B ∈ R d × r B \in \mathbb{R}^{d \times r} BRd×r A ∈ R r × d A \in \mathbb{R}^{r \times d} ARr×d,且 r ≪ d r \ll d rd

原本一个 d × d d\times d d×d的矩阵降维到了 d × r d\times r d×r,低秩代表着保留了奇异值较大的部分,保留了原有矩阵的主要信息,我们只需对低秩部分反向传播进行梯度下降。此外,矩阵 A A A是服从正态分布的随机矩阵。目标秩取得越大,即保留的信息越多,从而计算量越大。在目标秩大于某个值时,计算量会接近全参数微调。

训练过程中冻结参数 W 0 W_0 W0,仅训练 A A A B B B中的参数。如上图所示,对于 h = W 0 x h = W_0 x h=W0x,前向传播过程变为:

h = W 0 x + Δ W x = W 0 x + B A x h = W_0 x + \Delta W x = W_0 x + BA x h=W0x+ΔWx=W0x+BAx

伪代码

这里给出了部分伪代码,具体可以参考原链接。

# 加载预训练模型
pretrained_model = load_pretrained_model()

# 将 LoRA 应用于模型的线性层
for module in pretrained_model.modules():
    if isinstance(module, nn.Linear):
        lora_layer = LoRALayer(module.weight.shape, rank=lora_rank)
        module.weight = lora_layer

# 定义优化器,只更新 LoRA 层的参数
optimizer = optim.Adam(lora_layer.parameters(), lr=learning_rate)

# 训练模型
# ...

参考链接https://github.com/microsoft/LoRA

Lora的实际表现

LORA为何有效?
通过大量的对比实验,作者证明了Lora的有效性。作者希望进一步解释这种从下游任务中学到的低秩适应low-rank adaptation)的特性。为此,作者在原文中提出了三个问题:

Q1:LORA应该作用于Transformer的哪个参数矩阵?
从下图可以看到,将所有微调参数都放到Attention的某一个参数矩阵的效果并不好,将可微调参数平均分配到 W q W_q Wq W k W_k Wk的效果最好。即使是秩 r = 4 r=4 r=4的时候,也可以从 Δ W \Delta W ΔW中获得足够的信息。因此,在实际操作中应当将可微调参数分配到多种类型权重矩阵中,而不应该用更大的秩单独微调某种类型的权重矩阵。
在这里插入图片描述

Q2:LORA最优秩为多少?
从文献中的实验结论可以看到,在秩 r = 1 r=1 r=1 r = 2 r=2 r=2的时候,Lora的仍有不错的效果。因此,作者认为更新参数矩阵 Δ W \Delta W ΔW 可能拥有极小的“内在秩”,即极低的目标秩也可以提取到主要的信息
在这里插入图片描述
为了进一步验证内在秩,我们需要计算不同秩 r r r对应的子空间之间的重要程度。以 r = 8 r = 8 r=8 r = 64 r = 64 r=64两个秩为例。首先,进行奇异值分解(SVD),分别得到两个左奇异矩阵 U A r = 8 U_{A_{r=8}} UAr=8 U A r = 64 U_{A_{r=64}} UAr=64。进一步,我们希望了解 U A r = 8 U_{A_{r=8}} UAr=8的 Top-j 奇异向量有多少被包含在 U A r = 64 U_{A_{r=64}} UAr=64 的 Top-j 个向量中。并且可用格拉姆矩阵来表示这两子空间之间的相似关系:
ϕ ( A r = 8 , A r = 64 , i , j ) = ∣ ∣ U A r = 8 T V A r = 64 j ∣ ∣ 2 min ⁡ ( i , j ) = ∑ k min ⁡ ( i , j ) Λ k 2 min ⁡ ( i , j ) , \phi (A_{r=8}, A_{r=64}, i, j) = \frac{|| U^T_{A_{r=8}} V^j_{A_{r=64}} ||^2}{\min(i, j)} = \frac{\sum^{\min(i,j)}_k \Lambda^2_k}{\min(i,j)}, ϕ(Ar=8,Ar=64,i,j)=min(i,j)∣∣UAr=8TVAr=64j2=min(i,j)kmin(i,j)Λk2
从下图可以看出 r = 8 r = 8 r=8 r = 64 r = 64 r=64中的Top奇异向量重叠得最多(颜色越小表示相似程度越高),这意味着Top奇异向量的作用最大,其他的奇异值可能会引入更多的噪声。这证明了更新参数矩阵 Δ W \Delta W ΔW存在极小的‘内在秩’。
在这里插入图片描述

SVD分解中,奇异值矩阵中对角线元素按照奇异值递减排列。Top奇异向量表示了参数矩阵的主要信息部分内在秩体现了前面部分的top奇异向量可能表示了参数矩阵的80%甚至更多的信息,剩余部分为冗余

Q3:参数增量 Δ W \Delta W ΔW W W W的关系?
文中为揭示微调过程的内在原理,作者进行了如下实验:
在这里插入图片描述
从上图的对比结果,作者发现三个现象:

  • 相比于随机矩阵(Random), Δ W \Delta W ΔW W W W有强关联。从表中的 0.32 > > >> >> 0.02 可以看出,
  • Δ W \Delta W ΔW仅放大了 W W W中任务相关的特征,并未放大头部特征。由于 F F F-范数的平方等于奇异值和的平方。因此,从表中的 0.32 $<<$21.67 可以看出 Δ W \Delta W ΔW W W W的头部奇异向量并无关联。
  • r = 4 r=4 r=4时, Δ W \Delta W ΔW 的放大系数已经足够大。计算 6.91 / 0.32 ≈ 21.5 可知 Δ W \Delta W ΔW能将 W W W 中相关的特征向量放大 21.5 倍。

因此,我们可以得到结论。在训练过程中,低秩的适应矩阵 Δ W \Delta W ΔW 仅仅放大了对下游任务有用的特征,而不是预训练模型中的主要特征。

实验结果:
在保持模型性能的前提下, LoRA显著减少了微调所需的参数数量。LoRA在计算效率和存储效率方面表现优异, 使其成为资源受限环境中的理想选择。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5

LoRA 优势与应用场景

优势:

  • 高效性: LoRA 在参数效率方面表现出色,可以显著减少微调参数的数量。
  • 易用性: LoRA 易于实现和使用,现有的深度学习框架已经提供了相应的工具和库。
  • 可扩展性: LoRA 可以应用于各种规模的预训练模型,包括大型语言模型。

应用场景:

  • 大型语言模型微调: LoRA 非常适合对大型语言模型进行微调,例如 GPT-3 和 BERT。
  • 多任务学习: LoRA 可以用于多任务学习,每个任务只需要微调少量的参数。
  • 模型轻量化: LoRA 可以看作是一种模型轻量化技术,可以减小模型的存储空间和推理时间


Dora

DoRAWeight-Decomposed Low-Rank Adaptation)的主要思想是将预训练权重分解为幅度magnitude)和方向direction),并利用LoRA来微调方向矩阵
W ′ = m V + Δ V ∥ V + Δ V ∥ c = m W 0 + B A ∥ W 0 + B A ∥ c . W' = m \frac{V + \Delta V}{\| V + \Delta V \|_c} = m \frac{W_0 + BA}{\| W_0 + BA \|_c}. W=mV+ΔVcV+ΔV=mW0+BAcW0+BA.
在这里插入图片描述
如下图所示,LoRA通常会等比例增减幅度和方向,DoRA通过将预训练权重矩阵分解为幅度和方向,能够更接近全量微调的效果。

在这里插入图片描述
使用比LoRA更少的参数,表现效果反而更好。
在这里插入图片描述
使用较小的 r r r,准确率要高出Lora很多,这意味着其内在秩所包含的信息更多。
在这里插入图片描述



PISSA

随着大模型的参数量日益增长,微调整个模型的开销逐渐变得难以接受。为此,北京大学的研究团队提出了一种名为 PiSSA的参数高效微调方法,在主流数据集上都超过了目前广泛使用的 LoRA 的微调效果。
PiSSA 在模型架构上和 LoRA完全一致 ,只是初始化 Adapter 的方式不同。LoRA 使用高斯噪声初始化 A A A,使用 0 初始化 B B B;而 PiSSA 使用主奇异值和奇异向量 (Principal Singular values and Singular vectors) 来初始化 Adapter ,即矩阵 A A A B B B在这里插入图片描述

从图中可以看出,PiSSA的优势在于,初始化增量矩阵的时候对原始权重矩阵 W W W进行了截断的SVD(TSVD)。将截断后的矩阵代替原本随机初始化的矩阵 A A A B B B。从而在不增加计算量的情况下,获取到了原始权重矩阵的信息。

受到 Intrinsic SAID “预训练大模型参数具有低秩性”的启发,PiSSA 对预训练模型的参数矩阵 W ∈ R m × n W \in \mathbb{R}^{m \times n} WRm×n进行奇异值分解。其中前 r r r个奇异值和奇异向量用来初始化适配器 (adapter) 的两个矩阵 A ∈ R m × r A \in \mathbb{R}^{m \times r} ARm×r B ∈ R r × n B \in \mathbb{R}^{r \times n} BRr×n r ≪ min ⁡ ( m , n ) r \ll \min(m, n) rmin(m,n),剩余的奇异值和奇异向量用来构造残差矩阵 W r e s ∈ R m × n W^{res} \in \mathbb{R}^{m \times n} WresRm×n,获得
W = A B + W r e s W = AB + W^{res} W=AB+Wres
因此,适配器中的参数包含了模型的核心参数,而残差矩阵中的参数是修正参数。通过微调参数量较小的核心适配器 A , B A, B A,B,冻结参数量较大的残差矩阵 W r e s W^{res} Wres,就达成了用很少的参数近似全参数微调的效果。Lora 认为大模型微调后的矩阵的变化 Δ W \Delta W ΔW 具有很低的本征秩。因此,通过 A ∈ R m × r A \in \mathbb{R}^{m \times r} ARm×r B ∈ R r × n B \in \mathbb{R}^{r \times n} BRr×n 相乘得到低秩矩阵来描述大模型中矩阵的变化 Δ W \Delta W ΔW。初始化阶段,Lora 使用高斯噪声初始化 A A A, B B B,因此
Δ W = A B = 0 \Delta W = AB = 0 ΔW=AB=0
以保证模型初始的输出没有变化,并微调 A A A B B B实现对 W W W进行更新。与此相对,PiSSA 不关心 W W W 而是认为 W W W 具有很低的本征秩。因此,直接对 W W W进行SVD
W = A B + W r e s W = AB + W^{res} W=AB+Wres
其中, W r e s W^{res} Wres 表示残余量。假设 V V V的奇异值分解为 W = U D i a g ( S ) V T W = U Diag(S) V^T W=UDiag(S)VT A , B A, B A,B使用 SVD 分解后奇异值大的 r r r 个奇异值,奇异向量进行初始化。
A = U [ : , : r ]   d i a g ( S [ : r ] 2 ) − 1 2 ∈ R m × r , A = U_{[:, :r]} \, diag(S_{[:r]}^2)^{-\frac{1}{2}} \in \mathbb{R}^{m \times r}, A=U[:,:r]diag(S[:r]2)21Rm×r,

B = d i a g ( S [ : r ] 2 ) − 1 2 V [ : , : r ] T ∈ R r × n , B = diag(S_{[:r]}^2)^{-\frac{1}{2}} V_{[:, :r]}^T \in \mathbb{R}^{r \times n}, B=diag(S[:r]2)21V[:,:r]TRr×n,
残差矩阵使用其余的奇异值、奇异向量进行初始化:
W r e s = U [ : , r : ]   d i a g ( S [ r : ] ) V [ : , r : ] T ∈ R m × n , W^{res} = U_{[:, r:]} \, diag(S_{[r:]}) V_{[:, r:]}^T \in \mathbb{R}^{m \times n}, Wres=U[:,r:]diag(S[r:])V[:,r:]TRm×n,
PiSSA 直接对 W W W 的低秩主成分 A , B A, B A,B 进行微调,冻结次要的修正项。相比 Lora 用高斯噪声以及 0 初始化适配器参数、冻结核心模型参数,PiSSA 收敛更快,效果更好。

参考文献

[1] Hu E J, Shen Y, Wallis P, et al. Lora: Low-rank adaptation of large language models[J]. arXiv preprint arXiv:2106.09685, 2021.
[2] Meng F, Wang Z, Zhang M. Pissa: Principal singular values and singular vectors adaptation of large language models[J]. arXiv preprint arXiv:2404.02948, 2024.
[3] Liu S Y, Wang C Y, Yin H, et al. Dora: Weight-decomposed low-rank adaptation[J]. arXiv preprint arXiv:2402.09353, 2024.

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐