LoRA:大模型下游任务的低秩适应

论文标题:LoRA: Low-Rank Adaptation of Large Language Models
论文链接:https://arxiv.org/abs/2106.09685
论文来源:NVIDIA

一、概述

自然语言处理中的一个重要范式是在通用域数据上进行大规模预训练,然后在特定任务或域上适配。然而随着模型规模(比如GPT-3这样规模模型的出现)越来越大,对大模型的全参数微调变得更加困难,这在存储和部署上都非常具有挑战性。

目前的一些研究试图通过只微调一部分参数或为新任务学习外部模块来缓解这个问题。这样,我们只需要在进行每个任务时存储和加载少量的任务特定参数以及预训练模型,大大提高了部署时的操作效率。然而,现有的技术也存在一些问题,比如其通过扩展模型深度(adapter等方法)增加了推理延迟(inference latency),或者减少了模型可用的序列长度。更重要的是,这些方法通常无法达到微调baseline的效果,需要在效率和模型性能之间进行权衡。

我们的方法Low-Rank Adaptation (LoRA)灵感来源于一些前人的研究,即过度参数化的神经网络模型在训练后会呈现低秩特性,也就是说过度参数化的模型拥有一个很小的内在维度(low intrinsic dimension)。因此我们猜测,在模型微调适应的过程中权重的变化也具有“低秩”特性,这启发我们用低秩分解来表示权重的更新,而不是全参数训练。LoRA允许我们通过优化密集层(dense layer)在适应过程中的秩分解矩阵(rank decomposition matrices)来间接训练神经网络中的一些密集层,这个过程中保持预训练的参数不变,如下所示。以GPT-3 175B为例,我们证明了设置一个非常低的秩(也就是把下图中的r设置成是1或2这样很小的值)就足够用来微调,虽然GPT-3的满秩高达12,288(也就是GPT-3的隐层维度),因此LoRA在存储和计算上是非常高效的。

LoRA

总体来说,LoRA有以下几个关键的优点:
①预训练模型在不同的下游任务上可以共享,我们可以为不同的任务构建多个相应的LoRA模块。我们可以冻结预训练模型,在切换任务时只需要替换上图中的矩阵AB即可,这可以显著降低存储需求和任务切换的开销。
②当使用Adam等优化器时,LoRA使训练更高效,其将模型硬件要求的门槛降低了3倍,这是因为我们不需要计算预训练模型的梯度,也不需要维护其大多数参数的优化器状态,只需要优化插入的低秩矩阵的参数。
③低秩矩阵是线性的设计,这允许我们在部署时可以将可训练低秩矩阵与冻结的预训练模型权重合并,这与全参数微调的模型相比,不会引入推理延迟。
④LoRA与许多先前的方法是正交的,可以与其中的许多方法组合,例如prefix-tuning。

二、背景

在本文中,我们将Transformer模型的输出维度记作d_{model},使用W_{q},W_{k},W_{v},W_{o}来表示多头自注意力模块中的query/key/value/output密集层参数矩阵,用W或者W_0来表示预训练的权重矩阵,\Delta W表示适应过程中梯度的累积更新,LoRA模块中的秩用r表示。

对于一些下游任务(如摘要、机器阅读理解、NL2SQL等),在进行模型的全参数微调时,模型会被预训练权重\Phi _{0}初始化,然后按照梯度更新为\Phi _{0}+\Delta \Phi以最大化下游任务数据上的条件概率:

\underset{\Phi }{max}\sum _{(x,y)\in \mathcal{Z}}\sum_{t=1}^{|y|}log(P_{\Phi }(y_{t}|x,y_{< t}))

全参数微调在模型参数规模很大时在存储和部署上成本很高。在本文中,模型特定于任务的参数增量被使用更小规模的参数集\Theta来编码,也就是\Delta \Phi =\Delta \Phi (\Theta ),这里的|\Theta |\ll |\Phi _{0}|。寻找\Delta \Phi的过程也就变成了对\Theta的优化:

\underset{\Theta }{max}\sum _{(x,y)\in \mathcal{Z}}\sum_{t=1}^{|y|}log(P_{\Phi _{0}+\Delta \Phi (\Theta )}(y_{t}|x,y_{< t}))

三、方法

注意尽管在实验中我们只关注Transformer语言模型中的某些权重,但是LoRA适用于深度学习模型中的任何密集层。

  1. 低秩参数化的更新矩阵

一个神经网络包含许多执行矩阵乘法的密集层,这些层中的权重矩阵通常都是满秩的。当适应特定任务时,早先研究表明预训练语言模型在随机投影到较小的子空间后仍然可以高效地学习,或者说它们具有较低的内在维度或者内在秩。受此启发,我们假设在微调适应期间权重的更新也具有低的“内在秩”。对于一个预训练权重矩阵 W_0 \in \mathbb{R}^{d\times k},微调时其权重更新为W_0 + \Delta W,我们通过将\Delta W表示为一个低秩分解来限制这个更新过程,即W_0 + \Delta W = W_0 + BA,其中B \in \mathbb{R}^{d\times r}A \in \mathbb{R}^{r\times k},秩r \ll \min(d, k)。在训练过程中,W_0是冻结的,并不接收梯度更新,而AB包含可训练参数。注意W_0\Delta W = BA都与相同的输入相乘,并且它们各自的输出向量按坐标求和。对于h = W_0x,我们修改后的前向传播为:

