当前位置:   article > 正文

[论文笔记]LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

[论文笔记]LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

引言

今天带来大模型高效微调必须了解的LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

自然语言处理的一个重要范式包括在通用领域数据上进行大规模预训练,并适应特定任务或领域。随着我们对更大的模型进行预训练,重新训练所有模型参数的完全微调变得不太可行。

作者提出了低秩适应,或称LoRA,它冻结了预训练模型的权重,并将可训练的秩分解矩阵注入到Transformer架构的每一层中,大大减少了下游任务的可训练参数数量。

尽管它具有更少的可训练参数、更高的训练吞吐量,并且与适配器不同,没有额外的推断延迟。作者在https://github.com/microsoft/LoRA上提供了实现,适用于RoBERTa、DeBERTa和GPT-2。

总体介绍

自然语言处理中的许多应用依赖于将一个大规模预训练的语言模型适应到多个下游应用中。这种适应通常是通过微调来完成的,微调会更新预训练模型的所有参数。微调的主要缺点在于新模型包含与原模型一样多的参数。随着每隔几个月训练更大的模型,对于GPT-2或RoBERTa large而言,这只是一个不便,但对于具有1750亿可训练参数的GPT-3】来说,这变成了一个关键的部署挑战。

许多人试图通过仅调整一些参数或为新任务学习外部模块来缓解这一问题。这样一来,我们只需为每个任务存储和加载少量特定于任务的参数,这在部署时极大地提高了操作效率。然而,现有技术往往会通过增加模型深度或减少模型可用序列长度、引入推断延迟。更重要的是,这些方法往往无法与微调基线相匹配,构成了效率和模型质量之间的权衡。

image-20240516070248206

作者受到Li等人Aghajanyan等人的启发,他们表明学习的过度参数化的模型实际上存在于低内在维度中。作者假设模型适应过程中的权重变化也具有低内在秩,提出了低秩适应(Low-Rank Adaptation,LoRA)方法。LoRA允许我们间接地通过优化密集层的秩分解矩阵来训练一些密集层,同时冻结预训练权重,如图1所示。以GPT-3 175B为例,即使在完整秩( d d d)高达12288的情况下,非常低的秩(即图1中的 r r r可以是 1 1 1 2 2 2)就足够了,使得LoRA在存储和计算上都非常高效。

LoRA具有几个关键优势:

  • 预训练模型可以被共享并用于构建许多不同任务的小型LoRA模块。可以冻结共享模型,并通过替换图1中的矩阵 A A A B B 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 0 W_0 W0指的是预训练权重矩阵, ∆ W ∆W W指的是在适应期间的累积梯度更新。使用 r r r来表示LoRA模块的秩。使用Adam进行模型优化,并使用Transformer MLP前馈维度 d f f n = 4 × d m o d e l d_{ffn} = 4×d_{model} dffn=4×dmodel

问题陈述

这里将语言建模作为作者的动机用例。以下是语言建模问题的简要描述,特别是在给定特定任务提示的情况下最大化条件概率。

假设有一个由 Φ Φ Φ参数化的预训练的自回归语言模型 P Φ ( y ∣ x ) P_Φ(y|x) PΦ(yx)。例如, P Φ ( y ∣ x ) P_Φ(y|x) PΦ(yx)可以是基于Transformer架构的通用多任务学习器,如GPT。考虑将这个预训练模型适应到下游条件文本生成任务,例如摘要、机器阅读理解和NL2SQL。每个下游任务由上下文-目标对的训练数据集表示: Z = { ( x i , y i ) } i = 1 , . . , N \mathcal Z = \{(x_i,y_i)\}_{i=1,..,N} Z={(xiyi)}i=1,..,N,其中 x i x_i xi y i y_i yi都是标记序列。例如,在NL2SQL中, x i x_i xi是一个自然语言查询, y i y_i yi是其相应的SQL命令;对于摘要, x i x_i xi是一篇文章的内容, y i y_i yi是其摘要。

