深度學習-遷移學習筆記

1.什麼是遷移學習算法

  遷移學習(Transfer Learning)是一種機器學習方法,就是把爲任務 A 開發的模型做爲初始點,從新使用在爲任務 B 開發模型的過程當中。遷移學習是經過從已學習的相關任務中轉移知識來改進學習的新任務,雖然大多數機器學習算法都是爲了解決單個任務而設計的,可是促進遷移學習的算法的開發是機器學習社區持續關注的話題。找到目標問題的類似性,遷移學習任務就是從類似性出發,將舊領域(domain)學習過的模型應用在新領域上。數據庫

2.爲何須要遷移學習網絡

  使用深度學習技術解決問題的過程當中,最多見的障礙在於,由於模型有大量的參數須要訓練,所以須要海量訓練數據做支撐。雖然有大量的數據,但每每都是沒有標註的,沒法訓練機器學習模型。人工進行數據標定太耗時。dom

  在面對某一領域的具體問題時,一般可能沒法獲得構建模型所需規模的數據。普通人沒法擁有龐大的數據量與計算資源。所以須要藉助於模型的遷移。機器學習

  藉助遷移學習,在一個模型訓練任務中針對某種類型數據得到的關係也能夠輕鬆地應用於同一領域的不一樣問題。函數

3.遷移學習的基本問題有哪些?性能

基本問題主要有3個:學習

  • How to transfer: 如何進行遷移學習?(設計遷移方法)
  • What to transfer: 給定一個目標領域,如何找到相對應的源領域,而後進行遷移?(源領域選擇)
  • When to transfer: 何時能夠進行遷移,何時不能夠?(避免負遷移)

4.遷移學習與傳統機器學習有什麼區別?測試

                         遷移學習                                 傳統機器學習優化

數據分佈      訓練和測試數據不須要同分布    訓練和測試數據同分布

數據標籤      不須要足夠的數據標註               足夠的數據標註

建模              能夠重用以前的模型                  每一個任務分別建模

5.遷移學習分類

先介紹一下一些詞的意義:

  域(Domain):數據特徵和特徵分佈組成,是學習的主體

    • 源域(source domain): 已有知識的域
    • 目標域(target domain): 要進行學習的域

  任務:由目標函數和學習結果組成,是學習的結果

  • 按特徵空間分類

    • 同構遷移學習(Homogeneous TL): 源域和目標域的特徵空間相同, Ds=Dt
    • 異構遷移學習(Heterogeneous TL):源域和目標域的特徵空間不一樣, Ds≠Dt
  • 按遷移情景分類

    • 概括式遷移學習(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) 與上述三種方法具備大相徑庭的思路。這種方法比較關注源域和目標域的樣本之間的關係。下圖形象地表示了不 同領域之間類似的關係。

       

6. 遷移學習的核心及度量準則?

  遷移學習的整體思路能夠歸納爲:開發算法來最大限度地利用有標註的領域的知識,來輔助目標領域的知識獲取和學習。

  遷移學習的核心是:找到源領域和目標領域之間的類似性,並加以合理利用。這種類似性很是廣泛。好比,不一樣人的身體構造是類似的;自行車和摩托車的騎行方式是類似的;國際象棋和中國象棋是類似的;羽毛球和網球的打球方式是類似的。這種類似性也能夠理解爲不變量。以不變應萬變,才能立於不敗之地。

  有了這種類似性後,下一步工做就是, 如何度量和利用這種類似性。度量工做的目標有兩點:一是很好地度量兩個領域的類似性,不只定性地告訴咱們它們是否類似,更定量地給出類似程度。二是以度量爲準則,經過咱們所要採用的學習手段,增大兩個領域之間的類似性,從而完成遷移學習。

  一句話總結: 類似性是核心,度量準則是重要手段。

7. 遷移學習與其餘概念的區別?

  1. 遷移學習與多任務學習關係:
    • 多任務學習:多個相關任務一塊兒協同窗習;
    • 遷移學習:強調信息複用,從一個領域(domain)遷移到另外一個領域。
  2. 遷移學習與領域自適應: 領域自適應:使兩個特徵分佈不一致的domain一致。
  3. 遷移學習與協方差漂移: 協方差漂移:數據的條件機率分佈發生變化。

8. 什麼狀況下可使用遷移學習?

  遷移學習 最有用的場合是,若是你嘗試優化任務B的性能,一般這個任務數據相對較少。 例如,在放射科中你知道很難收集不少射線掃描圖來搭建一個性能良好的放射科診斷系統,因此在這種狀況下,你可能會找一個相關但不一樣的任務,如圖像識別,其中你可能用 1 百萬張圖片訓練過了,並從中學到不少低層次特徵,因此那也許能幫助網絡在任務在放射科任務上作得更好,儘管任務沒有這麼多數據。

  假如兩個領域之間的區別特別的大, 不能夠直接採用遷移學習,由於在這種狀況下效果不是很好。在這種狀況下,推薦以上的方法,在兩個類似度很低的domain之間一步步遷移過去(踩着石頭過河)。

