背景
神經(jīng)網(wǎng)絡(luò)包含很多全連接層,其借助于矩陣乘法得以實(shí)現(xiàn),然而,很多全連接層的權(quán)重矩陣都是滿秩的。當(dāng)針對特定任務(wù)進(jìn)行微調(diào)后,模型中權(quán)重矩陣其實(shí)具有很低的本征秩(intrinsic rank),因此,論文的作者認(rèn)為權(quán)重更新的那部分參數(shù)矩陣盡管隨機(jī)投影到較小的子空間,仍然可以有效的學(xué)習(xí),可以理解為針對特定的下游任務(wù)這些權(quán)重矩陣就不要求滿秩。
技術(shù)原理
LoRA(論文:LoRA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS),該方法的核心思想就是通過低秩分解來模擬參數(shù)的改變量,從而以極小的參數(shù)量來實(shí)現(xiàn)大模型的間接訓(xùn)練。
在涉及到矩陣相乘的模塊,在原始的PLM旁邊增加一個新的通路,通過前后兩個矩陣A,B相乘,第一個矩陣A負(fù)責(zé)降維,第二個矩陣B負(fù)責(zé)升維,中間層維度為r,從而來模擬所謂的本征秩(intrinsic rank)。
可訓(xùn)練層維度和預(yù)訓(xùn)練模型層維度一致為d,先將維度d通過全連接層降維至r,再從r通過全連接層映射回d維度,其中,r<
在下游任務(wù)訓(xùn)練時,固定模型的其他參數(shù),只優(yōu)化新增的兩個矩陣的權(quán)重參數(shù),將PLM跟新增的通路兩部分的結(jié)果加起來作為最終的結(jié)果(兩邊通路的輸入跟輸出維度是一致的),即h=Wx+BAx。第一個矩陣的A的權(quán)重參數(shù)會通過高斯函數(shù)初始化,而第二個矩陣的B的權(quán)重參數(shù)則會初始化為零矩陣,這樣能保證訓(xùn)練開始時新增的通路BA=0從而對模型結(jié)果沒有影響。
在推理時,將左右兩部分的結(jié)果加到一起即可,h=Wx+BAx=(W+BA)x,所以只要將訓(xùn)練完成的矩陣乘積BA跟原本的權(quán)重矩陣W加到一起作為新權(quán)重參數(shù)替換原本PLM的W即可,對于推理來說,不會增加額外的計算資源。
此外,Transformer的權(quán)重矩陣包括Attention模塊里用于計算query, key, value的Wq,Wk,Wv以及多頭attention的Wo,以及MLP層的權(quán)重矩陣,LoRA只應(yīng)用于Attention模塊中的4種權(quán)重矩陣,而且通過消融實(shí)驗(yàn)發(fā)現(xiàn)同時調(diào)整 Wq 和 Wv 會產(chǎn)生最佳結(jié)果。
實(shí)驗(yàn)還發(fā)現(xiàn),保證權(quán)重矩陣的種類的數(shù)量比起增加隱藏層維度r更為重要,增加r并不一定能覆蓋更加有意義的子空間。
?
那么關(guān)于秩的選擇,通常情況下,rank為4,8,16即可。
通過實(shí)驗(yàn)也發(fā)現(xiàn),在眾多數(shù)據(jù)集上LoRA在只訓(xùn)練極少量參數(shù)的前提下,最終在性能上能和全量微調(diào)匹配,甚至在某些任務(wù)上優(yōu)于全量微調(diào)。
AdaLoRA
背景
在NLP領(lǐng)域,對于下游任務(wù)進(jìn)行大型預(yù)訓(xùn)練語言模型的微調(diào)已經(jīng)成為一種重要的做法。一般而言,我們會采用對原有的預(yù)訓(xùn)練模型進(jìn)行全量微調(diào)的方法來適配下游任務(wù),但這種方法存在兩個問題。
訓(xùn)練階段。對于預(yù)訓(xùn)練模型進(jìn)行微調(diào)的時候,為了更新權(quán)重參數(shù),需要大量的顯存來存儲參數(shù)的梯度和優(yōu)化器信息,在當(dāng)今預(yù)訓(xùn)練模型的參數(shù)變得越來越大的情況下,針對下游任務(wù)微調(diào)門檻變得越來越高。
推理階段。由于我們訓(xùn)練的時候是對于模型參數(shù)進(jìn)行全量的更新,所以多個下游任務(wù)需要為每個任務(wù)維護(hù)一個大型模型的獨(dú)立副本,這樣就導(dǎo)致我們在實(shí)際應(yīng)用的時候浪費(fèi)了不必要的存儲。
為了解決這些問題,研究者提出了兩個主要研究方向,以減少微調(diào)參數(shù)的數(shù)量,同時保持甚至提高預(yù)訓(xùn)練語言模型的性能。
方向一:添加小型網(wǎng)絡(luò)模塊:將小型網(wǎng)絡(luò)模塊添加到PLMs中,保持基礎(chǔ)模型保持不變的情況下僅針對每個任務(wù)微調(diào)這些模塊,可以用于所有任務(wù)。這樣,只需引入和更新少量任務(wù)特定的參數(shù),就可以適配下游的任務(wù),大大提高了預(yù)訓(xùn)練模型的實(shí)用性。如:Adapter tuning、Prefix tuning、Prompt Tuning等,這類方法雖然大大減少了內(nèi)存消耗。但是這些方法存在一些問題,比如:Adapter tuning引入了推理延時;Prefix tuning或Prompt tuning直接優(yōu)化Prefix和Prompt是非單調(diào)的,比較難收斂,并且消耗了輸入的token。
方向二:下游任務(wù)增量更新:對預(yù)訓(xùn)練權(quán)重的增量更新進(jìn)行建模,而無需修改模型架構(gòu),即W=W0+△W。比如:Diff pruning、LoRA等,此類方法可以達(dá)到與完全微調(diào)幾乎相當(dāng)?shù)男阅?,但是也存在一些問題,比如:Diff pruning需要底層實(shí)現(xiàn)來加速非結(jié)構(gòu)化稀疏矩陣的計算,不能直接使用現(xiàn)有的框架,訓(xùn)練過程中需要存儲完整的?W矩陣,相比于全量微調(diào)并沒有降低計算成本。LoRA則需要預(yù)先指定每個增量矩陣的本征秩 r 相同,忽略了在微調(diào)預(yù)訓(xùn)練模型時,權(quán)重矩陣的重要性在不同模塊和層之間存在顯著差異,并且只訓(xùn)練了Attention,沒有訓(xùn)練FFN,事實(shí)上FFN更重要。
基于以上問題進(jìn)行總結(jié):
第一,我們不能預(yù)先指定矩陣的秩,需要動態(tài)更新增量矩陣的R,因?yàn)闄?quán)重矩陣的重要性在不同模塊和層之間存在顯著差異。
第二,需要找到更加重要的矩陣,分配更多的參數(shù),裁剪不重要的矩陣。找到重要的矩陣,可以提升模型效果;而裁剪不重要的矩陣,可以降低參數(shù)計算量,降低模型效果差的風(fēng)險。
為了彌補(bǔ)這一差距,作者提出了AdaLoRA,它根據(jù)權(quán)重矩陣的重要性得分,在權(quán)重矩陣之間自適應(yīng)地分配參數(shù)預(yù)算。
技術(shù)原理
AdaLoRA(論文:ADAPTIVE BUDGET ALLOCATION FOR PARAMETEREFFICIENT FINE-TUNING),是對LoRA的一種改進(jìn),它根據(jù)重要性評分動態(tài)分配參數(shù)預(yù)算給權(quán)重矩陣。具體做法如下:
調(diào)整增量矩分配。AdaLoRA將關(guān)鍵的增量矩陣分配高秩以捕捉更精細(xì)和任務(wù)特定的信息,而將較不重要的矩陣的秩降低,以防止過擬合并節(jié)省計算預(yù)算。
以奇異值分解的形式對增量更新進(jìn)行參數(shù)化,并根據(jù)重要性指標(biāo)裁剪掉不重要的奇異值,同時保留奇異向量。由于對一個大矩陣進(jìn)行精確SVD分解的計算消耗非常大,這種方法通過減少它們的參數(shù)預(yù)算來加速計算,同時,保留未來恢復(fù)的可能性并穩(wěn)定訓(xùn)練。
在訓(xùn)練損失中添加了額外的懲罰項(xiàng),以規(guī)范奇異矩陣P和Q的正交性,從而避免SVD的大量計算并穩(wěn)定訓(xùn)練。
通過實(shí)驗(yàn)證明,AdaLoRA 實(shí)現(xiàn)了在所有預(yù)算、所有數(shù)據(jù)集上與現(xiàn)有方法相比,性能更好或相當(dāng)?shù)乃?。例如,?dāng)參數(shù)預(yù)算為 0.3M 時,AdaLoRA 在RTE數(shù)據(jù)集上,比表現(xiàn)最佳的基線(Baseline)高 1.8%。
QLoRA
背景
微調(diào)大型語言模型 (LLM) 是提高其性能以及添加所需或刪除不需要的行為的一種非常有效的方法。然而,微調(diào)非常大的模型非常昂貴;以 LLaMA 65B 參數(shù)模型為例,常規(guī)的 16 bit微調(diào)需要超過 780 GB 的 GPU 內(nèi)存。
雖然最近的量化方法可以減少 LLM 的內(nèi)存占用,但此類技術(shù)僅適用于推理場景。
基于此,作者提出了QLoRA,并首次證明了可以在不降低任何性能的情況下微調(diào)量化為 4 bit的模型。
技術(shù)原理
QLoRA(論文:QLORA: Efficient Finetuning of Quantized LLMs),使用一種新穎的高精度技術(shù)將預(yù)訓(xùn)練模型量化為 4 bit,然后添加一小組可學(xué)習(xí)的低秩適配器權(quán)重,這些權(quán)重通過量化權(quán)重的反向傳播梯度進(jìn)行微調(diào)。QLORA 有一種低精度存儲數(shù)據(jù)類型(4 bit),還有一種計算數(shù)據(jù)類型(BFloat16)。實(shí)際上,這意味著無論何時使用 QLoRA 權(quán)重張量,我們都會將張量反量化為 BFloat16,然后執(zhí)行 16 位矩陣乘法。QLoRA提出了兩種技術(shù)實(shí)現(xiàn)高保真 4 bit微調(diào)——4 bit NormalFloat(NF4) 量化和雙量化。此外,還引入了分頁優(yōu)化器,以防止梯度檢查點(diǎn)期間的內(nèi)存峰值,從而導(dǎo)致內(nèi)存不足的錯誤,這些錯誤在過去使得大型模型難以在單臺機(jī)器上進(jìn)行微調(diào)。具體說明如下:
4bitNormalFloat(NF4):對于正態(tài)分布權(quán)重而言,一種信息理論上最優(yōu)的新數(shù)據(jù)類型,該數(shù)據(jù)類型對正態(tài)分布數(shù)據(jù)產(chǎn)生比 4 bit整數(shù)和 4bit 浮點(diǎn)數(shù)更好的實(shí)證結(jié)果。
雙量化:對第一次量化后的那些常量再進(jìn)行一次量化,減少存儲空間。
分頁優(yōu)化器:使用NVIDIA統(tǒng)一內(nèi)存特性,該特性可以在在GPU偶爾OOM的情況下,進(jìn)行CPU和GPU之間自動分頁到分頁的傳輸,以實(shí)現(xiàn)無錯誤的 GPU 處理。該功能的工作方式類似于 CPU 內(nèi)存和磁盤之間的常規(guī)內(nèi)存分頁。使用此功能為優(yōu)化器狀態(tài)(Optimizer)分配分頁內(nèi)存,然后在 GPU 內(nèi)存不足時將其自動卸載到 CPU 內(nèi)存,并在優(yōu)化器更新步驟需要時將其加載回 GPU 內(nèi)存。
實(shí)驗(yàn)證明,無論是使用16bit、8bit還是4bit的適配器方法,都能夠復(fù)制16bit全參數(shù)微調(diào)的基準(zhǔn)性能。這說明,盡管量化過程中會存在性能損失,但通過適配器微調(diào),完全可以恢復(fù)這些性能。
實(shí)驗(yàn)還比較了不同的4bit數(shù)據(jù)類型對效果(zero-shot均值)的影響,其中,NFloat 顯著優(yōu)于Float,而NFloat + DQ略微優(yōu)于NFloat,雖然DQ對精度提升不大,但是對于內(nèi)存控制效果更好。
除此之外,論文中還對不同大小模型、不同數(shù)據(jù)類型、在 MMLU數(shù)據(jù)集上的微調(diào)效果進(jìn)行了對比。使用QLoRA(NFloat4 + DQ)可以和Lora(BFloat16)持平,同時,使用QLORA( FP4)的模型效果落后于前兩者一個百分點(diǎn)。
作者在實(shí)驗(yàn)中也發(fā)現(xiàn)了一些有趣的點(diǎn),比如:指令調(diào)優(yōu)雖然效果比較好,但只適用于指令相關(guān)的任務(wù),在聊天機(jī)器人上效果并不佳,而聊天機(jī)器人更適合用Open Assistant數(shù)據(jù)集去進(jìn)行微調(diào)。通過指令類數(shù)據(jù)集的調(diào)優(yōu)更像是提升大模型的推理能力,并不是為聊天而生的。
總之,QLoRA的出現(xiàn)給大家?guī)硪恍┬碌乃伎?,不管是微調(diào)還是部署大模型,之后都會變得更加容易。每個人都可以快速利用自己的私有數(shù)據(jù)進(jìn)行微調(diào);同時,又能輕松的部署大模型進(jìn)行推理。
審核編輯:劉清
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4734瀏覽量
100420 -
SVD
+關(guān)注
關(guān)注
0文章
21瀏覽量
12151 -
電源優(yōu)化器
+關(guān)注
關(guān)注
0文章
11瀏覽量
5405 -
LoRa技術(shù)
+關(guān)注
關(guān)注
3文章
101瀏覽量
16304 -
nlp
+關(guān)注
關(guān)注
1文章
486瀏覽量
21987
原文標(biāo)題:大模型參數(shù)高效微調(diào)技術(shù)原理綜述 之 LoRA、AdaLoRA、QLoRA
文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論