1 簡介
目前在大規(guī)模預(yù)訓(xùn)練模型上進(jìn)行finetune是NLP中一種高效的遷移方法,但是對于眾多的下游任務(wù)而言,finetune是一種低效的參數(shù)更新方式,對于每一個下游任務(wù),都需要去更新語言模型的全部參數(shù),這需要龐大的訓(xùn)練資源。進(jìn)而,人們會嘗試固定語言預(yù)訓(xùn)練模型大部分網(wǎng)絡(luò)的參數(shù),針對下游任務(wù)只更新一部分語言模型參數(shù)。大部分情況下都是只更新模型最后幾層的參數(shù),但是我們知道語言模型的不同位置的網(wǎng)絡(luò)聚焦于不同的特征,針對具體任務(wù)中只更新高層網(wǎng)絡(luò)參數(shù)的方式在不少情形遭遇到精度的急劇下降。
在這個篇章介紹的Adapter會針對每個下游任務(wù)在語言模型的每層transformer中新增2個帶有少量參數(shù)的模塊,稱之為adapter,針對下游任務(wù)訓(xùn)練時只更新adapter模塊參數(shù),而凍結(jié)原有語言模型的參數(shù),從而實現(xiàn)將強(qiáng)大的大規(guī)模語言模型的能力高效遷移到諸多下游任務(wù)中去,同時保證模型在下游任務(wù)的性能。
2 Adapter
Adapter的結(jié)構(gòu)一目了然,transformer的每層網(wǎng)絡(luò)包含兩個主要的子模塊,一個attention多頭注意力層跟一個feedforward層,這兩個子模塊后續(xù)都緊隨一個projection操作,將特征大小映射回原本的輸入的維度,然后連同skip connection的結(jié)果一同輸入layer normalization層。而adapter直接應(yīng)用到這兩個子模塊的輸出經(jīng)過projection操作后,并在skip-connection操作之前,進(jìn)而可以將adapter的輸入跟輸出保持同樣的維度,所以輸出結(jié)果直接傳遞到后續(xù)的網(wǎng)絡(luò)層,不需要做更多的修改。每層transformer都會被插入兩個adapter模塊。
圖1: Adapter框架
下面我們來看看adapter的具體結(jié)構(gòu),首先通過一個feedforward down-project的矩陣乘法將特征維度降到一個更低的水平,然后通過一個非線形層,再利用一個feedforward up-project層將特征維度升到跟輸入一樣的水平,同時通過一個skip connection來將adpter的輸入重新加到最終的輸出中去,這樣可以保證保證即便adapter一開始的參數(shù)初始化接近0,adapter也有由于skip connection的設(shè)置而初始化接近于一個恒等映射,從而保證訓(xùn)練的有效性。
至于adapter引進(jìn)的模型參數(shù),假設(shè)adapter的輸入的特征維度是d,而中間的特征維度是m,那么新增的模型參數(shù)有:down-project的參數(shù)d*m+m,up_project的參數(shù)m*d+d,總共2md+m+d,由于m遠(yuǎn)小于d,所以真實情況下,一般新增的模型參數(shù)都只占語言模型全部參數(shù)量的0.5%~8%。同時要注意到,針對下游任務(wù)訓(xùn)練需要更新的參數(shù)除了adapter引入的模型參數(shù)外,還有adapter層后面緊隨著的layer normalization層參數(shù)需要更新,每個layer normalization層只有均值跟方差需要更新,所以需要更新的參數(shù)是2d。(由于插入了具體任務(wù)的adapter模塊,所以輸入的均值跟方差發(fā)生了變化,就需要重新訓(xùn)練)
通過實驗,可以發(fā)現(xiàn)只訓(xùn)練少量參數(shù)的adapter方法的效果可以媲美finetune語言模型全部參數(shù)的傳統(tǒng)做法,這也驗證了adapter是一種高效的參數(shù)訓(xùn)練方法,可以快速將語言模型的能力遷移到下游任務(wù)中去。同時,可以看到不同數(shù)據(jù)集上adapter最佳的中間層特征維度m不盡相同。
圖2: adapter跟finetune的效果對比
為了進(jìn)一步探究adapter的參數(shù)效率跟模型性能的關(guān)系,論文做了進(jìn)一步的實驗,同時比對了finetune的方式(只更新最后幾層的參數(shù)或者只更新layer normalization的參數(shù)),從結(jié)果可以看出adapter是一種更加高效的參數(shù)更新方式,同時效果也非??捎^,通過引入0.5%~5%的模型參數(shù)可以達(dá)到不落后先進(jìn)模型1%的性能。
圖3:adapter跟finetune的效率對比
3Adapter fusion
這是一種融合多任務(wù)信息的adapter的變種,首先看下它的任務(wù)背景。假設(shè)C是N個分類任務(wù)的集合,這些分類任務(wù)的監(jiān)督數(shù)據(jù)的大小跟損失函數(shù)不盡相同。C={(D1, L1), …, (DN, LN)},其中D是標(biāo)注數(shù)據(jù),L是損失函數(shù),我們的任務(wù)是通過這N個任務(wù)加上某個任務(wù)m的數(shù)據(jù)跟損失函數(shù)(Dm, Lm)去提升這個特定任務(wù)m的效果。如圖所示,就是期望先從N個任務(wù)中學(xué)到一個模型參數(shù)(最右邊參數(shù)),然后利用該參數(shù)來學(xué)習(xí)特定任務(wù)m下的一個模型參數(shù)(最左邊參數(shù))。
圖4:學(xué)習(xí)目標(biāo)
為了實現(xiàn)這個目標(biāo),adapter fusion提出一個兩階段的學(xué)習(xí)策略,其中第一階段是knowledge extraction stage,在不同任務(wù)下引入各自的adapter模塊,用于學(xué)習(xí)特定任務(wù)的信息,而第二階段是knowledge composition step,用于學(xué)習(xí)聚合多個任務(wù)的adapter。
對于第一階段有兩種訓(xùn)練方式,分別如下:
a)Single-Task Adapters(ST-A)
對于N個任務(wù),模型都分別獨立進(jìn)行優(yōu)化,各個任務(wù)之間互不干擾,互不影響。對于其中第n個任務(wù)而言,相應(yīng)的目標(biāo)函數(shù)如下圖所示,其中最右邊兩個參數(shù)分別代表語言模型的模型參數(shù)跟特定任務(wù)需要引入的adapter參數(shù)。
圖5:ST-A目標(biāo)函數(shù)
b)Multi-Task Adapters(MT-A)
N個任務(wù)通過多任務(wù)學(xué)習(xí)的方式,進(jìn)行聯(lián)合優(yōu)化,相應(yīng)的目標(biāo)函數(shù)如下。
圖6:MT-A目標(biāo)函數(shù)
對于第二階段,就是adapter fusion大展身手的時候了。為了避免通過引入特定任務(wù)參數(shù)而帶來的災(zāi)難性遺忘問題,adapter fusion提出了一個共享多任務(wù)信息的結(jié)構(gòu)。針對特定任務(wù)m,adapter fusion聯(lián)合了第一階段訓(xùn)練的到的N個adapter信息。固定語言模型的參數(shù)跟N個adapter的參數(shù),新引入adapter fusion的參數(shù),目標(biāo)函數(shù)也是學(xué)習(xí)針對特定任務(wù)m的adapter fusion的參數(shù)。
圖7:adapter fusion的目標(biāo)函數(shù)
Adapter fusion的具體結(jié)構(gòu)就是一個attention,它的參數(shù)包括query,key, value的矩陣參數(shù),在transformer的每一層都存在,它的query是transformer每個子模塊的輸出結(jié)果,它的key跟value則是N個任務(wù)的adapter的輸出。通過adapter fusion,模型可以為不同的任務(wù)對應(yīng)的adapter分配不同的權(quán)重,聚合N個任務(wù)的信息,從而為特定任務(wù)輸出更合適的結(jié)果。
圖8:adapter fusion結(jié)構(gòu)
通過實驗,可以看到第一階段采用ST-A+第二階段adapter fusion是最有效的方法,在多個數(shù)據(jù)集上的平均效果達(dá)到了最佳。關(guān)于MT-A+adapter fusion沒有取得最佳的效果,在于第一階段其實已經(jīng)聯(lián)合了多個任務(wù)的信息了,所以adapter fusion的作用沒有那么明顯,同時MT-A這種多任務(wù)聯(lián)合訓(xùn)練的方式需要投入較多的成本,并不算一種高效的參數(shù)更新方式。另外,ST-A的方法在多個任務(wù)上都有提升,但是MT-A的方法則不然,這也表明了MT-A雖然可以學(xué)習(xí)到一個通用的表征,但是由于不同任務(wù)的差異性,很難保證在所有任務(wù)上都取得最優(yōu)的效果。
圖9:adapter fusion實驗結(jié)果
4 總結(jié)
Fusion是一種高效的參數(shù)更新方式,能在引入少量參數(shù),只訓(xùn)練少量參數(shù)的情況下達(dá)到媲美finetune全模型參數(shù)的效果,只訓(xùn)練少量參數(shù)也意味著對訓(xùn)練數(shù)據(jù)量更低的要求以及更快的訓(xùn)練速度,是一種將大規(guī)模預(yù)訓(xùn)練語言模型能力遷移到下游任務(wù)的高效方案,跟目前火熱的prompt learning有異曲同工之妙。而adapter fusion則跟MOE很像,可以聯(lián)合多個任務(wù)的信息,從而提升特定任務(wù)的性能。但相比于其他的parameter-efficient的方法,adapter是在原語言模型上加入了新的模塊,在推理時會進(jìn)一步增加延遲。
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4256瀏覽量
62223 -
Adapter
+關(guān)注
關(guān)注
0文章
16瀏覽量
7646 -
訓(xùn)練模型
+關(guān)注
關(guān)注
1文章
35瀏覽量
3794
原文標(biāo)題:Parameter-efficient transfer learning系列之Adapter
文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論