Overview of Meta Learning

Meta Learning

Introduction

Meta Learning = Learn to learn 讓機器學習如何去做學習這件事。

實際例子:
當我們接觸到一個裝糖果的玻璃罐時,我們察覺玻璃罐與保特瓶相似的本質,因而有辦法套用既往的知識快速的移轉到新的任務上,而Meta learning便是在學這個過程,在遍覽多種任務後,學習一組對任務敏感的參數,當新任務進來時能快速的將先驗知識移轉到新任務中。

假如在過去我們過去叫機器學了task1(影像辨識)、task2(語音辨識)等等這些事,那他在學習task100(文字辨識)可以學習的更快。雖然影像辨識、語音辨識跟文字辨識沒什麼太大關係,但機器是學到了怎麼去學習這件事,所以未來有新的任務就可以學得更快。

這跟life long learning挺像的。但很大的差異是,life long learning主要是希望當機器學了那麼多的task,那在新的task上仍然做得很好,希望同個模型能夠學習不同的技能。但在Meta learning中,不同的任務仍有不同的模型,但我們期待機器能夠從過去的學習經驗,學到一些東西使得未來要train一個新的模型可以學得更快更好。

在過去的machine learning,你給他一些training data假設任務是要辨識貓狗的圖片,透過gradient descent、back propagation這些algorithm我們可以得到CNN裡頭的參數並形成 $f^{}$
接著要把test的image丟進這個$f^{
}$就可以去預測這個image是貓還狗。

那在meta learning上,可以把learning algorithm也想像成一個function $F$,這個$F$吃進去的是訓練資料$D_{train}$ ,吐出來的是另外一個 function $f^{*}$,在例子下就是吐出一個 function $f^{*}$ 可以拿來把貓狗進行影像辨識。

Meta learning的主要點就在於如何讓機器自動找到這個 Learning Algorithm $F$。

Machine Learning vs. Meta Learning

Machine Learning 的目標是$f^{*}$分類器。
Meta Learning 的目標則是 $F$ learning algorithm。

How to do Meta Learning ?

不同人為設計的Network、initial $\theta^{0}$、update method 以及 learning rate都是不同的learning algorithm。

Meta Learning主要希望紅色框框的一些人為設計,可以取代為機器自己學。

再來,我們需要一個評量準則來決定Learning Algorithm $F$ 的好壞。

在machine learning,我們需要準備的就是很多training的資料以及testing的資料。
在meta learning,我們則是需要準備training的task跟testing的task,每一個task裡有training set跟testing set。測試的task當然要跟訓練的任務不太一樣,有時候我們也會從training set切出一個validation set來調整參數。

meta learning往往都搭配few-shot learning。few-shot learning指的是,假設我們現在要做分類任務的時候,每一種類別只給你很少很少的資料,希望機器可以看很少的例子就可以來分類。因為我要檢查一個learning algorithm好不好的時後,我就必須跑完整個訓練的流程,才知道我的learning algorithm好不好。假設跑完一個訓練流程要一天,那這樣的task根本無法做。所以說,往往在做meta learning的時候,都會假設我們今天是few-shot learning,這些task的訓練資料都很少,比較能快跑出訓練結果。

那在meta learning中,往往會把每個task的training set叫做support set,testing set叫做query set。因為真正的training set指的會是task,所以必須要給它們其他一個名稱。

Meta Learning的流程:

最後的結果 $l$ 就是整個Meta Learning這個方法的好壞。

那在Meta Learning中有一個benchmark的dataset,如同在影像辨識的mnist dataset。Omniglot(歐 ㄋ一 嘎)裡頭總共有1623個符號,每一種符號會有20張範例。下面就是一堆不同的符號。

Omniglot 往往被設計成一個 few-shot classification的task。

N-ways K-shot classification: In each training and testing tasks, there are N classes, each has K examples.

20-ways 1-shot : 總共有20個不同符號,每一個類別只有一張圖片,希望機器就可以學出一個20類的分類系統。如果直接用普通方法去學一定爆炸,但就希望meta-learning能幫助我學出一個演算法,只要看過一個example就可以分類的很好。

Split Train & Test

Split your characters into training and testing characters
(1623 char. $\rightarrow$ 1200 train char., 423 test char.)

  1. Sample N training characters, sample K examples from each sampled characters $\rightarrow$ one training task.
  2. Sample N testing characters, sample K examples from each sampled characters$\rightarrow$ one testing task.

MAML (Model Agnostic Meta-Learning for Fast Adpation of Deep Networks, 2017)

缺點:Network structure要一樣

想法:只focus在每個weight的初始值 $\phi$

MAML vs. Model Pre-training

在做transfer learning時會用Model Pre-training的方法。現在我要做的某個任務data很少,但另外一個相關認為data數量很多,把model pre-train在多量資料的任務上,fine tune在少量的資料的任務上。

在MAML,$l^{n}$是用$\phi$訓練過後的model $\hat{\theta^{n}}$計算出來的。
在Model Pre-training,$l^{n}$拿的是現在手上的model去評估他現在在我拿來要做Pre-training的任務,表現怎麼樣。

MAML的主要想法:
找到一個初始值$\phi$,然後利用這個$\phi$去訓練過後的model $\hat{\theta^{n}}$在各自task表現要好。

Model Pre-training的主要想法:
現在我們要找到一個$\phi$,同時讓在每個task表現很好。

MAML : Fine $\phi$ achieving good performance after training. (model 潛力如何)

Model Pre-training : Fine $\phi$ achieving good performance. (model 現在表現如何)

MAML 在實做時的 Assumption:

Training Algorithm 只會做一次參數update。
也就是說,$\phi$是機器自到的初始值,計算一次gradient,updata後得到的$\hat \theta$就是最後的模型結果。

可能的理由:

  1. Fast … Fast ….
  2. Good to truly train a model with one step.
  3. Few-shot learning has limited data. (updata太多容易overfitting)

** 但在testing Task 可以update很多次參數

Warning of Math

$\frac{\partial \hat \theta_{j}}{\partial \phi_{i}}$ using first-order approximation.

所以 $\nabla_{\phi}L(\phi) = \nabla_{ \phi} \sum_{n=1}^{N} l(\hat \theta) = \sum_{n=1}^{N} \nabla_{\phi}l(\hat \theta) = \sum_{n=1}^{N} \nabla_{\hat \theta}l(\hat \theta)$

Real Implement:

初始化初始值 $\phi^{0}$,假如我們只做1-batch,現在要train task m時,我們就把$\theta^{0}$初始值去traim task m model並update一次得到$\hat \theta^{m}$。接著再update一次得到update的方向,把它用來當作update 初始值$\phi^{0}$的方向到$\phi^{1}$。

那pre-training是長怎樣?

Reptile (2018)

不限制只能update一次,可以很多次。

MAMO vs. Pre-training vs. Reptile

More issue :

Powered by Hexo and Hexo-theme-hiker

Copyright © 2020 - 2021 DSMI Lab's website All Rights Reserved.

UV : | PV :