Meta-Learning 極簡介 (Part 1)

Dboy Liao
8 min readJun 29, 2020

--

這幾個月除了跟朋友搞搞 side project 之外,比較有在接觸的就是 meta learning。但一直看下來都覺得霧裡看花,各種演算法都說自己是 meta learning 卻風格迥異,black box approach、model-based、optimization-based 等,看著看著都不知道怎樣才叫做 meta learning,更別提它自己也有各種別稱,像是 learning to learn 或是 multi-tasking learning 等,一個不小心就沈沒在 blog 跟 paper 海之中….

中間其實也看了很多大神演講,但也都是有聽沒有懂。重複看了很久,最後有了一點小心得,也才忽然覺得某些大神的 talk 其實很重點地把 meta learning 都歸納好了,只是當時背景知識不足才聽不出來,所以想說來寫一篇記錄自己的心得,避免我這個金魚腦忽然又忘記了裡面的概念。那廢話不多說,就開始吧!這一篇會遵循 ICML 2019 的 meta learning tutorial 的影片來說明,有興趣的讀者可以配著一起看喔,也可以到這裡下載投影片

Data Efficiency Issue for Deep Learning

Deep Learning 模型比起傳統的 Machine Learning 演算法來說,最大的問題應該就是對於資料量的需求,而大型的資料連帶對於運算力也有極大的要求。每年許多領域的 SOTA 演算法除了模型本身的演進外,大概就是看各家大型科技公司或研究機構的各種炫技,包含普通人不容易入手的大型資料和運算力的火力展示。

但是如果說 Deep Learning 最終是希望達到如人類學習能力,這個現象卻和真實人類的學習大相徑庭:人學習所需要的資料量遠比 Deep Learning 模型少很多。也就是說人類舉一反三的能力還是大大勝過 Deep Learning,所以導致 Deep Learning 模型會需要龐大的資料才能學習到近乎人類的表現 (我同意在某些競技可以超越人類沒錯,但同樣都是需要大量的時間與資料去做訓練)。

Meta Learning 就是想解決這樣的問題,也就是說我們可不可能用比較少的資料去讓模型學習,並且有不錯的表現呢?

Meta Supervised Learning

Meta Learning 已經被應用在不少領域,Unsupervised Learning 與 Reinforcement Learning 等都可以看到它的蹤跡,但為了簡單起見,我們先從相對單純簡單的 Supervised Learning,並看看 Meta Supervised Learning 是如何解決前面所提到的 Data Efficiency 的問題。

設想我們有興趣學習的資料集是 D,是一組有標記的 data 可是數量很少,一般的 Deep Learning 模型可能就學不動了,但是可能我們有其他的不同資料 D' 是很龐大的,那有沒有可能去利用 D' 去幫助我們學習 D 呢?配合投影片的第 9 頁的算式應該就很清楚了:

到這裡我們目標就很清楚了: 我們可不可能讓模型學到如何在少量資料下也可以快速學習的能力呢?這也導出了 Meta Learning 有時被人稱作 Learning to Learn 的原因。

有些細部推導我就不贅述了,但演講中有提到一個重要的概念:

our training procedure is based on a simple machine learning principle: test and train conditions must match.

Vinyals et al., Matching Networks for One-Shot Learning

也就是說,既然我們有興趣的是學習到快速學習能力,那不如就讓訓練資料去模擬快速學習的情境囉。

這邊我們就不賣關子,以 Supervised Meta Learning 來說,一個方式是我們讓訓練資料變成資料集的集合

配合投影片第 17 頁就很清楚了:

