19.遷移學習

  National Taiwan University (NTU)李宏毅老師的《Machine Learning》的學習筆記,因此在全文對視頻出現的內容多次引用。初出茅廬,學藝不精,有不足之處還望大家不吝賜教。

  歡迎大家在評論區多多留言互動~~~~

0. 相關鏈接

  遷移學習發展至今天有了很大的進展,對其中比較經典的綜述進行了相關總結《A Survey on Transfer Learning》,裏面主要是關於遷移學習相關概念和方法的總結;當時深度學習孩還不是很流行,所以裏面關於深度學習的內容不多,之後遷移學習在深度學習和神經網絡中的應用博主也進行了相關的歸納,見《Learning and Transferring Mid-Level Image Representations using Convolutional Neural Networks》,還有《How transferable are features in deep neural networks?》,尚未進行整理。

  關於遷移學的相關基礎概念,如域(domain)、任務(task)已經在《A Survey on Transfer Learning》進行了相關總結,所以不會再進行計算。

1. 遷移學習的四種類型

  主要根據源域與目標域中的數據的標籤情況進行分類,具體如圖1


圖1. 按源域與目標域的的數據是否具有標籤對遷移學習進行分類

  其中需要注意的是,遷移學習的種類特別多,別稱也很多,所以在進行分類或者概念介紹的時候會出現分歧,但實際上只是概念上的區別,不需要過多的關注,主要關注算法的核心思想和使用情況。

2. Fine-tuning(微調)

  它使用的情況如圖1 ,是源數據域與目標數據域的數據都具有標籤,並且源域的數據量很大,而目標域的數據量很小,當目標數據域的數量特別小的時候就將稱爲「One-shot learning」。其主要想法是使用源域數據訓練模型,使用目標域數據進行Fine-tuning(微調)。Fine-tuning 的主要難度在於目標域中只有有限的數據的時候,要小心模型會發生過擬合。

  下面將介紹在 Fine-tuning 的過程中防止模型過擬合的幾種方法

2.1 Conservative Training(保守訓練)

  在對通過源域數據得到模型上進行 Fine-tuning 的過程中加入了關於參數 w 的懲罰項,使得遷移前後模型的參數很相近,防止模型過擬合。

2.2 Layer Transfer(層遷移)

  將通過源域數據得到模型中的某些層保持不變,只將剩餘的一層用目標域數據進行訓練,大大減少了過擬合的風險。當然,當你的目標域數據量很大的時候,可以將整個網絡進行 Fine-tuning ,而不是僅僅將其中的某一層進行 Fine-tuning。

  對於語音信號來講,常常使用最後幾層進行遷移學習。這是因爲 speech 的底層特徵得到的這段語音的發音方式,但是對於同樣一段話每個人的發音方式是不同的,由於口腔的構造是不同,所以常常採用後面幾層進行遷移學習。

  對於圖像信號來講,常常使用前幾層進行遷移學習。這是因爲圖像的底層特徵在檢查圖像中是否具有某些直線或者曲線,是否具有某些特殊的圖案,如圖 2 所示。


圖2. 圖像往往遷移底層的特徵層

  下面是NIPS, 2014論文《How transferable are features in deep neural networks?》中關於圖像層遷移的一些實驗。

這裏寫圖片描述

圖3. 保持不變的層數與模型表現的關係

其中橫座標代表網絡在第 n 層被切開並進行重新訓練,實際上就是從第一層開始有幾個層保持不變。最開始是 0 層,也就是相當於整個網絡沒有遷移學習,而是通過正常的訓練得到的。其中需要注意的是,在這裏目標域中的數據與源域中的數據量是相當的,所以當然可以直接進行訓練而不會發生嚴重的過擬合。縱座標是 top-1 正確率(越高越好)。

  4號線表示的是隻訓練剩餘部分的網絡。其中我們可以看到,保持不變的層數越大,網絡的表現就下降的越多,這主要是因爲越往後的層越是針對某一種特殊的特徵表示,並且後面這些層在進行 fine tune 的過程中實際上是要與前面的層進行溝通,沒有辦法溝通當然效果的就會變差,這也證明了網絡的前幾層往往提取的是一些通用特徵,可遷移性更高。

  5 號線表示的是同樣是選取前面幾個層,讓前面幾個層保持在源域得到的參數,而後面的層參數初始值不是源域訓練得到的, 最後對整個網絡進行fine-tune the whole network,可以看出這種效果是最好的。

  下面是這篇文章的另一個圖。

這裏寫圖片描述

圖4. 源域與目標域數據相關性對於 fine tune 的影響

其中的橫座標與圖4 中的橫座標相同,縱座標爲相對 top-1 正確率,其中的紅色的線與圖3 中 4 號線是同一條線。黃色的線表示,當源域與目標域的數據相關度不是很高的時候(比如說源域中都是自然風景的圖片,而目標域中都是人造物品的圖片),那麼他在保持前兩個層不變的時候還沒有較大的差別,但是越往後效果退化的越嚴重。我們可以看出源域與目標域的數據相關程度越高,可以用來遷移的層數就越高;即使源域與目標域的數據相關度比較低,但是前一層同樣是可以直接copy的,因爲前面提取的特徵比較底層。

3. Multitask Learning(多任務學習)

  Multitask Learning 與 Fine-tuning 類似,但是 Fine-tuning 只關心目標域中模型的表現情況,而不關心源域中模型的表現情況;但是 Multitask Learning 同時關心源域與目標域中模型的表現情況。

  多層結構使得神經網絡特別適合於多任務學習。常見的兩種多任務學習模型如圖5 所示


圖5. 常見的兩種多任務學習模型

圖5 中的左圖表示兩個任務之間雖然是不同的,但是在底層使用相同的特徵,所以可以公用下面的這些層,另一方面兩個任務的數據集會使得公用層的特徵提取的更好。另一種是如圖 5 所示的模型,雖然兩個任務之間在底層特徵之間不存在相同的特徵,但是可將將它們變換到同一個域中在學習相同的特徵,然後再進行兩個任務分別的學習。所以在多任務學習中關鍵點在於兩個任務之間是否具有共同性,共同性存在與哪些層之中。

  多任務學習最好的例子就是多語言的語音識別


圖6. 多語言的語音識別

對比實驗結果如下圖所示


圖7. 對比實驗結果

如圖7 所示,藍色的線是使用普通話(Mandarin)進行訓練的結果,而橘黃色的線是加入了歐洲語言進行多任務學習之後實驗結果,從實驗結果我們可以看到,當使用數據的時長(可以理解爲數據量)相同時,多任務學習的準確率更高,當識別的準確率相當的時候,多任務學習需要的數據量更小。

  多任務學習的優勢主要在於三點,首先相當於互幫互助,加大了用於訓練模型的數據量,從而在很大程度上抑制了過擬合;另一方面,通過多任務學習可以提高模型的正確率;最後可以降低模型對於數據量的要求(如圖只需要原來數據的一半就可以獲得相當的效果)。

4. Progressive Neural Networks(漸進式神經網絡)

  Progressive Neural Networks(漸進式神經網絡)的結構如圖8 所示,這種方式主要是不想考慮任務之間的相似性


圖8. 漸進式神經網絡的結構

如圖首先訓練task1,訓練好了固定不變;然後訓練task1,同時使用task1的知識,這樣不會改變task1又可以幫助task2。但是這個模型怪怪的,只要加一個任務,就要重新訓練一次,並且感覺task1可能使訓練最不好的吧,因爲用於訓練的數據相當於是最少的。

5. Domain-adversarial training(域的對抗訓練)

  這種方法處理的任務主要是源域數據有標籤,而目標域數據中沒有標籤的情況,如下圖所示


圖9. 域的對抗訓練所處理的問題類型中的某一個例子

  在上述的任務中,MNIST-M 是在 MNIST 中填充背景,並且修改數字顏色得到的數據集。如果直接將在 MNIST 上學習到的 Model transfer 到 MNIST-M 上,那麼取中間特徵層觀察效果如下

這裏寫圖片描述

圖10. 中間特徵層經過 t-sne 降維後的分佈圖

圖10 中,神經網絡綠色部分是對輸入圖片進行特徵提取的過程,而藍紫色的部分是分類器。取其中特徵的輸出進行 t-sne 降維後可以看到,神經網絡可以比較好的提取出 MNIST 的特徵,如圖10 中將它們分爲幾個區別加大的塊,但是這個特徵卻沒有辦法區分 MNIST -M 的數字。也就是說源域數據的特徵與目標域數據的特徵具有較大的區別,而如果要能夠教較好的訓練這個模型,應該是使得源域及目標域數據經過網絡提取出的特徵分佈相似,如圖 11 所示

這裏寫圖片描述

圖11. 網絡變形

從圖11 可以看出,爲了達到這個目的,在神經網絡上又接了一個域分類器,用來對數據來自於那來源進行分類,接下的訓練過程如圖 12 所示

這裏寫圖片描述

圖12. 域的對抗訓練過程