h = W_0x + \Delta W x = W_0x + BAx

前面的图1中说明了这个重参数化过程。我们对A使用随机高斯矩阵初始化,对B使用零矩阵初始化,因此在训练开始时\Delta W = BA为零。然后我们通过\frac{\alpha}{r}缩放\Delta Wx,其中\alpha是一个常数,也就变成了:

h = W_0x + \frac{\alpha}{r}\Delta W x = W_0x + \frac{\alpha}{r}BAx

当使用Adam优化时,如果我们适当地缩放初始化,那么调整\alpha大致相当于调整学习率,这是因为反向传播时对AB求导,以参数矩阵A为例参数更新过程变成了:

\theta=\theta - lr \times grad(\mathcal{L}(\frac{\alpha}{r}BA))=\theta - \frac{\alpha}{r} \times lr \times grad(\mathcal{L}(BA))

因此,我们简单地将\alpha设置为我们尝试的第一个r,并不对其进行调优。这种缩放有助于减少我们在变化r时需要重新调优超参数的需求。

LoRA方法是全参数微调的泛化。微调的一种更普遍的形式是训练预训练参数的一个子集。LoRA进一步地不要求在适应过程中权重矩阵的累积梯度更新具有满秩。这意味着当我们将LoRA应用于所有权重矩阵并训练所有偏置时,通过设置LoRA秩r为预训练权重矩阵的秩,我们大致恢复了全参数微调的表达能力。换句话说,随着可训练参数的增加,LoRA的训练大致收敛到原始模型的训练,而基于adapter的方法收敛到MLP,基于prefix的方法收敛到无法处理长输入序列的模型。

LoRA不会引入额外推理延迟。在生产环境中部署时,我们可以明确计算并存储W = W_0 + BA,并像往常一样执行推理。注意,W_0BA维度都是\mathbb{R}^{d\times k}。当我们需要切换到另一个下游任务时,我们可以通过先减去BA恢复W_0然后添加不同的B'A',这是一个内存开销很小的快速操作。关键在于,这可以保证与微调模型相比,我们在推理期间不会引入任何额外延迟,这是由结构确定的。

  1. 将LoRA应用于Transformer

原则上,我们可以将LoRA应用于神经网络中的任何权重子集以减少可训练参数的数量。 在Transformer体系结构中,自注意力模块中有四个权重矩阵(W_q, W_k, W_v, W_o),MLP模块中有两个。即使W_q(或W_k, W_v)的输出维度通常被切片成注意力头,我们也将视为单个d_{model} \times d_{model}矩阵。在本文实验中我们限制仅对自注意力模块中的权重应用LoRA(实际上是只对W_qW_v使用),冻结MLP模块(也就是说它们在下游任务中不被训练)。

LoRA方法 最重要的好处是内存和存储使用的减少。对于用Adam训练的大型Transformer,如果r \ll d_{model},由于我们不需要为大多数参数存储优化器状态,因此VRAM使用量减少了多达2/3。 在GPT-3 175B上,我们将训练期间的VRAM消耗从1.2TB降低到350GB。 当设置r=4且仅适应query和value参数矩阵时,检查点大小约减少了10000倍(从350GB减少到35MB)。这允许我们用明显更少的GPU进行训练,并避免I/O瓶颈。 由于我们不需要计算绝大多数参数的梯度,与全参数微调相比,在GPT-3 175B上训练时,我们还观察到了25%的加速。

LoRA也有其局限性。如果合并ABW中,会增加推理效率,但是会减少不同人物模块的灵活性。如果不合并,可以灵活地为不同任务动态选择模块,但推理效率可能会降低。

四、实验

本文在RoBERTa、DeBERTa、GPT-2、GPT-3等模型上进行了实验,实验结果如下:

实验
实验
实验
实验

五、理论分析

我们希望进一步解释从下游任务中学习的低秩更新的属性。注意,低秩结构不仅降低了硬件需求的门槛,从而使我们能够并行运行多个实验,而且还使更新权重与预训练权重的相关性更具可解释性。我们在GPT-3 175B上进行了一系列实证研究,以回答以下问题:
①在参数预算约束下,我们应该适应哪些预训练Transformer中的权重子集以最大化下游任务的性能?
②“最优”适应矩阵\Delta W确实低秩吗?如果是这样,实践中使用将秩设置成多少比较好?
\Delta WW有什么关系?\Delta WW高度相关吗?(数学上,\Delta W主要包含在W的顶部奇异值方向中吗?)此外,与W相对应的方向中,\Delta W有多大?

