論文標題:LoRA: Low-Rank Adaptation of Large Language Models
論文鏈接:https://arxiv.org/abs/2106.09685
論文來源:NVIDIA
一、概述
自然語言處理中的一個重要范式是在通用域數(shù)據(jù)上進行大規(guī)模預(yù)訓(xùn)練道媚,然后在特定任務(wù)或域上適配本讥。然而隨著模型規(guī)模(比如GPT-3這樣規(guī)模模型的出現(xiàn))越來越大吞瞪,對大模型的全參數(shù)微調(diào)變得更加困難,這在存儲和部署上都非常具有挑戰(zhàn)性。
目前的一些研究試圖通過只微調(diào)一部分參數(shù)或為新任務(wù)學(xué)習(xí)外部模塊來緩解這個問題。這樣吮炕,我們只需要在進行每個任務(wù)時存儲和加載少量的任務(wù)特定參數(shù)以及預(yù)訓(xùn)練模型,大大提高了部署時的操作效率访得。然而龙亲,現(xiàn)有的技術(shù)也存在一些問題,比如其通過擴展模型深度(adapter等方法)增加了推理延遲(inference latency)悍抑,或者減少了模型可用的序列長度鳄炉。更重要的是,這些方法通常無法達到微調(diào)baseline的效果搜骡,需要在效率和模型性能之間進行權(quán)衡拂盯。
我們的方法Low-Rank Adaptation (LoRA)靈感來源于一些前人的研究,即過度參數(shù)化的神經(jīng)網(wǎng)絡(luò)模型在訓(xùn)練后會呈現(xiàn)低秩特性浆兰,也就是說過度參數(shù)化的模型擁有一個很小的內(nèi)在維度(low intrinsic dimension)磕仅。因此我們猜測珊豹,在模型微調(diào)適應(yīng)的過程中權(quán)重的變化也具有“低秩”特性簸呈,這啟發(fā)我們用低秩分解來表示權(quán)重的更新,而不是全參數(shù)訓(xùn)練店茶。LoRA允許我們通過優(yōu)化密集層(dense layer)在適應(yīng)過程中的秩分解矩陣(rank decomposition matrices)來間接訓(xùn)練神經(jīng)網(wǎng)絡(luò)中的一些密集層蜕便,這個過程中保持預(yù)訓(xùn)練的參數(shù)不變,如下所示贩幻。以GPT-3 175B為例轿腺,我們證明了設(shè)置一個非常低的秩(也就是把下圖中的設(shè)置成是1或2這樣很小的值)就足夠用來微調(diào)两嘴,雖然GPT-3的滿秩高達12,288(也就是GPT-3的隱層維度),因此LoRA在存儲和計算上是非常高效的族壳。
總體來說憔辫,LoRA有以下幾個關(guān)鍵的優(yōu)點:
①預(yù)訓(xùn)練模型在不同的下游任務(wù)上可以共享,我們可以為不同的任務(wù)構(gòu)建多個相應(yīng)的LoRA模塊仿荆。我們可以凍結(jié)預(yù)訓(xùn)練模型贰您,在切換任務(wù)時只需要替換上圖中的矩陣和即可,這可以顯著降低存儲需求和任務(wù)切換的開銷拢操。
②當使用Adam等優(yōu)化器時锦亦,LoRA使訓(xùn)練更高效,其將模型硬件要求的門檻降低了3倍令境,這是因為我們不需要計算預(yù)訓(xùn)練模型的梯度杠园,也不需要維護其大多數(shù)參數(shù)的優(yōu)化器狀態(tài),只需要優(yōu)化插入的低秩矩陣的參數(shù)舔庶。
③低秩矩陣是線性的設(shè)計抛蚁,這允許我們在部署時可以將可訓(xùn)練低秩矩陣與凍結(jié)的預(yù)訓(xùn)練模型權(quán)重合并,這與全參數(shù)微調(diào)的模型相比惕橙,不會引入推理延遲篮绿。
④LoRA與許多先前的方法是正交的,可以與其中的許多方法組合吕漂,例如prefix-tuning亲配。
二妹窖、背景
在本文中澜躺,我們將Transformer模型的輸出維度記作,使用來表示多頭自注意力模塊中的query/key/value/output密集層參數(shù)矩陣匈挖,用或者來表示預(yù)訓(xùn)練的權(quán)重矩陣苍鲜,表示適應(yīng)過程中梯度的累積更新思灰,LoRA模塊中的秩用表示。
對于一些下游任務(wù)(如摘要混滔、機器閱讀理解洒疚、NL2SQL等),在進行模型的全參數(shù)微調(diào)時坯屿,模型會被預(yù)訓(xùn)練權(quán)重初始化油湖,然后按照梯度更新為以最大化下游任務(wù)數(shù)據(jù)上的條件概率:
全參數(shù)微調(diào)在模型參數(shù)規(guī)模很大時在存儲和部署上成本很高。在本文中领跛,模型特定于任務(wù)的參數(shù)增量被使用更小規(guī)模的參數(shù)集來編碼乏德,也就是,這里的。尋找的過程也就變成了對的優(yōu)化:
三喊括、方法
注意盡管在實驗中我們只關(guān)注Transformer語言模型中的某些權(quán)重胧瓜,但是LoRA適用于深度學(xué)習(xí)模型中的任何密集層。
- 低秩參數(shù)化的更新矩陣
一個神經(jīng)網(wǎng)絡(luò)包含許多執(zhí)行矩陣乘法的密集層郑什,這些層中的權(quán)重矩陣通常都是滿秩的府喳。當適應(yīng)特定任務(wù)時,早先研究表明預(yù)訓(xùn)練語言模型在隨機投影到較小的子空間后仍然可以高效地學(xué)習(xí)蘑拯,或者說它們具有較低的內(nèi)在維度或者內(nèi)在秩劫拢。受此啟發(fā),我們假設(shè)在微調(diào)適應(yīng)期間權(quán)重的更新也具有低的“內(nèi)在秩”强胰。對于一個預(yù)訓(xùn)練權(quán)重矩陣 舱沧,微調(diào)時其權(quán)重更新為,我們通過將表示為一個低秩分解來限制這個更新過程偶洋,即熟吏,其中,玄窝,秩牵寺。在訓(xùn)練過程中,是凍結(jié)的恩脂,并不接收梯度更新帽氓,而和包含可訓(xùn)練參數(shù)。注意和都與相同的輸入相乘俩块,并且它們各自的輸出向量按坐標求和黎休。對于,我們修改后的前向傳播為:
前面的圖1中說明了這個重參數(shù)化過程玉凯。我們對使用隨機高斯矩陣初始化势腮,對使用零矩陣初始化,因此在訓(xùn)練開始時為零漫仆。然后我們通過縮放捎拯,其中是一個常數(shù),也就變成了:
當使用Adam優(yōu)化時盲厌,如果我們適當?shù)乜s放初始化署照,那么調(diào)整大致相當于調(diào)整學(xué)習(xí)率,這是因為反向傳播時對和求導(dǎo)吗浩,以參數(shù)矩陣為例參數(shù)更新過程變成了:
因此建芙,我們簡單地將設(shè)置為我們嘗試的第一個,并不對其進行調(diào)優(yōu)拓萌。這種縮放有助于減少我們在變化時需要重新調(diào)優(yōu)超參數(shù)的需求岁钓。
LoRA方法是全參數(shù)微調(diào)的泛化。微調(diào)的一種更普遍的形式是訓(xùn)練預(yù)訓(xùn)練參數(shù)的一個子集微王。LoRA進一步地不要求在適應(yīng)過程中權(quán)重矩陣的累積梯度更新具有滿秩屡限。這意味著當我們將LoRA應(yīng)用于所有權(quán)重矩陣并訓(xùn)練所有偏置時,通過設(shè)置LoRA秩為預(yù)訓(xùn)練權(quán)重矩陣的秩炕倘,我們大致恢復(fù)了全參數(shù)微調(diào)的表達能力钧大。換句話說,隨著可訓(xùn)練參數(shù)的增加罩旋,LoRA的訓(xùn)練大致收斂到原始模型的訓(xùn)練啊央,而基于adapter的方法收斂到MLP,基于prefix的方法收斂到無法處理長輸入序列的模型涨醋。
LoRA不會引入額外推理延遲瓜饥。在生產(chǎn)環(huán)境中部署時,我們可以明確計算并存儲浴骂,并像往常一樣執(zhí)行推理乓土。注意,和維度都是溯警。當我們需要切換到另一個下游任務(wù)時趣苏,我們可以通過先減去恢復(fù)然后添加不同的,這是一個內(nèi)存開銷很小的快速操作梯轻。關(guān)鍵在于食磕,這可以保證與微調(diào)模型相比,我們在推理期間不會引入任何額外延遲喳挑,這是由結(jié)構(gòu)確定的彬伦。
- 將LoRA應(yīng)用于Transformer
原則上,我們可以將LoRA應(yīng)用于神經(jīng)網(wǎng)絡(luò)中的任何權(quán)重子集以減少可訓(xùn)練參數(shù)的數(shù)量伊诵。 在Transformer體系結(jié)構(gòu)中媚朦,自注意力模塊中有四個權(quán)重矩陣(, , , ),MLP模塊中有兩個日戈。即使(或, )的輸出維度通常被切片成注意力頭询张,我們也將視為單個矩陣。在本文實驗中我們限制僅對自注意力模塊中的權(quán)重應(yīng)用LoRA(實際上是只對和使用)浙炼,凍結(jié)MLP模塊(也就是說它們在下游任務(wù)中不被訓(xùn)練)份氧。
LoRA方法 最重要的好處是內(nèi)存和存儲使用的減少。對于用Adam訓(xùn)練的大型Transformer弯屈,如果蜗帜,由于我們不需要為大多數(shù)參數(shù)存儲優(yōu)化器狀態(tài),因此VRAM使用量減少了多達2/3资厉。 在GPT-3 175B上厅缺,我們將訓(xùn)練期間的VRAM消耗從1.2TB降低到350GB。 當設(shè)置且僅適應(yīng)query和value參數(shù)矩陣時,檢查點大小約減少了10000倍(從350GB減少到35MB)湘捎。這允許我們用明顯更少的GPU進行訓(xùn)練诀豁,并避免I/O瓶頸。 由于我們不需要計算絕大多數(shù)參數(shù)的梯度窥妇,與全參數(shù)微調(diào)相比舷胜,在GPT-3 175B上訓(xùn)練時,我們還觀察到了25%的加速活翩。
LoRA也有其局限性烹骨。如果合并和到中,會增加推理效率材泄,但是會減少不同人物模塊的靈活性沮焕。如果不合并,可以靈活地為不同任務(wù)動態(tài)選擇模塊拉宗,但推理效率可能會降低峦树。
四、實驗
本文在RoBERTa簿废、DeBERTa空入、GPT-2、GPT-3等模型上進行了實驗族檬,實驗結(jié)果如下:
五歪赢、理論分析
我們希望進一步解釋從下游任務(wù)中學(xué)習(xí)的低秩更新的屬性。注意单料,低秩結(jié)構(gòu)不僅降低了硬件需求的門檻埋凯,從而使我們能夠并行運行多個實驗,而且還使更新權(quán)重與預(yù)訓(xùn)練權(quán)重的相關(guān)性更具可解釋性扫尖。我們在GPT-3 175B上進行了一系列實證研究白对,以回答以下問題:
①在參數(shù)預(yù)算約束下,我們應(yīng)該適應(yīng)哪些預(yù)訓(xùn)練Transformer中的權(quán)重子集以最大化下游任務(wù)的性能换怖?
②“最優(yōu)”適應(yīng)矩陣確實低秩嗎甩恼?如果是這樣,實踐中使用將秩設(shè)置成多少比較好沉颂?
③與有什么關(guān)系条摸?與高度相關(guān)嗎?(數(shù)學(xué)上铸屉,主要包含在的頂部奇異值方向中嗎钉蒲?)此外,與相對應(yīng)的方向中彻坛,有多大?
我們相信顷啼,對問題②和③的回答可以闡明使用預(yù)訓(xùn)練語言模型進行下游任務(wù)的基本原理踏枣,這是自然語言處理中的一個關(guān)鍵主題。
- 我們應(yīng)該對Transformer中的哪些矩陣使用LoRA钙蒙?
給定有限的參數(shù)預(yù)算茵瀑,哪種類型的權(quán)重應(yīng)該被使用LoRA適應(yīng)以獲得下游任務(wù)的最佳性能效果?我們僅考慮自注意力模塊中的權(quán)重矩陣仪搔。我們在GPT-3 175B上設(shè)置參數(shù)預(yù)算為18M(如果以FP16存儲約需要35MB)瘾婿,這相當于(如果我們適應(yīng)一種類型的注意力權(quán)重)或(如果我們適應(yīng)兩種類型)蜻牢,對于所有96層都是這樣來設(shè)置烤咧。結(jié)果如下表所示。
注意抢呆,將所有參數(shù)都適應(yīng)在或中會導(dǎo)致性能顯著降低煮嫌,而適應(yīng)和兩者會產(chǎn)生最佳結(jié)果。這表明即使rank為4也可以在中捕獲足夠的信息抱虐。與使用更大的rank適應(yīng)單個權(quán)重類型相比昌阿,適應(yīng)更多權(quán)重矩陣是更合適的。
- LoRA的最優(yōu)秩是多少恳邀?
- 最優(yōu)秩的設(shè)置
我們將注意力轉(zhuǎn)向rank對模型性能的影響懦冰。我們適應(yīng)僅、谣沸、刷钢,并進行比較。實驗結(jié)果如下圖所示:
令我們驚訝的是乳附,在這些數(shù)據(jù)集上内地,僅適應(yīng)和時,rank為1就足夠了赋除,而僅訓(xùn)練需要更大的阱缓。實驗結(jié)果表明增大不會覆蓋更有意義的子空間,因此在使用LoRA時設(shè)置一個較小的即可举农。
- 不同rank之間子空間的相似度
給定和荆针,它們分別是使用相同預(yù)訓(xùn)練模型學(xué)習(xí)得到的rank為8和64的適應(yīng)矩陣。我們對它們進行奇異值分解颁糟,得到右奇異矩陣和航背。我們希望回答:當我們分別取的前個奇異向量和的前個奇異向量(其中,)生成的子空間時滚停,這兩個子空間有多大的重疊沃粗?我們用一種基于Grassmann距離的歸一化子空間相似度來衡量:
其中表示對應(yīng)于前個奇異向量的多個列。
的值域在键畴,其中1表示子空間完全重疊最盅,0表示完全正交突雪。參見下圖中隨著和的變化的變化情況。由于篇幅所限涡贱,我們僅查看第48層(總共96層)咏删,但結(jié)論對其他層同樣成立。
從上圖中可以觀察到一個重要的結(jié)果:
和的頂部奇異向量對應(yīng)的方向有很大的重疊问词,而其他的方向則不相容督函。具體來說,和的(或者)在維度為1時共享一個子空間激挪,其歸一化相似度在0.5以上辰狡。這可以解釋為什么在我們的之前的實驗中的表現(xiàn)已經(jīng)相當不錯。
由于和都是用同一個預(yù)訓(xùn)練模型學(xué)習(xí)得到的垄分,上圖3表明和的靠前的奇異向量方向是最有用的宛篇,而其他方向可能大多包含了訓(xùn)練過程中累積的隨機噪聲。因此薄湿,適應(yīng)矩陣確實具有非常低的秩叫倍。
- 不同隨機種子之間子空間的相似度
我們進一步通過繪制在時兩個隨機種子(也就是初始化隨機高斯矩陣時的隨機種子)的歸一化子空間相似度來確認這一點,結(jié)果如下圖所示豺瘤。與相比吆倦,似乎具有更高的“內(nèi)在秩”,因為兩次實驗中共享的奇異值方向更多坐求,這與我們在上表6中的觀察到的結(jié)果一致蚕泽。為了比較,我們還繪制了兩個隨機高斯矩陣的歸一化子空間相似度瞻赶,它們之間沒有共享任何奇異值方向赛糟。
- 與的關(guān)系如何?
我們進一步研究和之間的關(guān)系。具體而言砸逊,是否與高度相關(guān)璧南?(數(shù)學(xué)上,主要包含在的頂部奇異值方向中嗎师逸?)此外司倚,與相對應(yīng)的方向中,有多大篓像?這可以闡明適應(yīng)預(yù)訓(xùn)練語言模型的基本機制。
為了回答這些問題,我們通過計算丹皱,其中是的左/右奇異向量矩陣讼油,將投影到的維子空間上。然后瘦赫,我們比較和的Frobenius范數(shù)伞芹。作為比較唱较,我們還通過將替換為或隨機矩陣的前個奇異向量來計算胸遇。實驗結(jié)果如下表所示。
我們從上表中得出幾個結(jié)論:
①首先逗威,與隨機矩陣相比,與之間存在更強的相關(guān)性,表明放大了中已經(jīng)存在的某些特征。
②其次计螺,并不是重復(fù)中的靠前的奇異值方向呐萌,而是放大了中沒有強調(diào)的方向。
③放大系數(shù)是相當大的:對于,它是。