深度學習之遷移學習介紹與使用
遷移學習概述
在深度學習領域,通過預訓練模型作為檢查點開始訓練生成神經網路模型實現對新任務的支援,這種方法通常被稱為遷移學習,它的好處是不用再重頭開始設計與訓練一個全新的網路,而是基於已經訓練好的網路模型,在其基礎上進行引數與知識遷移,只需要很少量的計算資源開銷與訓練時間就可以實現對新任務的支援。
要理解遷移學習的整個過程就是要搞清楚下面三件事:
-
遷移學習遷移什麼
-
遷移學習是怎麼遷移的
-
遷移學習什麼時候使用
遷移什麼
在預訓練模型中存在各種特徵資料與權重資訊、有些是與分類識別的物件本身關聯比較緊密的特徵資料與權重資訊,有些是一些比較共性的特徵資料與資訊,是可以被不同的任務或者物件之間共享的,遷移學習就是要遷移那些共性特徵資料與資訊,從而避免再次學習這些知識,實現快速學習。簡單點說遷移學習主要是實現卷積層共性特徵遷移,
怎麼遷移
遷移學習早期也被稱為感應遷移(inductive transfer),為了搞清楚,遷移學習到底是怎麼遷移的,大神Yoshua Bengio等人嘗試定義了一個八層的神經網路,將ImageNet的資料集1000個種類分為A與B兩個分類子集,數量均為500,然後繼續分別訓練生成forzen推斷圖、然後分別將網路模型A與B的前三層分別copy給沒有訓練之前網路B,並對B的餘下5層隨機初始化之後開始訓練這兩個全新的網路(B3B與A3B),他們想通過這個實驗證明、如果B3B與A3B跟之前訓練好的網路B有同樣的識別準確率就說明自遷移網路B3B與遷移網路A3B的前三層網路特徵是共性特徵資訊,可以用來遷移,如果網路效能下降則說明它們含有目標物件相關的個性特徵無法用來遷移。
最終的實驗結果表明,前面7層都是共性特徵,只有網路的最後一層才是任務相關的個性特徵資料,無法進行遷移,整個實驗結果如下:
從上面可以看出單純的遷移學習AnB的方式,隨著層數的增加網路效能不斷下降,但是通過遷移學習加fine-tuning的方式AnB+對前N層進行重新訓練調整優化,遷移學習的效果居然比原來的還要好。充分說明遷移學習+fine-tuning是個訓練卷積神經網路的好方法。
什麼時候使用遷移
當我們有相似的任務需要完成的時候,我們可以使用預訓練的相關模型,在此基礎上進行遷移學習即可,這個方面caffe與tensorflow都提供大量的可以用於遷移學習的預訓練模型庫,在github上地址分別如下:
# Caffe模型
https://github.com/BVLC/caffe/wiki/Model-Zoo
# tensorflow模型
https://github.com/tensorflow/models
在實際使用中我們把預訓練的網路稱為base-network,把要遷移的前n層複製到一個到目標網路(target network),然後隨機初始化目標網路的餘下各層、開始訓練進行反向傳播、反向傳播時候有兩種方法可以使用:
-
把前面n層凍結forzen、只對後面的層進行訓練,這種方法適合少的樣本資料,而且隨著層凍結n數值增大、網路效能會下降,這種是單純的遷移學習。
-
不凍結前n層、全程參與訓練不斷調整它們的引數,實現更好的網路效能這種方法稱為遷移學習+fine-tuning
遷移學習使用
在tensorflow中通過tensorflow object detection API框架使用遷移學習是物件檢測與識別,只需要幾步即可:下面是我自己實現的基於tensorflow object detection API使用SSD模型遷移學習實現了簡單的手勢識別看視訊即可: