來自:圓圓的算法筆記;作者:Fareise
遷移學習廣泛地應用于NLP、CV等各種領域,通過在源域數據上學習知識,再遷移到下游其他目標任務上,提升目標任務上的效果。其中,Pretrain-Finetune(預訓練+精調)模式是最為常見的一種遷移學習方法。例如NLP中的預訓練Bert模型,通過在下游任務上Finetune即可取得比直接使用下游數據任務從零訓練的效果要好得多。
雖然在預訓練模型上Finetune能取得非常好的效果,我們經常使用Finetune方法,但是你是否有想過這種Finetune方法有沒有什么優化方法?如何Finetune對最終效果好壞有非常大的影響。例如,在Finetune時我們會考慮要遷移預訓練網絡的哪些層,哪些層需要凍結,哪些層需要隨著模型一起Finetune。實際應用時,我們往往需要嘗試不同的遷移方法和Finetune策略來達到最優效果。目前學術界也有很多創新性較強的花式Finetune方法研究。本文介紹了來自2018年以來ICML、CVPR等頂會的7篇論文,總結了Finetune的四種類型招式,通過更科學的Finetune方式,提升遷移學習效果。
招式1:使用Pretrain模型做約束
在Finetune階段,如果我們可用于Finetune的目標任務數據量較少時,很有可能出現過擬合現象,嚴重影響模型效果;或者在Finetune過程中出現知識遺忘問題(catastrophic memory),把Pretrain階段學到的有用知識遺忘,丟了西瓜撿了芝麻。為了解決這種問題,學術界提出利用Pretrain模型作為約束,指導Finetune的過程,讓Finetune得到的模型更加魯棒。具體包括:直接使用Pretrain模型的參數作為約束、使用Pretrain模型的中間層表示作為約束、使用Pretrain模型對不同特征注意力強度作為約束。
為了防止模型在Finetune階段過擬合目標任務數據,或忘記了Pretrain階段學到的有意義知識,Explicit inductive bias for transfer learning with convolutional networks(ICML 2018)這篇文章介紹了一種使用Pretrain模型參數約束Finetune過程的方法:通過添加Pretrain模型參數和Finetune模型參數之間的某種正則化損失,讓Finetune后的模型參數和最開始的Pretrain模型參數更加相似。文章中嘗試了多種正則化方法,通過最終的實驗發現,一個簡單的L2正則效果最好,即對于Pretrain模型和Finetune模型的對應層的參數計算L2距離,作為Finetune過程中損失函數的一部分,公式如下(w為Finetune參數,w0位Pretrain參數):
通過L2正則化的方法拉近Pretrain模型和Target模型參數也存在一定問題,如何設定正則化的強度直接決定了遷移效果,正則化太弱仍然會導致過擬合和信息遺忘,遷移強度太強會導致Finetune的模型在Target任務上不是最優解。百度的文章DELTA: DEEP LEARNING TRANSFER USING FEATURE MAP WITH ATTENTION FOR CONVOLUTIONAL NET- WORKS(ICLR 2019)提出,通過約束網絡的behavior,即feature map,而非模型參數,來實現約束目標。具體的,約束項可以表示為如下形式:
其中,Wj表示第j個卷積層的約束強度,FM表示第i個樣本經過參數w提取的feaure map。Wj的計算方法為,使用Pretrain的模型Freeze住底層Feature Extractor參數,Finetune后面Discriminator參數,通過衡量去掉每個channel后效果的損失,的到這個channel的遷移強度。如果去掉Pretrain模型某個channel后效果下降特別明顯,說明Pretrain得到的這個channel的信息對Target任務是很有效的,這個時候要增大這種channel參數的遷移強度。
采用Pretrain模型對Finetune模型進行約束需要引入額外的正則化Loss,可以被稱為Transfer Loss。由于Transfer Loss和Target Task Loss的優化目標不同,如何平衡兩個Loss的關系決定了遷移效果。為了統一這兩種Loss,Robust Knowledge Transfer via Hybrid Forward on the Teacher-Student Model(AAAI 2021)提出了一種混合前向網絡。當一個樣本輸入時,會通過三種不同的路徑得到三種Loss,Loss1和Loss2通過交替進入Student網絡(Target Task模型)某層和Teachder網絡(Pretrain模型)某層,最終再通過Target Task Head得到;Loss3只進入Student網絡通過Target Task Head得到。Loss1和Loss2代表了Student網絡和Teachder網絡Transfer Loss,Loss3代表了Target Task的優化Loss。與之前方法相比,該方法的三個Loss都是以優化Target Task為目標的,因此可以通過直接對比來判斷目前的Transfer強度是否太強。文中設計了一種簡單的平衡Transfer Loss和Target Loss的方法,讓兩個任務的Loss同等重要,隨著訓練過程動態計算Loss1和Loss2的權重。
招式2:選擇性地對Pretrain模型遷移
Pretrain模型中的參數不一定都是對下游任務有幫助的,因此一些研究提出,對Pretrain的模型進行有選擇性的遷移,重點遷移那些對下游任務幫助大的信息。Learning What and Where to Transfer(ICML 2019)中提出一種基于meta-learning的遷移學習方法。這篇文章的核心思路建立在FITNETS: HINTS FOR THIN DEEP NETS(ICLR 2015)一文提出的遷移方法之上,讓Target模型通過一個回歸任務擬合Pretrain模型中間層的表示,該優化目標可以表示為:
在FitNet中WGuided和WHint分別表示Target模型的Pretrain模型某一對應層的參數。Learning What and Where to Transfer(ICML 2019)對該方法進行了擴展。在What to transfer階段,對每一個channel的遷移做一個權重學習,每個channel的權重是通過一個單獨的網絡輸入圖片在Source模型的輸出計算得到的(T代表Target模型,S代表Source模型,與FitNet中的Guided和Hint相對應):
在Where to transfer階段,主要決定Source模型到Target模型的遷移層pair,即Source模型的第i層參數要遷移到Target模型的哪一層。類似What to transfer,通過一個單獨的網絡學習(i,j)這組Source模型到Target模型pair對的遷移強度:
最終的Loss由上面兩個階段的Loss,以及任務本身的Loss共同組成。在訓練階段,文章采用了Meta-learning的方法,內循環階段更新總體Loss,外循環階段更新三個Loss的總和。Meta-learning原理可以參考歷史文章Meta-learning核心思想及近年頂會3個優化方向。
招式3:在Finetune階段調整網絡結構
之前介紹的遷移學習方法,大多數都是通過Finetune對Pretrain模型的參數進行調整。然而,下游的Target任務可能需要和Source任務采用不同的模型結構來更好的進行學習。因此,TransTailor: Pruning the Pre-trained Model for Improved Transfer Learning(AAAI 2021)提出了一種在Finetune階段動態剪枝的方法,實現Finetune階段不僅能夠調整模型參數,還能調整模型網絡結構。該方法分為Target-aware Pruning和Importance-aware Finetuning兩個階段。在Target-aware Pruning階段,對于網絡中每一層的每一個filter,都對應一個可學習的權重,把Pretrain模型的參數Freeze住,使用Target任務的數據和優化目標進行訓練,得到每組參數最終對應的權重,訓練過程可以表示為:
這個重要性權重會使用泰勒變換,融合全局各層的打分結果得到全局的打分,最后將打分較低的網絡參數剪枝掉。在Importance-aware Finetuning,會結合第一階段得到的參數打分進行Finetune,具體的,通過將每組參數的打分結果乘到參數上,的到參數的轉換結果進行前向傳播。最終兩個過程交替進行,直到得到最終模型。
招式4:學習每組參數Transfer的方式
在利用Pretrain模型進行遷移學習時,我們往往需要決定哪些網絡的參數要Freeze,哪些網絡參數跟隨Target任務Finetune。例如,在CV領域,一些研究表明底層網絡能夠提取出更一般的圖像規律,而接近分類層的參數對于不同Task差異很大,因此為了不將Pretrain階段學到的知識破壞,將底層參數Freeze,只Finetune上層參數,會最大限度保留Pretrain階段在大量數據學到的知識,提升遷移學習效果。然而,不同任務需要Freeze的參數存在差異,人工調試不同的Transfer方式(哪些層Freeze、哪些層Finetune)效率很低。同時,一般的Finetune假設每個Target樣本都應該使用相同的Finetune方式,這也是不合理的。例如,和source domain更相似的樣本,從source domain遷移更多知識更有幫助。因此,學術界出現一些相關工作,自動化學習每層以及每個樣本的遷移策略。
在SpotTune: Transfer Learning through Adaptive Fine-tuning(CVPR 2019)這篇文章中,提出了對于每個樣本學習一個個性化的遷移方式。對于每個樣本,經過網絡的每層可以選擇是使用Pretrain模型的原始參數,還是使用Pretrain模型初始化后Finetune的參數。模型通過一個Policy Network,輸入每個樣本的特征(一般使用Pretrain模型對樣本的表征向量),輸出模型每組參數的遷移方式(使用Pretrain模型原始參數,或使用Pretrain模型初始化后Finetune的參數)。這個過程中需要對兩種遷移方式進行采樣,而采樣運算不可導。為了讓該運算可導,本文使用了Gumbel-Max Trick生成采樣結果。SpotTune的模型結構如下圖所示:
SpotTune實現了每個樣本個性化的Finetune策略學習,但是只能做到layer維度。AdaFilter: Adaptive Filter Fine-tuning for Deep Transfer Learning(AAAI 2020)提出了能夠在filter維度實現每個樣本的Finetune策略學習。與SpotTune類似,Finetune策略仍然為使用Pretrain模型的原始參數,或使用Pretrain模型初始化后Finetune的參數兩種。與SpotTune不同的是,AdaFilter使用RNN學習每層各個channel的Finetune策略,每層的Finetune策略選擇依賴于上一層輸出的表示(SpotTune則是根據樣本同時產出所有層的Finetune策略)。
總結
本文介紹了7篇頂會論文中對Finetune階段進行的改進,包括Finetune過程使用Pretrain模型做約束、選擇性地對Pretrain模型進行遷移、在Finetune階段調整網絡結構以及學習每組參數Transfer的方式4種類型。Pretrain-Finetune的核心問題在于,如何考慮到Target Task的樣本特性,將Pretrain的知識合理遷移到Target Task的模型上。其中每個樣本個性化地進行Finetune策略學習,可能是后續可以繼續深入研究的方向。
原文標題:花式Finetune方法大匯總
文章出處:【微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
審核編輯:湯梓紅
-
網絡
+關注
關注
14文章
7565瀏覽量
88777 -
模型
+關注
關注
1文章
3243瀏覽量
48836 -
遷移學習
+關注
關注
0文章
74瀏覽量
5561
原文標題:花式Finetune方法大匯總
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論