LoRA:大模型的低秩自适应

前言

如今,预训练模型的参数规模变得越来越大,而在实际应用的过程中需要对模型进行相应的微调。而模型参数越大,想要进行微调的成本也就越高,而在下面这篇论文中提出的LoRA方法在对模型进行微调过程中可以有效的减少模型的参数量,从而可以极大的减少模型训练的成本。
论文链接: LORA: Low-Rank adaptation of large language models

摘要

自然语言处理的一个重要范例是在一般领域数据上进行大规模预训练,然后适应特定任务或领域。而随着预训练模型越来越大,重新训练所有模型参数的全面微调就变得不可行了。作者提出了低秩自适应技术,可以冻结预训练模型的权重,并将可训练的秩分解矩阵注入Transformer的每一层,从而大大减少下游任务的可训练参数量。与使用Adam进行微调的GPT-3 175B相比,LoRA可将可训练参数量降低10,000倍,GPU内存需求减少3倍。LoRA在RoBERTaDeBERTaGPT-2GPT-3上的模型质量表现与微调相当或更好,尽管可训练参数更少、训练吞吐量更高,而且与适配器不同,没有额外的推理延迟。还对语言模型适应中的等级缺陷进行了实证调查,揭示了LoRA的有效性。

引言

自然语言处理的很多应用都依赖于将一个大模型、预先训练好的语言模型适用于多个下游应用。这种调整通常是通过微调来完成的,微调会更新预训练模型中的所有参数。微调的主要缺点是新模型包含的参数与原模型一样多。随着更大的模型每隔几个月就要训练一次,这对于GPT-2或RoBERTa等模型而言仅仅是“不便”,对于拥有1750亿参数的GPT-3而言在部署时则成了非常严峻的挑战。

许多人视图通过只调整某些参数或为新任务学习外部模块来缓解这种情况。这样,除了为每个任务添加预先训练好的模型外,只需要存储和加载少量特定任务的参数,从而可以大大提高模型部署时的运行效率。而现有的技术通常是通过扩展模型深度或减少模型的可用序列长度,经常会引入推理延迟。更重要的是这些方法通常无法与微调基线相匹配,这就需要在效率和模型质量之间进行权衡。

有研究表明,学习到的过度参数化模型往往存在于一个较低的内在维度上。因此作者假设模型适应过程中权重的变化也具有较低的“内在秩”,因此作者就提出了低秩适应(LoRA)的方法。LoRA允许通过优化适应过程中密集层变化的秩分解矩阵来间接训练神经网络中的一些密集层,同时保持预训练的权重不变。即使在GPT-3 175B这个模型上,发现即使全秩高达12,288,也只需要很低的秩(下图中的r,可以是1或者2)就足够了,这就使得LoRA即节省存储空间,又节省计算时间。
在这里插入图片描述
LoRA有以下几个关键的优势:

  • 预训练模型可以共享,并用于为不同任务构建许多小型LoRA模块。可以通过冻结共享模块,并替换上图中的矩阵A和矩阵B来进行相关任务的切换,从而大幅降低存储需求和任务切换开销。
  • 在使用自适应优化器时,LoRA使训练更加高效,并将硬件门槛降低了3倍。因为不需要计算梯度或维护大多数参数的优化器状态。相反,只需要优化注入的、更小的低秩矩阵即可。
  • 简单的线性设计运行在部署时将可训练矩阵与冻结权值合并,与全微调的模型相比,不会带来推理延迟。
  • LoRA与许多之前的方法是正交的,并可与许多方法(如prefix-tuning)相结合。

术语与惯例:通常通过引用Transformer结构,并使用传统术语的维度。将Transformer输入和输出维度大小称为 d m o d e l d_{model} dmodel,使用 W q W_q Wq W k W_k Wk W v W_v Wv W o W_o Wo来表示自注意力模块中查询/键/值/输出投影矩阵。 W W W W o W_o Wo表示预训练的权重矩阵, Δ W \Delta W ΔW表示在适应过程中累积的梯度更新。论文中使用 r r r表示LoRA模块的秩,同样使用Adam来对模型进行优化,并将Transformer MLP的前馈维度设置为 d f f n = 4 × d m o d e l d_{ffn} = 4 \times d_{model} dffn=4×dmodel

问题描述

通常将语言模型作为对应的激励用例。下面简要介绍语言建模问题,特别是在特定任务提示下条件概率最大化的问题。

在得到预训练好的自回归语言模型后,会考虑将这个预先训练好的模型应用在下游的相关任务上,如摘要、机器阅读理解(MRC)和自然语言到SQL(NL2SQL)。每个下游任务由一个上下文-目标对组成的训练数据集 Z = ( x i , y i ) i = 1 , . . . , N Z={(x_i,y_i)}_{i=1,...,N} Z=(xi,yi)i=1,...,N组成,其中 x i x_i xi y i y_i yi是标记序列。在完全微调过程中,模型被初始化为预先训练的权重 Φ 0 \Phi 0 Φ0,并通过反复跟踪梯度更新为 Φ 0 + Δ Φ \Phi 0 + \Delta \Phi Φ0+ΔΦ,以最大化条件建模目标:
max ⁡ Φ ∑ ( x , y ) ∈ Z ∑ t = 1 ∣ y ∣ l o g ( P Θ ( y t ∣ x , y < t ) ) \max_{\Phi } \sum_{(x,y)\in Z} \sum _{t=1}^{|y|} log(P_\Theta (y_t|x,y_{<t})) Φmax(x,y)Zt=1ylog(PΘ(ytx,y<t))
完全微调的一个主要缺点是,对于每个下游任务,都要学习一组不同的参数 Δ Φ \Delta \Phi ΔΦ,其维度 ∣ Δ Φ ∣ |\Delta \Phi| ∣ΔΦ∣等于 Φ 0 \Phi 0 Φ0。因此如果预训练的模型很大,那么存储和部署许多独立的微调模型实例即使可行,也会很有挑战性。

这篇论文中采用了一种参数效率更高的方法,即特定于任务的参数增量 Δ Φ = Δ Φ ( Θ ) \Delta \Phi = \Delta \Phi (\Theta) ΔΦ=ΔΦ(Θ)由一组更小的参数 Θ \Theta Θ进行编码,其中 ∣ Θ ∣ ≪ ∣ Φ ∣ |\Theta| \ll |\Phi| ∣Θ∣∣Φ∣。寻找 Δ Φ \Delta \Phi ΔΦ的任务就变成了优化 Θ \Theta Θ
max ⁡ Φ ∑ ( x , y ) ∈ Z ∑ t = 1 ∣ y ∣ l o g ( P Φ 0 + Δ Φ ( Θ ) ( y t ∣ x , y < t ) ) \max_{\Phi } \sum_{(x,y)\in Z} \sum _{t=1}^{|y|} log(P_{\Phi _0 + \Delta \Phi(\Theta)} (y_t|x,y_{<t})) Φmax(x,y)Zt=1ylog(PΦ0+ΔΦ(Θ)(ytx,y<t))
在后续章节中,建议使用低秩表示法来编码既节省计算又节省内存的 Δ Φ \Delta \Phi ΔΦ

对现有方案的分析

由于解决的问题并不是一个新出现的问题,自从迁移学习诞生以来,已经有数十项研究试图提高模型适应的参数和计算效率。以语言建模为例,在高效适配方面有两种较为突出的策略:增加适配层或优化某些形式的输入层激活。然而,这两种策略都有其局限性,尤其是在大规模和对延迟敏感的生产场景中。