在全量微调过程中,模型被初始化为预训练权重 Φ 0 Φ_0 Φ0,并通过反复通过梯度最大化条件语言建模目标而更新为 Φ 0 + ∆ Φ Φ_0 + ∆Φ Φ0+∆Φ
max ⁡ Φ ∑ ( x , y ) ∈ Z ∑ t = 1 ∣ y ∣ log ⁡ ( P Φ ( y t ∣ x , y < t ) ) (1) \max_\Phi \sum_{(x,y) \in \mathcal Z } \sum_{t=1} ^{|y|} \log (P_\Phi(y_t|x,y_{<t})) \tag 1 Φmax(x,y)Zt=1ylog(PΦ(ytx,y<t))(1)
全量微调的主要缺点之一是,对于每个下游任务,我们学习一个不同的参数集 ∆ Φ ∆Φ ∆Φ,其维度 ∣ ∆ Φ ∣ |∆Φ| ∣∆Φ∣等于 ∣ Φ 0 ∣ |Φ_0| Φ0。因此,如果预训练模型很大(例如,像GPT-3, ∣ Φ 0 ∣ |Φ_0| Φ0约为1750亿),存储和部署许多独立的微调模型实例可能具有挑战性,甚至不可行。

在本篇工作,作者采用一种更具参数效率的方法,其中特定于任务的参数增量 ∆ Φ = ∆ Φ ( Θ ) ∆Φ = ∆Φ(Θ) ∆Φ=∆Φ(Θ)通过一个更小尺寸的参数集 Θ Θ Θ进行进一步编码, ∣ Θ ∣ ≪ ∣ Φ 0 ∣ |Θ| \ll |Φ_0| ∣Θ∣Φ0。因此,找到 ∆ Φ ∆Φ ∆Φ的任务变为对 Θ Θ Θ进行优化:
max ⁡ Θ ∑ ( x , y ) ∈ Z ∑ t = 1 ∣ y ∣ log ⁡ ( P Φ 0 + Δ Φ ( Θ ) ( y t ∣ x , y < t ) ) (2) \max_Θ \sum_{(x,y) \in \mathcal Z } \sum_{t=1} ^{|y|} \log (P_{\Phi_0 + \Delta \Phi(Θ)}(y_t|x,y_{<t})) \tag 2 Θmax(x,y)Zt=1ylog(PΦ0+ΔΦ(Θ)(ytx,y<t))(2)

作者提出使用低秩表示来编码 ∆ Φ ∆Φ ∆Φ,这既具有计算效率又具有内存效率。当预训练模型为GPT-3 175B时,可训练参数的数量 ∣ Θ ∣ |Θ| ∣Θ∣可以小至 ∣ Φ 0 ∣ |Φ_0| Φ0的0.01%。

现有的解决方案不够好吗?

我们要解决的问题绝非新问题。自迁移学习问世以来,已有数十项工作致力于使模型适应更加参数和计算效率。以语言建模为例,存在两种主要的高效适应策略:添加适配器层或优化某些形式的输入层激活。然而,这两种策略都有其局限性,特别是在大规模和延迟敏感的生产场景中。

适配器层引入推理延迟 有许多适配器的变体。这里专注于Houlsby等人最初设计的版本,每个Transformer块有两个适配器层;以及Lin等人最近的版本,每个块只有一个适配器层,但增加了一个额外的LayerNorm。虽然可以通过修剪层或利用多任务设置来减少总体延迟,但没有直接的方式来绕过适配器层中的额外计算。这似乎不是问题,因为适配器层旨在通过具有较小瓶颈维度(有时<原始模型的1%)来限制它们可以增加的FLOP数量,从而具有少量参数。然而,大型神经网络依赖硬件并行性来保持低延迟,而适配器层必须按顺序处理。这在在线推理设置中产生差异,其中批大小通常只有一个。在没有模型并行性的通用场景中,例如在单个GPU上运行GPT-2,即使具有非常小的瓶颈维度(表1),使用适配器时我们也会看到延迟明显增加。

image-20240516072735132

当我们需要像Shoeybi等人那样分片模型时,问题会变得更加严重,因为额外的深度需要更多同步GPU操作,如AllReduce和Broadcast,除非我们多次冗余存储适配器参数。

直接优化提示很困难 另一方面,如prefix tuning所示,面临不同的挑战。前缀调整很难优化,并且其性能在可训练参数中非单调变化。更根本地,为适应保留一部分序列长度必然会减少用于处理下游任务的序列长度,调整提示的性能可能会更低。

方法

