遷移學習:經典演算法解析
http://blog.csdn.net/linolzhang/article/details/73358219
一. 瞭解遷移學習
遷移學習(Transfer Learning)目標是將從一個環境中學到的知識用來幫助新環境中的學習任務。
> The ability of a system to recognize and apply knowledge and skills learned in previous tasks to novel tasks。
Survey 作者歸納了 Transfer Learning 相關的知識域,有必要了解一下這些名詞:
● Learning學習 - learning to learn
● 終身學習 - life-long learning
● 知識轉移 - knowledge transfer
● 歸納遷移 - inductive transfer
● 多工學習 - multi-task learning
● 知識的鞏固 - knowledge consolidation
● 上下文相關學習 - context sensitive learning
● 基於知識的歸納偏差 - knowledge-based inductive bias
● 元學習 - meta learning
● 增量學習 - and incremental/cumulative learning
二. 遷移學習分類
遷移學習(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 演算法是基於 樣本遷移的 開山之作,由 戴文淵 提出,有著足夠的影響力放在第一位來進行講解。
演算法的基本思想是 從源 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)多個任務之間存在相關性資訊,單獨訓練時無法有效挖掘;
關於多工學習的應用,比如 分類任務下的二級分類,人臉識別等,大家可以更進一步瞭解。