适配器层带来推理延迟:适配器有很多种,重点关注的是Houlsby的原始设计,每个Transformer模块有两个适配器层;Lin的最新设计,每个Transformer只有一个适配器层,但附加了一个额外的LayerNorm。这看起来不是一个问题,因为适配器层的瓶颈维度较小,可以限制器增加的FLOPs,从而使其参数变得很少(有时小于原始模型的1%)。然而,大型神经网络依赖于硬件并行性来保持低延迟,而适配器层必须按照顺序处理。这不利于在线推理设置,其中批处理大小通常小于1。在没有模型并行性的通用场景中,如在单个GPU上运行GPT-2时,通常可以发现适配器会明显增加延迟,即使瓶颈维度很小。在对模型进行分割时,这个问题就会变得更加严重,因为额外的深度需要更多的GPU同步操作,除非冗余地存储适配器参数。

直接优化提示很难:以prefix-tuning为例,另一个方向同样面临着不用的调整。prefix tuning同样很难优化,其性能在可训练参数上的变化并不是单调变化的。更重要的,保留部分序列长度用于自适应必然会减少可用于处理下游任务的序列长度。因此与其他方法相比,这使得调整提示符的性能可能低于其他的方法。

本文中的方法

这里主要介绍LoRA的简单设计及其实际效益。这里概述的原则适用于深度学习模型中的任何密集层,不过在实验中只关注Transformer语言模型中的某些权重,并将其作为激励用例。

低秩参数化更新矩阵

一个神经网络包含许多密集的层,它们可以执行矩阵乘法。这些层中的权重矩阵通常具有全秩。当适应特定任务时,预训练的语言模型具有较低的“内在维度”,尽管随机投影到较小的子空间,仍然能够高效学习。受此启发,假设权重的更新在适应过程中也具有较低的“内在等级”。对于预先训练的权重矩阵 W 0 ∈ R d × k W_0 \in \mathbb{R}^{d\times k} W0Rd×k,使用一个低秩分解 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 × k A \in \mathbb{R}^{r \times k} ARr×k和秩 r ≪ R r × k r \ll \mathbb{R}^{r \times k} rRr×k。在训练过程中, W 0 W_0 W0被冻结不会接受梯度更新,而A和B则包含可训练参数。需要注意的是 W 0 W_0 W0 Δ W = B A \Delta W = BA ΔW=BA都有相同的输入相乘,它们各自的输出向量按坐标相加,对于 h = W 0 x h=W_0x h=W0x,修改后的前向传递的结果是
h = W 0 x + Δ W x = W 0 x + B A x h = W_0x + \Delta W_x = W_0x + BAx h=W0x+ΔWx=W0x+BAx
在重置参数化的过程中,对A使用随机高斯初始化,对B使用零初始化,因此训练开始时 Δ W = B A \Delta W = BA ΔW=BA为零。然后用 α r \frac{\alpha}{r} rα Δ W x \Delta W x ΔWx进行缩放,其中 α \alpha α r r r中的一个常数。当使用Adam进行优化时,如果适当调整初始化,调整 α \alpha α与调整学习率大致相同。因此,只需要将 α \alpha α设置为第一个 r r r,而无需调整,这种缩放有助于减少变化时调整超参数的需要。
全微调泛化:一种更普遍的微调方式是对预训练参数的子集进行训练。LoRA则更近一步,在适应过程中不要求权重矩阵的累积梯度更新具有全秩。这意味着,当将LoRA应用于所有权重矩阵并训练所有偏置时,通过将LoRA秩设置为预训练的权矩阵的秩,就可以大致恢复全微调的表现力。欢聚哈说,随着可训练参数数量的增加,训练LoRA大致收敛于训练原始模型,而基于适配器的方法收敛于MLP,基于prefix的收敛于不能接受长输入序列的模型。
没有额外的推理延迟:在生成中部署时,可以显示的计算并存储 W = W 0 + B A W =W_0 + BA W=W0+BA,然后像往常一样执行推理。但 W 0 W_0 W0和BA都在 R r × k \mathbb{R}^{r\times k} Rr×k中,当需要切换到另一个下游任务时,可以通过减去BA,然后添加一个不同的 B ′ A ′ B'A' BA来恢复 W 0 W_0 W0,这是一个内存开销很小的快速操作。更重要的是,与构建微调模型相比,这保证了我们在推理过程中不会引入额外的延迟。

