爲什麼“Pretrained+Fine-tuning”

Deep Learning或者說CNN在圖像識別這一領域取得了巨大的進步,那麼自然我們就想將CNN應用到我們自己的數據集上,但這時通常就會面臨一個問題:通常我們的dataset都不會特別大,一般不會超過1萬張,甚至更少。

這種情況下,直接使用train from scratch的方式在小數據集上容易過擬合,尤其是在數據分佈差異化很大的場景下。然後就有了遷移學習了,Transfer Learning關心的問題是:什麼是“知識”以及如何更好地運用之前得到的“知識”。這可以有很多方法和手段。而本文所說的pretrained+fine-tuning只是其中的一種手段。

pretrained+fine-tuning有什麼好處

至少有以下兩方面:
1. 解決了我們小樣本下使用GoogLeNet這樣複雜的網絡上容易過擬合的問題;
2. 節省了訓練時間。因爲網絡前面幾層提取的特徵具備一定的泛化能力(generic)。

pre-trained+finetuning都具有哪些方式:

pre-trained+finetuning通常有兩種方式:

  • ConvNet as fixed feature extractor:拿來pretrained的模型,將最後一層全連接層(分類用)去掉,然後將剩下的部分看做一個特徵提取器,後面再加一個線性分類器就可以了。比如:在 AlexNet中會對每張圖片輸出4096維向量,這些向量是用於分類的,只要我們得到了所有圖片的這些向量就可以建立一個線性分類器用於新數據的分類了。
  • Fine-tuning the ConvNet:和第一種方法不同的是,這裏不僅對頂層的分類進行重新替換和訓練,還對卷積層的一些參數通過反向傳播進行微調。可以對所有的參數都進行微調,也可以讓前幾層的參數固定只對高層部分進行微調(爲防止過擬合,因爲剛開始幾層的特徵一般是比較通用的,而後面幾層可能會包含更多原始訓練集的細節)。

具體實踐中如何選擇不同的pretrained+fine-tuning方式

pretrained+fine-tuning策略取決於多種因素,但最重要的是新數據集的大小以及新數據集與原數據集的相似度。謹記網絡前面幾層的 DCNN 特徵更加泛型(generic),在後面層中更加具有數據集特定性(dataset-specific)。

  • 數據集很小並且與原數據集相似。由於數據集很小,不適合進行微調(可能會過擬合);由於數據類似於原數據,模型更高層次的特徵也與此數據集相關。所以最好是在 CNN 特徵上訓練一個線性分類器。
  • 新數據集很小且與原數據集不同。由於數據較小,只訓練一個線性分類器可能更好;由於數據集不同,從網絡頂部就開始訓練分類器可能會包含更多的原數據集的特定特徵。所以最好用網絡前部的層來訓練分類器。
  • 數據集很大並且與原數據集相似。由於數據多了,應該不會過擬合,可以通過試圖微調網絡。
  • 數據集大而且與原數據集不同。由於數據集很大,我們可能會期望從頭開始訓練一個 DCNN。不過,在實踐中從一個預訓練模型開始初始化權重仍然是一種有益的方法。所以我們可以使用原模型爲初始值然後對整個網絡進行微調。
    這裏寫圖片描述

參考:
深度學習系列Part2:遷移學習和微調深度卷積神經網絡 (原版英文鏈接Deep Learning Part 2: Transfer Learning and Fine-tuning Deep Convolutional Neural Networks)這篇文章通過了一個具體案例來介紹Fine-tuning,值得一看;
知乎 fine-tuning:利用已有模型訓練其他數據集 ,MXNet下Pretrained+Finetuning的正確姿勢這裏寫鏈接內容
cs231n transfer learning (翻譯版CS231n 卷積神經網絡與計算機視覺 11 卷積神經網絡的 遷移學習 和微調) ;
遷移學習與fine-tuneing有什麼區別?

發佈了419 篇原創文章 · 獲贊 248 · 訪問量 125萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章