这里描述了LoRA的简单设计及其实际好处。这里概述的原则适用于深度学习模型中的任何密集层,尽管在实验中,只关注Transformer语言模型中的某些权重,因为这是作者的动机使用案例。

低秩参数化更新矩阵

神经网络包含许多执行矩阵乘法的密集层。这些层中的权重矩阵通常具有满秩。在适应特定任务时,Aghajanyan等人表明,预训练语言模型具有低内在维度,即使对较小子空间进行随机投影,仍能有效学习。受此启发,作者假设在适应过程中权重的更新也具有低内在秩。对于预训练权重矩阵 W 0 ∈   R d × k W_0 ∈ \ R ^{d×k} W0 Rd×k,通过低秩分解 W 0 + ∆ W = W 0 + B A W_0 + ∆W = W_0 + BA W0+W=W0+BA 来约束其更新,其中 B ∈ R d × r B ∈ \R ^{d×r} BRd×r A ∈ R r × k A ∈ \R^{r×k} ARr×k,秩 r ≪ min ⁡ ( d , k ) r \ll \min(d, k) rmin(d,k)​。

在训练过程中, W 0 W_0 W0被冻结,不接收梯度更新,而 A A A B B B包含可训练参数。注意, W 0 W_0 W0 ∆ W = B A ∆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 (3) h = W_0 x + \Delta Wx = W_0 x + BAx \tag 3 h=W0x+ΔWx=W0x+BAx(3)
在图1中说明了该重新参数化。对 A A A使用随机高斯初始化,对 B B B使用零初始化,因此在训练开始时 ∆ W = B A ∆W = BA W=BA为零。然后通过 α r \frac{\alpha}{r} rα ∆ W ∆W W进行缩放,其中 α α α r r r中的一个常数。在使用Adam进行优化时,如果我们适当地缩放初始化,调整 α α α与调整学习率几乎是相同的。因此,我们只需将 α α α设置为尝试的第一个 r r r,而无需调整它。这种缩放有助于减少在变化 r r r时重新调整超参数的需求(Yang等人)。

全量微调的一般化 更一般的微调形式允许训练预训练参数的子集。LoRA更进一步,不需要在适应过程中累积梯度更新到权重矩阵以具有完整秩。这意味着当将LoRA应用于所有权重矩阵并训练所有偏置时,通过将LoRA秩 r r r设置为预训练权重矩阵的秩来大致恢复了完整微调的表现力。换句话说,随着可训练参数数量的增加,训练LoRA大致收敛于训练原始模型,而基于适配器的方法收敛于MLP,基于前缀的方法收敛于无法处理长输入序列的模型。

无额外的推断延迟 在生产环境中部署时,我们可以明确计算并存储 W = W 0 + B A W = W_0 + BA W=W0+BA,并像往常一样执行推理。注意, W 0 W_0 W0 B A BA BA都在 R d × k \R^{d×k} Rd×k中。当我们需要切换到另一个下游任务时,我们可以通过减去 B A BA BA然后添加不同的 B 0 A 0 B_0A_0 B0A0来恢复 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) (WqWkWvWo)以及MLP模块中有两个。我们将 W q W_q Wq(或 W k W_k Wk W v W_v Wv)视为一个维度为 d m o d e l × d m o d e l d_{model}×d_{model} dmodel×dmodel的单矩阵,即使输出维度通常被切分为注意力头。

为简单起见和参数效率,作者仅研究适应下 游任务的注意力权重,并冻结MLP模块(因此在下游任务中不对其进行训练)。作者进一步研究了在Transformer中适应不同类型的注意力权重矩阵的影响。

实际优势和局限性 最大的好处来自内存和存储使用量的减少。对于使用Adam训练的大型Transformer,如果 r ≪ d m o d e l r \ll d_{model} rdmodel,我们可以将VRAM使用量减少多达2/3,因为我们不需要为冻结参数存储优化器状态。在GPT-3 175B上,我们将训练期间的VRAM消耗从1.2TB减少到350GB。当 r = 4 r = 4 r=4且仅适应查询和值投影矩阵时,检查点大小大约减少了10000倍(从350GB减少到35MB)。这使我们能够使用更少的GPU进行训练并避免I/O瓶颈。另一个好处是,我们可以在部署时以更低的成本在不同任务之间切换,只需交换LoRA权重而不是所有参数。这允许在存储预训练权重的机器上动态创建许多定制模型,可以随时在其中交换。与全量微调相比,在GPT-3 175B上训练时有25%的加速,因为我们不需要计算大多数参数的梯度。

LoRA也有其局限性。例如,例如,如果选择将 A A A B B B吸收到 W W W中以消除额外的推理延迟,那么在单个前向传递中对不同任务的输入进行批处理并不是一件简单的事情。尽管可以选择不合并权重并动态选择用于批处理中样本的LoRA模块,用于不太关键的延迟的情况。

实验

评估了LoRA在RoBERTa、DeBERTa和GPT-2上的下游任务性能,然后再扩展到GPT-3 175B。实验涵盖了从自然语言理解到生成的广泛任务。具体而言,在RoBERTa和DeBERTa上使用了GLUE基准进行评估。按照Li&Liang在GPT-2上的设置进行了直接比较,并在GPT-3上进行了大规模实验,包括WikiSQL和SAMSum(对话摘要)。

基准

为了与其他基准进行广泛比较,复制了先前研究中使用的设置,并在可能的情况下重用他们的报告结果。然而,这意味着某些基准可能只出现在特定的实验中。

微调 是一种常用的自适应方法。在微调过程中,模型的初始化权重和偏置与预训练的模型保持一致,并对所有模型参数进行梯度更新。一个简单的变体是只更新部分层而冻结其他层。在GPT-2上包括了一种先前研究中报告的此类基线( F T T o p FT^{Top} FTTop​​),它只微调了最后两层。

Bias-only或BitFit 只训练偏置向量而冻结其他所有内容的基线称为仅偏置训练(Bias-only或BitFit)。

前缀嵌入调整(PreEmbed) 在输入标记之间插入特殊标记。这些特殊标记具有可训练的词嵌入,并且通常不在模型的词汇表中。放置这些标记的位置可能会影响性能。我们关注前缀和中缀,前者将这些标记前置到提示之前,后者将其附加到提示之后;使用 l p l_p lp l i l_i li分别表示前缀和中缀标记的数量。可训练的参数量是 ∣ Θ ∣ = d m o d e l × ( l p + l i ) |Θ| = d_{model} \times (l_p + l_i) ∣Θ∣=dmodel×(lp+li)

前缀层调整(PreLayer) 是前缀嵌入调整的扩展。与仅为一些特殊标记学习词嵌入(或等效地,嵌入层之后的激活)不同,学习每个Transformer层之后的激活。以前层次计算出的激活值被可训练的激活值替换。可训练参数的数量为 ∣ Θ ∣ = L × d m o d e l × ( l p + l i ) |Θ|= L × d_{model} ×(l_p + l_i) ∣Θ∣=L×dmodel×(lp+li),其中 L L L​为Transformer层数。

Adapter调整Houlsby等人提出的Adapter调整方法中,在自注意模块(和MLP模块)与后续的残差连接之间插入Adapter层。Adapter层由两个带有偏置的全连接层组成,中间有一个非线性函数。称之为原始设计 A d a p t e r H Adapter^H AdapterH。最近,Lin等人提出了一种更高效的设计,只在MLP模块之后和LayerNorm之后应用Adapter层。称之为 A d a p t e r L Adapter^L AdapterL。这与Pfeiffer等人提出的另一种设计非常相似,称之为 A d a p t e r P Adapter^P AdapterP。还包括另一个基准AdapterDrop,它删除了一些适配器层以提高效率( A d a p t e r D Adapter^D AdapterD)。

在所有情况下,有 ∣ Θ ∣ = 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 |Θ|= \hat L_{Adpt} ×(2×d_{model} ×r+r+d_{model})+ 2× \hat L_{LN} ×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​是可训练LayerNorm的数量。

LoRA 在现有权重矩阵的并行位置添加了可训练的秩分解矩阵对。本工作在大多数实验中仅将LoRA应用于 W q W_q Wq W v W_v Wv。可训练参数的数量由秩 r r r和原始权重的形状决定: ∣ Θ ∣ = 2 × L ^ L o R A × d m o d e l × r |Θ|= 2 × \hat L_{LoRA} × d_{model} × r ∣Θ∣=2×L^LoRA×dmodel×r,其中 L ^ L o R A \hat L_{LoRA} L^LoRA​是应用LoRA的权重矩阵数量。