9. 什麼是finetune?

  度網絡的finetune也許是最簡單的深度網絡遷移方法。 Finetune,也叫微調、fine-tuning, 是深度學習中的一個重要概念。簡而言之,finetune就是利用別人己經訓練好的網絡,針對本身的任務再進行調整。從這個意思上看,咱們不難理解finetune是遷移學習的一部分。

爲何須要已經訓練好的網絡?

  在實際的應用中,咱們一般不會針對一個新任務,就去從頭開始訓練一個神經網絡。這樣的操做顯然是很是耗時的。尤爲是,咱們的訓練數據不可能像ImageNet那麼大,能夠訓練出泛化能力足夠強的深度神經網絡。即便有如此之多的訓練數據,咱們從頭開始訓練,其代價也是不可承受的。

爲何須要 finetune?

  由於別人訓練好的模型,可能並非徹底適用於咱們本身的任務。可能別人的訓練數據和咱們的數據之間不服從同一個分佈;可能別人的網絡能作比咱們的任務更多的事情;可能別人的網絡比較複雜,咱們的任務比較簡單。

什麼狀況下能夠fine-tune以及如何fine-tune?https://www.jianshu.com/p/445a49c09769

a. 新數據集比較小且和原數據集類似,由於新數據集比較小(好比<5000),若是fine-tune可能會過擬合;又由於新舊數據集相似,咱們指望他們高層特徵相似,可使用預訓練網絡看成特徵提取器,用提取的特徵訓練線性分類器。

  
b. 新數據集比較大且和原數據集相似(好比>10000),由於新數據集足夠大,能夠fine-tune微調整個網絡。

    

    
c.新數據集比較小且和原數據集不類似,新數據集比較小,最好不要fine-tune。和原數據集不相似,最好也不要使用高層特徵。這時,可使用前面的特徵來訓練分類器。
d.新數據集大且和原數據集不類似。由於新數據集足夠大,能夠從新訓練,可是在實踐中fine-tune預訓練模型仍是有益的。新數據集足夠大,能夠fine-tine整個網絡。
這邊須要注意的是:網絡的前幾層學到的是通用的特徵,後面幾層學到的是與類別相關的特徵。因此能夠凍結去下降成本。本質上fine-tune基本思路都是同樣的,就是解鎖少數卷積層繼續對模型進行訓練。

10. 什麼是深度網絡自適應?

  深度網絡的 finetune 能夠幫助咱們節省訓練時間,提升學習精度。可是 finetune 有它的先天不足:它沒法處理訓練數據和測試數據分佈不一樣的狀況。而這一現象在實際應用中比比皆是。由於 finetune 的基本假設也是訓練數據和測試數據服從相同的數據分佈。這在遷移學習中也是不成立的。所以,咱們須要更進一步,針對深度網絡開發出更好的方法使之更好地完成遷移學習任務。

  以咱們以前介紹過的數據分佈自適應方法爲參考,許多深度學習方法都開發出了自適應層(AdaptationLayer)來完成源域和目標域數據的自適應。自適應可以使得源域和目標域的數據分佈更加接近,從而使得網絡的效果更好。

11. GAN在遷移學習中的應用

  生成對抗網絡 GAN(Generative Adversarial Nets) 受到自博弈論中的二人零和博弈 (two-player game) 思想的啓發而提出。它一共包括兩個部分:

  • 一部分爲生成網絡(Generative Network),此部分負責生成儘量地以假亂真的樣本,這部分被稱爲生成器(Generator);
  • 另外一部分爲判別網絡(Discriminative Network), 此部分負責判斷樣本是真實的,仍是由生成器生成的,這部分被成爲判別器(Discriminator) 生成器和判別器的互相博弈,就完成了對抗訓練。
  • GAN 的目標很明確:生成訓練樣本。這彷佛與遷移學習的大目標有些許出入。然而,因爲在遷移學習中,自然地存在一個源領域,一個目標領域,所以,咱們能夠免去生成樣本的過程,而直接將其中一個領域的數據 (一般是目標域) 看成是生成的樣本。此時,生成器的職能發生變化,再也不生成新樣本,而是扮演了特徵提取的功能:不斷學習領域數據的特徵使得判別器沒法對兩個領域進行分辨。這樣,原來的生成器也能夠稱爲特徵提取器 (Feature Extractor)。而生成器經過屢次循環就能夠捕捉到源域與目標域共同的特徵信息。咱們也能夠稱之爲域對抗/Domain-­‐adversarial training,注意:原始數據有標籤,目標數據無標籤。

    

    

     

