【神經網絡與深度學習】遷移學習:經典算法解析

一. 瞭解遷移學習css

       遷移學習(Transfer Learning)目標是將從一個環境中學到的知識用來幫助新環境中的學習任務。 html

           > The ability of a system to recognize and apply knowledge and skills learned in previous tasks to novel tasks。算法

       入門推薦一篇公認的比較好的 【Survey】: A Survey on Transfer Learning,Sinno JialinPan, Qiang Yang,IEEE Trans網絡

       另外,戴文淵的碩士學位論文也能夠看一下:基於實例和特徵的遷移學習算法研究數據結構


       Survey 做者概括了 Transfer Learning 相關的知識域,有必要了解一下這些名詞:app

● Learning學習 - learning to learn機器學習

● 終身學習 - life-long learning學習

● 知識轉移 - knowledge transferspa

● 概括遷移 - inductive transfer.net

● 多任務學習 - multi-task learning

● 知識的鞏固 - knowledge consolidation

● 上下文相關學習 - context sensitive learning

● 基於知識的概括誤差 - knowledge-based inductive bias

● 元學習 - meta learning

● 增量學習 - and incremental/cumulative learning


       另外,進展及 Open Source Toolkit 能夠參考:http://www.cse.ust.hk/TL/index.html


二. 遷移學習分類

       遷移學習(Transfer Learning)根據 領域 和 任務的類似性,能夠這樣劃分: 

        

        咱們根據 源Domain和目前Domain 之間的關係,源Task 和 目標Task之間的關係,以及任務方法更詳細的整理爲下表:

 

 源Domain &

 目標Domain 

  源Task &

 目標Task

 源Data & 目標Data

   任務方法     

傳統機器學習

 相同

  相同

  有標籤 | 有標籤

  

遷移學習 

 概括式遷移學習

 相同/相關

  相關

 多任務學習 - 有標籤 | 有標籤

 自我學習    - 無標籤 | 有標籤

  分類迴歸

 直推式遷移學習

 相關

  相同

  有標籤 | 無標籤

  分類迴歸

 無監督遷移學習

 相關

  相關

  無標籤 | 無標籤

  聚類降維


       實際上,概括式遷移學習 是應用最普遍的一種方法,從這點上看,遷移學習更適合 有標籤的應用域。

       根據技術方法,咱們將遷移學習的方法劃分爲:

                             

  說明

 概括式 

 直推式 

 無監督 

基於樣本

的遷移學習

  經過調整 源Domain的標籤(輔助) 和 目標Domain標籤的權重,協同訓練獲得目標模型。

  典型方法:TrAdaBoost

 √

 √

 

基於特徵

的遷移學習

  找到 「好」特徵 來減小源Domain和目標Domain之間的不一樣,可以下降分類、迴歸偏差。

  典型方法:Self-taught learning,multi-task structure learning

 √

 √

 √

基於參數

的遷移學習

  發現源Domain和目標Domain之間的共享參數或先驗關係。

  典型方法:Learning to learn,Regularized multi-task learning

 √

 

 

基於相關性

的遷移學習

  創建源Domain和目標Domain之間的相關知識映射。

  典型方法:Mapping 方法

 √

 

 



       遷移學習方法雖然在學術有不少研究工做,實際上在應用領域並不算成熟,這自己就是一個很大的命題,關於遷移學習的條件 和 本質也並未造成一套正統的體系來引領研究方向,更多的也是在實驗摸索。

       遷移學習 目前面臨以下幾個問題:

1. 哪一種狀況適合作遷移學習? - What

    這裏先給個本身的理解:

        分類和迴歸問題是比較適合作遷移學習的場景,有標籤的源數據是最好的輔助。

2. 該選擇哪一種方法? - Which

    簡單而行之有效的方法是首選,領域在快速發展,也沒必要拘泥算法自己,改善結果纔是硬道理。

3. 如何避免負遷移? - How

    遷移學習的目標是改善目標域的 Task效果,這裏面 負遷移(Negative Transfer)是不少研究者面臨的一個問題,如何獲得行之有效的改進,避免負遷移是須要你們去評估和權衡的。