ROBERTA BASE/LARGE

尽管在最近几年,在NLP排行榜上,RoBERTa被更大的模型取代,但在从业者中,由于其规模而言,它仍然是一种具有竞争力和受欢迎的预训练模型。从HuggingFace Transformers库中获取预训练的RoBERTa base和RoBERTa large,并评估不同的高效适应方法在GLUE基准测试中的性能。为了确保公平比较,在与adapter比较时对评估LoRA的方式进行了两个重要的改变。首先,对所有任务使用相同的批次大小,并使用序列长度为128以匹配adapter的基准线。其次,将模型初始化为MRPC、RTE和STS-B的预训练模型,而不是已经适应于MNLI的模型,如微调基准线。

DEBERTA XXL

image-20240516155027868

DeBERTa是BERT的一个更近期的变体,它在更大的规模上进行训练,并在GLUE和SuperGLUE等基准测试中表现出很高的竞争力。评估LoRA是否仍然能够在GLUE上与完全微调的DeBERTa XXL的性能相匹配。结果见表2(底部部分)。

GPT-2 MEDIUM/LARGE

image-20240516155137862

在展示了LoRA可以成为NLU中与完全微调相竞争的替代方法之后,我们希望回答LoRA在NLG模型(如GPT-2 medium和large)上是否仍然占据优势。由于篇幅限制,仅在E2E NLG Challenge(表3)中呈现结果。

扩展到GPT-3 175B

作为对LoRA的最后一次压力测试,将其扩展到具有1750亿参数的GPT-3。由于训练成本较高,仅报告给定任务的随机种子的典型标准差,而不是为每个条目提供标准差。

image-20240516155220857

如表4所示,LoRA在所有三个数据集上与或超过了完全微调基准线。并非所有方法在拥有更多可训练参数时都会得到单调的好处,如图2所示。当在前缀嵌入调整中使用超过256个特殊标记,或者在前缀层调整中使用超过32个特殊标记时,可以看到明显的性能下降。作者怀疑拥有更多的特殊标记会导致输入分布进一步远离预训练数据分布。

image-20240516155254116

相关工作

Transformer语言模型 Transformer是一种序列到序列的架构,广泛使用自注意力机制。Radford等人通过使用一堆Transformer解码器将其应用于自回归语言建模。自那以后,基于Transformer的语言模型在NLP领域占据主导地位,在许多任务上取得了最先进的成果。随着BERT和GPT-2的出现,出现了一种新的范例,即大规模预训练的Transformer语言模型在通用领域数据预训练后,通过在特定任务的数据上进行微调,相比直接在特定任务数据上训练,可以显著提高性能。训练更大的Transformer通常会得到更好的性能,并且仍然是一个活跃的研究方向。

提示工程和微调 尽管GPT-3 175B可以通过只有几个额外的训练示例来调整其行为,但结果很大程度上取决于输入提示。这需要通过实证的方法来组合和格式化提示,以最大化模型在所需任务上的性能,这被称为提示工程或提示调优。微调重新训练了一个在通用领域进行了预训练的模型,使其适应特定任务。它的变体包括只学习一部分参数,但实践者经常重新训练所有参数以最大化下游性能。然而,GPT-3 175B的巨大规模使得以通常的方式进行微调变得具有挑战性,因为它产生了一个大的检查点,并且由于与预训练相同的内存占用,硬件的门槛也很高。

参数高效适应 许多人提出在神经网络的现有层之间插入适配器层。作者的方法使用类似的瓶颈结构对权重更新施加低秩约束。关键的功能差异在于学习权重可以在推理期间与主要权重合并,因此不会引入任何延迟,而适配器层则不具备这种特性。适配器的一个现代扩展是COMPACTER,它使用Kronecker乘积以一些预定的权重共享方案对适配器层进行参数化。类似地,将LoRA与其他基于张量积的方法相结合可能会提高其参数效率。最近,许多人提出在微调之前优化输入词嵌入,类似于对提示工程进行连续和可微分的泛化。然而,这一系列工作只能通过在提示中使用更多的特殊标记来进行扩展,这会占用可用的序列长度,用于任务标记,而当学习位置编码时,特殊标记会占用一部分序列长度。

