什麼是遷移學習?

人類會將過去學習到的經驗運用在認識新東西,假設我們今天要進行的任務的資料很少,而與這個任務不相關的資料卻不少遷移學習要解決的問題是:我們是否能使用這些不相關的資料來幫助我們完成任務?

圖片來源:手把手程式實作分享系列:用簡單的CNN模型訓練模型建立貓貓狗狗辨識程式

舉一個老掉牙但是很好理解的例子,假設我們的任務是要做大象跟老虎的分類,而我們手邊卻有很多貓和狗的資料,那我們是不是能用這些貓狗的資料幫助我們完成任務?

遷移學習介紹

Transfer Learning — Overview,圖片來源:李宏毅老師

遷移學習根據 Target dataSource data 是否有標記 (labelled or unlabeled) 可以分為四類。Target data 指的是與任務有關的資料,而 Source data 指的是與任務不相關的資料

本篇文章的內容會簡單介紹每個技術,最後會附上一個實作提供大家參考。

Source Data: labelled, Target Data: labelled

Fine-tuning

Fine-tuning 的概念很直觀,就是運用資料量比較大的 Source data 來訓練一個模型,再利用這個模型當作初始值,拿 Target data 來 Fine-tune 這個模型,以達成我們的任務目標。

舉一個 Fine-tuning 的例子,在語音領域很經典的一個例子就是聲音辨識的任務。假設現在的 Target Data 是某一個人的聲音,且這些 data 的數量很少;而 Source data 則是來自不同人的聲音,我們當然不能只用這一個人的 data 去訓練一個語音辨識模型,而是利用這些來自不同人聲音的 Source Data 訓練一個模型,再用這一個人聲音的 Target Data 去 Fine-tune 模型。

由於 Target Data 很少,所以就算用 Source Data 訓練出的模型很好,再用 Target Data 做 fine-tune 的時候可能導致 Overfitting。為了避免這個狀況就需要一些技巧。

技巧一:Conservative Training

Conservative Training 概念圖,圖片來源:李宏毅老師

Conservative Training 就是為了避免 Target data 過少導致 Overfitting 所以在 Fine-tune 的時候要給一個限制,讓同一筆 data 在舊的和新的 Fine-tune 後的 model 的 Output 愈接近愈好。

技巧二:Layer Transfer

Layer Transfer 概念圖,圖片來源:李宏毅老師

Layer Transfer 就是把用 Source Data 訓練好的模型中某幾個 Layer 直接複製到新的模型中,而 Target Data 只訓練沒有被複製的幾個 Layer ,Layer Transfer 的優點在於 Target Data 只需要訓練少量的參數,可以避免 Overfitting。

Layer Transfer 舉例,圖片來源:李宏毅老師

那我們要如何選擇選複製哪些 Layer 呢?在實務上的經驗來說,不同的任務上,需要複製的 Layer 也不一樣。舉例來說,在語音辨識上,通常會複製後面幾層,重新訓練前面幾層;而影像辨識,通常會複製前面幾層,重新訓練後面幾層。原因是在語音上,前面幾層是在識別說話者的發音方式,後幾層式識別,可以想像成每個人說話的發音方式不同,有獨特的口音,但是一般人卻都能夠辨別這些話的意思;影像方面,前面幾層是在做基本的偵測,例如有沒有直線橫線或是幾何圖形,到了後面幾層就會變得越來越抽象,以至於無法複製到其他任務上。

Multitask Learning

在 Fine-tune 的任務中,我們在乎的是 Fine-tune 出來的效果好不好,原本的模型壞掉了也沒關係,而 Multitask Learning 則要同時在 Target Domain 與 Source Domain 都有好的效果

Multitask Learning 概念圖,圖片來源:李宏毅老師

上圖左邊,如果兩個任務有共通性,那麼就可以共用前面的幾個 Layer,後面針對不同的任務做出區隔。

在一些更瘋狂的任務上,如果覺得兩個任務的 Input & Output 都不能共用,但是中間的一些 Layer 卻能共用,這時也可以考慮做 Multitask Learning。

Multilingual Speech Recognition,圖片來源:李宏毅老師

Multitask Learning 一個很成功的例子是多語言的語音辨識,用不同語言的資料來訓練一個可以同時辨識多種語言的模型。同樣的方法在翻譯上也可行。

