【李宏毅機器學習筆記】 17、遷移學習(Transfer Learning)

【李宏毅機器學習筆記】1、迴歸問題(Regression)

【李宏毅機器學習筆記】2、error產生自哪裏?

【李宏毅機器學習筆記】3、gradient descent

【李宏毅機器學習筆記】4、Classification

【李宏毅機器學習筆記】5、Logistic Regression

【李宏毅機器學習筆記】6、簡短介紹Deep Learning

【李宏毅機器學習筆記】7、反向傳播(Backpropagation)

【李宏毅機器學習筆記】8、Tips for Training DNN

【李宏毅機器學習筆記】9、Convolutional Neural Network(CNN)

【李宏毅機器學習筆記】10、Why deep?(待填坑)

【李宏毅機器學習筆記】11、 Semi-supervised

【李宏毅機器學習筆記】 12、Unsupervised Learning - Linear Methods

【李宏毅機器學習筆記】 13、Unsupervised Learning - Word Embedding(待填坑)

【李宏毅機器學習筆記】 14、Unsupervised Learning - Neighbor Embedding(待填坑)

【李宏毅機器學習筆記】 15、Unsupervised Learning - Auto-encoder(待填坑)

【李宏毅機器學習筆記】 16、Unsupervised Learning - Deep Generative Model(待填坑)

【李宏毅機器學習筆記】 17、遷移學習(Transfer Learning)

【李宏毅機器學習筆記】 18、支持向量機(Support Vector Machine,SVM)

【李宏毅機器學習筆記】 19、Structured Learning - Introduction(待填坑)

【李宏毅機器學習筆記】 20、Structured Learning - Linear Model(待填坑)

【李宏毅機器學習筆記】 21、Structured Learning - Structured SVM(待填坑)

【李宏毅機器學習筆記】 22、Structured Learning - Sequence Labeling(待填坑)

【李宏毅機器學習筆記】 23、循環神經網絡(Recurrent Neural Network,RNN)

【李宏毅機器學習筆記】 24、集成學習(Ensemble)

------------------------------------------------------------------------------------------------------

【李宏毅深度強化學習】視頻地址:https://www.bilibili.com/video/av10590361?p=30

課件地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML16.html

-------------------------------------------------------------------------------------------------------

Transfer Learning

在訓練中,訓練數據不一定要和任務的種類是相同的。如上圖,雖然是訓練貓狗的分類器,但是也可以使用大象老虎的照片或者是卡通的貓和狗作爲一部分訓練數據。

之所以需要遷移學習是因爲,在現實中,符合要求的圖片相對較少。如上圖,如果要分析一張醫學方面的圖片,但是相關的數據很少,這時可以給訓練數據加進去一些貓狗等其它的圖片。 

Overview

source data指和任務比較不相關的data,而target data就是和任務相關的data。

擁有的數據種類不同,要的方法也不同。

source data有label,target data有label

Model Fine-tuning

 如果我們的target data 和source data都是有label的,那這時可以使用Model Fine-tuning

做法是:

  1. 用source data作爲訓練數據,去訓練模型。
  2. 將第一步訓練而出的模型的參數作爲此時的初始值,改成用target data去訓練模型。

專業詞彙:One-shot learning,指這種只有很少的target data的訓練。

這個方法很簡單,但是要注意,如果target data的數據非常少,需要加一些技巧(Conservative Training、Layer Transfer)來防止模型發生過擬合。

Conservative Training

如果target data很少,爲了防止使用target data訓練時發生過擬合,可以在訓練時加一些限制(比如加一些像L1、L2之類的正則項),讓兩邊產生的模型不要相差太遠。

Layer Transfer

另一個防止使用target data訓練時發生過擬合的方法,是 Layer Transfer 。

  1. 用source data訓練出一個neural network後,把其中的一些layer的參數(黃色的箭頭)複製到右邊去訓練。
  2. 用target data來調剩下的layer(橙色的箭頭)

這樣使用target data的訓練過程就只調了部分的參數,減少了發生過擬合的風險。

當然,如果target data足夠多的話,還是可以在用source data訓練出模型後,用target data去微調整個模型的參數。