三. 經典算法 TrAdaBoost

       TrAdaBoost 算法是基於 樣本遷移的 開山之做,由 戴文淵 提出,有着足夠的影響力放在第一位來進行講解。

       論文下載:Boosting for Transfer Learning


       算法的基本思想是 從源 Domain 數據中 篩選有效數據,過濾掉與目標 Domain 不match的數據,經過 Boosting方法創建一種權重調整機制,增長有效數據權重,下降無效數據權重,下圖是 TrAdaBoost 算法的示意圖(截圖來自於  莊福振 - 遷移學習研究進展):

        

       TrAdaBoost 算法比較簡單,用一句話歸納就是 從過時數據裏面 找出和目標數據最接近的樣本數據。

       來看 TrAdaBoost 的算法步驟:

        

     

       這裏須要說明的一點就是 權重的更新方式,對於輔助樣原本講,預測值和標籤越接近,權重越大;而對於目標數據則是相反,預測值和標籤差別越大,權重越大。這種策略狠容易理解,咱們想找到輔助樣本中 和 目標數據分佈最接近的樣本,同時放大目標樣本Loss的影響,那麼理想的結果就是:

       目標樣本預測值與標籤儘可能匹配(不放過一個沒匹配好的數據),輔助樣本在前面的基礎上篩選出最 match(權重大的) 的部分。

       做者在後面給出了理論證實,這裏有兩個公式(來證實算法收斂):

         

          

        因篇幅問題,這裏就再也不展開了(和做者說的同樣),有興趣能夠參考原Paper,看下實驗結果:

        

        實驗發現,當 同分布數據(目標數據)佔比當低於0.1時,算法效果明顯,當比例超過 0.1時,TrBoost 退化爲 SVM 的效果

       這又是一個顯而易見的結論,咱們認爲大於0.1時,僅僅依靠 目前數據就足夠完成樣本訓練,這種狀況下,輔助樣本的貢獻能夠忽略。

       另外,當 目標數據 和 輔助數據 差異比較大時,該方法是不 Work的,印證了最初的假設,這裏再也不展開證實。

       最後,給出網友提供的C代碼:【下載地址


四. 多任務學習

       多任務學習(Multi-Task Learning, MTL)是一種同時學習多個任務的機器學習方法,該方法由來已久,和深度學習沒什麼關係。

       若是非要把它 和深度學習加上一個 link,咱們能夠這樣來表示:

       input1 -> Hidden1-> H1-> Out1                          input1                                       -> Out1

       input2 -> Hidden2-> H2-> Out2         ==>          input2 -> Hidden123 -> H123   -> Out2

       input3 -> Hidden3-> H3-> Out3                         input3                                        -> Out3

       也比較好理解,至關於把多個 Task網絡進行合併,同時訓練多個任務,這種狀況並不鮮見,好比如下2個方向:

1)目標檢測 - 複合多任務

    目標檢測是 分類問題+迴歸問題的組合,這是一個典型的 Multi-Task,好比:

        Detection=Classification+Location

        Mask RCNN = Classification+Location+Segmentation

    檢測問題前面描述的比較多了,這裏就再也不貼圖了。

2)特徵提取 

    多任務特徵提取,多個輸出,這一類問題表明就是 數據結構化,特徵識別。

    下圖是港中文 湯曉鷗組發表的TCDCN(Facial Landmark Detection by Deep Multi-task Learning),不少講 Multi-Task的軟文都拿出來講,咱們也借用一下。

    在這裏 Multi-Task 被同時用做 人臉關鍵點定位、姿態估計和屬性預測(好比性別、年齡、人種、微笑?戴眼鏡?)

        

       多任務學習適用於這樣的狀況:

1)多個任務之間存在關聯,好比行人和車輛檢測,對於深度網絡也能夠理解爲有部分共同的網絡結構;

2)每一個獨立任務的訓練數據比較少,單獨訓練沒法有效收斂;

3)多個任務之間存在相關性信息,單獨訓練時沒法有效挖掘;

       能夠看一下這篇 Tutorial:www.public.asu.edu/~jye02/Software/MALSAR/MTL-SDM12.pdf

       關於多任務學習的應用,好比 分類任務下的二級分類,人臉識別等,你們能夠更進一步瞭解。

相關文章
相關標籤/搜索