今天小編分享的科學經驗:極少數據就能微調大模型,一文詳解LoRA等方法的運作原理,歡迎閲讀。
最近和大模型一起爆火的,還有大模型的微調方法。
這類方法只用很少的數據,就能讓大模型在原本表現沒那麼好的下遊任務中 " 脱穎而出 ",成為這個任務的專家。
而其中最火的大模型微調方法,又要屬LoRA。
但包括 LoRA 在内,這類方法的核心原理究竟是什麼?它和大模型之間的關系又是什麼?我們具體來看。
一、前言
先從最近大火的LoRA (《LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGEMODELS》)説起。
該文章在 ICLR2022 中提出,説的是利用低秩适配(low-rankadaptation)的方法,可以在使用大模型适配下遊任務時只需要訓練少量的參數即可達到一個很好的效果。
LoRA 是怎麼去微調适配下遊任務的?
流程很簡單,LoRA 利用對應下遊任務的數據,只通過訓練新加部分參數來适配下遊任務。
而當訓練好新的參數後,利用重參的方式,将新參數和老的模型參數合并,這樣既能在新任務上到達 fine-tune 整個模型的效果,又不會在推斷的時候增加推斷的耗時。
LoRA 的示意圖如下:
圖中藍色部分為預訓練好的模型參數,LoRA 在預訓練好的模型結構旁邊加入了 A 和 B 兩個結構,這兩個結構的參數分别初始化為高斯分布和 0,那麼在訓練剛開始時附加的參數就是 0。
A 的輸入維度和 B 的輸出維度分别與原始模型的輸入輸出維度相同,而 A 的輸出維度和 B 的輸入維度是一個遠小于原始模型輸入輸出維度的值,這也就是 low-rank 的體現(有點類似 Resnet 的結構),這樣做就可以極大地減少待訓練的參數了。
在訓練時只更新 A、B 的參數,預訓練好的模型參數是固定不變的。在推斷時可以利用重參數(reparametrization)思想,将 AB 與 W 合并,這樣就不會在推斷時引入額外的計算了。
而且對于不同的下遊任務,只需要在預訓練模型基礎上重新訓練 AB 就可以了,這樣也能加快大模型的訓練節奏。
由于本文不具體介紹 LoRA,所以詳細信息可以查看 LoRA 原文。我們只需要知道 LoRA 文章後續的實驗已經論證該方法的有效性。
那麼進一步思考,為什麼 LoRA 的這種思路能 work 得不錯呢?
答案就是接下來要講的本征維度 (Intrinsic dimension)了。
這點 LoRA 原文也提到過,該文章靈感來源于下面兩篇文章:
1、MEASURING THE INTRINSIC DIMENSION OF OBJECTIVE LANDSCAPES,發表在 ICLR2018,為了方便接下來該論文稱為【論文 1】
2、INTRINSIC DIMENSIONALITY EXPLAINS THE EFFECTIVENESS OF LANGUAGEMODEL FINE-TUNING,發表在 ACL2021,為了方便接下來該論文稱為【論文 2】
二、本征維度是什麼?
本征維度的概念在【論文 1】中提出。
訓練一個神經網絡往往包含如下幾步:
1、對于一個給定的數據集,先設計網絡的結構和選擇對應的 loss
2、對網絡中的參數進行随機的初始化
3、訓練網絡使得 loss 越來越低
而訓練階段可以認為是在一個固定的目标圖(objective landscape)上,尋找出有效的路徑。
這裏解釋一下為什麼是固定的目标圖。因為在數據集和網絡結構固定下來後,待優化的問題就已經定義好了,所以目标圖也就是确定的了。
如下圖所示:
那麼對于一個參數量為 D 的模型
,我們訓練該模型,也就意味着在 D 維空間上尋找有效的解。文章認為 D 可能是冗餘的,可能實際上只需要優化其中的 d 個參數就可以找到一個有效的解。
用公式表示如下:
其中
表示 D 維的優化參數,
表示随機初始化的一個參數并且在訓練時是不進行更新的,P 是一個随機初始化的 D × d 大小的矩陣且訓練時也不進行更新,
表示待優化的 d 維參數。
也就是説可以在訓練網絡時只更新 d 維參數,就可以達到該網絡應有的效果。那麼這個 d 就是所謂的該模型的本征維度。
這裏講完可能還有點暈,我們看一下如下這張圖:
上圖中,藍色部分為初始化好的網絡參數
,綠色為
,紅色為
。網絡訓練的時候只訓練紅色部分,其它參數都是固定的。d 就是本征維度。
上面講的只更新 d 維參數,讓網絡達到應有的效果,那麼什麼應有的效果呢?文章定義,在只更新 d 維參數的情況下,網絡效果達到訓練原始模型時效果的 90% 時,那麼就認為達到了 " 應有的效果 ",并且 d 就為本征維度。
例如在做 mnist 這個數字分類任務時,如果原始模型精度能到 0.9,那麼在只更新 d 維參數的時候,精度能夠達到 90% × 0.9=0.81,就認為這時候的 d 為本征維度記為
。
三、使用本征維度思考大模型微調的有效性
【論文 2】将之前提出的本征維度用來思考大模型微調的有效性,為什麼現在用幾百或者幾千張圖片就可以對大模型進行有效的微調?
根據【論文 1】闡述,對于某一類問題,在一定精度上(比如達到 90% 的精度)有本征特征的存在。對于大模型而言,進行本征維度的測試就能知道在解決某一類下遊問題時,需要調整多少參數就能近似的解決當前的問題。
如果真的有實驗能證明僅僅調整少數的參數就能很好的解決下遊問題,那麼也就能回答上述問題,即對大模型做少量的微調(調整少量的參數),就能解決當前的問題。
下面無特殊説明的話," 文章 " 指的都是【論文 2】
3.1 對于大模型而言,是否存在本征維度?
同【論文 1】一樣,【論文 2】也利用公式
來進行模型的訓練,即訓練時只調整 d 維參數
。但與【論文 1】的實驗有點不同的是,【論文 1】中
是随機初始化的,而【論文 2】中
是預訓練好的參數。
【論文 2】首先選擇 BERT-BaseBERT-LargeRoBERTa-BaseRoBERTa-Large 四個模型,并選擇 GLUE benchmark 中的 MRPC 和 QQP 兩個數據集(兩個數據集都是用來測試句子對是否相同意義的任務)。
上下兩個子圖分别表示 MRPC 和 QQP 兩個任務,每個子圖有四條實線表示四個模型的準确率,四條虛線表示達到 fine-tune 整個模型 90% 的準确率的值,橫坐标表示訓練 d 維的大小。從圖中可以看出兩個任務,四個不同的模型,只需要訓練較小的 d 維參數就可以達到 90% 的精度。本征維度這個概念在大模型中是成立的。
所以在訓練某個下遊任務時,只需要訓練少量參數就能達到不錯的效果了。這時文章開頭的問題就已經解決了。但是作者做了一些其他的實驗,發現了一些有意思的結論。
3.2 預訓練的好壞與本征維度的關系
文章提出這樣一個假設,預訓練模型能夠隐式地降低模型在 NLP 各個任務的本征維度。
基于這個猜想,文章做了下面實驗,在預訓練 RoBERTa-base 模型的時候,每隔 10K 保存下對應的預訓練模型,然後測試保存下來的預訓練模型在 MRPC、QQP、Yelp Polarity、SST-2、MNLI、ANLI 六個數據集本征維度。
結果如下:
可以看出,在不同數據集上有相同的趨勢,就是預訓練次數越多,模型在各個任務上的本征維度越低。實驗并沒有特意去優化所謂的本征維度,只是預訓練久一點而已。所以印證了預訓練模型的表征能力越強(訓練得越好),本征維度越小。
3.3 預訓練模型參數與本征維度的關系
本來在做預訓練參數與本征維度關系的時候,需要統一模型的結構,這樣更有説服力。但是作者説,這樣要訓練很多大模型的實驗,為了更方便的對比文章根據已有的結構來做實驗。從實驗結果的趨勢來看,不同結構也能得到有效的結論。
文章利用已有的預訓練模型,在 MRPC 數據集上計算本征維度。
實驗結果如下:
上圖中縱坐标表示本征維度的值,橫坐标表示模型的參數量。從圖中的趨勢可以明顯看出,模型越大本征維度越小,即越強的模型本征維度越低。
3.4 本征維度與泛化能力的關系
上面介紹了 fine-tune(3.1)、預訓練(3.2)和本征維度的關系,但本征維度與泛化能力的關系還沒有驗證。即我們現在知道了讓本征維度小的方式,但是本征維度小了,泛化能力就能上去嗎?
文章又做了下面的實驗,把 3.2 保存下來的模型,在對應的
的本征維度上,進行不同數據集的測試,結果如下:
可以看出本征維度低的模型,訓練出來的模型準确率是更高的。也就是説本征維度越低,泛化性能越好。
回到引言的問題:為什麼 LoRA 思路能 work?
因為大模型存在本征維度的概念,只需要調整少量參數就能在下遊任務上得到很好的效果。
參考文獻:
[ 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
* 本文系量子位獲授權刊載,觀點僅為作者所有。
— 完 —
量子位 QbitAI
վ ' ᴗ ' ի 追蹤 AI 技術和產品新動态
一鍵三連「分享」、「點贊」和「在看」
科技前沿進展日日相見 ~
>