極少數(shù)據(jù)就能微調(diào)大模型,一文詳解LoRA等方法的運作原理
要搞懂這2篇頂會論文
Michael Liu 投稿
量子位 | 公眾號 QbitAI
最近和大模型一起爆火的,還有大模型的微調(diào)方法。
這類方法只用很少的數(shù)據(jù),就能讓大模型在原本表現(xiàn)沒那么好的下游任務(wù)中“脫穎而出”,成為這個任務(wù)的專家。
而其中最火的大模型微調(diào)方法,又要屬LoRA。

但包括LoRA在內(nèi),這類方法的核心原理究竟是什么?它和大模型之間的關(guān)系又是什么?我們具體來看。
一、前言
先從最近大火的LoRA?(《LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGEMODELS》)說起。

該文章在ICLR2022中提出,說的是利用低秩適配(low-rankadaptation)的方法,可以在使用大模型適配下游任務(wù)時只需要訓練少量的參數(shù)即可達到一個很好的效果。
LoRA是怎么去微調(diào)適配下游任務(wù)的?
流程很簡單,LoRA利用對應(yīng)下游任務(wù)的數(shù)據(jù),只通過訓練新加部分參數(shù)來適配下游任務(wù)。
而當訓練好新的參數(shù)后,利用重參的方式,將新參數(shù)和老的模型參數(shù)合并,這樣既能在新任務(wù)上到達fine-tune整個模型的效果,又不會在推斷的時候增加推斷的耗時。
LoRA的示意圖如下:

圖中藍色部分為預(yù)訓練好的模型參數(shù),LoRA在預(yù)訓練好的模型結(jié)構(gòu)旁邊加入了A和B兩個結(jié)構(gòu),這兩個結(jié)構(gòu)的參數(shù)分別初始化為高斯分布和0,那么在訓練剛開始時附加的參數(shù)就是0。
A的輸入維度和B的輸出維度分別與原始模型的輸入輸出維度相同,而A的輸出維度和B的輸入維度是一個遠小于原始模型輸入輸出維度的值,這也就是low-rank的體現(xiàn)(有點類似Resnet的結(jié)構(gòu)),這樣做就可以極大地減少待訓練的參數(shù)了。
在訓練時只更新A、B的參數(shù),預(yù)訓練好的模型參數(shù)是固定不變的。在推斷時可以利用重參數(shù)(reparametrization)思想,將AB與W合并,這樣就不會在推斷時引入額外的計算了。
而且對于不同的下游任務(wù),只需要在預(yù)訓練模型基礎(chǔ)上重新訓練AB就可以了,這樣也能加快大模型的訓練節(jié)奏。
由于本文不具體介紹LoRA,所以詳細信息可以查看LoRA原文。我們只需要知道LoRA文章后續(xù)的實驗已經(jīng)論證該方法的有效性。
那么進一步思考,為什么LoRA的這種思路能work得不錯呢?
答案就是接下來要講的本征維度?(Intrinsic dimension)了。
這點LoRA原文也提到過,該文章靈感來源于下面兩篇文章:
1、MEASURING THE INTRINSIC DIMENSION OF OBJECTIVE LANDSCAPES,發(fā)表在ICLR2018,為了方便接下來該論文稱為【論文1】
2、INTRINSIC DIMENSIONALITY EXPLAINS THE EFFECTIVENESS OF LANGUAGEMODEL FINE-TUNING,發(fā)表在ACL2021,為了方便接下來該論文稱為【論文2】
二、本征維度是什么?
本征維度的概念在【論文1】中提出。
訓練一個神經(jīng)網(wǎng)絡(luò)往往包含如下幾步:
1、對于一個給定的數(shù)據(jù)集,先設(shè)計網(wǎng)絡(luò)的結(jié)構(gòu)和選擇對應(yīng)的loss
2、對網(wǎng)絡(luò)中的參數(shù)進行隨機的初始化
3、訓練網(wǎng)絡(luò)使得loss越來越低
而訓練階段可以認為是在一個固定的目標圖(objective landscape)上,尋找出有效的路徑。
這里解釋一下為什么是固定的目標圖。因為在數(shù)據(jù)集和網(wǎng)絡(luò)結(jié)構(gòu)固定下來后,待優(yōu)化的問題就已經(jīng)定義好了,所以目標圖也就是確定的了。
如下圖所示:

