什麼是fine-tuning

https://www.julyedu.com/question/big/kp_id/26/ques_id/2137)

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

  • 以下是常見的兩類遷移學習場景:

1 卷積網絡當做特徵提取器。使用在ImageNet上預訓練的網絡,去掉最後的全連接層,剩餘部分當做特徵提取器(例如AlexNet在最後分類器前,是4096維的特徵向量)。這樣提取的特徵叫做CNN codes。得到這樣的特徵後,可以使用線性分類器(Liner SVM、Softmax等)來分類圖像。

2 Fine-tuning卷積網絡。替換掉網絡的輸入層(數據),使用新的數據繼續訓練。Fine-tune時可以選擇fine-tune全部層或部分層。通常,前面的層提取的是圖像的通用特徵(generic features)(例如邊緣檢測,色彩檢測),這些特徵對許多任務都有用。後面的層提取的是與特定類別有關的特徵,因此fine-tune時常常只需要Fine-tuning後面的層

  • 預訓練模型

在ImageNet上訓練一個網絡,即使使用多GPU也要花費很長時間。因此人們通常共享他們預訓練好的網絡,這樣有利於其他人再去使用。例如,Caffe有預訓練好的網絡地址Model Zoo。

  • 何時以及如何Fine-tune

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

1、新數據集比較小且和原數據集相似。因爲新數據集比較小,如果fine-tune可能會過擬合;又因爲新舊數據集類似,我們期望他們高層特徵類似,可以使用預訓練網絡當做特徵提取器,用提取的特徵訓練線性分類器。

2、新數據集大且和原數據集相似。因爲新數據集足夠大,可以fine-tune整個網絡。

3、新數據集小且和原數據集不相似。新數據集小,最好不要fine-tune,和原數據集不類似,最好也不使用高層特徵。這時可使用前面層的特徵來訓練SVM分類器。

4、新數據集大且和原數據集不相似。因爲新數據集足夠大,可以重新訓練。但是實踐中fine-tune預訓練模型還是有益的。新數據集足夠大,可以fine-tine整個網絡。

  • 實踐建議
  • 預訓練模型的限制
    使用預訓練模型,受限於其網絡架構。例如,你不能隨意從預訓練模型取出卷積層。但是因爲參數共享,可以輸入任意大小圖像;卷積層和池化層對輸入數據大小沒有要求(只要步長stride fit),其輸出大小和屬於大小相關;全連接層對輸入大小沒有要求,輸出大小固定。
  • 學習率的限制
    與重新訓練相比,fine-tune要使用更小的學習率。因爲訓練好的網絡模型權重已經平滑,我們不希望太快扭曲(distort)它們(尤其是當隨機初始化線性分類器來分類預訓練模型提取的特徵時)。

更多參考

1 CNN Features off-the-shelf: an Astounding Baseline for Recognition基於ImageNet預訓練模型提取特徵訓練SVM分類器,陳述了幾個最優結果。

2 DeCAF2013年報告了類似發現。這篇論文使用的框架接口爲Python,實現是caffe的c++。

3 How transferable are features in deep neural networks?詳細介紹了遷移學習,包括一些大學發現的layer co-adaptations。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章