現在有一個問題,我們要決定那些layer應該是copy的呢?

  • 語音辨識:通常保留後幾層layer,因爲靠近input的layer,會受不同人的聲音信號所影響。而越到後面,和人的發音方法越不相關,所以可以保留。
  • 圖像辨識:通常保留前幾層layer,因爲靠近input的layer,只是識別一些簡單的特徵(直線、斜線等),所以不同的任務在前幾層做的事情都差不多。

Layer Transfer 在 Image上的效果

X軸代表複製多少layer,Y軸代表準確度。下面數字代表上圖不同的線 

  1. 沒做Layer Transfer
  2.  (和Layer Transfer無關的實驗)使用target data先訓練,然後固定住前幾層(多少層對應X軸)的參數。然後繼續用target data去調整後面剩下的layer。可以看到固定越多層,效果越差。因爲不同的layer是有互相協調的。
  3. (和Layer Transfer無關的實驗)使用target data先訓練,然後固定住前幾層(多少層對應X軸)的參數。然後繼續用target data去fine-tune整個模型。
  4. 做了Layer Transfer的結果。複製越多層,效果慢慢變差。

Multitask Learning

 Multitask Learning能讓機器學會多個任務。Multitask Learning很適合用neural network 來做。

上圖左邊,在network的前幾層共用layer,到了後面要細分任務的時候再分爲多個layer。

如果兩個任務只有中間比較像,那就可以用上圖右邊的做法。

  Multitask Learning一個很成功的的應用就是 多語言的語音辨識。

雖然是不同語言,但是聲音的信號都差不多,所以前面的layer可以共用。到了細分語言再拆成多個layer。

上圖是一個普通話(mandarin)的識別。 X軸是普通話的數據的時長,Y軸是錯誤率。

可以看到,雖然歐洲語言和普通話好像一點都不像。但是把歐洲語言和普通話一起做  Multitask Learning,讓歐洲語言去幫忙調整前幾層layer的參數,可以看到訓練出來的結果會比只有普通話作爲訓練數據要好。

從圖中橫線的位置可以看出,Multitask Learning 達到和 Mandarin only 相同的錯誤率,Multitask Learning使用的訓練數據明顯更少。

Progressive Neural Networks

這個方法是這樣:

  1. 先訓練一個network解決task 1 。
  2. 固定住task 1 的network的參數,把task 1的network 的layer複製到task 2 的network中。

好處:即便在訓練task 2時,也不會影響原來task 1的model的參數。同時,如果task 1的參數不適用於task 2,也會在訓練時被慢慢調整好,不會對task 2造成影響。

 

source data有label,target data沒label

Domain-adversarial training

這裏source data是有label,而target data沒有label。

以手寫數字識別爲例,source data是MNIST數據集,而target data是MNIST-M。

這時可以把source data看做training data,而target data看做testing data。但是這裏有一個問題是,這兩者的特徵不是很像

如上圖,把model前幾層提取的特徵顯示出來,可以看到source data和target data的特徵是很不一樣的(圖中的紅色和藍色點有明顯的分界線)。所以如果用source data去learn一個model後,直接以target data作爲input去預測,結果肯定是很差的。

 所以我們要使得source data和target data輸入model後,經過feature extractor後,所得到的特徵是比較像的,即如上圖是“混在一起”的。

所以這裏將feature extractor的output接到一個domain classifier。domain classifier是分類source data和target data的特徵,所以最好的情況是feature extrator的output,能使的domain classifier的準確率達到最低(即代表source data和target data的特徵沒被區分開)。

但這裏有個漏洞,如果要使domain classifier的準確率很低,那feature extractor可以不管input是什麼,都output 同一個數值。這明顯是不對的,所以還要加一個限制。如下。

 在剛纔的基礎上,再加一個label predictor。所以現在feature extractor不僅要能最小化domain classifier的準確度,還要最大化分類的準確率。

實做時用gradient descent,然後在做反向傳播的時候,如果domain classifier要更新的參數是 ,那傳遞迴feature extractor的時候,就把這個參數更新量顛倒,就能使feature extractor往domain classifier 準確度下降的方向去更新。

上圖是使用有無Domain-adversarial training的對比結果。

Zero-shot Learning

在剛纔 Domain-adversarial training 的例子中,source data和target data比較不像。