Source Data: labelled, Target Data: unlabeled

Domain-Adversarial Training

Domain-Adversarial Training 概念,圖片來源:李宏毅老師

Labelled Source Data 和 Unlabeled Target Data 的關係就很像 Training Data 和 Testing Data,但這邊有一個差異是,Source Data 和 Target Data 是 mismatch 的,意思是他們的特徵對於機器而言非常不同,屬於不同 Domain。

而 Domain-Adversarial Training 要討論的就是,如何在這種情況下,從 Source Data 訓練一個可以直接應用到 Target Data 上的 model。

CNN 範例圖,圖片來源:李宏毅老師

上圖 CNN 前面綠色的 Layer 是在做 Feature Extraction(特徵提取),由於 Source Data 和 Target Data mismatch,所以如果不做處理直接將他們直接 mapping 到同一個空間中,他們的分布看起來很不同,藍色點為 MNIST,紅色點為MNIST-M;後面藍色的 Layer 則是在做分類,雖然可以將藍色點分得很好,但對紅色點卻無能為力。

所以我們需要將他們 mapping 到同一個空間中的分布盡量接近,而且 Source Data 還能夠被分類,這樣就能用利用 Source Data 來協助 Target Data 進行分類。

於是在這個概念下衍生出 Domain-Adversarial Training of Neural Network(DANN)

Domain-Adversarial Training 流程圖,圖片來源:<EYD与机器学习>迁移学习:DANN域对抗迁移网络

DANN 可以主要看成三個部分:綠色 Feature Extractor, 藍色 Label Predictor & 紅色 Domain Classifier 以下簡稱 FE, LP, DC

如果我們希望 FE 將 Source Domain 和 Target Domain 原本的特性(分布)消除,那麼就在 FE 後面加上 DC。DC 原本是要辨別 FE 所提取的特徵是來自哪個 Domain,和我們的期望的目標衝突,這時只要在 DC 執行 Backpropagation (反向傳遞)時加上 Gradient Reversal Layer 讓 DC 要求 FE 優化的的值全部相反,進而讓把 Domain 的特性消除。

將 Domain 特性消除 mapping 到一個空間呈現相近的分佈後,還要確定 LP 仍然可以將 FE 提取 Source Data 的特徵進行分類。

如此一來,便能訓練出一個能夠分類 Source Data 又能應用到 Target Data 的模型。

Zero-Shot Learning

Zero-Shot Learning 和 Domain-Adversarial Training 一樣,將 Source Data 和 Target Data 視為 Training 和 Testing Data,只是這裡的 Source Data 和 Target Data 要是不同的任務

Zero-Shot Learning 概念圖,圖片來源:李宏毅老師

例如在影像上假設 Source Data 只有貓狗的圖片,Target Data 則是草尼馬,那我們訓練出來的模型,要讓他能夠辨認草尼馬好像有點強人所難。

但在語音上早就有方法,因為語音時常會遇到 Zero-Shot Learning 的問題。假如將每個 word(單詞)都當作一個 class 的話,那麼就很可能會發生 Testing 出現了 Training 沒有的 word。解決的方法是不要辨識聲音是哪個 word 而是屬於哪個 Phoneme(音位 or 音素)可以直接想成是音標就好,接著根據人類的知識建立一個 Phoneme 和文字的表格,稱為 lexicon 也就是辭典,那麼只要辨識出這段 Phoneme 就可以去查表看對應到哪個文字就好了,如此一來就算有一些 word 在 Training Data 中沒有出現,只要在 lexicon 中有出現,就能解決這個問題。

Zero-Shot Learning 概念圖,圖片來源:李宏毅老師

影像上,可以把不同的 class 用 attributes 來表示,如同上圖中的 database 。Attribute 要定義得夠豐富,每個 class 都要獨一無二的 attributes 組合才不會發生有兩個 class 的 attributes 一樣的問題,導致這個方法失敗。

和在語音上的解法相同,我們不直接辨識每張圖片屬於哪個 class,而是辨識有哪些 attributes。

Zero-Shot Learning 概念圖,圖片來源:李宏毅老師