将LoRA应用在Transformer中

原则上可以将LoRA应用于神经网络中的任意权重矩阵子集上,以减少可训练参数的数量。在Transformer架构中,自注意力模块中有四个权重矩阵( W q , W k , W v , W o W_q,W_k,W_v,W_o Wq,Wk,Wv,Wo),在MLP模块中有两个。可以将 W q W_q Wq(或 W k , W v W_k,W_v Wk,Wv)视为一个 d m o d e l × d m o d e l d_{model} \times d_{model} dmodel×dmodel的单一矩阵,即使输出维度通常被切分成注意力头为了简单性和参数效率,将对应的研究仅限制在调整下游任务的注意力权重,并冻结MLP模块。

实际优势和局限性:最大的好处是减少了内存和存储空间的使用,对于使用Adam训练的大型Transformer结构,如果使用 r ≪ d m o d e l r \ll d_{model} rdmodel,VRAM的使用量最多可以减少2/3,因为不需要存储冻结参数的优化器状态。在GPT-3 175B上,将训练期间的VRAM消耗从1.2T减少到了350GB。在 r = 4 r=4 r=4的情况下,只对查询和值投影矩阵进行调整,checkpoint的大小减少了10000倍(从350GB减少到了35M)。这样,就可以使用更少的GPU进行训练,并避免I/O瓶颈。另一个好处是可以在部署时以更低的成本在不同任务之间进行切换,只需要更换LoRA权重即可,而不是所有的参数。这样就可以创建许多定制的模型,这些模型可以在将预先训练好的权重存储在VRAM中的机器上快速调入和调出。同时还观察到,与完全微调相比,GPT-3 175B的训练速度提高了25%,因为不需要计算绝大多数参数的梯度。

LoRA也有其局限性,例如,如果选择将A和B吸收到W中以消除额外的推理延迟,那么在一次正向传播中批量输入具有不同A和B的不同任务就不是一件简单的事。不过,在延迟并不重要的情况下,也可以不合并权重,动态选择LoRA模块用于批量训练。

实验验证

作者评估了LoRA在RoBERTa、DeBERTa和GPT-2上的下游性能,然后扩展到了GPT-3 175B。对应的实验涵盖了从自然语言理解(NLU)到生成(NLG)的各种任务,具体来说在GLUE的基准上对RoBERTa和DeBERTa进行了评估。

基线(baseline)

为了与其他基线进行广泛比较,复制了之前工作中使用的设置,并尽可能重复使用它们报告中使用的数字。而这意味着一些基线可能只出现在某些实验中。

微调是一种常见的适应方法。在微调过程中,模型初始化为预先训练好的权重和偏置,所有模型参数都会进行梯度。一个简单的变体是只更新某些层,而冻结其它层。

Bias-only或BitFit也是一种baseline,即只训练偏差向量而冻结其他的一切。与此同时,BitFit也对这一基线进行了相关的研究。

Prefix-embdding tuning(PreEmbed)是在输入token中插入特殊token。这些特殊的token具有可训练的词嵌入,通常不在模型的词汇表中。将这些token放置在哪里可能会对性能产生影响。通常是将重点放在“前缀”和“后缀”上,前缀是指在提示符前添加,后缀是在提示符后添加。通常使用 l p ( r e s p . l i ) l_p(resp.l_i) lp(resp.li)表示前缀(resp, infix)token的数量可训练的参数量为 ∣ Θ ∣ = d m o d e l × ( l p + l i ) |\Theta| = d_{model} \times (l_p + l_i) ∣Θ∣=dmodel×(lp+li)

Prefix-layer tuning(PreLayer)是对PreEmbed的扩展。这里不仅仅学习某些特殊token的单词嵌入(或等同于嵌入层后的激活),而是学习每个Transformer层后的激活。前几层计算出的激活值将被可训练的激活值取代。因此可训练参数量为 ∣ Θ ∣ = L × d m o d e l × ( l p + l i ) |\Theta| = L \times d_{model} \times (l_p + l_i) ∣Θ∣=L×dmodel×(lp+li),其中 L L L是Transformer层数。

