【深度學習系列】遷移學習Transfer Learning

  在前面的文章中,咱們一般是拿到一個任務,譬如圖像分類、識別等,蒐集好數據後就開始直接用模型進行訓練,可是現實狀況中,因爲設備的侷限性、時間的緊迫性等致使咱們沒法從頭開始訓練,迭代一兩百萬次來收斂模型,因此這個時候遷移學習就派上用場了。git


什麼是遷移學習?github

  遷移學習通俗來說,就是運用已有的知識來學習新的知識,核心是找到已有知識和新知識之間的類似性,用成語來講就是觸類旁通。因爲直接對目標域從頭開始學習成本過高,咱們故而轉向運用已有的相關知識來輔助儘快地學習新知識。好比,已經會下中國象棋,就能夠類比着來學習國際象棋;已經會編寫Java程序,就能夠類比着來學習C#;已經學會英語,就能夠類比着來學習法語;等等。世間萬事萬物皆有共性,如何合理地找尋它們之間的類似性,進而利用這個橋樑來幫助學習新知識,是遷移學習的核心問題。

 


爲何須要遷移學習?數據庫

  • 知足深度學習訓練數據量的數據太少。對於一個機器學習的任務,譬如分類,若是數據量太小,咱們是否必定要上深度學習呢?其實沒必要然。若是在實際的生產過程當中,可以用規則就能獲得好的效果的就用規則,可以用簡單的模型就用簡單的模型,咱們常聽到的「奧卡姆剃刀」其實就是這個意思,減小模型的複雜度,可以從某種程度上避免過擬合的狀況。那麼對於小量數據集,沒有必要必定須要用深度學習的方法來作。一樣,若是要對一個新任務分類,或者識別,蒐集不了大量的正負樣本,怎麼訓練呢?
  • 新數據集相比於原數據集更小但內容很不相同。因爲數據較小,只訓練一個線性分類器可能更好。由於數據集不一樣,從網絡頂部就開始訓練分類器可能不是最好的選擇,這包含更多的數據集特定特徵。另外,從網絡前部的激活函數開始訓練分類器可能更好一點。網絡

  • 新數據集相比於原數據集較大,但內容很是不一樣。因爲數據集很大,咱們可能會指望從頭開始訓練一個 DCNN。然而,在實踐中從一個預訓練模型開始初始化權重仍然是一種有益的方法。在這種狀況下,咱們會有足夠的數據和信心對整個網絡進行微調。架構

 


如何作遷移學習?dom

   在實踐中,咱們一般不會徹底從頭開始隨機初始化訓練 DCNN,這是由於有能知足深度網絡需求的足夠大小的數據集至關的少見。做爲代替,常見的是在一個大型數據集上預訓練一個 DCNN,而後使用這一訓練的 DCNN 的權重做爲初始設置或做爲相關任務的固定的特徵提取器。 舉個例子,咱們知道Imagnet是目前最大的圖像識別數據庫,目前已經有不少基於imagenet數據訓練的網絡模型,如inceptionv三、v4等,假如如今給你一個任務,但願你能作一個車系識別,你有兩個選擇:機器學習

  一是蒐集大量的車系數據,對這些車系數據進行模型訓練;函數

  二是基於imagenet訓練好的網絡模型,而後把蒐集好的車系數據加到基於以前訓練好的模型繼續訓練,進行fine-tuning。學習

  傳統的作法都是第一種,可是這就會遇到一個問題,一是車系的圖片夠不夠多,體量夠不夠大?若是數據量不夠,最後訓練的效果會不會很很差?其實咱們能夠經過 把ImageNet 或其餘大型數據集學習到的網絡特徵運用於一個圖片分類或其餘基於圖片特徵的任務,這就是遷移學習的思想。其實能夠這樣理解,若是從零開始訓練,那麼初始化權重通常狀況下要麼是都爲0,要麼隨機設置,當咱們導入了在大規模數據集上訓練好的模型後,至關於在以這個模型現有的參數做爲初始化的權重,不過至於在具體的任務上的泛化能力如何,仍是得看具體的場景。spa

 


 遷移學習的限制

  上文提到咱們在遷移學習中會使用預訓練的網絡,因此咱們在模型架構方面受到了一點點限制。好比說,咱們不能隨意移除預訓練網絡中的卷積層。但因爲參數共享的關係,咱們能夠很輕鬆地在不一樣空間尺寸的圖像上運行一個預訓練網絡。這在卷積層和池化層和狀況下是顯而易見的,由於它們的前向函數(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

相關文章
相關標籤/搜索