熟悉NLP的同學對Bert Finetune一定不陌生,基本啥任務上來都可以Bert Finetune試一把。可是模型微調一定比直接使用預訓練模型效果好麼?微調究竟對Bert的向量空間產生了哪些影響嘞?考慮到Bert的高維向量無法直接觀測,下面這篇paper中,作者結合文字分類任務,和DirectProb這兩種探測任務,直觀展現了模型微調對Bert向量空間的影響
Paper: A Closer Look at How Fine-tuning Changes Bert
Duang~Duang~Duang~敲黑板~先來看下paper的幾個核心結論
- Finetune對文字表徵的空間分佈做了簡化,增加了空間的線形可分性
- Finetune把分類任務中,不同Label的向量之間推的更遠,增加了下游分類器的容錯度
- Finetune會在儘可能儲存預訓練原始空間分佈的前提下,調整輸出層分佈適應下游任務
- Finetune會記憶訓練集特徵,導致訓練集和OOB樣本間的表徵差異變大,會存在一定的過擬合風險
探測任務
研究文字向量空間的paper,核心都在於如何使用探測任務來觀察向量空間的分佈,和分佈在訓練過程中的變化。這裡作者用了兩類探測任務,一類是傳統的分類任務,統一是Bert後接兩層的Relu全聯接層,作者總共選取了4個任務:兩個語法任務,詞性分類(POS)和依賴分類(DEP)任務,兩個語義任務分別是介詞消歧PS-Role和PS-fxn任務。如果你對上面的NLP任務不熟悉也沒關係,這裡不同探測任務的選擇更多隻是為了增加實驗的多樣性,保證結論可泛化。在後面的分析中我們基本只用到分類任務標籤的數量,所以知道用了這幾類任務就哦了。
除了分類任務,作者還使用了直接分析空間分佈的聚類任務DirectProb。哈哈這個方法就是字面意思,‘Direct’就是拋開下游分類任務,直接對向量表徵進行探測。這裡DirectProb的輸入是Bert輸出層向量,和下游分類任務的標籤,採用bottom-up的聚類方法,在保證同一個cluster只能有1個Label,且不同cluster不重疊的前提下,把儘可能多的同類別向量聚合在一起。這種有監督的聚類方案保證最後得到的不同Label的clsuter,兩兩之間一定是線性可分的,如下圖
那DirectProb得到的聚類結果要怎麼用呢?感覺文章比較有意思的結論都和下面聚類結果的使用方式相關,作者可以說是把聚類結果玩出了花,主要有三種用法
cluster的數量:如果 \(N_{cluster} = N_{Label}\) ,意味著兩兩Label之間只需要簡單的線性分割器,就可以完成下游分類任務,則文字表徵是線性可分的,如果\(N_{cluster} > N_{Label}\),則必然存在不是線性可分的Label(如上圖),則下游分類器必須是非線性的
cluster間的距離:作者訓練了線性的SVM作為max-margin分割器,cluster間的距離=2*margin。通過追蹤Finetune過程中距離的變化,來觀察絕對位置空間分佈的變化
空間相似度:以上cluster兩兩間距離矩陣(n個Label對應\(\frac{n*(n-1)}{2}\)的矩陣)刻畫了cluster間的相對位置關係。通過計算Finetune前後距離矩陣的相關性,來觀察相對位置空間分佈的變化
記住這三個特徵,後面的實驗分析都會基於它們展開,探測任務咱就說這麼多,下面來看下具體的實驗結果
實驗&分析
作者選取了從小到大5個不同引數的Bert模型,來分析模型微調對不同大小Bert模型文字表徵的影響。為了便於理解,下面的實驗結果都做了截斷,完整的實驗結果見paper附錄喲~
Finetune一定會提高模型表現?Nope!
整體上模型表現在預期之中,Bert模型越大表現越好。兩個語法任務(DEP,POS)難度較小,小模型表現就很好,且Finetune帶來的額外提升不多,兩個語義任務(PS_fxn,PS-role)難度更大,Finetune帶來的提升更多。不過有兩個奇怪的點就是\(Bert_{small}\) 和 \(Bert_{medium}\)在PS-fxn任務上,微調反而導致效果下降。微調效果不好最先想到的就是過擬合,以及災難遺忘。作者通過DirectProb計算了Finetune前後,訓練集和測試集Cluster的空間相似度,發現訓練集和測試集的空間相似度在Finetune之後都發生了下降,而Finetune表現不好的模型,空間相似度最低,這個現象指向Finetune可能導致向量空間記憶了部分訓練集獨有特徵,導致了模型泛化的下降,也就是Finetune可能過擬合的風險。不過這裡只是針對現象提出了一種可能,畢竟Finetune效果顯著差的只有1個任務,且更小的模型\(Bert_{mini}\)和\(Bert_{tiny}\)在這個任務上並沒有發生效果下降。所以這裡作者更多隻是丟擲了一個idea,具體什麼情況下微調效果會不好,還需要更多的research~哈哈不過這裡不是paper的亮點,後面直接對向量空間的探測更有趣,接著看~接著看~
Finetune讓向量空間更加線性可分
通過觀察Finetune前後,DirectProb得到的聚類cluster的數量和Label數量是否相同,作者發現,Bert模型越大,預訓練的向量空間線性程度越高,Finetune之後空間變得更加線性可分。怎麼理解這個現象呢?我的理解是,Bert預訓練是對大量的通用語義,語法特徵進行了記憶和抽象,然後把資訊編碼到模型輸出的向量中,那向量(Dim)越大需要的資訊壓縮程度越小,下游使用時對資訊解碼也就越容易。反之向量越小需要更大程度的資訊壓縮,才能儘可能多的保留語言資訊,也就導致下游使用需要更復雜(非線性)的解碼過程來獲取資訊。Finetune更像是針對下游任務先適應性的進行了一步資訊重排列,幫助分類器更容易地提取出所需特徵
Finetune把不同Label的空間分佈推的更遠
這裡用了\(Bert_{base}\)模型,該模型預訓練的空間向量在DirectProb聚類中是線性可分的,所以一個cluster對應一個Label的樣本。通過觀察每個cluster和其他所有cluster最小距離的變化,作者發現隨著微調訓練,最小距離會不斷增大。下圖作者給了兩個任務中,距離變化最大和最小的3個Label,最小距離隨fintune step的變化,其他任務的Label都存在這一現象。Finetune帶來的Label間距離上升,意味著兩個Label之間的分類器容錯率更高,樣本外泛化性更好。
Fintune對Bert不同層影響不同
以上都是對輸出層的分析,Let's Dig Deeper! 我們來看下微調對Bert其他層的影響,尤其是底層Layer,如果底層Layer沒變,說明微調只是對預訓練學到的資訊進行了重新排列,調整了資訊提取的方式,如果底層Layer發生了劇烈變化,就有災難遺忘的可能性。作者應用DirectProb的聚類結果給出了以下幾點發現
越接近頂層,Finetune帶來的絕對位移幅度更大
這裡作者對Bert每一層的空間向量,都用DirectProb分進行聚類,計算每個cluster的中心點。通過對比Finetune前後中心點移動的歐式距離,來衡量Bert不同層空間表徵的變化幅度。下圖選了\(Bert_{base}\)在POS任務上每一個Label,Finetune前後,Bert 12層Layer (x-axis)的絕對位移 (y-axis),可以看到在所有Label上,越接近頂層,絕對位移的幅度會越大
Finetune保留了和預訓練空間分佈的相似性
看了各個cluster絕對位置變化,我們再來看下cluster整體相對位置的改變。作者通過追蹤Finetune過程中,cluster間兩兩距離矩陣和預訓練距離矩陣的相關性,來刻畫相對位置的改變。下圖給出\(Bert_{base}\)在4個任務中,隨著Finetune的訓練 (x-axis),不同層和預訓練空間的相似度 (y-axis)並不會持續下降,而是先下降後趨於平穩,雖然越接近頂層相關性下降幅度更大,但都至少保證了>0.5的相關性
底層Layer並非完全沒變,只是在很小的範圍內朝著相似的方向移動
在上述兩張圖上,底層Layer不論是相對位置,還是絕對位移變化都不太大,但底層Layer完全沒變麼?不是的!作者通過對每層各個cluster的中心點進行PCA降維,在二維空間上對Finetune前後,各層向量的移動做了視覺化。可以發現底層Layer也有移動,只是方向相對單一,且絕對移動幅度較小 (x,y軸的取值範圍是隨Layer上升變大的),而越接近頂層,移動幅度更大,且方向更分散~
結合以上三點微調對Bert不同層的影響,一定程度上能佐證Finetune是在儘可能儲存預訓練資訊的前提下,針對下游任務來調整輸出的空間分佈。
這個paper我們就聊這麼多啦~新開這個系列就是字面意思,之後看到有意思有價值的paper就簡單梳理下和大家一起分享~