所以當今天 Testing 來了一張機器完全沒見過的圖片,通過辨識輸出 attributes 再去查表找到一樣或是最接近的 Attributes 組合的 class,就可以讓機器在即便沒有看過這個 class 的情況下也能找到答案。

Zero-Shot Learning + Embedding 概念圖,圖片來源:李宏毅老師

有時候 attributes 的維度很高,可以考慮做 embedding,將 image 和 attributes 組合都投影到 Embedding Space 上的一個點。今天我們已知 y1 是 x1 的 attributes 那我們就會希望在訓練的時候要找到 f & g,讓 x1 和 y1 投影到 Embedding Space 之後越近越好。找到 f & g 以後,如果今天有一張新的圖片 x3,他也可以透過 f 變成 Embedding Space 上的一個點,我們可以找到一個最接近的 g(y3) 那我們就可以說 y3 是 x3 的 attributes。

Zero-Shot Learning + Embedding 概念圖,圖片來源:李宏毅老師

如果沒有 database,不知道每個 class 對應的 attributes 怎麼辦?這時可以借用 word vector 。每個 word 的 word vector 可以想成這個 word 的某種 attributes,所以我們只要用動物的 word vector 將 attributes 取代掉再將它們投影到同一個 Embedding Space 那麼也可以達成一樣的效果。

Convex Combination of Sematic Embedding 概念圖,圖片來源:李宏毅老師

還有一種 Zero-Shot Learning 的方法叫做 Convex Combination of Sematic Embedding。這個方法更加簡單,甚至不需要 Training,只要有現成的 CNN 和 word vector 即可。

舉例來說,將一張圖片丟入 CNN 中,這時輸出結果告訴我這張圖片有可能是 0.5 機率的 lion 和 0.5 機率的 tiger,接下來找到 lion 和 tiger 的 word vector,將 CNN 輸出的機率當作線性組合的係數,便可以找到一個最接近混合後結果的 word vector 是 liger。

Google Translation using Zero-Shot Learning,圖片來源:Google 翻譯里程碑:透過 Zero-Shot,一套系統搞定所有語言互翻

在翻譯上 Google 也用了 Zero-Shot Learning 的方法訓練了一個可以翻譯從來沒見過的語言的模型。

Google Translation using Zero-Shot Learning,圖片來源:Google 翻譯里程碑:透過 Zero-Shot,一套系統搞定所有語言互翻

為什麼 Zero-Shot Learning 在這個任務上是可行的呢?因為用同一個模型翻譯不同的語言時,機器學到的將不同語言的 input 都投影到同一個空間中,而這個空間中的位置只跟語意有關不同顏色代表不同意思,而不同語言但是相同的語意的句子會分布會相近,如同上圖右半邊被放大的區塊,想表達的意思都是相近的,卻是不同的語言。於是我們是不是可以說機器學習了一套只有自己懂得抽象新語言,如此一來即便遇到沒有看過的語言也能夠通過這套抽象語言來翻譯成其他語言。

Source Data: unlabeled, Target Data: labelled

Self-Taught Learning

這裡的狀況跟 Semi-Supervised Learning 很像,都有 Labelled 和 Unlabeled 的 Data,可以說 Self-Taught Learning 是一種 Semi-Supervised Learning,而兩者之間的差別在於 Semi-Supervised Learning 的 Labelled Data 與 Unlabeled Data 之間比較有關係的,而 Self-Taught Learning 通常是 Source Data 與 Target Data 之間的關係比較遠。

Self-Taught Learning,圖片來源:李宏毅老師

Self-Taught Learning 的概念很簡單,假設 Source Data 夠多,雖然是 Unlabeled,可以利用 Source Data 訓練一個 Feature Extractor,再用這個 Feature Extractor 在 Target Data 上提取 Feature。論文中也做了很多實驗證明 Self-Taught Learning 可以獲得效果提升。

Source Data: unlabeled, Target Data: unlabeled

Self-Taught Clustering

Self-Taught Clustering 是 Unsupervised Learning 的一個例子,藉助大量 Unlabeled Data 輔助,對一小部分目標 Unlabeled Data 進行 Clustering。 Target Data 和 Source Data 在主題分佈上可以不同。即使 Target Data 不足以有效地學習高質量的特徵表示,也可以藉助 Source Data 來學習有用的特徵,Target Data 可以在這些 Source Data 上進行有效 Clustering。 Image Clustering 的實驗表明,當使用不相關的 Unlabeled Source Data 時,我們的算法可以大大優於幾種最先進的 Clustering 方法。