也就是說,如果我們有前面提到的 D' 這樣龐大的資料 (譬如說是 ImageNet 或 CIFAR),我們可以把它切割成眾多的小資料集 D1D2 ….。這些小資料集本身就代表一種分類問題,譬如說一個是分類鳥跟蟲,另一個是分類獅子跟狗,但這些小資料跟我們的 D 有著一個共同的特色: 資料數量都很少。譬如說鳥跟蟲的分類問題中可能只有 6 張圖,鳥跟蟲都各 3 張。接者我們可以把這 6 張圖片再切成兩塊,4 張圖片用來訓練,2 張圖片用來測試。也就是說,我們的模型必須在每個小資料集中,用 4 張圖片就能對沒見過的 2 張圖片做到不錯的預測,而且這樣的能力還必須在每個小資料集中都能達成,也就是對每個小資料集都能做到用少量的資料學到好的分類器。

這邊補充一下術語,這些被切割的小資料集就是一個 Task ,每個 Task 裡被用來做 Training 的資料 (譬如前面說到的那 4 張圖片) 是所謂的 Support Set ,而用來做 Testing 的資料就是所謂的 Query Set ,而這些用來做訓練的 Task 所形成的集合,被稱作 Meta Training Dataset 。以同樣的邏輯可以被用來建構 Meta Testing Dataset ,顧名思義它就是用來測試最後學到的模型是否真的有學到快速學習的能力。細節說明可以參照影片中的片段

從這樣的設定,不難看出 Meta Learning 也同時在不同的 Task 之間去學習,因此最後的模型通常可以在不同的 Task 間都表現得不錯。換句話說,最後我們會有個模型同時處理不同的 Task ,這也是為什麼 Meta Learning 也會跟 multi-task learning 扯上邊的原因。投影片的第 18 頁很好地總結了這個想法:

當然,必須強調的是,Meta Learning 並不是處理這些 multi-task learning 或其他問題的唯一解法。

那回到我們 Supervised Learning 的設定,當我們把額外的資料整理成 Meta-Training Set 與 Meta Testing Set 之後,具體來說我們是怎麼做這樣的訓練呢?

沿用投影片中的符號,其實就是我們會有一個模型 f (通常是個神經網路) 它會吃進每個 Task 中的 support set 然後吐出一個 phi ,這個 phi 就是我們分類器的參數,而且使用這個參數的分類器要能在 query set 表現很好。

所以接下來概念就簡單了,我們就把每個 Task 的 support set 丟進 f 中,然後用它在每個 Task 中產生的 phi 在 query set 的表現定義出一個所謂的 Meta Loss (譬如說 cross-entropy loss across all tasks) ,然後 gradient descent 這個 Meta Loss 得到一個可以跨 Task 都表現很好的 f (也就是一個最佳的 theta )

結語

其實影片後面也很精彩,但我想說之後再配合一些其他的論文去配合說明會更清楚,就容許我把它們都移到 Part 2 之類的再說吧 XD

但不難發現因為 Meta Learning 中 Meta-Training 跟 Meta-Testing 的設計,讓 Meta Learning 成為一種 Multi-Tasking Deep Learning 的一種自然應用。譬如說影片後面講到 Meta Reinforcement Learning 的第 74 頁投影片就有這樣的味道:

但我認為一個更一般的看法是這樣,典型的 Meta Learning 都會有個所謂的 Base Learner 與一個 Meta Learner ;Base Learner 的任務就是要針對特定 Task 去做特化,然後可以在它特化的 Task 上表現很好;另一方面,Meta Learner 就要確保它可以幫助 Base Learner 在轉換 Task 的時候,可以適應得很好,也蠻像一個師父的角色。俗話說師父領進門修行看個人,Meta Learner 的任務就是要讓 Base Learner 在轉換 Task 時,可以很好的入門,然後再各自修行到可以解決當下 Task ,其中入門的手段就是提供在其他 Task 所學習到的資訊或技巧等。

大概就是這樣,希望可以幫助大家在茫茫 paper 海中不會迷失說 Meta Learning 的基本樣貌與概念,唸起來順一點囉。

--

--

Dboy Liao
Dboy Liao

Written by Dboy Liao

Code Writer, Math Enthusiast and Data Scientist, yet.

Responses (1)