遷移學習的幾種遷移方式

遷移學習是當前深度學習領域的一系列通用的解決方案,而不是一個具體的算法模型。Pre-training + fine-tuning(預訓練+調參) 的遷移學習方式是現在深度學習中一個非常流行的遷移學習方式,尤其是以圖像領域爲代表,很多時候會選擇預訓練的 ImageNet對模型進行初始化。
在遷移學習中,有幾個概念,domain(域)和task(任務) 、source(源) 和target(目標)需要理清楚。
- domain:一般指的是特徵空間和概率分佈 - task:包含標記空間和目標預測函數
- source和target:前者是用於訓練模型的域/任務,後者是要用前者的模型對自己的數據進行預測/分類/聚類等機器學習任務的域/任務。
遷移學習的種類根據遷移的內容可以歸納爲以下幾種:
-Instance-based TL(樣本遷移):source domain數據不可以整個直接被用到target domain裏,但是在source domain中還是找到一些可以重新被用到target domain中的數據。對它們調整權重,使它能與target domain中的數據 匹配之後可以進行遷移。
- Feature-representation-transfer(特徵遷移):找到一些好的有代表性的特徵,通過特徵變換把source domain和target domain的特徵變換到同樣的空間,使得這個空間中source domain和target domain的數據具有相同的分 布。
- Parameter-transfer(參數/模型遷移):假設source tasks和target tasks之間共享一些參數,或者共享模型hyperparameters(超參數)的先驗分佈。這樣把原來的模型遷移到新的domain時,也可以達到不錯的精度。Pre-training + fine-tuning 的遷移學習方式就可以理解爲是一種Parameter-transfer,這種方法也是最常用的遷移學習的應用。
在Pre-training + fine-tuning模式下的遷移學習過程中,常用的訓練trick和調參方法總結有如下幾點:
- 把預訓練模型當做特徵提取器: TensorFlow或者Pytorch都有ImageNet上預訓練好的模型,將最後一層全連接層(原始的是1000個類別或者更多)改成你自己的分類任務的種類進行輸出,或者把最後一層直接去掉換成自己的分類器, 剩下的全部網絡結構當做一個特徵提取器。
-fine-tuning: 通常來說,直接把預訓練模型來用效果不一定足夠好,因此需要進行fine-tuning(微調)。fine-tuning需要凍結網絡的前幾層參數,只更新網絡結構的後面幾層和最後的全連接層,這樣效果會更好。
-Learning rate: 在遷移學習的微調過程中一般不建議使用過大的學習率,通常來說1e-5是比較合適的選擇。
遷移學習往往還和你的任務中的數據關係密切,可以考慮以下幾種情況。

  • 新的數據集較小,並且和pre-trained model所使用的訓練數據集相似度較高: 由於數據集較小,在進行finetune存在overfit的風險,又由於數據集和原始數據集相似度較高,因此二者不論是local
    feature還是global feature都比較相 近,所以此時最佳的方法是把CNN網絡當做特徵提取器然後訓練一個分類器進行分類
  • 新的數據集較大,並且和pre-trained model所使用的訓練數據集相似度較高: 很明顯,此時我們不用擔心overfit(過擬合),因此對全部網絡結構進行finetune是較好的。
  • 新的數據集較小,並且和pre-trained model所使用的訓練數據集差異很大: 由於數據集較小,不適合進行finetune,由於數據集差異大,應該在單獨訓練網絡結構中較高的層,前面幾層local的就不用訓練了,直接固定權值。在實際
    中,這種問題下較好的解決方案一般是從網絡的某層開始取出特徵,然後訓練SVM分類器。
  • 新的數據集較大,並且和pre-trained model所使用的訓練數據集差異很大: 本來由於數據集較大,可以從頭開始訓練的,但是在實際中更偏向於訓練整個pre-trained model的網絡。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章