Adapter tuning是在自注意力模块(和MLP模块)与后续残差连接之间插入适配器层。在适配器层中有两个全连接层,中间有一个非线性的偏置,这种方法称作 A d a p t e r L Adapter^L AdapterL。这种设计与 A d a p t e r P Adapter^P AdapterP比较类似,另外一种称为 A d a p t e r D Adapter^D AdapterD的baseline可以降低一些适配器层的效率。为了最大限度增加与之比较的基线数量,尽可能引用了先前作品中的数字。这种情况下,都使用 ∣ Θ ∣ = L ^ A d p t × ( 2 × d m o d e l × r + r + d m o d e l ) + 2 × L ^ L N × d m o d e l |\Theta| = \hat{L} _{Adpt} \times (2 \times d_{model} \times r + r + d_{model}) + 2 \times \hat L _{LN} \times d_{model} ∣Θ∣=L^Adpt×(2×dmodel×r+r+dmodel)+2×L^LN×dmodel,其中 L ^ A d p t \hat L Adpt L^Adpt是适配器层的数量, L ^ L N \hat L_{LN} L^LN是可训练层规范数。

LoRA在现有权重矩阵的基础上增加了可训练的秩分解矩阵对。为了简单起见,在大多数实验中只将LoRA应用于 W q W_q Wq W v W_v Wv。可训练参数量有秩r和原始权值的形状决定: ∣ Θ ∣ = 2 × L ^ L o R A × d m o d e l × r |\Theta| = 2 \times \hat L_{LoRA} \times d_{model} \times r ∣Θ∣=2×L^LoRA×dmodel×r,其中 L ^ L o R A \hat L_{LoRA} L^LoRA是应用LoRA的权重矩阵数。

RoBERTa base/large

RoBERTa优化了最初在BERT中提出的预训练配方,并在不引入更多可训练参数的情况下提高了后者的任务性能。虽然RoBERTa近年来在GLUE基准等NLP排行榜上被更大的模型取代,但在从业者眼中,仍然还是一个具有竞争力和受欢迎的预训练模型。作者评估了该模型不同高效适应方法在GLUE基准任务上的性能,为了确保比较的公平性,在于适配器进行比较时,对LoRA的评估方式做了两处重要改动。首先,对所有任务使用相同的批量大小,并使用128的序列长度来匹配适配器基线;其次,将模型初始化为MRPC、RTE和STS-B的预训练模型,而不是想调整基线那样使用已经适应MNLI的模型。

DeBERTa XXL

DeBERTa也是BERT模型的变体,在更大规模上进行了训练,在GLUEsuperGLUE等基准测试中的表现极具竞争力。作者评估了LoRA在GLUE上的性能是否仍能与经过完全微调的DeBERTa XXL(1.5B)相媲美,对比的结果如下表所示:
在这里插入图片描述

GPT-2 mdeium/large

在证明了LoRA可以成为NLU上完全微调的竞争替代方案之后,希望LoRA在NLG上仍然能够有效,比如GPT-2大型和中型模型。为了能够直接比较,对应的设置与原始论文比较接近。由于篇幅问题,这里只介绍了E2E NLG挑战赛的结果,具体情况如下表所示。
在这里插入图片描述

扩大到GPT-3 175B

作为LoRA的最终压力测试,将其扩展到了1750亿个参数的GPT-3。由于训练成本较高,论文只报告了一个给定任务对随机种子的典型标准差,而不是为每个条目提供一个标准差,具体的情况如下所示。
在这里插入图片描述
如上图所示,在所有的三个数据集上都达到或者超过了微调模型,但是并不是所有的方法都能从更多可训练参数中单调收益,具体情况可参照下图。当使用超过256个特殊标记或在PreEmbed中使用超过32个特殊标记时,发现性能会明显下降。虽然这一现象的深入研究超出了这项工作的范围,但还是任务更多的特殊字符会导致输入分布进一步偏离训练前的数据分布。
在这里插入图片描述

