預訓練模型 & Fine-tuning

rainbow_lucky0106發表於2020-10-18

https://blog.csdn.net/weixin_42137700/article/details/82107208

https://zhuanlan.zhihu.com/p/46833276

在實踐中,由於資料集不夠大,很少有人從頭開始訓練網路。常見的做法是使用預訓練的網路(例如在ImageNet上訓練的分類1000類的網路)來重新fine-tuning(也叫微調),或者當做特徵提取器。

語言模型來輔助NLP任務已經得到了學術界較為廣泛的探討,通常有兩種方式:

  1. feature-based(ELMo)
  • 利用語言模型的中間結果也就是LM embedding, 將其作為額外的特徵,引入到原任務的模型中。
  • 通常feature-based方法包括兩步:a. 在大的語料A上無監督地訓練語言模型,訓練完畢得到語言模型,然後構造task-specific model例如序列標註模型,採用有標記的語料B來有監督地訓練task-sepcific model,將語言模型的引數固定,語料B的訓練資料經過語言模型得到LM embedding,作為task-specific model的額外特徵
  1. fine-tuning
  • Fine-tuning方式是指在已經訓練好的語言模型的基礎上,加入少量的task-specific parameters。例如對於分類問題在語言模型基礎上加一層softmax網路,然後在新的語料上重新訓練來進行fine-tune
    • 構造語言模型,採用大的語料A來訓練語言模型在語言模型基礎上增加少量神經網路層來完成specific task。例如序列標註、分類等,然後採用有標記的語料B來有監督地訓練模型,這個過程中語言模型的引數並不固定,依然是trainable variables。

常見的兩類遷移學習場景

  1. 卷積網路當做特徵提取器。使用在ImageNet上預訓練的網路,去掉最後的全連線層,剩餘部分當做特徵提取器(例如AlexNet在最後分類器前,是4096維的特徵向量)。這樣提取的特徵叫做CNN codes。得到這樣的特徵後,可以使用線性分類器(Liner SVM、Softmax等)來分類影像。
  2. Fine-tuning卷積網路。替換掉網路的輸入層(資料),使用新的資料繼續訓練。Fine-tune時可以選擇fine-tune全部層或部分層。通常,前面的層提取的是影像的***通用特徵(generic features)***(例如邊緣檢測,色彩檢測),這些特徵對許多工都有用。後面的層提取的是***與特定類別有關***的特徵,因此fine-tune時常常只需要Fine-tuning後面的層。

何時以及如何Fine-tune

決定如何使用遷移學習的因素有很多,這是最重要的只有兩個:新資料集的大小、以及新資料和原資料集的相似程度。有一點一定記住:**網路前幾層學到的是通用特徵,後面幾層學到的是與類別相關的特徵。**這裡有使用的四個場景:

  1. 新資料集比較小且和原資料集相似。因為新資料集比較小,如果fine-tune可能會過擬合;又因為新舊資料集類似,我們期望他們高層特徵類似,可以使用預訓練網路當做特徵提取器,用提取的特徵訓練線性分類器。
  2. 新資料集大且和原資料集相似。因為新資料集足夠大,可以fine-tune整個網路。
  3. 新資料集小且和原資料集不相似。新資料集小,最好不要fine-tune,和原資料集不類似,最好也不使用高層特徵。這時可是使用前面層的特徵來訓練SVM分類器。
  4. 新資料集大且和原資料集不相似。因為新資料集足夠大,可以重新訓練。但是實踐中fine-tune預訓練模型還是有益的。新資料集足夠大,可以fine-tine整個網路

warning

與重新訓練相比,fine-tune要使用更小的學習率。因為訓練好的網路模型權重已經平滑,我們不希望太快扭曲(distort)它們(尤其是當隨機初始化線性分類器來分類預訓練模型提取的特徵時)。

相關文章