遷移學習簡介


目錄

一、    什么是遷移學習    1

二、    遷移學習的重要性    3

三、    遷移學習的難點    5

四、    遷移學習的實現方法    6

1.    樣本遷移(Instance-based Transfer Learning    6

2.    特征遷移(Feature-based Transfer Learning    7

3.    模型遷移(Model-based Transfer Learning    7

4.    關系遷移(Relational Transfer Learning    8

五、    一個遷移學習的具體實現樣例    8

1.    步驟1    9

2.    步驟2    9

3.    步驟3    10

六、    NanoNets工具    11

七、    遷移學習的進展    12

1.    結構和內容分離    12

2.    多層次的特征學習    12

3.    從一步到位的遷移學習到多步、傳遞式的遷移學習    13

4.    學習如何遷移    14

5.    遷移學習作為元學習    14

6.    數據生成式遷移學習    15

 

機器學習的明天----遷移學習

上個月,柯潔大戰AlphaGo落下帷幕,19歲的男孩少有地在比賽中落淚,賽后他為我們留下一句話,柯潔說"AlphaGo"看上去像神一樣的存在,好像他是無懈可擊的···

的確,DeepMind創造的AlphaGo讓人為之贊嘆,讓柯潔為之瘋狂。而背后,從機器學習的角度,充分證明了深度強化學習和大數據的重要意義。DeepMind就是將深度學習應用到強化學習的范例,DeepMind把端到端的深度學習應用在強化學習上,使強化學習能夠應付大數據,因此可以在圍棋上把人類完全擊倒,它做到這樣是通過完全的自學習、自優化,然后一直迭代。

頂級棋手柯潔03敗給了AlphaGo,但是從科學的角度看AlphaGo到底有沒有弱點呢?答案是肯定有的,AlphaGo不僅有弱點,而且還很嚴重,這個弱點就是它沒有"遷移學習"的能力,而遷移學習是我們人類智慧的一種特質。接下來本文將重點介紹遷移學習的由來、思想、分類和主要應用。

  1. 什么是遷移學習

    在機器學習的傳統監督學習情況下,如果我們准備為某個任務/領域 A 來訓練模型,獲取任務/領域 A 里標記過的數據,會是前提。下圖把這表現的很清楚:model A 的訓練、測試數據的任務/領域是一致的。

    可以預期,我們在該數據集上訓練的模型 A,在相同任務/領域的新數據上也能有良好表現。另一方面,對於給定任務/領域 B,我們需要這個領域的標記數據,來訓練模型 B,然后才能在該任務/領域取得不錯的效果。

    但傳統的監督學習方法也會失靈——在缺乏某任務/領域標記數據的情況下,它往往無法得出一個可靠的模型。舉個例子,如果我們想要訓練出一個模型,對夜間的行人圖像進行監測,我們可以應用一個相近領域的訓練模型——白天的行人監測。理論上這是可行的。但實際上,模型的表現效果經常會大幅惡化,甚至崩潰。這很容易理解,模型從白天訓練數據獲取了一些偏差,不知道怎么泛化到新場景。

    如果我們想要執行全新的任務,比如監測自行車騎手,重復使用原先的模型是行不通的。這里有一個很關鍵的原因:不同任務的數據標簽不同。但有了遷移學習,我們能夠在一定程度上解決這個問題,並充分利用相近任務/領域的現有數據。遷移學習試圖把處理源任務獲取的知識,應用於新的目標難題。

    實踐中,我們會試圖把源場景盡可能多的知識,遷移到目標任務或者場景。這里的知識可以有許多種表現形式,而這取決於數據:它可以是關於物體的組成部分,以更輕易地找出反常物體;它也可以是人們表達意見的普通詞語。

  2. 遷移學習的重要性

    在去年的 NIPS 2016 講座上,吳恩達表示:"在監督學習之后,遷移學習將引領下一波機器學習技術商業化浪潮。"

    有一點是毋庸置疑的:迄今為止,機器學習在業界的應用和成功,主要由監督學習推動:最新的殘差網絡(residual networks)已經能在 ImageNet 上取得超人類的水平;谷歌 Smart Reply 能自動處理 10% 的手機回復;語音識別錯誤率一直在降低,精確率已超過打字員;機器對皮膚癌的識別率以達到皮膚科醫生的水平;谷歌 NMT 系統已經應用於谷歌翻譯的產品端;百度 DeepVoice 已實現實時語音生成……這個列表可以搞得很長。我要表達的意思是:這個水平的成熟度,已經讓面向數百萬用戶的大規模模型部署變得可能。

    但在另一方面,這些成功的模型對數據極度飢渴,需要海量標記數據來達到這樣的效果。在某些任務領域,這樣的數據資源是存在的——背后是多年的艱辛數據收集。而在個別情況下,數據是公共的,比如 ImageNet。但是大量的標記數據一般是專有的、有知識產權,亦或是收集起來極度昂貴,比如醫療、語音、MT 數據集。

    同時,當機器學習模型被應用於現實情形,它會遇到無數的、此前未遭遇過的情況;也不知道該如何應付。每個客戶、用戶都有他們的偏好,會產生異於訓練集的數據。模型需要處理許多與此前訓練的任務目標相近、但不完全一樣的任務。當今的尖端模型雖然在訓練過的任務上有相當於人類或超人類的能力,但在這些情況下,性能會大打折扣甚至完全崩潰

    近年來,這一波公眾對人工智能技術的關注、投資收購浪潮、機器學習在日常生活中的商業應用,主要是由監督學習來引領。如果我們忽略"AI 冬天"的說法,相信吳恩達的預測,機器學習的這一波商業化浪潮應該會繼續。相比無監督學習和強化學系,遷移學習目前的曝光程度不高,但越來越多的人正把目光投向它。

     

    遷移學習的智慧體現在什么方面呢?

     

    首先,機器的一個能力是在大數據里學習,所以數據的質量是非常重要的。因此今年AlphaGo的訓練數據與去年和李世石下棋時候的數據就做了改變,去年還用了很多人類大事們下棋的數據,但近年更多地用了AlphaGo自我對弈的數據,使得數據質量大幅提高,也就讓機器學習的效果大為提高。但是,你能不能把在19x19的棋盤學到的知識再推廣到21x21的棋盤里呢?你在學會下圍棋之后,你能不能去下象棋,能不能把它運用在生活的方方面面,如商業活動、人際交往、指揮機器人的行動中呢?很顯然,目前的機器是沒有這個能力的,而遷移學習正式針對於此產生的

    今天的深度學習算法仍然欠缺的,是在新情況(不同於訓練集的情況)上的泛化能力。而把別處學得的知識,遷移到新場景的能力,就是遷移學習

    在人類進化中,遷移學習這種能力是非常重要的。比如說,人類在學會騎自行車后,再騎摩托車就很容易了,人類在學會打羽毛球后再學習打網球也會容易很多。我們看一兩張照片就可以把它拓展到許多其他不同的景象;我們有了知識,把這個知識再推廣到其他知識中,簡言之,就是我們能把過去的經驗帶到不同的新的場景中去,這樣就有了一種適應的能力。

    那么我們怎樣才能讓機器也有這種能力呢?最關鍵的就是發現共性,發現兩個領域之間的共性。一旦發現了這種關鍵的共性,遷移就非常容易。我們在機器學習中稱其為特征,即發現這種共同的特征。比如在國內和國外開車為例,國內司機是坐在車的左邊,而國外司機是做在右邊,我們在國內學會開車后如何能夠盡快地學會在國外開車而不出事呢?這里就有一個共性——司機的座位總是靠近路中間的,發現了這個竅門,遷移就容易多了。

    下面我們來討論一下,為何要研究遷移學習以及什么樣的遷移學習才是我們的目的。

    首先,我們在生活中遇到的更多的是小數據。家里的小朋友看一張貓的照片,那么當他在看到一只真貓,就會說這是貓。我們不用給他一千萬個正樣本、一千萬個負樣本,他就能有這種能力,人是自然就有這種能力的。因此小數據上如何實現遷移?這才是真正的智能。

    其次是可靠性。我們制造一個系統,希望它不僅是在原來那個領域能夠發揮作用,在周邊領域也能發揮作用。當我們把周邊的環境稍微改一改的時候,這個系統還是可以一樣的好,這個就是可靠性。我們可以舉一反三、融會貫通,這是我們賦予智慧的一種定義。

    第三個好處就是個性化。我們現在越來越多地強調個性化。我們在手機上看新聞、看視頻、購物,手機為我們提供個性化的提醒,以后家里有了機器人,這些都是要為我們個人提供服務的,而且這個服務越個性化越好。

  3. 遷移學習的難點

    說了這些之后,你可能要問為什么遷移學習今天還沒有大規模地推廣?這主要是因為遷移學習本身還是非常非常困難的?如圖所示,這里涉及教育學的東西——Learning Transfer

    教育學里,如何把知識遷移到不同的場景,也是非常重要的。在教育學,這個理念已經有上百年的歷史。比如我們衡量一個老師的好壞,我們往往可以不通過學生的期末考試,因為那只是靠特定的知識,學生有時候死記硬背也可以通過考試。一個更好的方法,是觀察這個學生在上完這門課之后的表現,他有多大的能力能夠把這門課的知識遷移到其他的課程里去。那個時候我們再回來說,這個老師的教學是好是壞,這個叫學習遷移。所以,再教育學里大家就在問,為什么學習遷移是如此的難?這個難點就在於如何發現共同點。

    再回到剛才開車的例子,有多少人經歷過從左邊開車到右邊開車這種苦惱的事情?對於我們人類來說,發現這種共性也是很困難的。好在遷移學習這個領域已經有了十多年的努力的結果。

  4. 遷移學習的實現方法
    1. 樣本遷移(Instance-based Transfer Learning

    樣本遷移即在數據集(源領域)中找到與目標領域相似的數據,把這個數據放大多倍,與目標領域的數據進行匹配。其特點是:需要對不同例子加權;需要用數據進行訓練。一般就是對樣本進行加權,給比較重要的樣本較大的權重

    原本源領域是鳥、牛、狗,目標領域為狗。我們發現源領域中的狗與目標領域有更多的相似數據,所以我們放大源領域中的狗為3張圖片。

    1. 特征遷移(Feature-based Transfer Learning

      特征遷移是通過觀察源領域圖像與目標域圖像之間的共同特征,然后利用觀察所得的共同特征在不同層級的特征間進行自動遷移。在特征空間進行遷移,一般需要把源領域和目標領域的特征投影到同一個特征空間里進行。

    2. 模型遷移(Model-based Transfer Learning

      模型遷移利用上千萬的圖象訓練一個圖象識別的系統,當我們遇到一個新的圖象領域,就不用再去找幾千萬個圖象來訓練了,可以原來的圖像識別系統遷移到新的領域,所以在新的領域只用幾萬張圖片同樣能夠獲取相同的效果。模型遷移的一個好處是我們可以區分,就是可以和深度學習結合起來,我們可以區分不同層次可遷移的度,相似度比較高的那些層次他們被遷移的可能性就大一些。

    3. 關系遷移(Relational Transfer Learning

      如社會網絡,社交網絡之間的遷移。

  5. 一個遷移學習的具體實現樣例

    在本例中,我們需要用深度學習技術對電影短評進行文本傾向性分析,例如"It was greatloved it."表示積極正面的評論,"It was really stupid."表示消極負面的評論。

    假設現在可以得到的數據規模只有72條,其中62條沒有經過預先的傾向性標記,用來預訓練。8條經過了預先的傾向性標記,用來訓練模型。2條也經過了預先的傾向性標記,用來測試模型。由於我們只有8條經過預先標記的訓練數據,如果直接以這樣的數據量對模型展開訓練,無疑最終的測試准確率將非常低。(因為判斷結果只有正面和負面兩種,因此可以預見最終的測試准確率可能只有50%

    為了解決這個難題,我們引入遷移學習。即首先用62條未經標記的數據對模型展開通用的情感判斷,然后在這一預訓練的基礎上對本例的特定問題展開分析,復用預訓練模型中的部分層次,就可以將最終的測試准確率提升到100%。下面將從3個步驟展開分析。

    1. 步驟1

      創建預訓練模型來分析詞與詞之間的關系。這里我們通過分析未標記語句中的某一詞匯,嘗試預測出現在同一句子中的其他詞匯。

       

    2. 步驟2

      對模型展開訓練,使得出現在類似上下文中的詞匯獲得類似的向量表示。在這一步驟中,62條待處理語句首先會被刪除停用詞,並被標記解釋。之后,針對每個詞匯,系統會嘗試減小其向量表示與相關詞匯的差別,並增加其與不相關詞匯的差別。

    3. 步驟3

      預測一個句子的文本傾向性。由於在此前的預訓練模型中我們已經得到了針對所有詞匯的向量表示,並且這些向量具有用數字表征的每個詞匯的上下文屬性,這將使得文本的傾向性分析變得更易於實現。

       

      需要注意的是,這里並非直接使用10個已經被預先標記的句子,而是先將句子的向量設置為其所有詞匯的平均值(在實際任務中,我們將使用類似時間遞歸神經網絡LSTM的相關原理)。這樣,經過平均化處理的句子向量將作為輸入數據導入模型,而句子的正面或負面判定將作為結果輸出。需要特別強調的是,這里我們在預訓練模型和10個被預先標記的句子之間加入了一個隱藏層(hidden layer),用來適配文本傾向性分析這一特定場景。正如你所看到的,這里只用10個標記量就實現了100%的預測准確率。

      當然,必須指出的是,這里展示的只是一個非常簡單的模型示意,而且測試用例只有2條。但不可否認的一點是,由於遷移學習的引入,確實使得本例中的文本傾向性預測准確率從50%提升到了100%

      本例的完整代碼詳見如下鏈接:https://gist.github.com/prats226/9fffe8ba08e378e3d027610921c51a78

  6. NanoNets工具

NanoNets是一個簡單方便的基於雲端實現的遷移學習工具,其內部包含了一組已經實現好的預訓練模型,每個模型有數百萬個訓練好的參數。用戶可以自己上傳或通過網絡搜索得到數據,NanoNets將自動根據待解問題選擇最佳的預訓練模型,並根據該模型建立一個NanoNets(納米網絡),並將之適配到用戶的數據。NanoNets和預訓練模型之間的關系結構如下所示。

以藍黑條紋還是白金條紋的連衣裙為例,用戶只需要選擇待分類的名稱,然后自己上傳或者網絡搜索訓練數據,之后NanoNets就會自動適配預訓練模型,並生成用於測試的web頁面和用於進一步開發的API接口。如下所示,圖中為系統根據一張連衣裙圖片給出的分析結果。

具體使用方法詳見NanoNets官網

  1. 遷移學習的進展
    1. 結構和內容分離

    如果我們面臨一個機器學習問題,並想要發現不同問題之間的共性,那么我們可以把問題的結構和問題的內容剝離開。雖然這樣的分離並不容易,但是一旦能夠完成,那么系統舉一反三的能力就非常強了。舉個例子,大家可能認為寫電影劇本是一個非常需要藝術,非常需要天才的工作。但是大家可能不知道,寫電影劇本也可以變得像工廠一樣。劇作家的訣竅就是把內容和結構剝離開,他們知道電影頭 10 分鍾該演什么,后 5 分鍾又該演什么,在什么時候應該催人淚下,在什么時候讓大家捧腹大笑,這些都是有結構的。

怎樣讓機器學習也具有這個能力呢?上圖的左邊是 2005 年《Science》的一篇文章,該論文在手寫識別上把結構和手寫的方式區分開,並發現了在學習結構的這一方面用一個例子就可以了,所以這也就是單個例學習。

右邊是一項關於文本結構的研究,在大規模的文本上,如果我們能夠把文本的結構和具體的內容用一個深度學習網絡給區分開的話,那么學到結構這一部分的系統就很容易遷移到自然語言系統並處理不同的任務。比如說主題識別、自動文本摘要、自動寫稿機器人等,這一部分真的比較有前景

  1. 多層次的特征學習

過去我們在學習方面太注重發現共性本身,但是卻沒有注意在不同層次之間發現共性。現在發現,如果我們把問題分到不同層次,有些層次就更容易幫助我們進行機器學習的遷移。

如上圖圖像識別任務中,如果我們在一個領域已經用了上千萬的數據訓練好了一個八層的深度學習模型,但現在如果我們改變了該分類任務的類別,那么傳統的機器學習就必須重新進行訓練。但是現在用了這種層次型的遷移學習,我們會發現,不同的層次具有不同的遷移能力,這樣對於不同的層次的遷移能力就有了一個定量的估計。所以,當我們需要處理新任務時,就可以把某些區域或某些層次給固定住,把其他的區域用小數據來做訓練,這樣就能夠達到遷移學習的效果。

在語音任務當中,假設我們已經訓練出一個播音員的語音模型,那么我們如果把它遷移到一種帶口音的語音中呢?我們其實也可以用這種層次化的遷移,因為如果我們發現一些共性的、內在的層次是語音共同的模式,那么我們就可以把它遷移過來,再使用小數據就能訓練方言了。

同時如上圖所示,我們對於結構也可以像工程師一樣,進行各種各樣的變換,比如說我們可以在圖像、文字之間發現他們語義的共性。同時如果我們可以用一個多模態的深度學習網絡把內部語義學出來,這樣就可以在文字和圖像之間自由的遷移。所以這種多層的遷移,確實帶來很多的便利。

  1. 從一步到位的遷移學習到多步、傳遞式的遷移學習

過去的遷移學習,往往是我也有一個領域已經做好了模型,而目標是把它遷移到一個新的領域。這種從舊領域遷移到新領域,從一個多數據的領域遷移到少數據的領域,這種稱之為單步遷移。但是我們現在發現,很多場景是需要我們分階段進行的,這就像過河,需要踩一些石頭一步步過去。

采用這個思想,我們也可以進行多步傳導式的遷移。比如說我們可以構建一個深度網絡,而這個網絡的中間層就既能照顧目標這個問題領域,又能照顧原來的領域。同時如果我們有一些中間領域,那么其可以把原領域和目標領域一步步的銜接起來,A BB CC D。這樣我們就可以定義兩個目標函數,左下角目標函數的任務就是分類,並且分類分得越准越好,右下角第二個目標函數需要區分在中間領域到底抽取哪些樣本和特征,使得其對最后的優化函數是有用的。當這兩個目標函數一同工作時,一個優化了最后的目標,而另一個則選擇了樣本。如此迭代,逐漸就如同右邊那個圖一樣,原領域的數據就從多步遷移到目標領域去了。

最近斯坦福大學有一個實際的例子,他們利用這種多步遷移方法,並通過衛星圖像來分析非洲大陸的貧窮狀況。從白天到晚上的衛星圖像是第一步遷移,從晚上的圖像、燈光到這個地方發達程度是第二步遷移。因此我們通過這兩步的遷移成功地建立了一個模型,即通過衛星圖像分析地方的貧困狀況。

  1. 學習如何遷移

20 年當中我們積累了大量的知識,並且有很多種遷移學習的算法,但現在我們常常遇到一個新的機器學習問題卻不知道到底該用哪個算法。其實,既然有了這么多的算法和文章,那么我們可以把這些經驗總結起來訓練一個新的算法。而這個算法的老師就是所有這些機器學習算法、文章、經歷和數據。所以,這種學習如何遷移,就好像我們常說的學習如何學習,這個才是學習的最高境界,也就是學習方法的獲取。

有人就在做這樣的研究,最后學出的效果就是在給定任何一個遷移學習問題,系統可以自動在過去所有我們嘗試過的算法里面,利用經驗找到最合適的算法,其可以是基於特征的、基於多層網絡的、基於樣本的或者是基於某種混合。

  1. 遷移學習作為元學習

第五個進展,把遷移學習本身作為一個元學習(Meta Learning)的方法,賦予到不同學習的方式上。假設以前我們有一個機器學習的問題或者是模型,現在你只要在上面套一個遷移學習的罩子,它就可以變成一個遷移學習的模型了。這種套一個罩子的辦法怎樣才能夠實現呢?現在就在強化學習和深度學習上做這樣的實驗,假設你已經有一個深度學習模型和一個強化學習模型,那么我們在上面做一個「外套」,能夠把它成功變成一個遷移學習模型。

舉個例子,假設存在個性化的人機對話系統,而我們做了一個任務型的對話系統,它是可以幫助我們做通用型的對話。但是如何能夠把這個系統變成一個個人的、個性化的系統呢?我們既用深度學習、RNN,又用強化學習和所謂的 POMDP 來做了一個通用型的任務學習系統。現在我們就可以通過幾個個性化的例子而得到個性化的選擇。

  1. 數據生成式遷移學習

下面進入到最后一個進展,即數據生成式的遷移學習。我們最近聽到比較多的是生成式對抗網絡,這個詞聽起來有點復雜,但是這個圖就是最好的解釋。對於生成式對抗網絡來說,圖靈測試外面的裁判是學生,里面的那個機器也是學生,他們兩個人的目的是在對抗中共同成長,在問問題當中,假設提問者發現一個是機器了,那么就告訴機器你還不夠真,還需要提高自己。而如果機器發現它把人騙過了,那么它可以去告訴外面這個裁判,它還不夠精明,還需要提高自己。這樣兩方不斷互相刺激,形成一種對抗,這個是一種共同學習的特點。

所以,這種生成式對抗網絡的一個特點,通過小數據可以生成很多模擬數據,通過模擬數據又來判定它是真的還是假的,用以刺激生成式模型的成長。這個就好象是計算機和人之間的博弈,下圖左邊展示的是一棵博弈樹。

我們可以用這個方法來做遷移學習,這里舉的一個例子是最近的一項工作,我們用判別式模型來區分數字到底是來自於源數據還是目標數據。我們讓生成式模型不斷模擬新的領域,使得到最后我們能夠產生出一大堆新數據,它的數據就是和真實的數據非常的一致。通過這個辦法,一個判別器區分領域,另外一個生成器在生成數據,我們就可以通過小數據產生更多的數據,在新的領域就可以實現遷移學習的目的。

 

最后我要說,我們在深度學習上已經有了很大的成就,我們今天也在努力進行各種強化學習的嘗試(比如說 AlphaGo),但是我認為機器學習的明天是在小數據、個性化、可靠性上面,那就是遷移學習,這是我們的明天。

 

本文學習自https://blog.csdn.net/sinat_27554409/article/details/72848267,如有冒犯,請留言告知我刪帖!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM