LoRA: Low-Rank Adaptation of Large Language Models
Jun 2021
Edward J. Hu*, Yelong Shen*, Phillip Wallis, Zeyuan Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang, Weizhu Chen
[Microsoft Corporation]
https://arxiv.org/abs/2106.09685
摘要:自然语言处理的一个重要范式包括对一般领域数据的大规模预训练和对特定任务或领域的适应。当我们预训练更大的模型时,重新训练所有模型参数的完全微调变得不太可行。以GPT-3 175B为例——部署微调模型的独立实例,每个实例都有175B的参数,成本高得令人望而却步。我们提出了低秩自适应,即LoRA,它冻结预训练的模型权重,并将可训练的秩分解矩阵注入Transformer架构的每一层,从而大大减少了下游任务的可训练参数的数量。与Adam微调的GPT-3 175B相比,LoRA可以将可训练参数的数量减少10000倍,并将GPU内存需求减少3倍。LoRA在RoBERTa、DeBERTa、GPT-2和GPT-3上的模型质量与微调不相上下或更好,尽管其具有更少的可训练参数、更高的训练吞吐量,并且与适配器不同,没有额外的推理延迟。我们还对语言模式适应中的rank-deficiency(缺少秩)进行了实证研究,这揭示了LoRA的功效。我们发布了一个包,促进了LoRA与PyTorch模型的集成,并在https://github.com/microsoft/LoRA
1 引言
自然语言处理中的许多应用程序依赖于将一个大规模的预训练的语言模型适应多个下游应用程序。这种自适应通常是通过微调来完成的,微调会更新预训练模型的所有参数。微调的主要缺点是新模型包含的参数与原始模型中的参数一样多。随着每隔几个月训练一次更大的模型,这从GPT-2(Radford et al.,b)或RoBERTa大型(Liu et al.,2019)的“不方便”,变成了GPT-3(Brown et al.,2020)的部署的重大挑战,GPT-3具有1750亿个可训练参数(如附录A所示,虽然GPT-3 175B通过few-shot学习实现了非平凡的性能,但微调显著提高了其性能)。
许多人试图通过仅调整一些参数或学习新任务的外部模块来缓解这种情况。这样,除了每个任务的预训练模型之外,我们只需要存储和加载少量特定于任务的参数,极大地提高了部署时的操作效率。然而,现有技术通常通过扩展模型深度或减少模型的可用序列长度来引入推理延迟(Houlsby et al.,2019;Rebuffi et al.,2017)(Li&Liang,2021;Lester et al.,2021;Ham\n9)bardzumyan et al.,2020;刘等,2021)(第3节)。更重要的是,这些方法往往无法匹配微调基线,从而在效率和模型质量之间产生权衡。
我们从李(2018a);Aghajanyan等人(2020)等人那里得到了启发,其表明,训练的过参数化模型实际上存在于较低的内在维度上(reside on a low intrinsic dimension)。我们假设模型自适应过程中权重的变化也具有较低的“内在秩”(intrinsic rank),这导致了我们提出的低秩自适应(LoRA)方法。LoRA允许我们通过在自适应过程中优化密集层变化的秩分解矩阵来间接训练神经网络中的一些密集层(by optimizing rank decomposition matrices of the dense layers’ change during adaptation instead),同时保持预训练的权重冻结,如图1所示。以GPT-3 175B为例,我们表明,即使全秩(即)高达12288,非常低的秩(即图1中的,可以是1或2)也足够了,这使得LoRA既有存储效率,又有计算效率。
LoRA具有几个关键优势。
• 可以共享预训练的模型,并将其用于为不同任务构建许多小型LoRA模块。我们可以通过替换图1中的矩阵A和B来冻结共享模型并高效地切换任务,从而显著减少存储需求和任务切换。
• 使用自适应优化器时,由于我们不需要为大多数参数计算梯度或维护优化器状态,因此LoRA使训练更加高效,并将硬件要求降低了3倍。相反,我们只优化注入的、小得多的低秩矩阵。
• 我们简单的线性设计使我们能够在部署时将可训练矩阵与冻结权重合并,与完全微调的模型相比,通过构建,不会引入推理延迟。
• LoRA与许多先前的方法正交,并且可以与其中许多方法相结合,例如prefix-tuning。我们在附录E中提供了一个例子。
术语和惯例
我们经常引用Transformer架构,并使用传统的术语来描述其尺寸。我们将Transformer层的输入和输出尺寸称为。我们使用、、和来引用自注意模块中的查询/键/值/输出投影矩阵。或是指预训练的权重矩阵,是适应过程中的累积梯度更新。我们使用来表示LoRA模块的秩。我们遵循(Vaswani等人,2017;Brown等人,2020)提出的惯例,并使用Adam(Loshchilov&Hutter,2019;Kingma&Ba,2017)进行模型优化,并使用的Transformer MLP前馈维度。
2 问题陈述
虽然我们方法无关于训练目标,但我们将语言建模作为我们的动机用例。以下是语言建模问题的简要描述,特别是在特定任务提示下条件概率的最大化。
假设我们得到了一个由参数化的预训练的自回归语言模型。例如,可以是基于Transformer架构的通用多任务学习器,例如GPT(Radford等人,b;Brown等人,2020)(Vaswani等人,2017)。考虑将这种预训练的模型应用于下游的条件文本生成任务,如摘要、机器阅读理解(MRC)和自然语言到SQL(NL2SQL)。每个下游任务由context-target对的训练数据集表示:,其中和都是tokens的序列。例如,在NL2SQL中,是一个自然语言查询,是其对应的SQL命令;总结任务中,是一篇文章的内容,是它的总结。
在全微调期间,通过重复遵循梯度将模型初始化为预训练的权重,并更新为,以最大化条件语言建模目标:
(1)
全微调的主要缺点之一是,对于每个下游任务,我们学习一组不同的参数,其维度等于。因此,如果预训练的模型很大(例如GPT-3的|Φ0|≈1750亿),如果可行的话,存储和部署许多独立的微调模型实例可能是一项挑战。
在本文中,我们采用了一种更高效的参数方法,其中特定任务的参数增量由一组小得多的参数进一步编码,其中。因此,求的任务变成了对的优化:
(2)
在接下来的章节中,我们建议使用低秩表示来编码,这既有计算效率又有内存效率。当预训练的模型是GPT-3 175B时,可训练参数的数量可以小到的0.01%。
3 现有的解决方案还不够好吗?
我们着手解决的问题绝非新鲜事。自迁移学习开始以来,已有数十项工作试图使模型自适应更具参数和计算效率。有关一些著名作品的调查,请参见第6节。以语言建模为例,在有效适应方面有两种突出的策略:添加适配器层(Houlsby et al.,2019;Rebuffi et al.,2017;Pfeiffer et al.,2021;Ruckl¨e et al.,2020)或优化输入层激活的某些形式(Li&Liang,2021;Lester et al.,2022;Hambardzumyan et al.,2018;刘等人,2021)。然而,这两种策略都有其局限性,尤其是在大规模和延迟敏感的生产场景中。
适配器层引入推断延迟 适配器有多种变体。我们专注于Houlsby(2019)等人的原始设计,每个Transformer块有两个适配器层,以及Lin等人(2020)的最新设计,每个块只有一个,但有一个额外的LayerNorm(Ba等人,2016)。虽然可以通过修剪层或利用多任务设置来减少总体延迟(Ruckl¨e等人,2020;Pfeiffer等人,2021),但没有直接的方法可以绕过适配器层中的额外计算。这似乎不是一个问题,因为适配器层的设计参数很少(有时小于原始模型的1%),瓶颈尺寸很小,这限制了它们可以添加的FLOP。然而,大型神经网络依靠硬件并行性来保持低延迟,并且适配器层必须按顺序处理。这在批量大小通常只有一个的在线推理设置中产生了差异。在没有模型并行性的通用场景中,例如在单个GPU上的GPT-2(Radford等人,b)上运行推理,我们看到使用适配器时延迟显著增加,即使瓶颈尺寸很小(表1)。
当我们需要像Shoeybi等人所做的那样分割模型时,这个问题会变得更糟。(2020);Lep\n9)ikhin等人(2020),因为额外的深度需要更多的同步GPU操作,如AllReduce和Broadcast,除非我们多次冗余存储适配器参数。
直接优化提示很难 另一个方向,例如prefix tuning(Li&Liang,2021),面临着不同的挑战。我们观察到prefix tuning很难优化,并且其性能在可训练参数中非单调变化,这证实了原始论文中的类似观察结果。更根本的是,保留一部分序列长度用于适应必然会减少可用于处理下游任务的序列长度,我们怀疑这使得与其他方法相比,调整提示的性能较差。我们将关于任务表现的研究推迟到第5节。
4 我们的方法
我们描述了LoRA的简单设计及其实际效益。这里概述的原则适用于深度学习模型中的任何密集层,尽管我们在实验中只关注Transformer语言模型中的某些权重作为动机用例。
4.1 低秩参数化更新矩阵
神经网络包含许多执行矩阵乘法的密集层。这些层中的权重矩阵通常具有全秩。在适应特定任务时,Aghajanyan等人(2020)表明,预训练的语言模型具有较低的“instrisic dimension”(内在维度),尽管随机投影到较小的子空间,但仍然可以高效地学习。受此启发,我们假设对权重的更新在适应过程中也具有较低的“内在秩”。对于预训练的权重矩阵,我们通过用低秩分解表示来约束预训练权重更新,其中,秩。在训练期间,被冻结并且不接收梯度更新,而和包含可训练参数。注意和都与相同的输入相乘,并且它们各自的输出矢量按位相加。对于,我们修改的正向传递产生:
(3)
我们在图1中说明了我们的重参数化。我们对使用随机高斯初始化,对使用零初始化,因此在训练开始时为零。然后,我们用来缩放,其中是关于的常数。当使用Adam进行优化时,如果我们适当地缩放初始化,则调整与调整学习率大致相同。因此,我们只需将设置为我们尝试的第一个,而不进行调整。当我们改变时,这种缩放有助于减少重新调整超参数的需要(减少调参)(Yang&Hu,2021)。
完全微调的一般形式。 更一般形式的微调允许训练预训练的参数的子集。LoRA更进一步,不需要对权重矩阵进行累积梯度更新,以在适应过程中具有完整的秩。这意味着,当将LoRA应用于所有权重矩阵并训练所有偏置(与权重相比,它们的参数量可忽略不计)时,我们通过将LoRA秩设置为预训练的权重矩阵的秩,大致恢复了完全微调的表达能力。换言之,当我们增加可训练参数的数量时(适应艰巨任务时的必然性),训练LoRA大致收敛于训练原始模型,而基于适配器的方法收敛于MLP,基于前缀方法的模型不能用于长输入序列。
没有额外的推断延迟。 当部署在生产中时,我们可以显式地计算和存储,并像往常一样执行推理。注意和的形状都是。当我们需要切换到另一个下游任务时,我们可以通过减去来恢复,,然后添加不同的。这是一种快速操作,只需很少的内存开销。至关重要的是,这保证了与通过构造微调的模型相比,我们在推理过程中不会引入任何额外的延迟。
4.2 将LORA应用于Transformer
原则上,我们可以将LoRA应用于神经网络中权重矩阵的任何子集,以减少可训练参数的数量。在Transformer架构中,自注意模块中有四个权重矩阵(Wq、Wk、Wv、Wo),MLP模块中有两个。我们将Wq(或Wk,Wv)视为维度的单个矩阵,即使输出维度通常被划分为注意力头。为了简单和参数高效,我们将我们的研究限制为仅调整下游任务的注意力权重,并冻结MLP模块(因此它们不在下游任务中训练)。我们在第7.1节中进一步研究了在Transformer中调整不同类型的注意力权重矩阵的影响。我们将调整MLP层、LayerNorm层和偏差的实证研究留给未来的工作。
实际好处和限制。
最显著的好处来自内存和存储使用量的减少。对于用Adam训练的大型Transformer,如果,我们将减少多达2/3的VRAM使用,因为我们不需要存储冻结参数的优化器状态。在GPT-3 175B上,我们将训练期间的VRAM消耗从1.2TB减少到350GB。在r=4并且仅调整查询和值投影矩阵的情况下,检查点大小减少了大约10000×(从350GB减少到35MB)(注释4)。这使我们能够使用明显更少的GPU进行训练,并避免I/O瓶颈。另一个好处是,我们可以在部署时以更低的成本在任务之间切换,只需交换LoRA权重,而不是所有参数。这允许创建许多自定义模型,这些模型可以在将预训练的权重存储在VRAM中的机器上实时交换。我们还观察到,与完全微调(注释5)相比,在GPT-3 175B的训练过程中加速了25%,因为我们不需要计算绝大多数参数的梯度。
LoRA也有其局限性。例如,如果选择将和吸收到中以消除额外的推理延迟,那么在单个前向传递中,批量输入不同任务的不同和的是不简单的。尽管在延迟不重要的情况下,可以不合并权重并动态选择LoRA模块用于批量中的样本。
注释4:在部署过程中,我们仍然需要350GB的模型;然而,存储100个经过调整的模型只需要350GB+35MB*100≈354GB,而不是100*350GB≈35TB。
注释5::对于GPT-3 175B,用于完全微调的训练吞吐量为每V100 GPU 32.5个token/s;在模型并行的权重切片数量相同的情况下(with the same number of weight shards for model parallelism),LoRA的吞吐量为每V100 GPU 43.1个token/s。
5 实验
我们评估了LoRA在RoBERTa(Liu et al.,2019)、DeBERTa(He et al.,2021)和GPT-2(Radford et al.,b)上的下游任务性能,然后扩展到GPT-3 175B(Brown et al.,2020)。我们的实验涵盖了从自然语言理解(NLU)到生成(NLG)的广泛任务。具体而言,我们对RoBERTa和DeBERTa的GLUE(Wang et al.,2019)基准进行了评估。我们遵循Li&Liang(2021)在GPT-2上的设置进行直接比较,并添加WikiSQL(Zhong et al.,2017)(NL到SQL查询)和SAMSum(Gliwa et al.,2019)(对话摘要)用于GPT-3上的大规模实验。有关我们使用的数据集的更多详细信息,请参见附录C。我们使用NVIDIA特斯拉V100进行所有实验。
5.1 基线
为了与其他基线进行广泛比较,我们复制了先前工作中使用的设置,并尽可能重复使用其报告的数字。然而,这意味着一些基线可能只出现在某些实验中。
微调(FT) 是一种常见的自适应方法。在微调过程中,模型被初始化为预训练的权重和偏差,所有模型参数都会进行梯度更新。一个简单的变体是只更新一些层,而冻结其他层。我们包括先前关于GPT-2的工作(Li&Liang,2021)中报告的一个这样的基线,它只适应最后两层(FT Top2)。
Bias-only or BitFit 是一个基线,在该基线中,只训练偏置向量,同时冻结其他所有内容。同时,BitFit也对这一基线进行了研究(Zaken等人,2021)。
Prefix-embedding tuning (PreEmbed) 在输入tokens中插入特殊tokens。这些特殊tokens具有可训练的词嵌入,通常不在模型的词汇表中。放置此类tokens的位置可能会对性能产生影响。我们关注的是“prefixing”和“infixing”,前者在提示前加上这样的tokens,后者在提示后加上;李和梁(2021)对两者进行了讨论。我们使用(resp.)表示前缀(resp.中缀infix)tokens的数量。可训练参数的数量为。
Prefix-layer tuning (PreLayer) 是前缀嵌入调整的扩展。我们不是只学习一些特殊tokens的词嵌入(或者等效地,嵌入层之后的激活),而是学习每个Transformer层之后的激活。先前的层计算的激活被可训练的层简单地替换。由此得到的可训练参数的数量为,其中是Transformer层的数量。
Adapter tuning Houlsby(2019)等人自注意模块(和MLP模块)和随后的残差连接之间插入适配器层。在适配器层中有两个完全连接的层,它们之间具有非线性。我们称这种原始设计为。最近,Lin等人(2020)提出了一种更高效的设计,其中适配器层仅在MLP模块之后和LayerNorm之后应用。我们称之为。这与Pfeiffer(2021)等人提出的另一种设计非常相似,我们称之为。我们还包括另一个基线调用AdapterDrop(Ruckl¨e et al.,2020),它删除了一些适配器层以提高效率()。我们尽可能引用先前工作中的数字,以最大限度地增加我们比较的基线数量;它们在第一列中带有星号(*)的行中。在所有情况下,我们都有,其中是适配器层的数量,是可训练LayerNorms的数量(例如,在AdapterL中)。
LoRA 将可训练的秩分解矩阵对并行添加到现有的权重矩阵。如第4.2节所述,为了简单起见,我们在大多数实验中仅将LoRA应用于和。可训练参数的数量由秩和原始权重的形状决定:|,其中是我们应用LoRA的权重矩阵的数量。
5.2 RoBERTa base/large
RoBERTa(Liu et al.,2019)优化了最初在BERT中提出的预训练配方(Devlin et al.,2019a),并在不引入更多可训练参数的情况下提高了后者的任务性能。尽管近年来,RoBERTa在NLP排行榜上被GLUE基准等更大的模型所取代(Wang et al.,2019),但就其规模而言,它在从业者中仍然是一个有竞争力且受欢迎的预训练模型。我们从HuggingFace Transformers库(Wolf et al.,2020)中获得了预训练的RoBERTa基础型号(125M)和RoBERTa大型(355M),并从GLUE基准评估了不同有效适应方法在任务上的性能。我们还复制了Houlsby等人(2019)和Pfeiffer等人(2021)根据他们的设置。为了确保公平的比较,我们在与适配器进行比较时,对评估LoRA的方式进行了两个关键更改。首先,我们对所有任务使用相同的批处理大小,并使用128的序列长度来匹配适配器基线。其次,我们将模型初始化为MRPC、RTE和STS-B的预训练模型,而不是像微调基线那样已经适应MNLI的模型。Houlsby等人(2019)的这种更受限制的设置之后的运行标记为†。结果如表2(前三节)所示。有关使用的超参数的详细信息,请参见第D.1节。
5.3 DeBERTa XXL
DeBERTa(He et al.,2021)是BERT的一种更新变体,它在更大范围内进行训练,并在GLUE(Wang et al.,2019)和Su\n9)perGLUE(Wang et al.,2020)等基准上表现非常有竞争力。我们评估了LoRA是否仍能在GLUE上与完全微调的DeBERTa XXL(1.5B)的性能相匹配。结果如表2(底部)所示。有关使用的超参数的详细信息,请参见第D.2节。
5.4 GPT-2 MEDIUM/LARGE
已经表明,对于NLU的完全微调,LoRA可以是一种有竞争力的替代方案,我们希望回答LoRA是否仍然在NLG模型上占主导地位,例如GPT-2中型和大型(Radford等人,b)。我们将我们的设置尽可能接近李和梁(2021),以便进行直接比较。由于空间限制,我们在本节中仅介绍了关于E2E NLG挑战的结果(表3)。有关WebNLG(Gardent等人,2017)和DART(Nan等人,2020)的结果,请参见第F.1节。我们包括D.3节中使用的超参数列表。
5.5 扩展到GPT-3 175B
作为LoRA的最后一次压力测试,我们用1750亿个参数扩展到GPT-3。由于训练成本高,我们只报告给定任务在随机种子上的典型标准差,而不是为每个条目提供一个标准差。有关使用的超参数的详细信息,请参见第D.4节。
如表4所示,LoRA在所有三个数据集上都匹配或超过了微调基线。请注意,并非所有方法都能从具有更多可训练参数中单调受益,如图2所示。当我们使用超过256个特殊tokens进行前缀嵌入调整或超过32个特殊tokens用于前缀层调整时,我们观察到性能显著下降。这证实了李和梁(2021)的类似观察。虽然对这一现象的彻底调查超出了这项工作的范围,但我们怀疑,拥有更多的特殊tokens会导致输入分布进一步偏离预训练数据分布。另外,我们在第F.3节中研究了低数据制度下不同适应方法的性能。
6 相关工作
Transformer语言模型。 Transformer(Vaswani et al.,2017)是一种大量利用自注意力的序列到序列架构。Radford等人(a)通过使用一堆Transformer解码器将其应用于自回归语言建模。从那时起,基于Transformer的语言模型就主导了NLP,在许多任务中达到了最先进的水平。BERT(Devlin et al.,2019b)和GPT-2(Radford et al.,b)出现了一种新的范式——这两种模型都是在大量文本上训练的大型Transformer语言模型——与直接在特定任务数据上训练相比,在对一般域数据进行预训练后对特定任务数据进行微调可以显著提高性能。训练更大的Transformer通常会带来更好的性能,并且仍然是一个积极的研究方向。GPT-3(Brown等人,2020)是迄今为止用175B个参数训练的最大的单一Transformer语言模型。
提示工程和微调。 虽然GPT-3 175B只需几个额外的训练示例就可以调整其行为,但结果在很大程度上取决于输入提示(Brown等人,2020)。这就需要一种编写和格式化提示的经验艺术,以最大限度地提高模型在所需任务上的性能,这被称为提示工程或提示hacking。微调将在一般域上预训练的模型重新训练到特定任务Devlin等人(2019b);Radford等人(a)。其变体包括仅学习参数的子集Devlin等人(2019b);Collobert和Weston(2008),然而从业者经常对他们进行再训练,以最大限度地提高下游绩效。然而,GPT-3 175B的巨大使得以通常的方式进行微调具有挑战性,因为它产生了大的检查点,并且由于它具有与预训练相同的内存占用,因此进入的硬件要求很高。
参数高效适应。 许多人提出在神经网络中的现有层之间插入适配器层(Houlsby等人,2019;Rebuffi等人,2017;Lin等人,2020)。我们的方法使用类似的瓶颈结构来对权重更新施加低秩约束。关键的功能差异在于,我们学习的权重可以在推理过程中与主权重合并,从而不会引入任何延迟,而适配器层的情况并非如此(第3节)。适配器的一个共同扩展是COMPACTER(Mahabadi等人,2021),它基本上使用具有一些预定权重共享机制的Kronecker乘积来参数化适配器层。类似地,将LoRA与其他基于张量积的方法相结合可能会提高其参数效率,我们将其留给未来的工作。最近,许多人提出优化输入词嵌入来代替微调,类似于提示工程的连续可微推广(Li&Liang,2021;Lester等人,2021;Hambardzumyan等人,2020;刘等人,2021)。我们在实验部分包括了与李和梁(2021)的比较。然而,这一系列工作只能通过在提示中使用更特殊的令牌来扩大规模,当学习位置嵌入时,这些tokens会占用任务tokens的可用序列长度。
深度学习中的低秩结构。 低秩结构在机器学习中非常常见。许多机器学习问题具有一定的内在低秩结构(Li et al.,2016;蔡等人,2010;李等人,2018b;Grasedyck等人,2013)。此外,众所周知,对于许多深度学习任务,特别是那些具有严重过参数化神经网络的任务,学习的神经网络在训练后将具有低秩特性(Oymak et al.,2019)。以前的一些工作甚至在训练原始神经网络时明确施加了低秩约束(Sainath等人,2013;Povey等人,2018;Zhang等人,2014;Jaderberg等人,14;赵等人,2016;Kho\n9)dak等人,2021;Denil等人,2014);然而,据我们所知,这些工作都没有考虑对冻结模型的低秩更新,以适应下游任务。在理论上,众所周知,当底层概念类(underlying concept class)具有一定的低秩结构时,神经网络优于其他经典学习方法,包括相应的(有限宽度)神经切核(Allen Zhu et al.,2019;李和梁,2018)(Ghorbani et al.,2020;Allen Zhu&Li,2019;Allen朱和李,2020a)。Allen Zhu&Li(2020b)的另一个理论结果表明,低秩适应可能对对抗性训练有用。总之,我们相信我们提出的低秩适应更新是受文献的良好激励的。
7 了解低秩更新
鉴于LoRA的经验优势,我们希望进一步解释从下游任务中学到的低秩自适应的性质。请注意,低秩结构不仅降低了硬件障碍,这允许我们并行运行多个实验,而且还提供了更新权重如何与预训练的权重相关的更好的可解释性。我们将研究重点放在GPT-3 175B上,在不影响任务性能的情况下,我们实现了可训练参数的最大减少(高达10000倍)。
我们进行了一系列实证研究,以回答以下问题:1)在给定参数预算约束的情况下,我们应该适应预训练的Transformer中的权重矩阵的哪个子集,以最大限度地提高下游性能?2) “最优”适应矩阵∆W真的有秩缺陷(rank-deficient)吗?如果是这样的话,在实践中使用什么是好的秩?3) 和之间的联系是什么?是否与高度相关?与相比有多大?
我们相信,我们对问题(2)和(3)的回答阐明了将预训练的语言模型用于下游任务的基本原则,这是NLP中的一个关键主题。
7.1 我们应该将LORA应用于Transformer中的哪些权重矩阵?
在参数预算有限的情况下,我们应该使用LoRA调整哪些类型的权重,以在下游任务中获得最佳性能?如第4.2节所述,我们只考虑自注意模块中的权重矩阵。我们在GPT-3 175B上设置了18M的参数预算(如果存储在FP16中,则大约为35MB),对于所有96层,如果我们适应一种类型的注意力权重,则对应于r=8,或者如果我们适应两种类型,则对应为r=4。结果如表5所示。
请注意,将所有参数都放入或会导致性能显著降低,同时调整和会产生最佳结果。这表明,即使秩为4,也能在中捕捉到足够的信息,因此,与采用秩较大的单一类型权重相比,采用更多的权重矩阵更可取。
7.2 LORA的最佳秩是多少?
我们将注意力转向秩对模型性能的影响。我们将、和仅进行比较。
表6显示,令人惊讶的是,LoRA已经以非常小的表现出竞争力(相比,更能表现出这一点)。这表明更新矩阵可能具有非常小的“内在秩”(注释6)。为了进一步支持这一发现,我们检查了通过不同的选择和不同的随机种子学习的子空间的重叠。我们认为,增加不覆盖更有意义的子空间,这表明低秩自适应矩阵就足够了。
注释6:然而,我们并不期望小r适用于每个任务或数据集。考虑以下思维实验:如果下游任务使用的语言与用于预训练的语言不同,那么重新训练整个模型(类似于r=dmodel的LoRA)肯定会优于r较小的LoRA
不同之间的子空间相似性。 给定和,它们是使用相同的预训练模型学习的秩为r=8和64的适应矩阵,我们执行奇异值分解,并获得right-singular的奇异酉矩阵和。(类似的分析也可以对和左奇异酉矩阵进行。)我们希望回答:在(对于)中,由前个奇异向量所跨越的子空间中有多少包含在由(对于)中的前个奇异向量横跨的子空间内?我们用基于Grassmann距离的归一化子空间相似性来确定这个量(更正式的讨论参见附录G)
其中U i Ar=8表示对应于前i个奇异向量的UAr=8的列。φ(·)的范围为[0,1],其中1表示子空间的完全重叠,0表示完全分离。如图3所示,φ如何随着i和j的变化而变化。由于空间限制,我们只关注第48层(96层中的第48层),但结论也适用于其他层,如第H.1节所示。
我们从图3中得出了一个重要的观察结果。对应于顶部奇异向量的方向在Ar=8和Ar=64之间显著重叠,而其他方向则不重叠。具体而言,Ar=8的∆Wv(分别为∆Wq)和Ar=64的∆Wv(分别是∆Wq)共享一个归一化相似性>0.5的维度为1的子空间,这就解释了为什么r=1在GPT-3的下游任务中表现得很好。由于Ar=8和Ar=64都是使用相同的预训练模型学习的,图3表明Ar=8的顶部奇异向量方向和Ar=6的顶部奇向量方向是最有用的,而其他方向可能包含训练期间积累的大部分随机噪声。因此,自适应矩阵确实可以具有非常低的秩。
不同随机种子之间的子空间相似性。
我们通过绘制r=64的两个随机种子运行之间的归一化子空间相似性来进一步证实这一点,如图4所示。∆Wq似乎比∆Wv具有更高的“内在秩”,因为∆Wq的两次运行都学习到了更常见的奇异值方向,这与我们在表6中的经验观察结果一致。作为比较,我们还绘制了两个随机高斯矩阵,它们彼此不共享任何共同的奇异值方向。
7.3自适应矩阵∆W与W相比如何?
我们进一步研究了∆W与W之间的关系。特别是,∆W是否与W高度相关?(或者从数学上讲,∆W主要包含在W的顶部奇异方向中吗?)此外,∆W与其在W中的对应方向相比有多“大”?这可以揭示调整预训练的语言模型的潜在机制。
为了回答这些问题,我们通过计算U>WV>将W投影到∆W的r维子空间上,其中U/V是∆W左/右奇异向量矩阵。然后,我们比较了kU>WV>kF和kWkF之间的Frobenius范数。作为比较,我们还通过将U,V替换为W或随机矩阵的前r个奇异向量来计算kU>WV>kF。
我们从表7中得出几个结论。首先,与随机矩阵相比,∆W与W的相关性更强,这表明∆W放大了W中已经存在的一些特征。其次,∆W没有重复W的顶部奇异方向,而是只放大W中没有强调的方向。第三,放大因子相当大:当r=4时,放大因子为21.5≈6.91/0.32。关于为什么r=64具有较小的放大因子,请参见第H.4节。我们还在第H.3节中提供了相关性如何变化的可视化,因为我们包含了来自Wq的更多顶部奇异方向。这表明,低秩自适应矩阵可能放大了特定下游任务的重要特征,这些特征在一般预训练模型中已经学习但没有得到强调。
8 结论和未来工作
就托管不同任务的独立实例所需的硬件和存储/切换成本而言,微调庞大的语言模型的成本高得令人望而却步。我们提出了LoRA,这是一种有效的自适应策略,既不引入推理延迟,也不减少输入序列长度,同时保持高模型质量。重要的是,当作为服务部署时,它可以通过共享绝大多数模型参数来快速切换任务。虽然我们专注于Transformer语言模型,但所提出的原理通常适用于任何具有密集层的神经网络。
未来的工作有很多方向。1) LoRA可以与其他有效的适应方法相结合,有可能提供正交改进。2) 微调或LoRA背后的机制还远不清楚——在预训练过程中学习的特征是如何转化为在下游任务中表现良好的?我们相信,LoRA比完全微调更容易回答这个问题。3) 我们主要依靠启发式方法来选择要应用LoRA的权重矩阵。有更原则的方法吗?4) 最后,∆W的秩亏表明W也可能是秩亏,这也可能是未来作品的灵感来源。
附录
大型语言模型仍然需要参数更新
当我们只有少数训练样本时,few-shot学习或提升工程是非常有利的。然而,在实践中,我们通常可以为性能敏感的应用程序策划几千个或更多的训练示例。如表8所示,在大大小小的数据集上,与few-shot学习相比,微调大大提高了模型性能。我们从GPT-3论文中获得了RTE上的GPT-3few-shot结果(Brown等人,2020)。对于MNLI匹配,我们每个类使用两个演示,总共使用六个上下文示例。
B适配器层引入的推断延迟
适配器层是以顺序方式添加到预训练模型中的外部模块,而我们的提议LoRA可以被视为以并行方式添加的外部模块。因此,除了基本模型之外,还必须计算适配器层,这不可避免地会引入额外的延迟。正如Ruckl¨e等人(2020)所指出的,当模型批量大小和/或序列长度足够大以充分利用硬件并行性时,适配器层引入的延迟可以得到缓解。我们在GPT-2介质上进行了类似的延迟研究,证实了他们的观察结果,并指出存在一些场景,特别是在线推理,其中批量大小很小,增加的延迟可能很显著。
我们通过平均100多次试验来测量NVIDIA Quadro RTX8000上单次正向传播的延迟。我们改变了输入批量大小、序列长度和适配器瓶颈尺寸r。我们测试了两种适配器设计:Houlsby等人的原始设计。(2019),我们称之为AdapterH,以及Lin等人最近的更有效的变体。(2020),我们将其称为AdapterL。有关设计的更多详细信息,请参见第5.1节。在图5中,我们绘制了与无适配器基线相比的减速百分比。
C数据集详细信息
GLUE Benchmark是一个广泛的自然语言理解任务集合。它包括MNLI(推理,Williams et al.(2018))、SST-2(情感分析,Socher et al.(2013))、MRPC(转述检测,Dolan&Brockett(2005))、CoLA(语言可接受性,Warstadt et al。广泛的覆盖范围使GLUE基准成为评估RoBERTa和DeBERTa等NLU模型的标准指标。各个数据集在不同的许可证下发布。
WikiSQL在Zhong等人(2017)中引入,包含了56355/8441个训练/验证示例。任务是根据自然语言问题和表模式生成SQL查询。我们将上下文编码为x={tableschema,query},将目标编码为y={SQL}。该数据集是根据BSD 3条款许可证发布的。
SAMSum在Gliwa等人(2019)中介绍,包含14732/819个训练/测试示例。它由两个人之间的阶段性聊天对话和语言学家撰写的相应摘要组成。我们将上下文编码为“\n”连接的话语,后跟“\n”,并将目标编码为y={summary}。该数据集是在非商业许可下发布的:知识共享BY-NC-ND 4.0。
Novikova等人首次提出了E2E NLG挑战。(2017)作为一个用于训练端到端、数据驱动的自然语言生成系统的数据集,通常用于数据到文本的评估。E2E数据集由大约42000个训练、4600个验证和4600个来自餐厅领域的测试样本组成。用作输入的每个源表可以有多个引用。每个样本输入(x,y)由一系列槽值对以及相应的自然语言参考文本组成。该数据集在知识共享BY-NC-SA 4.0下发布。
DART是Nan等人(2020)中描述的一个开放域数据到文本数据集。DART输入被构造为ENTITY-关系-ENTITY三元组的序列。DART总共有82K个示例,与E2E相比,它是一个更大、更复杂的数据到文本任务。该数据集是根据麻省理工学院的许可证发布的。
WebNLG是另一个常用的数据到文本评估数据集(Gardent et al.,2017)。WebNLG总共有22K个例子,包括14个不同的类别,其中9个是在训练中看到的。由于14个类别中有5个在训练过程中没有出现,而是在测试集中出现,因此评估通常按“可见”类别(S)、“看不见”类别(U)和“全部”类别(A)进行。每个输入示例都由一系列SUBJECT——PROPERTY——OBJECT三元组表示。该数据集在知识共享BY-NC-SA 4.0下发布。
D实验中使用的超参数
D.1 ROBERTA
我们使用具有线性学习率衰减时间表的AdamW进行训练。我们对LoRA的学习率、训练时期的数量和批量大小进行了扫描。继刘等人(2019)之后,我们在适应MRPC、RTE和STS-B时,将LoRA模块初始化为我们的最佳MNLI检查点,而不是通常的初始化;预训练的模型对于所有任务都保持冻结。我们报告了5个随机种子的中位数;每次运行的结果取自最佳时期。为了与Houlsby等人的设置进行公平比较。(2019)和Pfeiffer等人(2021),我们将模型序列长度限制为128,并对所有任务使用固定的批量大小。重要的是,在适应MRPC、RTE和STS-B时,我们从预先训练的RoBERTa大模型开始,而不是已经适应MNLI的模型。此限制设置的运行标记为†。请参阅表9中我们运行中使用的超参数。
D.2 DEBERTA
我们再次使用具有线性学习率衰减时间表的AdamW进行训练。继何等人(2021)之后,我们调整了学习率、dropout概率、热身步骤和批量大小。我们使用(He et al.,2021)使用的相同模型序列长度来保持我们的比较公平。继He等人(2021)之后,我们在适应MRPC、RTE和STS-B时,将LoRA模块初始化为我们的最佳MNLI检查点,而不是通常的初始化;预训练的模型对于所有任务都保持冻结。我们报告了5个随机种子的中位数;每次运行的结果取自最佳时期。请参阅表10中我们运行中使用的超参数。
D.3 GPT-2
我们使用AdamW(Loshchilov&Hutter,2017)对所有GPT-2模型进行了5个时期的线性学习率调度训练。我们使用Li&Liang(2021)中描述的批量大小、学习率和波束搜索波束大小。因此,我们还调整了LoRA的上述超参数。我们报告了3个随机种子的平均值;每次运行的结果取自最佳时期。表11中列出了GPT-2中用于LoRA的超参数。关于用于其他基线的基线,请参见李和梁(2021)。
D.4 GPT-3
对于所有GPT-3实验,我们使用AdamW(Loshchilov&Hutter,2017)进行了2个时期的训练,批次大小为128个样本,重量衰减因子为0.1。我们对WikiSQL使用384(Zhong et al.,2017),对MNLI使用768(Williams et al.,2018),对SAMSum使用2048(Gliwa et al.,2019)。我们调整所有方法数据集组合的学习率。有关使用的超参数的更多详细信息,请参见第D.4节。对于前缀嵌入调整,我们发现最优lp和li分别为256和8,总计3.2M个可训练参数。我们使用lp=8和li=8进行前缀层调整,具有20.2M个可训练参数,以获得总体最佳性能。我们提出了LoRA的两个参数预算:4.7M(rq=rv=1或rv=2)和37.7M(rq=rv=8或rq=rk=rv=ro=2)。我们报告每次运行的最佳验证性能。表12中列出了我们的GPT-3实验中使用的训练超参数。
E将LORA与前缀调整相结合
LoRA可以自然地与现有的基于前缀的方法相结合。在本节中,我们评估了LoRA和WikiSQL和MNLI上前缀调优变体的两种组合。
LoRA+PrefixEmbed(LoRA+PE)将LoRA与前缀嵌入调优相结合,其中我们插入lp+li特殊令牌,其嵌入被视为可训练参数。有关前缀嵌入调优的更多信息,请参阅第5.1节。
LoRA+PrefixLayer(LoRA+PL)将LoRA与前缀层调整相结合。我们还插入lp+li特殊令牌;然而,我们不是让这些令牌的隐藏表示natu集会地进化,而是在每个Transformer块之后用输入不可知向量替换它们。因此,嵌入和随后的变压器块激活都被视为可训练的参数。有关前缀层调整的更多信息,请参阅第5.1节。
在表15中,我们展示了LoRA+PE和LoRA+PL在WikiSQL和MultiNLI上的评估结果。首先,在WikiSQL上,LoRA+PE显著优于LoRA和前缀嵌入调优,这表明LoRA在一定程度上与前缀嵌入调优正交。在MultiNLI上,LoRA+PE的组合表现并不比LoRA好,可能是因为LoRA本身已经达到了与人类基线相当的性能。其次,我们注意到,即使有更多的可训练参数,LoRA+PL的表现也比LoRA略差。我们对此表示敬意,因为前缀层调整对学习速率的选择非常敏感,因此在LoRA+PL中使LoRA权重的优化更加困难。
F额外的经验实验
F.1 GPT-2的附加实验
在李和梁(2021)的设置之后,我们还重复了我们在DART(Nan et al.,2020)和WebNLG(Gardent et al.,2017)上的实验。结果如表13所示。与我们在第5节中报道的E2E NLG挑战的结果类似,在给定相同数量的可训练参数的情况下,LoRA的表现优于或至少与基于前缀的方法相当。
F.2 GPT-3的附加实验
我们在表15中介绍了GPT-3上使用不同适应方法的额外运行。重点是确定性能和可训练参数数量之间的权衡。
F.3低数据制度
评估不同适应方法在低数据制度下的表现。我们从MNLI的完整训练集中随机抽取100个、1k个和10k个训练示例来形成低数据MNLI-n任务。在表16中,我们展示了不同适应方法对MNLI n的性能。令我们惊讶的是,PrefixEmbed和PrefixLayer在MNLI-100数据集上的表现非常差,PrefixEmbed的表现仅略好于随机机会(37.6%对33.3%)。PrefixLayer的表现好于PrefixEmbedd,但在MNLI100上仍然明显差于Fine Tune或LoRA。随着训练示例数量的增加,基于前缀的方法和LoRA/微调之间的差距变得更小,这可能表明基于前缀的方式不适合GPT-3中的低数据任务。LoRA在MNLI-100和MNLI-Full上都获得了比微调更好的性能,并且在考虑到随机种子引起的(±0.3)方差的情况下,在MNLI-1k和MNLI-10K上获得了可比较的结果。
表17中报告了MNLI-n上不同适应方法的训练超参数。我们对MNLI-100集合上的PrefixLayer使用较小的学习率,因为训练损失不会随着较大的学习率而减少。
G测量子空间之间的相似性
具体地说,设U i>A U j B的奇异值为σ1,σ2,··,σp,其中p=min{i,j}。我们知道投影度量Ham&Lee(2008)定义为:
其中我们的相似性定义为:
这种相似性满足如果U i A和U j B共享相同的柱跨度,则φ(A,B,i,j)=1。如果它们是完全正交的,那么φ(A,B,i,j)=0。否则,φ(A,B,i,j)∈(0,1)。
低秩矩阵的H附加实验
我们提出了我们对低秩更新矩阵的调查的额外结果。
H.1 LORA模之间的相关性
请参见图6和图7,了解图3和图4中的结果如何推广到其他层。
H.2 r对GPT-2的影响
我们在GPT-2中重复我们关于r的影响的实验(第7.2节)。以E2E NLG Challenge数据集为例,我们报告了在训练26000步后,通过不同的r选择实现的验证损失和测试指标。我们在表18中给出了我们的结果。GPT-2 Medium的最佳秩在4到16之间,具体取决于所使用的度量,这与GPT-3 175B的度量类似。请注意,模型大小和适应的最佳秩之间的关系仍然是一个悬而未决的问题。
H.3 W和∆W之间的相关性
W和∆W之间随r变化的归一化子空间相似性见图8。再次注意,∆W不包含W的顶部奇异方向,因为∆W中的顶部4个方向与W中的前10%方向之间的相似性几乎不超过0.2。这提供了证据,证明∆W包含那些在W中没有强调的“特定任务”方向。接下来要回答的一个有趣的问题是,为了使模型自适应良好工作,我们需要放大这些特定任务的方向的“强度”有多大?
H.4放大系数
可以自然地将特征放大因子视为比率k∆WkF kU>W V>kF,其中U和V是∆W的SVD分解的左奇异矩阵和右奇异矩阵。(回想一下,UU>W V>V给出了W在∆W跨越的子空间上的“投影”。)直观地说,当∆W主要包含特定任务的方向时,这个量测量了其中有多少被∆W放大。如第7.3节所示,对于r=4,该放大因子大至20。换言之,在每一层中(通常来说)有四个特征方向(在来自预训练模型W的整个特征空间中),需要放大非常大的因子20,以便实现我们报告的下游特定任务的准确性。而且,对于每个不同的下游任务,应该期望放大一组非常不同的特征方向。然而,人们可能会注意到,对于r=64,该放大因子仅为2左右,这意味着在∆W中学习到的大多数方向(r=64)不会被放大太多。这并不奇怪,事实上(再次)证明了表示“任务特定方向”(因此用于模型自适应)所需的内在秩较低。相反,∆W的第4级版本中的那些方向(对应于r=4)被放大了更大的因子20。