整個訓練過程要達到這樣的目的,要成功的欺騙 Domain classifier,使得不同域圖像所提取出的特徵分佈大致相同;並且還要是上面對於數字的正確分類能夠正確進行。所以訓練過程如圖 12 所示,與多任務學習很像,但是不僅僅需要訓練一個正確的數字分類器,還需要欺騙域分類器,所以在下面的分類器在反向傳播的過程中返回的就是梯度的相反數。這個網絡與GAN很像,所以訓練起來也比較難訓練,因爲域分類器已知在掙扎。如果域分類器太弱,那麼數字分類器一開始就放棄了,就根本沒有辦法逼的 feature extractor 達到最好的效果再死去,完美的取出 domain 的特徵信息。

5. Zero-shot learning(零拍學習)

  第四小節所講域的對抗訓練,實際上目標域中的數據在源域中多少以某一種方式出現過(比如說都是手寫數字),通過欺騙域分類器的方式使得兩者映射到同一個特徵空間且分佈相似,同時進行了分類。但是 Zero-shot learning所解決的問題就是目標域中的數據在源域中從來沒有出現過,比如說源域的樣本是貓貓狗狗,但是目標域的是羊駝的分類問題,這個時候就需要 Zero-shot learning 。

  這個時候往往通過下面的方法進行學習,用自己的屬性代表所屬於的類,如圖13所示


圖13. 零拍學習訓練過程

如圖13 所示,右面的表格是每一個類別對應的屬性,而左邊的神經網絡也是根據表格的屬性對圖像進行分類,所以這就要求屬性要足夠豐富,就是說不可以存在一種屬性覆蓋兩個例子的情況。測試的時候就輸出例子的屬性,然後對照查表即可。

  當所涉及的屬性特別多的時候,可以使用 Attribute embedding 的方法,這種方法的核心是是將圖片與數據都變換爲向量,這樣就可以根據計算距離(如cos)來判斷兩者是否來自於同一個類,具體的過程圖14 所示


圖14. 使用 Attribute embedding 的方法進行 0 拍學習

這種方法實際上就是找到一個神經網絡 f 使得 x1 變爲 f(x1) ,在找到一個神經網絡 g 使得 y1 變爲 g(y1) ,這兩個向量現在都是 embedding 空間中的一個點,也就說都投影到了同一個空間內,這個時候訓練的目標就是使得來自於同一個類別的例子,它們在 embedding 空間中最相似。所以訓練的目標就是使得 f(xn) g(yn) 最相似。

  如果說現在沒有一個關於屬性的表格的話,實際上可以通過對應的詞來替代,比如說狗的圖片就用單詞(dog)來作爲這類圖片的屬性,然後再坐上面所說的訓練。

  那如何來訓練這樣的一個網絡,就是如何來得到 f 和 g 呢? 如圖 15 所示

這裏寫圖片描述

如果使用第一個作爲目標函數的話,那麼是會出現問題的,因爲這樣的目標函數會將不同的類別都映射到空間的同一個點就滿足了要求,並沒有考慮不同類別之間的距離應該是最大的。而第二個目標函數考慮到了這種情況,其中的 Zero loss 表示的是相同類別的 fg 的乘積要比不同類別之間的乘至少以大 k 。

  「0 拍學習」還有一種方法是 Convex Combination of Semantic Embedding,這種方法如圖16 所示,


圖16. Convex Combination of Semantic Embedding的示意圖

在網上隨便 down 一個image 的 NN 和一個 word vector 的 NN ,然後圖像網絡可能輸出了這張圖像是虎的概率爲 0.5,是獅子的概率是 0.5 ,然後直接將概率與對應的 word vector 相乘的到word vector1,再在 全體的word vector中找到與word vector1最相近的單詞,就是最後得到的結果。

  通過實驗可以發現,實際上 Convex Combination of Semantic Embedding 要好於將word vector 投影到同一個 embedding space的方法

  一個實例就是多語言的翻譯。

這裏寫圖片描述

它做到一些語言的翻譯,比如說英語到日語、英語到韓語、日語到韓語等等,但是沒有做過韓語到日語的翻譯。但是通過之前訓練好的網絡也可以進行翻譯,因爲上面的網絡實際上是將某一種具體的語言投影到與語言本身無關的空間中,相當於先編碼到這個空間,再解碼成要翻譯的語言。

6. Self-taught learning

  這個看起來和半監督的方法比較像,但是半監督中認爲有標籤和沒有標籤的數據之間是比較像的,但是在 Self-taught learning 認爲數據是相距比較遠的,這個時候常常用沒有標記的源域數據做自編碼,然後利用編碼層提取目標域圖像的特徵,再進行分類。或者也可以用稀疏編碼的方式,總之就是利用編碼和解碼的方式。