相关工作

Transformer语言模型Transformer是一种序列到序列的架构,大量使用了自注意力。通过堆叠Transformer解码器将其应用于自回归语言建模。从那时起,基于Transformer的语言模型已经主导了NLP,在许多任务中达到了最先进的水平。BERTGPT-2都是在大量文本基础上训练的大型Transformer语言模型,与直接在特定任务数据上进行训练相比。在通用领域数据上进行预训练后,在特定任务数据上进行微调能显著提高模型的性能。训练更大的Transformer模型通常能够带来更好的性能,这如今还是一个比较活跃的研究方向。

提示工程与微调:虽然GPT-3 175B可以通过几个额外的训练示例来调整其行文,但结果在很大程度上取决于提示输入提示。这就需要一种编写和格式化提示的经验,这就是所谓的提示工程或提示黑客。微调将在一般领域将预训练好的模型重新对特定领域内的任务进行训练。它的变体只学习参数中的一个自己,但实践者通常会重新训练所有参数,以最大限度地提高下游性能。然而,GPT-3 175B的庞大规模使得按照常规方法进行微调具有很大的挑战性,因为它会产生大量的检查点(checkpoint),而且硬件门槛很高,因为它与预训练具有相同的内存占用。

参数高效自适应:许多人提出在神经网络现有层之间插入适配器层。这篇论文采用了类似的瓶颈结构,对权重更新施加低秩约束。功能上主要的区别在于学习到的权重可以在推理过程中与主权重合并,因此不会引入任何延迟。适配器的一个基本扩展是COMPACTER,其本质是使用Kronecker乘积和某种预先确定的权重共享方案对适配器层进行参数化。同样,将LoRA与其他基于张量乘积的方法结合起来,也有可能提高其参数效率。也有对输入层嵌入模块进行优化以代替微调的,这类似于提示工程的可微分广义化。在实验部分进行了对比,然而,只有在提示中使用更多的特殊标记,才能扩大这一研究方向的规模,因为在学习位置嵌入式,这些特殊的标记会占用任务标记的可用序列长度。

深度学习中的低秩结构:低秩结构在机器学习中非常常见,许多机器学习问题都存在一定的内在低秩结构。此外,众所周知,对于许多深度学习任务,尤其是那些具有严重过参数化神经网络的任务,学习到的神经网络在训练后会具有低秩属性。一些先前的研究甚至在训练原始神经网络时明确施加了低秩约束;然而,这些研究都没有考虑对冻结模型进行低秩更新来适应下游任务。在理论文献中,已知神经网络比其他经典学习方法要更好,包括相应的(有限宽度)神经正切核。另一个研究结果表明,低秩适应可以用于对抗训练。总之,作者认为提出的低秩适应性更新是有充分文献依据的。

了解低秩更新

鉴于LoRA的经验优势,希望能够更进一步解释从下游任务中学习到低秩适应的特性。需要注意的是低秩结构不仅降低了硬件门槛,使我们可以并行运行多个实验,还能更好的解释更新权重与预训练权重之间的关联。这篇论文的研究重点是GPT-3 175B,在不影响任务性能的情况下,实现了可训练参数的最大缩减(高达10,000倍)。

进行了一系列的实证研究,以回答下面的问题:(1)考虑到参数预算限制,应该调整预训练Transformer中的哪个权重自己,以最大限度的提高下游性能?(2)“最优”适应矩阵 Δ W \Delta W ΔW是否真的存在秩缺陷?如果是,在实践中使用什么秩比较好?(3) Δ W \Delta W ΔW W W W之间有什么联系, Δ W \Delta W ΔW W W W高度相关吗?与 W W W相比, Δ W \Delta W ΔW有多大?

应该对Transformer架构中的哪个权重矩阵应用LoRA?