那么對于一個參數(shù)量為D的模型,我們訓練該模型,也就意味著在D維空間上尋找有效的解。文章認為D可能是冗余的,可能實際上只需要優(yōu)化其中的d個參數(shù)就可以找到一個有效的解。
用公式表示如下:
其中表示D維的優(yōu)化參數(shù),
表示隨機初始化的一個參數(shù)并且在訓練時是不進行更新的,P是一個隨機初始化的D×d大小的矩陣且訓練時也不進行更新,
表示待優(yōu)化的d維參數(shù)。
也就是說可以在訓練網(wǎng)絡(luò)時只更新d維參數(shù),就可以達到該網(wǎng)絡(luò)應(yīng)有的效果。那么這個d就是所謂的該模型的本征維度。
這里講完可能還有點暈,我們看一下如下這張圖:

上圖中,藍色部分為初始化好的網(wǎng)絡(luò)參數(shù),綠色為
,紅色為
。網(wǎng)絡(luò)訓練的時候只訓練紅色部分,其它參數(shù)都是固定的。d就是本征維度。
上面講的只更新d維參數(shù),讓網(wǎng)絡(luò)達到應(yīng)有的效果,那么什么應(yīng)有的效果呢?文章定義,在只更新d維參數(shù)的情況下,網(wǎng)絡(luò)效果達到訓練原始模型時效果的90%時,那么就認為達到了“應(yīng)有的效果”,并且d就為本征維度。
例如在做mnist這個數(shù)字分類任務(wù)時,如果原始模型精度能到0.9,那么在只更新d維參數(shù)的時候,精度能夠達到90%×0.9=0.81,就認為這時候的d為本征維度記為。
三、使用本征維度思考大模型微調(diào)的有效性
【論文2】將之前提出的本征維度用來思考大模型微調(diào)的有效性,為什么現(xiàn)在用幾百或者幾千張圖片就可以對大模型進行有效的微調(diào)?
根據(jù)【論文1】闡述,對于某一類問題,在一定精度上(比如達到90%的精度)有本征特征的存在。對于大模型而言,進行本征維度的測試就能知道在解決某一類下游問題時,需要調(diào)整多少參數(shù)就能近似的解決當前的問題。
如果真的有實驗?zāi)茏C明僅僅調(diào)整少數(shù)的參數(shù)就能很好的解決下游問題,那么也就能回答上述問題,即對大模型做少量的微調(diào)(調(diào)整少量的參數(shù)),就能解決當前的問題。
下面無特殊說明的話,“文章”指的都是【論文2】
3.1 對于大模型而言,是否存在本征維度?
同【論文1】一樣,【論文2】也利用公式來進行模型的訓練,即訓練時只調(diào)整d維參數(shù)
。但與【論文1】的實驗有點不同的是,【論文1】中
是隨機初始化的,而【論文2】中
是預(yù)訓練好的參數(shù)。
【論文2】首先選擇BERT-BaseBERT-LargeRoBERTa-BaseRoBERTa-Large四個模型,并選擇GLUE benchmark中的MRPC和QQP兩個數(shù)據(jù)集(兩個數(shù)據(jù)集都是用來測試句子對是否相同意義的任務(wù))。
上下兩個子圖分別表示MRPC和QQP兩個任務(wù),每個子圖有四條實線表示四個模型的準確率,四條虛線表示達到fine-tune整個模型90%的準確率的值,橫坐標表示訓練d維的大小。從圖中可以看出兩個任務(wù),四個不同的模型,只需要訓練較小的d維參數(shù)就可以達到90%的精度。本征維度這個概念在大模型中是成立的。
所以在訓練某個下游任務(wù)時,只需要訓練少量參數(shù)就能達到不錯的效果了。這時文章開頭的問題就已經(jīng)解決了。但是作者做了一些其他的實驗,發(fā)現(xiàn)了一些有意思的結(jié)論。
3.2 預(yù)訓練的好壞與本征維度的關(guān)系
文章提出這樣一個假設(shè),預(yù)訓練模型能夠隱式地降低模型在NLP各個任務(wù)的本征維度。
基于這個猜想,文章做了下面實驗,在預(yù)訓練RoBERTa-base模型的時候,每隔10K保存下對應(yīng)的預(yù)訓練模型,然后測試保存下來的預(yù)訓練模型在MRPC、QQP、Yelp Polarity、SST-2、MNLI、ANLI六個數(shù)據(jù)集本征維度。
結(jié)果如下:
可以看出,在不同數(shù)據(jù)集上有相同的趨勢,就是預(yù)訓練次數(shù)越多,模型在各個任務(wù)上的本征維度越低。實驗并沒有特意去優(yōu)化所謂的本征維度,只是預(yù)訓練久一點而已。所以印證了預(yù)訓練模型的表征能力越強(訓練得越好),本征維度越小。
3.3 預(yù)訓練模型參數(shù)與本征維度的關(guān)系
本來在做預(yù)訓練參數(shù)與本征維度關(guān)系的時候,需要統(tǒng)一模型的結(jié)構(gòu),這樣更有說服力。但是作者說,這樣要訓練很多大模型的實驗,為了更方便的對比文章根據(jù)已有的結(jié)構(gòu)來做實驗。從實驗結(jié)果的趨勢來看,不同結(jié)構(gòu)也能得到有效的結(jié)論。
文章利用已有的預(yù)訓練模型,在MRPC數(shù)據(jù)集上計算本征維度。
實驗結(jié)果如下:
上圖中縱坐標表示本征維度的值,橫坐標表示模型的參數(shù)量。從圖中的趨勢可以明顯看出,模型越大本征維度越小,即越強的模型本征維度越低。
3.4 本征維度與泛化能力的關(guān)系
上面介紹了fine-tune(3.1)、預(yù)訓練(3.2)和本征維度的關(guān)系,但本征維度與泛化能力的關(guān)系還沒有驗證。即我們現(xiàn)在知道了讓本征維度小的方式,但是本征維度小了,泛化能力就能上去嗎?
文章又做了下面的實驗,把3.2保存下來的模型,在對應(yīng)的的本征維度上,進行不同數(shù)據(jù)集的測試,結(jié)果如下:
可以看出本征維度低的模型,訓練出來的模型準確率是更高的。也就是說本征維度越低,泛化性能越好。
回到引言的問題:為什么LoRA思路能work?
因為大模型存在本征維度的概念,只需要調(diào)整少量參數(shù)就能在下游任務(wù)上得到很好的效果。
參考文獻:
[1]https://en.wikipedia.org/wiki/Gradient_descent
[2]https://arxiv.org/pdf/1804.08838.pdf
[3]https://arxiv.org/pdf/2012.13255.pdf
[4]https://arxiv.org/pdf/2106.09685.pdf
原博客地址:
https://michaelliudev.blog.csdn.net/article/details/131745794
- 首個GPT-4驅(qū)動的人形機器人!無需編程+零樣本學習,還可根據(jù)口頭反饋調(diào)整行為2023-12-13
- IDC霍錦潔:AI PC將顛覆性變革PC產(chǎn)業(yè)2023-12-08
- AI視覺字謎爆火!夢露轉(zhuǎn)180°秒變愛因斯坦,英偉達高級AI科學家:近期最酷的擴散模型2023-12-03
- 蘋果大模型最大動作:開源M芯專用ML框架,能跑70億大模型2023-12-07