【论文翻译】LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
论文地址:
https://arxiv.org/pdf/2106.09685.pdf
代码地址:
https://github.com/microsoft/LoRA
摘要
自然语言处理的一个重要范式包括在一般领域数据上进行大规模的预训练 ,并适应特定的任务或领域。随着我们对更大的模型进行预训练,重新训练所有模型参数的完全微调变得不太可行。以GPT-3 175B为例--部署独立的微调模型实例,每个都有175B的参数,是非常昂贵的。我们提出了Low-Rank Adaptation,即LoRA,它冻结了预先训练好的模型权重,并将可训练的秩解矩阵注入到Transformer架构的每一层,大大减少了下游任务的可训练参数的数量。与用Adam微调的GPT-3 175B相比,LoRA可以将可训练参数的数量减少10,000倍 ,对GPU内存的要求减少3倍 。LoRA在 RoBERTa、DeBERTa、GPT-2和GPT-3上的模型质量表现与微调持平或更好,然而它有更少的可训练参数,更高的训练吞吐量,而且与适配器不同,没有额外的推理延迟。我们还对语言模型适配中的rank-deficiency进行了实证调查,这说明了LoRA的功效。我们发布了一个便于LoRA与PyTorch模型集成的软件包,并提供了我们对RoBERTa、DeBERTa和GPT-2的实现和模型检查点,网址是https://github.com/microsoft/LoRA。
介绍
自然语言处理中的许多应用都依赖于将一个大规模的、预先训练好的语言模型适应于多个下游应用。这种适应通常是通过微调完成的,微调会更新预训练模型的所有参数。
微调的主要缺点是,新模型包含的参数与原模型一样多
。随着更大的模型每隔几个月就被训练一次,这对GPT-2(Radford等人,b)或 RoBERTa large(Liu等人,2019)来说仅仅是一个 "不便",而对于有着175B参数的GPT-3(Brown等人,2020)来说则是一个关键的挑战。
许多人试图通过只调整一些参数或为新任务学习外部模块来缓解这一问题。这样,我们只需要在每个任务的预训练模型的基础上,存储和加载少量特定任务的参数,大大提升了部署时的运行效率。然而,现有的技术往往通过扩展模型深度或减少模型的可用序列长度(Li & Liang,2021;Lester等,2021; Ham-bardzumyan等,2020;Liu等,2021)引入推理延迟(Houlsby等,2019;Rebuffi等, 2017)(第3节)。更重要的是,这些方法往往不能与微调基线相匹配,造成了效率和模型质量之间的权衡。
我们从Li等人(2018a);Aghajanyan等人(2020)那里得到启发,他们表明学到的过度参数化模型实际上位于一个低的内在维度上。我们假设模型适应过程中权重的变化也具有较低的"内在秩",从而导致我们提出的低秩适应(LoRA)方法。LoRA允许我们通过优化密集层在适应过程中的变化的秩分解矩阵来间接地训练神经网络中的一些密集层,而保持预训练的权重冻结,如图1所示。以GPT-3 175B为例,我们表明,即使全秩(即d) 高达12288,一个非常低的秩(即图1中的r可以是1或2)也足够了,这使得LoRA既有存储又有计算效率。
LoRA拥有几个关键优势。
- 一个预先训练好的模型可以被共享,并用于为不同的任务建立许多小的LoRA模块 。我们可以冻结共享模型,并通过替换图1中的矩阵A和B来有效地切换任务,从而大大降低存储需求和任务切换的难度。
- LoRA使训练更加有效,在使用自适应优化器时,硬件门槛降低了3倍,因为我们不需要计算梯度或维护大多数参数的优化器状态。相反,我们只优化注入的、小得多的低秩矩阵。
- 我们简单的线性设计允许我们在部署时将可训练矩阵与冻结权重合并,与完全微调的模型相比,在结构上没有引入推理延迟。
- LoRA与许多先前的方法是正交的,并且可以与许多方法相结合,例如前缀调整。 我们在附录E中提供了一个例子。
术语和约定
:我们经常提到Transformer架构,并使用传统的术语来描述其尺寸。我们把 Transformer层的输入和输出二层大小称为
\(d_{model}\)
。我们用
\(W_{q} , W_{k} , W_{v} , 和W_{o}\)
来指代在自我注意模块中的查询/键/值/输出投影矩阵。
\(W或W_{0}\)
指的是预先训练好的权重矩阵,
\(∆W\)
是它在适应过程中的累积梯度更新。我们用
\(r\)
来表示一个LoRA模块的秩。我们遵循( Vaswani等人,2017;Brown等人,2020)规定的惯例,使用Adam(Loshchilov & Hutter, 2019;Kingma & Ba,2017)进行模型优化,使用Transformer MLP前馈维度
\(dffn = 4 × dmodel\)
。
问题陈述
虽然我们的建议与训练目标无关,但我们专注于语言建模作为我们的动机用例。下面是对语言建模问题的简要描述,特别是对给定任务特定提示的条件概率的最大化。
假设我们得到一个预训练的自回归语言模型
\(P_{Φ}(y|x)\)
,并以
\(Φ\)
为参数。例如,
\(P_{Φ}(y|x)\)
可以是一个通用的多任务学习器,如基于Transformer架构的GPT(Radford等人,b;Brown等 人,2020)(Vaswani等人,2017)。考虑将这个预训练的模型适应于下游的条件文本生成任务,如总结、机器阅读理解(MRC)和自然语言到SQL(NL2SQL)。每个下游任务都由上下文-目标对的训练数据集表示
\(Z=\{(x_{i},y_{i})\}_{ii=1,..,N}\)
, 其中
\(x_{i}\)
和
\(y_{i}\)
都是标记的序列。例如,在NL2SQL中,
\(x_{i}\)
是一个自然语言查询,
\(y_{i}\)
是其相应的SQL命令;对于摘要,
\(x_{i}\)
是一篇文章的内容,
\(y_{i}\)
是其摘要。
在全面微调期间,模型被初始化为预先训练好的权重
\(Φ_{0}\)
,并通过反复跟踪梯度更新为
\(Φ_{0} + ∆_{Φ}\)
,使条件语言建模的目标最大化:
完全微调的主要缺点之一是,对于每个下游任务,我们都要学习一组不同的参数
\(∆Φ\)
,其维度
\(∆Φ\)
等于
\(Φ0\)
。因此,如果预训练的模型很大(如GPT-3的Φ0 175亿),存储和部署许多独立的微调模型实例可能是一个挑战,即使是可行的。
在本文中,我们采用了一种更有效的参数方法,其中特定任务的参数增量
\(∆Φ = ∆Φ(Θ)\)
被更小规模的参数集Θ进一步编码,且
\(|Θ|<<|Φ0 |\)
。因此,寻找
\(∆Φ\)
的任务变成了对
\(Θ\)
的优化:
在接下来的章节中,我们建议使用低秩表示来编码
\(∆Φ\)
,这样既能提高计算效率,又能提高记忆效率。当预训练模型为GPT-3 175B时,可训练的参数
\(|Θ|\)
的数量可以小到
\(|Φ0|的0.01%\)
。
现有的解决方案还不够好吗?
我们要解决的问题绝不是新问题。自从迁移学习开始以来,有几十项工作试图使模型适应性更强,参数和计算效率更高。参见第6节对一些著名作品的调查。以语言建模为例,在高效适应方面有两种突出的策略:增加适配器层(Houlsby等人,2019;Rebuffi等人,2017; Pfeiffer等人,2021;Ru¨ckle´等人,2020)或优化输入层激活的某些形式(Li & Liang, 2021;Lester等人,2021;Hambardzumyan等人,2020;刘等人,2021)。然而,这两种策略都有其局限性,特别是在大规模和延迟敏感的生产场景中。
适配器层引入了推理延迟
:适配器有很多变体。我们关注Houlsby等人(2019)的原始设计 ,它在每个Transformer块上有两个适配器层,以及Lin等人(2020)的最新设计,它在每个块上只有一个,但有一个额外的LayerNorm(Ba等人,2016)。虽然人们可以通过修剪层或利用多任务设置来减少整体延迟(Ru¨ckle´等人,2020;Pfeiffer等人,2021),但没有直接的方法来绕过适配器层的额外计算。这似乎不是一个问题,因为适配器层被设计成只有很少的参数(有时<1%的原始模型),有一个小的瓶颈di-mension,这限制了它们可以增加的FLOPs。然而,大型神经网络依靠硬件的并行性来保持低延迟,而适配器层必须按顺序处理。这在在线推理环境中是有区别的,在这种环境中,批处理量通常很小,小到可以设置为1。在没有模型并行的一般情况下,比如在单个GPU上运行GPT-2(Radford等人,b)媒介的推理,我们看到使用适配器时延迟明显增加,即使瓶颈维度非常小(表1)。
当我们需要像Shoeybi等人(2020);Lep- ikhin等人(2020)那样对模型进行分片时,这个问题会变得更糟 , 因为额外的深度需要更多的同步GPU操作,如AllReduce和Broadcast,除非我们多次冗余地存储适配器参数。
直接优化提示是困难
:另一个方向,如
prefix tuning
(Li & Liang, 2021),面临不同的挑战。 我们观察到,prefix tuning很难优化,其性能在可训练参数中的变化是非单调的,证实了原始论文中的类似观察。更根本的是,为适应保留一部分序列长度必然会减少可用于处理下游任务的序列长度,我们怀疑这使得调整提示与其他方法相比性能较差。我们将对任务性能的研究推迟到第5节。
我们的方法
我们描述了LoRA的简单设计和它的实际好处。这里概述的原则适用于深度学习模型中的任何密集层,尽管我们在实验中只关注Transformer语言模型中的某些权重,作为激励的用例。
低秩参数化的更新矩阵
一个神经网络包含许多密集的层,它们进行矩阵乘法。这些层中的权重矩阵通常具有全秩。当适应一个特定的任务时,Aghajanyan等人(2020)表明,预训练的语言模型具有较低的 "本征维度",尽管随机投影到一个较小的子空间,仍然可以有效地学习。受此启发,我们假设权重的更新在适应过程中也具有较低的"内在秩"。对于一个预先训练好的权重矩阵
\(W_{0}\in R^{d×k}\)
,我们通过用一个低秩去代表来限制其更新。 组成
\(W_{0} + ∆W= W_{0} + BA\)
,其中
\(B\in R^{d×r}\)
,
\(A\in R^{r×k}\)
,秩
\(r<< min(d, k)\)
。 在训练期间,
\(W_{0}\)
被冻结,不接受梯度更新,而A和B包含可训练参数。请注意,
\(W_{0}\)
和$∆W = BA
\(都与相同的输入相乘,它们各自的输出向量是按坐标相加的。对于\)
h = W_{0}x$,我们修改后的前向传递得到:
我们在图1中说明了我们的重新参数化。我们对A使用随机高斯初始化,对B使用零初始化 ,所以
\(∆W = BA\)
在训练开始时是零。然后,我们将
\(∆Wx\)
的缩放为
\(\frac{α}{r}\)
,
\(α\)
是
\(r\)
中的一个常数。当用Adam进行优化时,如果我们适当地调整缩放初始化,调整α与调整学习率大致相同。因此,我们只需将α设置为我们尝试的第一个r,而不对其进行调整。这种缩放有助于减少我们在改变r时重新调整超参数的需要(Yang & Hu, 2021)。
完全微调的一般化
。一种更普遍的微调形式允许训练预训练参数的一个子集。LoRA更进一步,不要求权重矩阵的累积梯度更新在适应期间具有全秩。这意味着,当对所有权重矩阵应用LoRA并训练所有偏置时,我们通过将LoRA的秩r设置为预先训练好的权重矩阵的秩,大致可以恢复完全微调的表现力。换句话说,随着我们增加可训练参数的数量,训练LoRA大致趋近于训练原始模型,而基于适配器的方法则趋近于MLP,基于前缀的方法则趋近于不能接受长输入序列的模型。
没有额外的推理延时
。当在生产中部署时,我们可以明确地计算和存储
\(W = W_{0} + BA\)
,并像往常一样执行推理。请注意,
\(W_{0}\)
和BA都属于
\(R^{d×k}\)
。当我们需要切换到另一个下游任务时,我们可以通过减去BA,然后添加不同的
\(B′A′\)
来恢复
\(W_{0}\)
,这是一个快速操作,内存开销很小。关键是,这保证我们在推理过程中,与构建的微调模型相比,不会引入任何额外的延迟。
将LORA应用于Transformer
原则上,我们可以将LoRA应用于神经网络中的任何权重矩阵子集,以减少可训练参数的数 量。在Transformer架构中,自注意模块中有四个权重矩阵(Wq , Wk , Wv , Wo ),MLP模块中有两个。我们把Wq(或Wk , Wv )作为一个维度为
\(d_{model}×d_{model}\)
的单一矩阵,尽管输出维度通常被切成注意头。我们将研究限制在只适应下游任务的注意力权重,并冻结MLP模块(因此它们不在下游任务中训练),这既是为了简单也是为了参数效率。我们在第7.1节中进一步研究在Transformer中适应不同类型注意力权重矩阵的效果。我们把对适应MLP层、 LayerNorm层和偏置的实证调查留给未来的工作。
实际的好处和限制
。最重要的好处来自于内存和存储用量的减少。对于一个用Adam训练的大型Transformer,如果
\(r<<d_{model}\)
,我们减少了该VRAM的使用量达2/3,因为我们不需要存储冻结参数的优化器状态。在GPT-3 175B上,我们将训练期间的VRAM消耗从1.2TB减少到350GB。在r=4并且只有查询和值投影矩阵被调整的情况下,检查点的大小大约减少了10,000×(从350GB到35MB)。这使我们可以
用更少的GPU进行训练
,避免I/O瓶颈。另一个好处是,我们可以在
部署时以更低的成本切换任务,只交换LoRA的权重,而不是所有的参数
。这使得我们可以创建许多定制的模型,这些模型可以在将预训练的权重存储在VRAM中的机器上进行实时切换。我们还观察到,在GPT-3 175B上训练时,与完全微调5相比,速度提高了25%,因为我们不需要计算绝大多数参数的梯度。
LoRA也有其局限性。例如,如果选择将A和B吸收到W中以消除额外的推理延迟,那么在一次前向传递中对不同任务的输入进行批处理是不直接的。尽管在延迟不重要的情况下,可以不合并权重,动态地选择LoRA模块用于批次中的样本。
实验
我们在RoBERTa(Liu等人,2019年)、De- BERTa(He等人,2021年)和GPT-2(Radford 等人,b)上评估了LoRA的下游任务性能,然后扩展到GPT-3 175B(Brown等人,2020年 )。我们的实验涵盖了广泛的任务,从自然语言理解(NLU)到生成(NLG)。具体来说 ,我们在GLUE(Wang等人,2019)基准上对RoBERTa和DeBERTa进行评估。我们遵循Li & Liang(2021)在GPT-2上的设置进行直接比较,并在GPT-3上增加WikiSQL(Zhong等人 ,2017)(NL到SQL查询)和SAMSum(Gliwa等人,2019)(对话总结)进行大规模实 验。关于我们使用的数据集的更多细节,见附录C。我们使用NVIDIA Tesla V100进行所有实验。
基准线
为了与其他基线进行广泛的比较,我们复制了以前的工作所使用的设置,并尽可能地重复使用他们的报告数字。然而,这意味着一些基线可能只出现在某些实验中。
微调(FT)
是一种常见的适应方法。在微调过程中,模型被初始化为预先训练好的权重和偏置,所有的模型参数都经过梯度更新。一个简单的变体是只更新一些层而冻结其他层。 我们包括先前工作中报告的GPT-2的一个这样的基线(Li & Liang, 2021),它只适应最后两层(FTTop2)。
Bias-only or BitFit
是一个基线,我们只训练偏见向量,而冻结其他一切。同时,这种基线也被
BitFit研究过(Zaken等人,2021)。
Prefix-embedding tuning (PreEmbed)
在输入标记中插入特殊标记。这些特殊标记有可训练的词嵌入 ,一般不在模型的词汇中。在哪里放置这些标记会对性能产生影响。我们专注于 "前缀 "和 "后缀",前者将此类标记添加到提示语中,后者将其添加到提示语中;Li & Liang (2021)对两者都进行了讨论。我们用lp (resp. li )表示前缀(resp. infix)标记的数量。可训练参数的数量为
\(|Θ| = d_{model} × (l_{p} + l_{i} )\)
。
Prefix-layer tuning (PreLayer)
是前缀嵌入调整的延伸。我们不只是学习一些特殊标记的词嵌入 (或者等同于嵌入层之后的激活),而是学习每个转化层之后的激活。从之前的层计算出来的激活值被简单地替换为可训练的激活值。由此得到的可训练参数的数量是
\(|Θ| = L × d_{model} × (l_{p} + l_{i} )\)
,其中L是Transformer层的数量。
Adapter tuning
在自我注意模块(和MLP模块)和随后的剩余连接之间插入了适配器层。有两个完全连接的层,在中间有非线性的适配器层中有偏置。我们称这种原始设计为适配器H 。最近,Lin等人(2020)提出了一个更有效的设计,适配器层只应用在MLP模块之后和LayerNorm之后。我们称其为适配器L 。这与Pfeiffer等人(2021) 提出的另一个设计非常相似,我们称之为AdapterP 。我们还包括另一个称为AdapterDrop的基线(Ru¨ckle´等人,2020),它为提高效率而放弃了一些适配器层(AdapterD )。我们尽可能地引用先前工作的数字,以最大限度地增加我们比较的基线的数量;它们在第一列中带有星号(*)的行中。
LoRA在现有权重矩阵的基础上并行增加了可训练的秩分解矩阵对。如第4.2节所述,为了简单起见,我们在大多数实验中只将LoRA应用于Wq和Wv 。可训练参数的数量由秩r和原始权重的形状决定:
\(|Θ| = 2 × L_{LoRA}× d_{model} × r\)
,其中
\(L_{LoRA}\)
是我们应用LoRA的权重矩阵的数量。
ROBERTA BASE/LARGE
RoBERTa(Liu等人,2019)优化了最初在BERT(Devlin等人,2019a)中提出的预训练配方,在没有引入更多可训练参数的情况下提升了后者的任务性能。虽然RoBERTa近年来在 NLP排行榜上被GLUE基准(Wang等人,2019)等更大的模型所超越,但在从业者中,它仍然是一个具有竞争力的、受欢迎的预训练模型,其规模也是如此。我们从HuggingFace Transformers库(Wolf等人,2020年)中提取预训练的RoBERTa base(125M)和RoBERTa large(355M),并评估不同的高效适应方法在GLUE基准任务上的表现。我们还根据 Houlsby等人(2019)和Pfeiffer等人(2021)的设置进行了复制。为了确保公平的比较,我们在与适配器比较时,对评估LoRA的方式做了两个关键的改变。首先,我们对所有任务使用相同的批次大小,并使用128的序列长度来匹配适配器基线。其次,我们将模型初始化为MRPC、RTE和STS-B的预训练模型,而不是像微调基线那样已经适应了MNLI的模型。按照Houlsby等人(2019年)的这种更严格的设置进行的运行被标记为
\(†\)
。结果列于表2(前三节)。关于所使用的超参数的细节,见D.1节。
DEBERTA XXL
DeBERTa(He等人,2021)是BERT的一个较新的变体,它在更大的规模上进行训练,在 GLUE(Wang等人,2019)和Su- perGLUE(Wang等人,2020)等基准上的表现非常具有竞争力。我们评估了LoRA是否仍能在GLUE上匹配完全微调的DeBERTa XXL(1.5B)的性能。结果见表2(底部部分)。关于所使用的超参数的见D.2节。
GPT-2 MEDIUM/LARGE
在表明LoRA可以成为NLU上完全微调的一个有竞争力的替代方案之后,我们希望回答LoRA在NLG模型上是否仍然占优势,比如GPT-2中型和大型模型(Radford等人,b)。我们尽可能地保持我们的设置与Li & Liang(2021)接近,以便进行直接比较。由于篇幅的限制,我们在本节中只介绍了我们对E2E NLG挑战赛的结果(表3 )。关于WebNLG ( Gardent等人,2017)和DART(Nan等人,2020)的结果见F.1节。我们在D.3节中列出了使用的超参数。
扩展到GPT-3 175B
作为LoRA的最后一个压力测试,我们将参数扩大到1750亿的GPT-3。由于训练成本很高,我们只报告了随机种子上给定任务的典型标准偏差,而不是为每个条目提供一个标准偏差 。关于所使用的超参数的细节,见D.4节。
如表4所示,LoRA在所有三个数据集上都匹配或超过了微调基线。请注意,并非所有的方法都能从更多的可训练参数中单调地获益,如图2所示。当我们使用超过256个特殊标记进 行前缀嵌入调整或使用超过32个特殊标记进行前缀层调整时,我们观察到性能明显下降。 这也证实了Li & Liang (2021)的类似观察。虽然对这一现象的彻底调查超出了这项工作的范围,但我们怀疑有更多的特殊标记会导致输入分布进一步偏离训练前的数据分布。另外, 我们在F.3节中研究了不同适应方法在低数据系统中的表现。
相关工作
略
了解低秩更新
鉴于LoRA的经验优势,我们希望进一步解释从下游任务中学习到的低秩适应的特性。请注意,低秩结构不仅降低了硬件门槛,使我们能够并行地运行多个实验,而且还能更好地解释更新权重与预训练权重的相关性。我们把研究重点放在GPT-3 175B上,在那里我们实现了可训练参数的最大减少(高达10,000倍)而没有对任务性能产生不利影响。 我们进行了一系列的实证研究来回答以下问题:
- 1)在参数预算约束下,我们应该调整预先训练好的transformer中的哪一个权重矩阵子集以使下游性能最大化?
- 2)"最佳"适应矩阵∆W是否真的有秩缺陷?如果是的话,在实践中使用的好秩是什么?
- 3)∆W和W之间有什么联系?∆W是否与W高度相关?与W相比,∆W有多大?我们相信,我们对问题(2)和(3)的回答阐明了在下游任务中使用预训练的语言模型的基本原则,这是NLP的一个关键话题。
我们应该对Transformer中的哪些权重矩阵应用Lora?
在有限的参数预算下,我们应该用LoRA调整哪种类型的权重,以获得下游任务的最佳性能?如第4.2节所述,我们只考虑自我注意模块的权重矩阵。我们在GPT-3 175B上设置了 18M的参数预算(如果存储在FP16中,大约是35MB),如果调整一种类型的注意力权重,则对应于r=8,如果对所有96层调整两种类型,则对应r=4。结果见表5。结果列于表5。
注意,将所有参数设置为∆Wq或∆Wk会显著降低性能,而调整Wq和Wv会产生最佳结果。这表明,即使是rank=4也能捕获∆W中的足够信息,因此,与采用更大rank的单一类型权重相比,更适合采用更多权重矩阵。
LORA的最佳秩r是什么?
我们把注意力转向秩r对模型性能的影响。 我们调整{Wq , Wv }、 {Wq , Wk , Wv , Wc },只用Wq 作比较。
表6显示,令人惊讶的是,LoRA已经以非常小的r表现出了竞争力(对于{Wq,Wv}比仅Wq更是如此)。这表明更新矩阵∆W可能具有非常小的“内在秩”。为了进一步支持这一发现,检查了通过不同的r选择和不同的随机种子学习的子空间的重叠。我们认为,增加r并不能覆盖一个更有意义的子空间,这表明一个低秩的适应矩阵就足够了。
不同r之间的子空间相似性。
给定
\(A_{r=8}\)
和
\(A_{r=64}\)
是使用相同的预训练模型学到的秩为r=8和64的适应矩阵,我们进行奇异值分解,得到右弦单元矩阵
\(U_{A_{r=8}}\)
和
\(U_{A_{r=64}}\)
。我们希望回答:UAr=8(1≤i≤8)中前i个奇异向量所跨越的子空间有多少包含在UAr=64(1≤j≤64)的前j个奇异向量所跨越的子空间中?我们用基于格拉斯曼距离的归一化子空间相似度来衡量这个数量(更正式的讨论见附录G)。
其中
\(U^{i}_{A_{r=8}}\)
代表
\(U_{A_{r=8}}\)
对应于顶部i个奇异向量。
\(φ(.)\)
的范围是[0,1],其中1代表子空间完全重叠,0代表完全分离。由于篇幅限制,我们只查看了第48层(共96层),但这个结论对其他层也是成立的,如H.1节所示。
我们从图3中得出了一个重要的观察结果。
- 与顶部奇异向量相对应的方向在
\(A_{r=8}和A_{r=64}\)
之间有明显的重叠,而其他方向则没有。具体来说,
\(A_{r=8} 的\)
∆Wv$ (resp.
\(∆Wq\)
)和A_{r=64}$ 的
\(∆Wv\)
( resp.
\(∆Wq\)
)共享一个维度为1的子空间,归一化相似度大于0.5,这就解释了为什么r = 1在我们的GPT-3的下游任务中表现相当好。
由于
\(A_{r=8} 和A_{r=64}\)
都是使用相同的预训练模型学习的,图3表明
\(_{r=8} 和A_{r=64}\)
的顶部奇异向量方向是最有用的,而其他方向可能主要包含训练中积累的随机噪声。因此,适应矩阵确实可以有一个非常低的秩。
不同随机种子之间的子空间相似性。
我们通过绘制两个r=64的随机种子运行之间的归一化子空间相似性来进一步证实这一点,如图4。 ∆Wq 似乎比∆Wv有更高的 "内在秩",因为对于∆Wq ,两次运行都学到了更多的常见奇异值方向,这与我们在表6中的经验观察一致。 作为比较,我们还绘制了两个随机高斯矩阵,它们没有任何共同的奇异值方向上的相互影响。
自适应矩阵∆W与W相比如何?
我们进一步研究∆W和W之间的关系。特别是,∆W是否与W高度相关?(或者从数学上讲,∆W主要包含在W的顶部奇异方向上吗?)另外,与W中的方向相比,∆W有多"大"?这可以阐明适应预训练语言模型的基本机制。
为了回答这些问题,我们通过计算
\(U^{T}WV^{T}\)
,把W投射到∆W的r维子空间上,U/V是∆W的左/右奇异矢量矩阵。然后,我们比较
\(||U^{T}WV^{T}||\)
F 和
\(||W||\)
F之间的Frobenius norm。作为比较,我们还计算了
\(||U^{T}WV^{T}||\)
F,用W的前r个奇异向量或一个随机矩阵代替U、V。
我们从表7中得出几个结论。
- 首先,与随机矩阵相比,∆W与W有更强的相关性,表明
∆W放大了W中已有的一些特征
。 - 第二,∆W没有重复W的顶级奇异方向,而只是
放大了W中没有强调的方向
。 - 第三,放大系数相当大:21.5 6.91/0.32,r=4。关于为什么r=64的放大系数较小,请参见H.4节。我们还在第H.3节中提供了一个可视化的数据,说明当我们从Wq ,包括更多的顶级奇异方向时,相关性是如何变化的。 这表明,低
秩适应矩阵可能会放大特定下游任务的重要特征,而这些特征在一般的预训练模型中已经学到,但没有得到强调
。
结论和未来工作
微调巨大的语言模型在所需的硬件和为不同任务托管独立实例的存储/切换成本方面是非常昂贵的。我们提出了LoRA,一种高效的适应策略,既不引入推理延迟,也不减少输入序列的长度,同时保留了高的模型质量。重要的是,它允许在作为服务部署时通过共享绝大多数的模型参数来实现快速的任务切换。虽然我们专注于Transformer语言模型,但提出的原则一般适用于任何具有密集层的神经网络。
未来的工作有很多方向。
- LoRA可以与其他有效的适应性方法相结合,有可能提供正交的改进。
- 微调或LoRA背后的机制还很不清楚--在预训练期间学到的特征是如何转变为在下游任务中表现良好的?我们认为,LoRA比完全的微调更容易回答这个问题。
- 我们主要依靠启发式方法来选择要应用LoRA的权重矩阵。是否有更多原则性的方法?
- 最后,∆W的秩缺陷表明,W也可能是秩缺陷的,这也可以成为未来工作的灵感来源。
最后,附上一篇改进ROLA的新论文,发表在ICLR2023上:
https://arxiv.org/pdf/2303.10512.pdf