在有限的参数预算下,应该利用LoRA调整哪一类权重,以获得下游任务的最佳性能?前面只考虑自注意力模块的权重矩阵。在GPT-3 175B上设置了18M的参数预算(如果存储在FP16中,大约为35M)。如果只调整一种注意力权重,则所有96层的参数预算为r=8;如果调整两种注意力权重,所有96层的参数预算为r=4,具体的情况如下表所示。
在这里插入图片描述
将所有参数都放在 Δ W q \Delta W_q ΔWq Δ W k \Delta W_k ΔWk中会导致性能明显下降,而同时调整 W q W_q Wq W v W_v Wv则会产生最佳效果。这表明,即使是四级权重也能捕捉到 Δ W \Delta W ΔW中的足够信息,因此调整更多的权重矩阵比调整单一类型权重类型要好。

如何对LoRA中的秩进行优化?

将注意力转向秩r对模型性能的影响。调整了 W q , W v {W_q, W_v} Wq,Wv W q , W k , W v , W c {W_q, W_k, W_v, W_c} Wq,Wk,Wv,Wc W q W_q Wq进行对比,对比结构如下图所示
在这里插入图片描述
从上图可以看到,LoRA在r非常小的情况下( W q , w v {W_q, w_v} Wq,wv W q W_q Wq更小的情况下)已经具有很强的竞争力。这表明更新矩阵 Δ W \Delta W ΔW的“内在秩”可能非常小。为了进一步支持这一发现,检查了不同r选择和不同随机种子学习到的子空间的重叠情况。因此作者认为增加r并不能覆盖更有意义的子空间,这表明低秩适应矩阵就足够了。
不同r之间的子空间相似性:给定 A r = 8 A_{r=8} Ar=8 A r = 64 A_{r=64} Ar=64,即使用相同的预训练模型学习的r=8和64的适应矩阵,进行奇异值分解,得到右旋单元矩阵 U A r = 8 U_{A_{r=8}} UAr=8 U A r = 64 U_{A_{r=64}} UAr=64。希望得到的回答是 U A r = 8 ( 1 ≤ i ≤ 8 ) U_{A_{r=8}}(1\le i \le 8) UAr=8(1i8)中的前i个奇异向量所跨子空间有多少包含在 $ U_{A_{r=64}}(1 \le j \le 64)$中前j个奇异向量所跨的子空间中?通常使用基于Grassmann距离的归一化子空间相似性来测量这一数量。
ϕ ( A r = 8 , A r = 64 , i , j ) = ∥ U A r = 8 i ⊤ U A r = 64 j ∥ F 2 min ⁡ ( i , j ) ∈ [ 0 , 1 ] \phi(A_{r=8}, A_{r=64, i, j})=\frac{\left \| U_{A_{r=8}} ^{i\top } U_{A_{r=64}} ^j\right \|_F^2 }{\min (i, j) } \in \left [ 0, 1 \right ] ϕ(Ar=8,Ar=64,i,j)=min(i,j) UAr=8iUAr=64j F2[0,1]
其中 U A r = 8 i U_{A_{r=8}} ^i UAr=8i表示 U A r = 8 U_{A_{r=8}} UAr=8与前i个奇异向量相对应的列。 ϕ ( ∗ ) \phi (*) ϕ()的范围是[0, 1],其中1代表子空间完全重叠,0表示完全分离。有关i和j的变化时 ϕ \phi ϕ的变化情况可以参照下图。
在这里插入图片描述
从上图可以观察到,在 A r = 8 A_{r=8} Ar=8 A r = 64 A_{r=64} Ar=64之间,顶部奇异向量对应的方向有明显重叠,而其他方向则没有。具体来说是 A r = 8 A_{r=8} Ar=8 Δ W v ( r e s p . Δ W q ) \Delta W_v (resp. \Delta W_q) ΔWv(respWq) A r = 64 A_{r=64} Ar=64 Δ W v ( r e s p . Δ W q ) \Delta W_v(resp. \Delta W_q) ΔWv(respWq)共享一个维度为1的子空间,归一化相似度大于0.5,这就解释了r=1在GPT-3的下游任务上表现相当出色。
由于 A r = 8 A_{r=8} Ar=8 A r = 64 A_{r=64} Ar=64都是使用相同的预训练模型学习的,上图显示了 A r = 8 A_{r=8} Ar=8 A r = 64 A_{r=64} Ar=64的顶部奇异向量方向是最有用的,而其他方向可能包含训练过程中累积的随机噪声,因此,自适应矩阵确实可以有一个非常低的秩。

