天天看點

深度學習之遷移學習介紹與使用

遷移學習概述

在深度學習領域,通過預訓練模型作為檢查點開始訓練生成神經網絡模型實作對新任務的支援,這種方法通常被稱為遷移學習,它的好處是不用再重頭開始設計與訓練一個全新的網絡,而是基于已經訓練好的網絡模型,在其基礎上進行參數與知識遷移,隻需要很少量的計算資源開銷與訓練時間就可以實作對新任務的支援。

深度學習之遷移學習介紹與使用

要了解遷移學習的整個過程就是要搞清楚下面三件事:

  1. 遷移學習遷移什麼
  2. 遷移學習是怎麼遷移的
  3. 遷移學習什麼時候使用

遷移什麼

在預訓練模型中存在各種特征資料與權重資訊、有些是與分類識别的對象本身關聯比較緊密的特征資料與權重資訊,有些是一些比較共性的特征資料與資訊,是可以被不同的任務或者對象之間共享的,遷移學習就是要遷移那些共性特征資料與資訊,進而避免再次學習這些知識,實作快速學習。簡單點說遷移學習主要是實作卷積層共性特征遷移,

怎麼遷移

遷移學習早期也被稱為感應遷移(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模型遷移學習實作了簡單的手勢識别看視訊即可:

原文釋出時間為:2018-09-28

本文作者:gloomyfish

本文來自雲栖社群合作夥伴“OpenCV學堂”,了解相關資訊可以關注“OpenCV學堂”。

繼續閱讀