對於域對抗網絡能夠參見https://zhuanlan.zhihu.com/p/51499968,此文說的還算詳細,注意域分類器(domain classifier)中將源域與目標域混合在一塊兒,因此才能夠進行域對抗訓練,使得兩個域處在同一個空間的特徵分佈被抽象出來,域分類器就沒法區分所給的數據是屬於哪一個域了。

(以上參照http://blog.itpub.net/69942346/viewspace-2654034/

12.多任務學習(Multitask Learning)參照https://blog.csdn.net/catcatrun/article/details/75034476

  多任務學習(Multitask learning)定義:基於共享表示(shared representation),把多個相關的任務放在一塊兒學習的一種機器學習方法。

  

  多任務學習(Multitask Learning)是一種推導遷移學習方法,主任務(main tasks)使用相關任務(related tasks)的訓練信號(training signal)所擁有的領域相關信息(domain-specific information),作爲一直推導誤差(inductive bias)來提高主任務(main tasks)泛化效果(generalization performance)的一種機器學習方法。多任務學習涉及多個相關的任務同時並行學習,梯度同時反向傳播,多個任務經過底層的共享表示(shared representation)來互相幫助學習,提高泛化效果。

  簡單來講:多任務學習把多個相關的任務放在一塊兒學習(注意,必定要是相關的任務,後面會給出相關任務(related tasks)的定義,以及他們共享了那些信息),學習過程(training)中經過一個在淺層的共享(shared representation)表示來互相分享、互相補充學習到的領域相關的信息(domain information),互相促進學習,提高泛化的效果。

共享表示shared representation:

  共享表示的目的是爲了提升泛化(improving generalization),多任務學習最簡單的共享方式,多個任務在淺層共享參數。MTL中共享表示有兩種方式:

(1)基於參數的共享(Parameter based):好比基於神經網絡的MTL,高斯處理過程。

(2)基於約束的共享(regularization based):好比均值,聯合特徵(Joint feature)學習(建立一個常見的特徵集合)。

  爲何把多個相關的任務放在一塊兒學習,能夠提升學習的效果?關於這個問題,有不少解釋。這裏列出其中一部分,如下圖中由單隱含層神經網絡表示的單任務和多任務學習對比爲例。

(1) 多個相關任務放在一塊兒學習,有相關的部分,但也有不相關的部分。當學習一個任務(Main task)時,與該任務不相關的部分,在學習過程當中至關因而噪聲,所以,引入噪聲能夠提升學習的泛化(generalization)效果。

(2) 單任務學習時,梯度的反向傳播傾向於陷入局部極小值。多任務學習中不一樣任務的局部極小值處於不一樣的位置,經過相互做用,能夠幫助隱含層逃離局部極小值。

(3) 添加的任務能夠改變權值更新的動態特性,可能使網絡更適合多任務學習。好比,多任務並行學習,提高了淺層共享層(shared representation)學習速率的可能,較大的學習速率提高了學習效果。

(4) 多個任務在淺層共享表示,可能削弱了網絡的能力,下降網絡過擬合,提高了泛化效果。

  還有不少潛在的解釋,爲何多任務並行學習能夠提高學習效果(performance)。多任務學習有效,是由於它是創建在多個相關的,具備共享表示(shared representation)的任務基礎之上的,所以,須要定義一下,什麼樣的任務之間是相關的。

13.零樣本學習(Zero-­shot Learning)

   當咱們有大量的數據標籤庫且每一個標籤都有必定的特徵描述,假設咱們並沒看過「草泥馬」的樣子,可是咱們擁有一些關於它的體型特徵--四條腿、脖子的長度、耳朵的大小、全身絨毛等,有了這些特徵咱們就知道它是「草泥馬」。重點是沒有看過「草泥馬」長什麼樣子,若是忽然給計算機這樣一個沒有類似性的訓練過的模型,這時候咱們該如何經過遷移訓練進行學習呢?重點來了,咱們能夠經過學習大量的與「草泥馬」結構相近的動物的特徵,諸如四條腿、全身有毛、脖子、耳朵、等。咱們只關心四條腿、全身有毛、脖子、耳朵、等這些特徵,並訓練了大量參數,這時再進行對忽然給出的陌生的圖片進行--四條腿、全身有毛、脖子、耳朵、等特徵的學習,而後再到數據庫中找到與之相近的特徵對應的標籤就能夠了。這就是Zero-­shot Learning。簡單的說,就是我要學到與目標具備相同的特徵屬性,再去學習目標自己這些特徵屬性的獨特之處,再到數據庫進行比對。

    

    

相關文章
相關標籤/搜索