但在 Zero-shot Learning 裏,source data和target data是兩種不同task。如上圖,source data是分類貓狗的data,而target data則是分類羊駝的任務。這時可以有兩個方法可以做:Representing each class by its attribute、Attribute embedding。

Representing each class by its attribute

既然使用target data沒辦法直接預測圖中的物體是什麼,那就換一種角度。 

  1. 讓neural network去預測圖中物體有哪些特徵(例如毛茸茸,4條腿,有尾巴等)。
  2. 知道圖中物體有哪些特徵之後,查數據庫(這個是人工建立的),看擁有此特徵對應哪種物體

Attribute embedding

步驟如下: 

  1. 把所有類別各自的描述(attribute,也可以理解爲特徵)先定義好。(這一步需要人工來定義,也可能能用機器自動去定義)
  2. 把image x^1和它的描述 y^1,分別通過 f 和 g 兩個NN,映射到embedding space上。要訓練模型使得這兩個output越接近越好。
  3. 把unlabel 的 x^3 通過 f 映射到embedding space上(上圖寫錯了,是f(x^3)),看得出它和 y^3 的描述(attribute)的映射比較接近,所以判定 x^3 屬於羊駝。(這個例子雖然訓練集沒有羊駝的圖像數據,但是有羊駝的描述,這個描述是人工事先定義的,或者可能機器也可以定義)

前面說過要使 f 和 g 的 output 儘可能接近,但如果用上圖第一行的公式去訓練會有問題(如果 f 和 g 不管input是什麼,output都一樣,這樣它們的距離就一直是0),所以要用第二行公式的做法。

這個公式的最好情況是 0 ,即max()的第二項(也叫zero loss)要小於0。

zero loss整理一下,可以看出,就是兩項內積相減要大於k(k代表margin,是人工設置的)。

f 和 g 的內積在幾何上可以想象成投影。現在看zero loss的兩項。

  • 第一項:如果f 和 g 的偏差較小,f 和 g 的內積就會相對較大。
  • 第二項: 和其他除了n的  的內積。

所以如果 x^n 和 y^n 是匹配的,那麼第一項的內積肯定會大於第二項的內積,如果兩者內積的差大於k,則判定loss爲0 。

 

剛纔講的是需要image和對應class的描述(attribute)。 而如果根本不知道每一個動物的attribute是什麼怎麼辦?這時可以用Attribute embedding + word embedding。

Attribute embedding + word embedding

這裏需要引進word vector。word vector的每一維代表這個word的某一種attribute。

現在直接把動物的名字所對應的word vector來代替每一種動物的attribute。其他步驟和剛纔Attribute embedding一樣。

Convex Combination of Semantic Embedding

這個方法的好處是不用訓練。

步驟如下:

  1. 把image輸入到一個NN(隨便找個現成的NN就行),NN輸出這張圖片屬於不同種類的機率。比如上圖屬於獅子和老虎的機率都是0.5 。
  2. 去找lion和tiger的word vector,把它們按各自0.5融合,得到圖中黑色的點。
  3. 去找其他word vector看哪個點和這個黑色點距離比較近。如上圖liger的word vector和這個黑色點比較近,就說明 image 的物體屬於這個liger 。

 Example of Zero-shot Learning

 上面兩張圖是Zero-shot Learning應用在翻譯的例子。這個例子的training data除了日轉韓,其它都有。所以使用Zero-shot Learning後就能實現日轉韓的翻譯。

它的步驟大概可以理解爲:

  1. 輸入的英語日語韓語到機器中。
  2. 機器將data投射到另一個space上(轉換爲另一種機器自己看得懂的語言)。不同語言但是同一個意思的詞在這個space上的位置都差不多。
  3. 最終輸出翻譯的時候就把這個space上的點轉換爲人類看得懂的語言。

More about Zero-shot learning

這邊是更多關於 Zero-shot learning 的論文。

source data有label,target data沒label

Self-taught learning

這個方法步驟如下:

  1. 從source data裏去learn 一個性能更好的feature extractor 
  2. 用這個性能更好的feature extractor去target data上提取feature。

 

source data沒label,target data沒label

Self-taught Clustering

這邊沒講。。可以看圖中的論文去了解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章