實作 — 自傳產生器

前言

這次的實作內容想法來自於學校文字探勘這門課。即將步入職場的我們,撰寫履歷時總是在自傳這欄苦惱許久,改了又改,卻還在寫「我是…,我的個性活潑開朗,擅長…。」這樣的甲骨文,與其上網一篇篇從範例裡東拼西湊,不如讓機器來幫我寫一份吧!

模型介紹 — GPT-2

GPT-2 的前身是 GPT,其全名為 Generative Pre-Training。在 GPT-2 的論文裡頭,作者們首先從網路上爬了將近 40 GB,名為 WebText(開源版) 的文本數據,並用此龐大文本訓練了數個以 Transformer 架構為基底的語言模型(language model),讓這些模型在讀進一段文本之後,能夠預測下一個字(word),因此,GPT-2 就很適合拿來這次的自傳產生器應用上基本上
GPT-2 就是 Transformer 裡的 Decoder:

(來源:直觀理解 GPT-2 語言模型並生成金庸武俠小說

GPT-2 與兩知名模型 ELMo 與 BERT 使用的參數量比較 (圖片來源

Fine-tuning 實作結果

用 40GB 文本資料訓練的 GPT-2 模型,不僅資料量大,連訓練出來的模型參數都非常大,因此大多數使用者都不會自己去從頭到尾訓練一個 GPT-2 模型

所以更有效率的方式是使用自己任務的資料 Fine-tune 一個和任務有關的預訓練 (Pre-Trained) 模型,就可以達到很不錯的效果了。

本次實作使用了中研院詞庫小組(CKIP Lab)所預訓練的 gpt2-base-chinese 語言模型,再將爬蟲所收集到的自傳訓練資料,根據 Hugging Face 官方的文件,進行 fine-tuning,最終產生了「自傳產生器」模型。

最終成果展示如下:

自傳產生器

模型根據輸入的文字所生成的文章,前面幾句還算合邏輯,到了最後面開始不知所云了XD,算是一個有趣的 side project 吧!有興趣上去玩玩看的人,連結就放在圖片說明欄哦~

結語

以上就是本次遷移學習的所有內容~從資料是否標記來對任務分類,依序介紹不同的任務,最後完成一個簡單的實作,相信大家對 Transfer Learning 的概念與技巧有了初步的認識~下次就算遇到需要用到 Transfer Learning 技術的任務,也不會感到害怕了吧!

參考資料

教育部補助大專院校STEM領域及女性研發人才培育計畫目標為建構一個「以智慧物聯技術與實務應用為基礎的教育環境和實作場域」,並規劃出符合此STEM教育領域的創新特色課程,以畢業前進入企業實習的方式,讓學生了解相關產業界所面對的問題,再輔以業界實作場域的教育訓練活動,共同帶領學生發展出動手做、判斷與解決問題的相關技能;本計畫也規劃讓學生以專題實作的組隊方式,跟業界協力領導學生對外參與智慧物聯技術的應用競賽,不僅可以累積學生實務開發的能力,更能激發其潛能來幫助企業解決所面臨的難題。

Data Science Meetup 台灣資料科學社群的使命是「為資料科學人士與企業創建經濟機會」。我們相信大數據蘊藏著巨量的信息和價值,如何處理好大數據並發掘其潛藏的商業價值,就要靠資料科學有效的應用。21世紀是資料科學決勝時代,我們社群將為大家提供與資料科學相關的最新技術和資訊實戰攻略,並透過全球業界人士和學者幫助相關職業規劃與挑戰,社群活動包含

  • 台北實體版聚
  • 線上版聚
  • Mentorship Program

歡迎加入我們社團瞭解更多資訊:https://www.facebook.com/groups/datasciencemeetup/

--

--

Chang_Zai_Wang
數據領航員

東吳大學資料科學系|Machine Learning & Deep Learning|喜歡瞭解科技相關的資訊,在學習的路上持續前進~|📩️ Email : xs950179@gmail.com