深度学习中的低秩结构 低秩结构在机器学习中非常常见。许多机器学习问题具有某种固有的低秩结构。此外,众所周知,对于许多深度学习任务,尤其是那些具有过度参数化的神经网络,训练后的神经网络在低秩特性方面表现出色。一些先前的工作甚至在训练原始神经网络时明确地施加低秩约束;然而,这些工作中没有一个考虑到对冻结模型的低秩更新以适应下游任务。在理论文献中,已知神经网络在某些具有特定低秩结构的概念类别时,优于其他经典学习方法。

理解低秩更新

鉴于LoRA的实证优势,作者进一步解释从下游任务中学到的低秩适应的特性。需要注意的是,低秩结构不仅降低了硬件门槛,使我们能够并行运行多个实验,而且还提供了更新权重与预训练权重之间相关性的更好解释能力。研究重点是GPT-3 175B,在该模型上,实现了可训练参数的最大降低(高达10000倍),同时没有对任务性能产生不利影响。

进行了一系列实证研究,以回答以下问题:1)在参数预算限制下,应该对预训练的Transformer中的哪些权重矩阵进行适应以最大化下游性能?2)"最优"的适应矩阵 ∆ W ∆W W是否真的是秩缺失的?如果是,实践中应该使用什么样的秩?3) ∆ W ∆W W W W W之间的关系是什么? ∆ W ∆W W W W W高度相关吗?与 W W W相比, ∆ W ∆W W有多大?

我们应该将LoRA应用于Transformer的哪些权重矩阵?

image-20240516160113334

在给定有限的参数预算下,我们应该使用LoRA适应哪些类型的权重,以获得在下游任务上最佳性能?作者仅考虑自注意模块中的权重矩阵。在GPT-3 175B上,设置了18M的参数预算(如果以FP16存储,大约为35MB),这对应于如果我们适应一种类型的注意力权重, r = 8 r = 8 r=8,或者适应两种类型, r = 4 r = 4 r=4,用于所有 96 96 96层。结果见表5。需要注意的是,将所有参数放在 ∆ W q ∆W_q Wq ∆ W k ∆W_k Wk中会导致显著较低的性能,而同时适应 W q W_q Wq W v W_v Wv会产生最好的结果。这表明,即使秩为 4 4 4 ∆ W ∆W W​中捕捉到了足够的信息,所以适应更多的权重矩阵优于适应具有更大秩的单个类型的权重。

LoRA中最优的秩r是什么?

关注秩 r r r对模型性能的影响。我们适应 { W q , W v } , { W q , W k , W v , W c } \{W_q,W_v\},\{W_q,W_k,W_v,W_c\} {Wq,Wv},{Wq,Wk,Wv,Wc}和仅 W q W_q Wq​进行比较。

image-20240516160314583

表6显示,令人惊讶的是,LoRA在非常小的秩 r r r上(特别是对于 { W q , W v } \{W_q,W_v\} {Wq,Wv}而言)就已经具有竞争力的性能。这表明,更新矩阵 ∆ W ∆W W可能具有非常小的“内在秩”。为了进一步支持这一发现,检查了通过不同的 r r r和不同的随机种子学习到的子空间之间的重叠性。作者认为增加 r r r并不能覆盖更有意义的子空间,这表明低秩适应矩阵已经足够。

不同 r r r之间的子空间相似性 给定 A r = 8 A_{r=8} Ar=8 A r = 64 A_{r=64} Ar=64,它们是使用相同的预训练模型学到的秩 r = 8 r = 8 r=8 64 64 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 U_{A_{r=8}} UAr=8的前 i i i个奇异向量张成的子空间 ( 1 ≤ i ≤ 8 ) (1≤i≤8) (1i8) U A r = 64 U_{A_{r=64}} UAr=64的前 j j j个奇异向量张成的子空间 ( 1 ≤ j ≤ 64 ) (1≤j≤64) (1j64)中包含了多少?使用基于Grassmann距离的归一化子空间相似性来衡量这个数量。

image-20240516160645148