不同随机种子之间的子空间相似性:通过绘制两个随机种子运行之间的归一化子空间相似性进一步证实了这一点,具体情况如下图所示。与 Δ W v \Delta W_v ΔWv相比, Δ W q \Delta W_q ΔWq似乎具有更高的“内在秩”。因为两次运行对 Δ W q \Delta W_q ΔWq学习到了更多共同的奇异值方向。作为比较,作者还绘制了两个随机高斯矩阵,它们之间没有任何共同的奇异值方向。
在这里插入图片描述

适应矩阵 Δ W \Delta W ΔW W W W对比如何?

作者进一步研究了 Δ W \Delta W ΔW W W W之间的关系,特别是 Δ W \Delta W ΔW是否与 W W W高度相关(或者从数学角度看, Δ W \Delta W ΔW是否主要包含在 W W W的顶部奇异方向中)?另外,与 W W W中的相应方向相比, Δ W \Delta W ΔW有多"大"?这可以解释适应预训练语言模型的基本机制。

为了回答这些问题,通过计算 U ⊤ W V ⊤ U^{\top}WV_{\top} UWV将W投影到 Δ W \Delta W ΔW的r维子空间上, U / V U/V U/V Δ W \Delta W ΔW的左/右奇异向量矩阵。然后,通过对比 ∥ U ⊤ W V ⊤ ∥ F \left \| U^{\top}WV^{\top} \right \|_F UWV F ∥ W ∥ F \left \| W \right \|_F WF之间的Frobenius规范。作为对比,还可以使用W的的前r个奇异向量或随机矩阵替换 U , V U, V U,V,计算 ∥ U ⊤ W V ⊤ ∥ F \left \| U^{\top} WV^{\top} \right \|_F UWV F,对应的结果如下图所示。
在这里插入图片描述
从上图中可以得到与随机矩阵相比, Δ W \Delta W ΔW W W W有更强的相关性,这说明 Δ W \Delta W ΔW方法了 W W W中已有的一些特征;其次, Δ W \Delta W ΔW并没有重复 W W W的顶部奇异方向,而是只放大了 W W W中没有强调的方向。第三,扩增因子比较大:当 r = 4 r=4 r=4时为 21.5 ≈ 6.91 / 0.32 21.5 \approx 6.91/0.32 21.56.91/0.32。这表明,低秩适应矩阵可能会放大特定下游任务的重要特征,而这些特征在一般的预训练模型中已经学习到, 但却没有得到强调。

结论与未来的工作

对庞大的语言模型进行微调,所需要的硬件成本和为不同任务托管独立实验的存储/交换成本都是非常昂贵的。论文提出的LoRA是一种高效的适应策略,既不会带来推理延迟,也不会减少输入序列长度,同时还能保持较高的模型质量。重要的是,通过共享绝大多数模型参数,它可以在作为服务部署时快速切换任务。虽然主要关注的是Transformer语言模型,但所提出的原则普遍适用于任何具有密集层的神经网络。

未来可以工作的方向还有很多。

  • LoRA可以与其他高效的适应方法相结合,从而提供正交改进。
  • 微调和LoRA背后的机制尚不清楚——在预训练中学习到的特征是如何在转换为在下游任务中表现出色的?作者认为LoRA比全微调更容易回答这个问题。
  • 作者主要是依赖启发式的方法来选择应用LoRA的权重矩阵。不知道还有没有更底层的方法?
  • Δ W \Delta W ΔW的秩缺陷也表明 W W W也可能存在秩缺陷,这也是未来工作的灵感来源。
  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nlp_xiaogui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值