深度學習(十二) 遷移學習


介紹

1.什么時候需要進行遷移學習

  目前大多數機器學習算法均是假設訓練數據以及測試數據的特征分布相同。然而這在現實世界中卻時常不可行。例如我們我們要對一個任務進行分類,但是此任務中數據不充足(在遷移學習中也被稱為目標域),然而卻有大量的相關的訓練數據(在遷移學習中也被稱為源域),但是此訓練數據與所需進行的分類任務中的測試數據特征分布不同(例如語音情感識別中,一種語言的語音數據充足,然而所需進行分類任務的情感數據卻極度缺乏),在這種情況下如果可以采用合適的遷移學習方法則可以大大提高樣本不充足任務的分類識別結果。也即是大家通常所說的將知識遷移到新環境中的能力,這通常被稱為遷移學習。

  具體的示例:

  • 例如在評價用於對某一品牌的情感分類任務中(假如用戶對任一品牌的評價有positive和negative兩類),在分類任務之前首先要通過收集大量的用戶評價,對其進行標注,然后進行模型的訓練。然而現實生活中品牌眾多,不同的人也會有不同的語言表達自己的情緒,我們無法收集到非常全面的用戶評價的數據,因此當我們直接通過之前訓練好的模型進行情感識別時,效果必然會受到影響。如果想要在測試數據上有好的分類效果,最直接的方式是收集大量與測試數據分布相似的數據,但是這樣的開銷非常大。因此這個時候通過遷移學習可以節省大量的時間和精力,並且通過合適的方法也可以得到較好的識別結果。
  • 小數據的問題。比方說新開一個網店,賣一種新的糕點,沒有任何的數據,就無法建立模型對用戶進行推薦。但用戶買一個東西會反映到用戶可能還會買另外一個東西,所以如果知道用戶在另外一個領域,比方說賣飲料,已經有了很多很多的數據,利用這些數據建一個模型,結合用戶買飲料的習慣和買糕點的習慣的關聯,就可以把飲料的推薦模型給成功地遷移到糕點的領域,這樣,在數據不多的情況下可以成功推薦一些用戶可能喜歡的糕點。這個例子就說明,有兩個領域,一個領域已經有很多的數據,能成功地建一個模型,有一個領域數據不多,但是和前面那個領域是關聯的,就可以把那個模型給遷移過來。
  • 個性化的問題。比如每個人都希望自己的手機能夠記住一些習慣,這樣不用每次都去設定它,怎么才能讓手機記住這一點呢?其實可以通過遷移學習把一個通用的用戶使用手機的模型遷移到個性化的數據上面。

 

2.遷移學習的歷史

  多任務學習和遷移學習相似,但是不同是多任務學習是對目標域和源域進行共同學習,而遷移學習主要是對通過對源域的學習解決目標域的識別任務。

  下圖展示了傳統的機器學習方法與遷移學習的區別:

 

3.遷移什么

  在一些學習任務中有一些特征是個體所特有的,這些特征不可以遷移。而有些特征是在所有的個體中具有貢獻的,這些可以進行遷移。

4.什么時候遷移

  有些時候如果遷移的不合適則會導致負遷移,例如當源域和目標域的任務毫不相關時有可能會導致負遷移。

5.遷移學習主要思想

  對於源域和目標域,它們具有一部分相同分布的特征,目標域的數據集小於源域的數據集,舉個例子:我們利用CNN對源域進行訓練,使用了卷積層和全連接層,我們把卷積層拿來進行復用(這里只是做假設,具體情況尚待驗證),將源域訓練好的卷積層拿來復用到目標域的卷積層,目標域只需訓練全連接層即可,達到了遷移的目的。

例子

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

假設現在可以得到的數據規模只有72條,其中62條沒有經過預先的傾向性標記,用來預訓練。8條經過了預先的傾向性標記,用來訓練模型。2條也經過了預先的傾向性標記,用來測試模型。

由於我們只有8條經過預先標記的訓練數據,如果直接以這樣的數據量對模型展開訓練,無疑最終的測試准確率將非常低。(因為判斷結果只有正面和負面兩種,因此可以預見最終的測試准確率可能只有50%)

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

 

步驟1

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

步驟2

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

步驟3

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

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

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

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


免責聲明!

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



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