【深度学习系列】迁移学习Transfer Learning
在前面的文章中,我們通常是拿到一個任務,譬如圖像分類、識別等,搜集好數據后就開始直接用模型進行訓練,但是現實情況中,由于設備的局限性、時間的緊迫性等導致我們無法從頭開始訓練,迭代一兩百萬次來收斂模型,所以這個時候遷移學習就派上用場了。
什么是遷移學習?
遷移學習通俗來講,就是運用已有的知識來學習新的知識,核心是找到已有知識和新知識之間的相似性,用成語來說就是舉一反三。由于直接對目標域從頭開始學習成本太高,我們故而轉向運用已有的相關知識來輔助盡快地學習新知識。比如,已經會下中國象棋,就可以類比著來學習國際象棋;已經會編寫Java程序,就可以類比著來學習C#;已經學會英語,就可以類比著來學習法語;等等。世間萬事萬物皆有共性,如何合理地找尋它們之間的相似性,進而利用這個橋梁來幫助學習新知識,是遷移學習的核心問題。?
為什么需要遷移學習?
- 滿足深度學習訓練數據量的數據太少。對于一個機器學習的任務,譬如分類,如果數據量過小,我們是否一定要上深度學習呢?其實不必然。如果在實際的生產過程中,能夠用規則就能得到好的效果的就用規則,能夠用簡單的模型就用簡單的模型,我們常聽到的“奧卡姆剃刀”其實就是這個意思,減少模型的復雜度,能夠從某種程度上避免過擬合的情況。那么對于小量數據集,沒有必要一定需要用深度學習的方法來做。同樣,如果要對一個新任務分類,或者識別,搜集不了大量的正負樣本,怎么訓練呢?
-  新數據集相比于原數據集更小但內容很不相同。由于數據較小,只訓練一個線性分類器可能更好。因為數據集不同,從網絡頂部就開始訓練分類器可能不是最好的選擇,這包含更多的數據集特定特征。另外,從網絡前部的激活函數開始訓練分類器可能更好一點。 
-  新數據集相比于原數據集較大,但內容非常不同。由于數據集很大,我們可能會期望從頭開始訓練一個 DCNN。然而,在實踐中從一個預訓練模型開始初始化權重仍然是一種有益的方法。在這種情況下,我們會有足夠的數據和信心對整個網絡進行微調。 
?
如何做遷移學習?
? 在實踐中,我們通常不會完全從頭開始隨機初始化訓練 DCNN,這是因為有能滿足深度網絡需求的足夠大小的數據集相當的少見。作為代替,常見的是在一個大型數據集上預訓練一個 DCNN,然后使用這一訓練的 DCNN 的權重作為初始設置或作為相關任務的固定的特征提取器。 舉個例子,我們知道Imagnet是目前最大的圖像識別數據庫,目前已經有很多基于imagenet數據訓練的網絡模型,如inceptionv3、v4等,假如現在給你一個任務,希望你能做一個車系識別,你有兩個選擇:
一是搜集大量的車系數據,對這些車系數據進行模型訓練;
二是基于imagenet訓練好的網絡模型,然后把搜集好的車系數據加到基于之前訓練好的模型繼續訓練,進行fine-tuning。
傳統的做法都是第一種,但是這就會遇到一個問題,一是車系的圖片夠不夠多,體量夠不夠大?如果數據量不夠,最后訓練的效果會不會很不好?其實我們可以通過 把ImageNet 或其他大型數據集學習到的網絡特征運用于一個圖片分類或其他基于圖片特征的任務,這就是遷移學習的思想。其實可以這樣理解,如果從零開始訓練,那么初始化權重一般情況下要么是都為0,要么隨機設置,當我們導入了在大規模數據集上訓練好的模型后,相當于在以這個模型現有的參數作為初始化的權重,不過至于在具體的任務上的泛化能力如何,還是得看具體的場景。
?
?遷移學習的限制
上文提到我們在遷移學習中會使用預訓練的網絡,所以我們在模型架構方面受到了一點點限制。比如說,我們不能隨意移除預訓練網絡中的卷積層。但由于參數共享的關系,我們可以很輕松地在不同空間尺寸的圖像上運行一個預訓練網絡。這在卷積層和池化層和情況下是顯而易見的,因為它們的前向函數(forward function)獨立于輸入內容的空間尺寸。在全連接層(FC)的情形中,這仍然成立,因為全連接層可被轉化成一個卷積層。所以當我們導入一個預訓練的模型時,網絡結構需要與預訓練的網絡結構相同,然后再針對特定的場景和任務進行訓練。
?
遷移學習的相關資料
  對遷移學習感興趣的同學,可以關注這個github repo:transferlearning,以及王晉東寫的系列文章:
?《小王愛遷移》系列之零:遷移學習領域著名學者和研究機構
?
《小王愛遷移》系列之一:遷移成分分析(TCA)方法簡介
?
《小王愛遷移》系列之二:聯合分布適配(JDA)方法簡介
?
《小王愛遷移》系列之三:深度神經網絡的可遷移性
?
《小王愛遷移》系列之四:深度適配網絡(DAN)
?
《小王愛遷移》系列之五:測地線流式核方法(GFK)
?
《小王愛遷移》系列之六:學習遷移(Learning To Transfer)
?
《小王愛遷移》系列之七:負遷移(Negative Transfer)
?
《小王愛遷移》系列之八:深度遷移學習文章解讀
?
《小王愛遷移》系列之九:開放集遷移學習(Open Set Domain Adaptation)
?
《小王愛遷移》系列之十:張量遷移學習(tensor unsupervised domain adaptation)
?
《小王愛遷移》系列之十一:選擇性對抗遷移學習(Selective Adversarial Network)
?
《小王愛遷移》系列之十二:新年新氣象-重新整理的遷移學習資源倉庫
?
?
參考資料:
1.https://zhuanlan.zhihu.com/p/33369085
2.http://blog.csdn.net/maweifei/article/details/52444342
轉載于:https://www.cnblogs.com/charlotte77/p/8399926.html
總結
以上是生活随笔為你收集整理的【深度学习系列】迁移学习Transfer Learning的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: webpack学习1-打包
- 下一篇: POJ 2823 Sliding Win