其中 U A r = 8 i U_{A_{r=8}}^i UAr=8i 中对应于 U A r = 8 U_{A_{r=8}} UAr=8 i i i个奇异向量的列表示为 ϕ ( ⋅ ) \phi(\cdot) ϕ(),其中 φ ( ⋅ ) φ(\cdot) φ()的值范围为 [ 0 , 1 ] [0,1] [0,1],其中 1 1 1表示子空间的完全重叠, 0 0 0表示完全分离。如图3所示,当我们改变 i i i j j j时,观察 ϕ \phi ϕ 的变化。这里只考虑了第48层(共96层),但结论也适用于其他层。

image-20240516161120422

从图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 ∆ W v ∆W_v Wv(或 ∆ W q ∆W_q Wq)和 A r = 64 A_{r=64} Ar=64 ∆ W v ∆W_v Wv(或 ∆ W q ∆W_q Wq)与归一化相似度大于 0.5 0.5 0.5的维数为 1 1 1的子空间重叠,这解释了为什么对于GPT-3下游任务, r = 1 r = 1 r=1的表现相当不错。

由于 A r = 8 A_{r=8} Ar=8 A r = 64 A_{r=64} Ar=64都是使用相同的预训练模型学习得到的,图3表明 A r = 8 A_{r=8} Ar=8 A r = 64 A_{r=64} Ar=64​的顶部奇异向量方向是最有用的,而其他方向可能主要包含训练过程中累积的随机噪声。因此,适应矩阵的确可以具有非常低的秩。

image-20240516161712654

不同随机种子之间的子空间相似性 通过绘制 r = 64 r = 64 r=64的两个随机种子运行之间的归一化子空间相似性来进一步验证这一点,如图4所示。 ∆ W q ∆W_q Wq似乎比 ∆ W v ∆W_v Wv具有更高的内在秩,因为对于 ∆ W q ∆W_q Wq,两个运行学习到了更多的共同奇异值方向,这与表6中的实证观察一致。

作为比较,作者还绘制了两个随机高斯矩阵,它们之间没有任何共同的奇异值方向。

适应矩阵∆W与W相比如何?

进一步研究了 ∆ W ∆W W W W W之间的关系。特别是, ∆ W ∆W W W W W是否高度相关?(或者在数学上, ∆ W ∆W W是否主要包含在 W W W的顶部奇异方向中?)此外,与 W W W相比, ∆ W ∆W W在其相应的方向上有多“大”?这可以揭示适应预训练语言模型的潜在机制。

为了回答这些问题,通过计算$U^\top WV^\top 来将 来将 来将W 投影到 投影到 投影到∆W 的 的 r$维子空间上,其中 U / V U/V U/V ∆ W ∆W W的左/右奇异向量矩阵。然后,比较 ∣ ∣ U ⊤ W V ⊤ ∣ ∣ F ||U^\top WV^\top||_F ∣∣UWVF ∣ ∣ W ∣ ∣ F ||W||_F ∣∣WF之间的Frobenius范数。作为对比,还计算了用 W W W的前 r r r个奇异向量或一个随机矩阵替换 U U U V V V后的 ∣ ∣ U ⊤ W V ⊤ ∣ ∣ F ||U^\top WV^\top||_F ∣∣UWVF​。从表7中我们可以得出几个结论。

image-20240516162300455

首先,与随机矩阵相比, ∆ W ∆W W W W W具有更强的相关性,这表明 ∆ W ∆W W放大了 W W W中已经存在的一些特征。其次, ∆ W ∆W W不是重复 W W W的顶部奇异方向,而是只放大了在 W W W中没有强调的方向。第三,放大因子相当大:对于 r = 4 r = 4 r=4 21.5 ≈ 6.91 / 0.32 21.5 ≈ 6.91 / 0.32 21.56.91/0.32。这表明低秩适应矩阵可能放大了针对特定下游任务的重要特征,这些特征在通用预训练模型中被学习到但没有被强调。

结论

作者提出了LoRA,这是一种高效的适应策略,既不引入推理延迟,也不减少输入序列长度,同时保持高模型质量。重要的是,它允许在部署为服务时通过共享绝大部分模型参数进行快速任务切换。

总结

⭐ 作者提出了LoRA,冻结了预训练模型的权重,将可训练的秩分解矩阵注入到Transformer架构的每一层中,大大减少了下游任务的可训练参数数量。同时秩分解矩阵和原始矩阵可以合并,可以不引入推理延迟。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/607115
推荐阅读
相关标签
  

闽ICP备14008679号