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