1. 什么是遷移學習
遷移學習(Transfer Learning)是一種機器學習方法,就是把為任務 A 開發的模型作為初始點,重新使用在為任務 B 開發模型的過程中。遷移學習是通過從已學習的相關任務中轉移知識來改進學習的新任務,雖然大多數機器學習算法都是為了解決單個任務而設計的,但是促進遷移學習的算法的開發是機器學習社區持續關注的話題。 遷移學習對人類來說很常見,例如,我們可能會發現學習識別蘋果可能有助於識別梨,或者學習彈奏電子琴可能有助於學習鋼琴。
找到目標問題的相似性,遷移學習任務就是從相似性出發,將舊領域(domain)學習過的模型應用在新領域上。
2. 為什么需要遷移學習?
- 大數據與少標注的矛盾:雖然有大量的數據,但往往都是沒有標注的,無法訓練機器學習模型。人工進行數據標定太耗時。
- 大數據與弱計算的矛盾:普通人無法擁有龐大的數據量與計算資源。因此需要借助於模型的遷移。
- 普適化模型與個性化需求的矛盾:即使是在同一個任務上,一個模型也往往難以滿足每個人的個性化需求,比如特定的隱私設置。這就需要在不同人之間做模型的適配。
- 特定應用(如冷啟動)的需求。
3. 遷移學習的基本問題有哪些?
基本問題主要有3個:
- How to transfer: 如何進行遷移學習?(設計遷移方法)
- What to transfer: 給定一個目標領域,如何找到相對應的源領域,然后進行遷移?(源領域選擇)
- When to transfer: 什么時候可以進行遷移,什么時候不可以?(避免負遷移)
4. 遷移學習有哪些常用概念?
-
基本定義
- 域(Domain):數據特征和特征分布組成,是學習的主體
- 源域 (Source domain):已有知識的域
- 目標域 (Target domain):要進行學習的域
- 任務 (Task):由目標函數和學習結果組成,是學習的結果
- 域(Domain):數據特征和特征分布組成,是學習的主體
-
按特征空間分類
- 同構遷移學習(Homogeneous TL): 源域和目標域的特征空間相同,\(D_s=D_t\)
- 異構遷移學習(Heterogeneous TL):源域和目標域的特征空間不同,\(D_s\ne D_t\)
-
按遷移情景分類
- 歸納式遷移學習(Inductive TL):源域和目標域的學習任務不同
- 直推式遷移學習(Transductive TL):源域和目標域不同,學習任務相同
- 無監督遷移學習(Unsupervised TL):源域和目標域均沒有標簽
-
按遷移方法分類
-
基於樣本的遷移 (Instance based TL):通過權重重用源域和目標域的樣例進行遷移
基於樣本的遷移學習方法 (Instance based Transfer Learning) 根據一定的權重生成規則,對數據樣本進行重用,來進行遷移學習。下圖形象地表示了基於樣本遷移方法的思想源域中存在不同種類的動物,如狗、鳥、貓等,目標域只有狗這一種類別。在遷移時,為了最大限度地和目標域相似,我們可以人為地提高源域中屬於狗這個類別的樣本權重。
-
基於特征的遷移 (Feature based TL):將源域和目標域的特征變換到相同空間
基於特征的遷移方法 (Feature based Transfer Learning) 是指將通過特征變換的方式互相遷移,來減少源域和目標域之間的差距;或者將源域和目標域的數據特征變換到統一特征空間中,然后利用傳統的機器學習方法進行分類識別。根據特征的同構和異構性,又可以分為同構和異構遷移學習。下圖很形象地表示了兩種基於特 征的遷移學習方法。
-
基於模型的遷移 (Parameter based TL):利用源域和目標域的參數共享模型
基於模型的遷移方法 (Parameter/Model based Transfer Learning) 是指從源域和目標域中找到他們之間共享的參數信息,以實現遷移的方法。這種遷移方式要求的假設條件是: 源域中的數據與目標域中的數據可以共享一些模型的參數。下圖形象地表示了基於模型的遷移學習方法的基本思想。
-
基於關系的遷移 (Relation based TL):利用源域中的邏輯網絡關系進行遷移
基於關系的遷移學習方法 (Relation Based Transfer Learning) 與上述三種方法具有截然不同的思路。這種方法比較關注源域和目標域的樣本之間的關系。下圖形象地表示了不 同領域之間相似的關系。
-
5. 遷移學習與傳統機器學習有什么區別?
遷移學習 | 傳統機器學習 | |
---|---|---|
數據分布 | 訓練和測試數據不需要同分布 | 訓練和測試數據同分布 |
數據標簽 | 不需要足夠的數據標注 | 足夠的數據標注 |
建模 | 可以重用之前的模型 | 每個任務分別建模 |
6. 遷移學習的核心及度量准則?
遷移學習的總體思路可以概括為:開發算法來最大限度地利用有標注的領域的知識,來輔助目標領域的知識獲取和學習。
遷移學習的核心是:找到源領域和目標領域之間的相似性,並加以合理利用。這種相似性非常普遍。比如,不同人的身體構造是相似的;自行車和摩托車的騎行方式是相似的;國際象棋和中國象棋是相似的;羽毛球和網球的打球方式是相似的。這種相似性也可以理解為不變量。以不變應萬變,才能立於不敗之地。
有了這種相似性后,下一步工作就是, 如何度量和利用這種相似性。度量工作的目標有兩點:一是很好地度量兩個領域的相似性,不僅定性地告訴我們它們是否相似,更定量地給出相似程度。二是以度量為准則,通過我們所要采用的學習手段,增大兩個領域之間的相似性,從而完成遷移學習。
一句話總結: 相似性是核心,度量准則是重要手段。
7. 遷移學習與其他概念的區別?
- 遷移學習與多任務學習關系:
- 多任務學習:多個相關任務一起協同學習;
- 遷移學習:強調信息復用,從一個領域(domain)遷移到另一個領域。
- 遷移學習與領域自適應:領域自適應:使兩個特征分布不一致的domain一致。
- 遷移學習與協方差漂移:協方差漂移:數據的條件概率分布發生變化。
8. 什么情況下可以使用遷移學習?
遷移學習最有用的場合是,如果你嘗試優化任務B的性能,通常這個任務數據相對較少。 例如,在放射科中你知道很難收集很多射線掃描圖來搭建一個性能良好的放射科診斷系統,所以在這種情況下,你可能會找一個相關但不同的任務,如圖像識別,其中你可能用 1 百萬張圖片訓練過了,並從中學到很多低層次特征,所以那也許能幫助網絡在任務在放射科任務上做得更好,盡管任務沒有這么多數據。
假如兩個領域之間的區別特別的大,不可以直接采用遷移學習,因為在這種情況下效果不是很好。在這種情況下,推薦以上的方法,在兩個相似度很低的domain之間一步步遷移過去(踩着石頭過河)。
9. 什么是finetune?
度網絡的finetune也許是最簡單的深度網絡遷移方法。Finetune,也叫微調、fine-tuning, 是深度學習中的一個重要概念。簡而言之,finetune就是利用別人己經訓練好的網絡,針對自己的任務再進行調整。從這個意思上看,我們不難理解finetune是遷移學習的一部分。
為什么需要已經訓練好的網絡?
在實際的應用中,我們通常不會針對一個新任務,就去從頭開始訓練一個神經網絡。這樣的操作顯然是非常耗時的。尤其是,我們的訓練數據不可能像ImageNet那么大,可以訓練出泛化能力足夠強的深度神經網絡。即使有如此之多的訓練數據,我們從頭開始訓練,其代價也是不可承受的。
為什么需要 finetune?
因為別人訓練好的模型,可能並不是完全適用於我們自己的任務。可能別人的訓練數據和我們的數據之間不服從同一個分布;可能別人的網絡能做比我們的任務更多的事情;可能別人的網絡比較復雜,我們的任務比較簡單。
10. 什么是深度網絡自適應?
深度網絡的 finetune 可以幫助我們節省訓練時間,提高學習精度。但是 finetune 有它的先天不足:它無法處理訓練數據和測試數據分布不同的情況。而這一現象在實際應用中比比皆是。因為 finetune 的基本假設也是訓練數據和測試數據服從相同的數據分布。這在遷移學習中也是不成立的。因此,我們需要更進一步,針對深度網絡開發出更好的方法使之更好地完成遷移學習任務。
以我們之前介紹過的數據分布自適應方法為參考,許多深度學習方法都開發出了自適應層(AdaptationLayer)來完成源域和目標域數據的自適應。自適應能夠使得源域和目標域的數據分布更加接近,從而使得網絡的效果更好。
11. GAN在遷移學習中的應用
生成對抗網絡 GAN(Generative Adversarial Nets) 受到自博弈論中的二人零和博弈 (two-player game) 思想的啟發而提出。它一共包括兩個部分:
- 一部分為生成網絡(Generative Network),此部分負責生成盡可能地以假亂真的樣本,這部分被成為生成器(Generator);
- 另一部分為判別網絡(Discriminative Network), 此部分負責判斷樣本是真實的,還是由生成器生成的,這部分被成為判別器(Discriminator) 生成器和判別器的互相博弈,就完成了對抗訓練。
GAN 的目標很明確:生成訓練樣本。這似乎與遷移學習的大目標有些許出入。然而,由於在遷移學習中,天然地存在一個源領域,一個目標領域,因此,我們可以免去生成樣本的過程,而直接將其中一個領域的數據 (通常是目標域) 當作是生成的樣本。此時,生成器的職能發生變化,不再生成新樣本,而是扮演了特征提取的功能:不斷學習領域數據的特征使得判別器無法對兩個領域進行分辨。這樣,原來的生成器也可以稱為特征提取器 (Feature Extractor)。
12. 代碼實現
數據集下載:
13. 參考文獻
[https://github.com/scutan90/DeepLearning-500-questions/tree/master/ch11_%E8%BF%81%E7%A7%BB%E5%AD%A6%E4%B9%A0](https://github.com/scutan90/DeepLearning-500-questions/tree/master/ch11_%E8%BF%81%E7%A7%BB%E5%AD%A6%E4%B9%A0)
作者:@mantchs