我们相信,对问题②和③的回答可以阐明使用预训练语言模型进行下游任务的基本原理,这是自然语言处理中的一个关键主题。

  1. 我们应该对Transformer中的哪些矩阵使用LoRA?

给定有限的参数预算,哪种类型的权重应该被使用LoRA适应以获得下游任务的最佳性能效果?我们仅考虑自注意力模块中的权重矩阵。我们在GPT-3 175B上设置参数预算为18M(如果以FP16存储约需要35MB),这相当于r=8(如果我们适应一种类型的注意力权重)或r=4(如果我们适应两种类型),对于所有96层都是这样来设置。结果如下表所示。

实验

注意,将所有参数都适应在\Delta W_q\Delta W_k中会导致性能显著降低,而适应W_qW_v两者会产生最佳结果。这表明即使rank为4也可以在\Delta W中捕获足够的信息。与使用更大的rank适应单个权重类型相比,适应更多权重矩阵是更合适的。

  1. LoRA的最优秩r是多少?
  • 最优秩的设置

我们将注意力转向rankr对模型性能的影响。我们适应仅W_q\{W_q, W_v\}\{W_q, W_k, W_v, W_c\},并进行比较。实验结果如下图所示:

实验

令我们惊讶的是,在这些数据集上,仅适应W_qW_v时,rank为1就足够了,而仅训练W_q需要更大的r。实验结果表明增大r不会覆盖更有意义的子空间,因此在使用LoRA时设置一个较小的r即可。

  • 不同rank之间子空间的相似度

给定A_{r=8}A_{r=64},它们分别是使用相同预训练模型学习得到的rank为8和64的适应矩阵。我们对它们进行奇异值分解,得到右奇异矩阵U_{A_{r=8}}U_{A_{r=64}}。我们希望回答:当我们分别取U_{A_{r=8}}的前i个奇异向量和U_{A_{r=64}}的前j个奇异向量(其中1 \leq i \leq 81 \leq j \leq 64)生成的子空间时,这两个子空间有多大的重叠?我们用一种基于Grassmann距离的归一化子空间相似度来衡量:

\phi(A_{r=8}, A_{r=64}, i, j) = \frac {||U_{A_{r=8}}^{iT} U_{A_{r=64}}^{j}||_{F}^{2}}{\min(i,j)} \in [0,1]

其中U_{A_{r=8}}^{i}表示U_{A_{r=8}}对应于前i个奇异向量的多个列。

\phi(\cdot)的值域在[0,1],其中1表示子空间完全重叠,0表示完全正交。参见下图中随着ij的变化\phi的变化情况。由于篇幅所限,我们仅查看第48层(总共96层),但结论对其他层同样成立。

实验

从上图中可以观察到一个重要的结果:

A_{r=8}A_{r=64}的顶部奇异向量对应的方向有很大的重叠,而其他的方向则不相容。具体来说,A_{r=8}A_{r=64}\Delta W_v(或者\Delta W_q)在维度为1时共享一个子空间,其归一化相似度在0.5以上。这可以解释为什么在我们的之前的实验中r=1的表现已经相当不错。

由于A_{r=8}A_{r=64}都是用同一个预训练模型学习得到的,上图3表明A_{r=8}A_{r=64}的靠前的奇异向量方向是最有用的,而其他方向可能大多包含了训练过程中累积的随机噪声。因此,适应矩阵确实具有非常低的秩。

  • 不同随机种子之间子空间的相似度

我们进一步通过绘制在r=64时两个随机种子(也就是初始化随机高斯矩阵A时的随机种子)的归一化子空间相似度来确认这一点,结果如下图所示。与\Delta W_v相比,\Delta W_q似乎具有更高的“内在秩”,因为两次实验中共享的奇异值方向更多,这与我们在上表6中的观察到的结果一致。为了比较,我们还绘制了两个随机高斯矩阵的归一化子空间相似度,它们之间没有共享任何奇异值方向。

实验
  1. \Delta WW的关系如何?

我们进一步研究\Delta WW之间的关系。具体而言,\Delta W是否与W高度相关?(数学上,\Delta W主要包含在W的顶部奇异值方向中吗?)此外,与W相对应的方向中,\Delta W有多大?这可以阐明适应预训练语言模型的基本机制。

为了回答这些问题,我们通过计算U^TWV^T,其中U/V\Delta W的左/右奇异向量矩阵,将W投影到\Delta Wr维子空间上。然后,我们比较\left \|U^TWV^T \right \|_{F}\left \|W\right \|_F的Frobenius范数。作为比较,我们还通过将U,V替换为W或随机矩阵的前r个奇异向量来计算\left \|U^TWV^T \right \|_{F}。实验结果如下表所示。

实验

我们从上表中得出几个结论:
①首先,与随机矩阵相比,\Delta WW之间存在更强的相关性,表明\Delta W放大了W中已经存在的某些特征。
②其次,\Delta W并不是重复W中的靠前的奇异值方向,而是放大了W中没有强调的方向。
③放大系数是相当大的:对于r=4,它是21.5\approx 6.91/0.32

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容