back to index
【機器學習2021】元學習 Meta Learning (一) - 元學習跟機器學習一樣也是三個步驟

link |
好,那這個現在要講的是meta learning,那這是這一門課最後一個主題了。
link |
那什麼是meta learning呢?meta這個詞彙又是什麼意思呢?meta這個詞彙啊,如果你要翻成中文的話,通常會翻譯成圓,哪個圓呢?就是一元復始那個圓。
link |
那meta learning這個meta到底是什麼意思呢?當你說一個東西是meta x的時候,代表說這個東西是x的x。
link |
所以meta learning從它字面的意思來看就是學習的學習,所以我這邊說什麼叫meta learning?meta learning就是learn to learn,如果翻譯成中文的話,我就會說meta learning是學習如何學習。
link |
所以這個meta learning跟我們之前講的machine learning已經是另外一個層次的東西了,拿來作為這一堂課的收尾,剛剛好我們要邁向下一個領域。
link |
那為什麼我們要學習如何學習呢?想想看,你在這一門課的作業都在做什麼事情。
link |
也許你的朋友覺得你在做很潮的東西,這門課有很多很潮的作業,比如說動畫人物的生成啊、比如說翻譯啊、比如說玩Atari的遊戲啊等等。
link |
你媽覺得你一直坐在電腦前面,那大眾覺得這門課就是學一些AI相關的很潮的東西,然後你的指導教授知道說machine learning背後有很多數學,
link |
那你自己呢,這個圖的意思就是你覺得自己很強啦,希望你覺得自己很強。那事實上你在做的事情是什麼呢?事實上你就在調參數對不對?
link |
大部分的時候,deep learning就是在調hyperparameter,我其實不會否認這一件事,deep learning就是不能不調hyperparameter。
link |
那調hyperparameter真的是一件非常煩的事情,決定什麼network的架構啊、決定learning rate啊等等,真的是一件很煩的事情。
link |
那有什麼好方法來調learning rate呢?實際上沒有什麼好方法來調這些hyperparameter。
link |
今天業界最常拿來解決調hyperparameter的方法呢,就是買很多張GPU啦。
link |
對業界來說,他們train model的時候,就像是這個翻車魚一樣,一次訓練多個model,那有的train不起來就丟掉,最後只看那些可以train起來的model,他會得到什麼樣的performance。
link |
所以在業界啊,你做實驗的時候,往往就是一次開個一千張GPU啊,一千張GPU跑一千組不同的hyperparameter,看看哪一組hyperparameter可以給你最好的結果。
link |
但是在學界呢,在學界你沒有一千張GPU,其實我這邊說業界用一千張GPU,這其實都是低估了他們使用的GPU的量啊。
link |
你知道這個Flag那些大公司在採買GPU的時候,他們的單位都是用萬來算的,這一次要買三萬張GPU這種等級。
link |
所以這個業界今天在deep learning上的規模呢,真的是跟學界是不太一樣。所以同學們去業界實習的時候很高興,一次可以用一千張GPU。
link |
回來就突然不知道怎麼做實驗了,因為在學校每個人只有一張GPU,那就好像說熊貓呢,每次只生一胎而已。
link |
那怎麼辦呢?通常這個時候你只能通靈祈禱說,憑著你的經驗跟直覺定一組好的hyperparameter,祈禱這組hyperparameter可以給你好的結果。
link |
但是有沒有更好的方法來決定這一些hyperparameter呢?今天既然我們說我們在做的是machine learning,機器可以自動學出一個model。
link |
那hyperparameter能不能用學的呢?learning rate、內握架構這些東西,能不能直接用認的根據data去把它認出來呢?
link |
這就是meta learning其中一個可以幫助我們的事情。
link |
好,那在講meta learning之前,我們再回頭來複習一下machine learning。
link |
那為什麼要再重頭複習machine learning呢?你等一下會發現說meta learning最基本的想法跟machine learning最基本的想法其實並沒有非常大的差異。
link |
好,machine learning到底在做什麼呢?我們這邊要講的東西跟我們第一堂課講的是一模一樣的,所以就首尾呼應。
link |
我們用meta learning做結,首尾呼應,回過來複習第一堂課的時候,我們到底講了些什麼?
link |
第一堂課的時候我告訴你說什麼是machine learning,machine learning就是找一個function。
link |
比如說你要做一個影像辨識的系統,怎麼辦?找一個function,輸入是一張圖片,輸出是影像辨識的結果。
link |
那我們說machine learning就是三個步驟,還記得嗎?第一堂課就告訴你machine learning就是三個步驟。
link |
第一個步驟是什麼?第一個步驟是定一個function,這個function裡面有一些未知的參數。
link |
在deep learning這個領域裡面,所謂有未知參數的function其實就是一個network。
link |
而network裡面的weight跟bias,neural的weight跟bias就是這些未知的參數,它們是準備要被學出來的。
link |
那在這一門課裡面呢,我們通常用setup來表示這些準備要被學出來的參數。
link |
那一個network呢,在這一堂課裡面我們常常把它寫成F下標setup,代表說network本身是一個function,
link |
這個function裡面有一些參數,這些參數我們用setup來表示它,這是第一步。
link |
第二步是什麼?第二步是我們要定一個loss function,這個loss function是一個未知參數setup的function。
link |
把setup代入loss,我們就知道這個setup是好還是不好。
link |
怎麼定這個loss function呢?那你需要有一些訓練資料,這些訓練資料需要有label,
link |
那你把這些訓練資料,假設是要做影像辨識的話,就把這些圖片丟到某一個function裡面,
link |
由setup所parameterized的那個function裡面,看看它會得到什麼樣的輸出,再跟你的正確答案算一下距離。
link |
我們通常如果是分類問題,就算cross entropy,把每一個example的cross entropy通通都加起來,就是我們的loss。
link |
那第三步呢?第三步就是要找一個setup,這個setup可以讓loss越小越好。
link |
所以我們會寫一個這樣的式子,我們就是要找一個setup,這個setup可以讓L越小越好。
link |
這個可以讓loss最小的setup,我們用setup star來表示它。
link |
那要怎麼解這一個問題呢?在這一堂課裡面,我們用的都是gradient descent。
link |
找出setup star以後就結束了,你有一個setup star,你就有一個fsetup star,那你就可以拿fsetup star來做你想要它做的事情,
link |
你就可以拿fsetup star來做影像的分類。
link |
這個是機器學習,這個是我們在第一堂課就跟大家講過的內容。
link |
好,接下來我們進入meta learning,怎麼學習,如何學習。
link |
其實學習這件事,它本身也是一個function。
link |
一個machine learning的algorithm,你把它簡化來看,其實它就是一個function。
link |
這個function,我們用大寫的F來表示它。
link |
這個function的輸入是什麼?這個function的輸入不是一張圖片,而是一個data set。
link |
你把你的訓練資料丟到這個function裡面,它輸出什麼?它輸出訓練完的結果。
link |
假設我們要訓練的是一個classifier,那這個function就是吃訓練資料作為輸入,輸出就是classifier。
link |
我們要拿來分類的那個classifier。
link |
有了這個classifier以後,你就可以把測試資料丟進去,然後希望它輸出來的結果是我們要的。
link |
所以一個learning的algorithm,它是一個function,我們這邊用大F來表示它。
link |
而它的輸入就是訓練資料,它的輸出是另外一個function,它的輸出是一個classifier。
link |
但這個大F這個function是怎麼來的呢?它是handcrafted的,所謂handcrafted的意思就是它是人定的,它是人想出來的。
link |
我們今天的這些learning algorithm,deep learning啊,然後gradient descent啊等等,都是人想出來的。
link |
那我們能不能夠直接學這個function呢?我們能不能夠用machine learning的概念來學這個function呢?
link |
我們能不能夠做到學習如何學習這件事?怎麼做呢?並沒有那麼異想天開。
link |
想想看在machine learning裡面我們是怎麼找一個function的,透過我們講的三個步驟。
link |
在meta learning裡面,其實我們要找的也是一個function,只是這個function跟machine learning一般要找的function不一樣。
link |
我們要找的function是一個learning的algorithm,但是我們也可以透過在machine learning裡面學過的三個步驟,來想辦法把這個learning的algorithm找出來。
link |
這個就是meta learning要做的事情。
link |
其實我所知那個熊貓就是只生一到兩胎,對不對?它好像沒有辦法一次生產很多的後代,就是這樣。
link |
那我們剛才說machine learning透過三個步驟來找function,那meta learning透過三個步驟來找learning algorithm。
link |
第一個步驟是,你的learning algorithm裡面要有一些要被學的東西。
link |
就好像在machine learning裡面我們說neuron的weight跟bias是要被學出來的,那在learning algorithm裡面有什麼東西是要被學出來的呢?
link |
那就看你什麼東西你想要讓機器自己幫你決定,那些就是要被學出來的東西。
link |
在deep learning裡面,你可能會考慮想要自動學出neural的架構,你可能會考慮想要學初始化的參數,那你可能會考慮想要學learning rate。
link |
這些我們之前都是讓機器自己決定,不是機器說錯了,之前我們都是人自己決定的,這些什麼neural的架構啊,learning rate啊,那個是你自己設的,你會設不同的參數,看看哪一個參數可以得到最好的結果。
link |
我們把這些在learning algorithm裡面我們想要它學的東西統稱為phi,之前我們是用theta來代表一個function裡面我們要學的東西,那我們現在用phi來代表一個learning algorithm裡面我們想要它學的東西。
link |
所以一個learning algorithm在接下來的投影片裡面,我們都把它寫成f下標phi,代表說這個learning algorithm裡面有些是未知的,有phi這個參數,它是未知的。
link |
好,那其實不同的meta learning的方法,它就是想辦法去學不同的component,它就是想辦法去學一個learning algorithm裡面不同的component,當我們去學不同的component的時候,我們就有了不同的meta learning的方法。
link |
好,那第二步呢,第二步我們說要定一個loss function,這個loss function會決定說某一組參數它有多好。
link |
那現在我們的loss function在meta learning裡面,我們的loss function就是要決定一個learning的algorithm它有多好。
link |
那我們這邊同樣用大L來代表這個loss function,大L的phi就代表說現在這個algorithm用phi來作為這個參數的這個algorithm它到底有多好。
link |
如果L的phi它的值很小,loss很小,就代表它是個好的learning algorithm,反之它就是一個不好的learning algorithm。
link |
但是我們要怎麼決定這個大L呢?在一般的machine learning裡面,我們說大L來自於訓練資料,在meta learning裡面大L是如何決定的呢?
link |
我們的訓練資料是什麼呢?在meta learning裡面,我們收集的是訓練的任務。
link |
假設你今天想要訓練一個binary的classifier,想要訓練一個二元的分類器,那你就要準備很多二元分類的任務,我們就要準備很多二元分類的任務。
link |
舉例來說,你有一個任務1,這個任務1就是要分別蘋果跟橘子的差別。
link |
你有一個任務2,它就是要分別車跟腳踏車的差別。而每一個任務裡面,我們都會有分訓練資料跟測試資料。
link |
所以這個meta learning它是有點複雜的,我們有訓練的任務,每一個任務裡面有訓練資料、有測試資料。
link |
接下來我們就是要來定這個大L應該長什麼樣子。
link |
有了這些訓練任務以後,我們怎麼知道一個algorithm好不好呢?
link |
那就把某一個任務裡面的訓練資料拿出來,給這個algorithm學看看。
link |
所以我們有一個任務1,任務1是分辨蘋果跟橘子,我們就把任務1裡面的訓練資料拿出來,丟給這個learning的algorithm,讓它去根據這些訓練資料進行學習,那你就會學出一個classifier。
link |
我們這邊用Fθ這個上標E*)來代表說這個是任務1的classifier,它的工作是分辨蘋果跟橘子。
link |
它是根據這個learning algorithm它找出來的最好的classifier。
link |
那我們怎麼知道這個classifier好不好呢?如果這個classifier是好的,那就代表我們的algorithm是好的。
link |
反之如果這個classifier是不好的,就代表說這個algorithm是不好的,那不好的algorithm我們就會給它比較大的大寫的L的loss。
link |
那怎麼知道這個classifier好不好呢?我們就把這個classifier跑在訓練資料上。
link |
所以不要忘了每一個任務裡面,說錯了,我們就把這個classifier跑在測試資料上。
link |
那不要忘了這邊每一個任務裡面都是有訓練資料跟測試資料的。
link |
所以我們就用訓練資料得到一個classifier以後,把測試資料拿出來,然後用這個classifier來分類看看,看看會得到什麼樣的結果。
link |
那你知道我們的測試資料是有標註的,在我們的每一個任務裡面,我們的訓練資料是有標註的,測試資料也是有標註的。
link |
所以我們可以把測試資料的這些圖片丟到F5學出來的這個classifier裡面,得到classifier predict的結果,然後再跟正確答案做一下比較,然後我們就得到一個L上標1。
link |
那這個L上標1就代表說這個classifier用在這些測試資料上的時候,它的表現如何。
link |
這邊講一下這個L上標1是怎麼被計算出來的,怎麼計算L上標1呢?其實跟我們在做machine learning的時候是很像的。
link |
我們就是把測試的這些資料丟到Fθ上標1 star裡面,把這些測試資料丟到Fθ上標1 star裡面,然後它會得到輸出,然後計算輸出跟正確答案之間的差異。
link |
所以我們可以計算cross entropy,把cross entropy通通加起來,就得到L上標1。
link |
如果這個L上標1的值越小,這個loss越小,在測試資料上面的這個loss越小,就代表我們訓練出來的classifier越好,那這樣就代表我們的learning algorithm越好,它是一個loss小的learning algorithm。
link |
那反之呢,如果這個L越大,也就是我們認出來的這個classifier用在測試資料上的結果越差,就代表說我們現在的這個learning algorithm是一個不好的learning algorithm。
link |
那到目前為止啊,我們都只考慮了一個任務,那在meta learning裡面,你不會只考慮一個任務。
link |
你準備了一大堆的訓練的任務,所以你不會只用蘋果跟橘子的分類來看一個binary classifier learning的algorithm它的好壞。
link |
這是一個可以學binary classifier的algorithm,但我們不會只拿蘋果跟橘子的分類來看它好不好,你還會拿別的二元分類的任務來測試它。
link |
比如說,你就把那個分腳踏車跟汽車的訓練資料丟給這個classifier,丟給這個learning的algorithm,叫它學一個classifier。
link |
雖然這兩個learning的algorithm是一樣的,但是會丟進去的訓練資料不一樣,所以產生的classifier也不一樣。
link |
Fseta上標1 star代表的是說,這一個classifier它做的事情是分類蘋果跟橘子,那這個seta上標2 star是分類腳踏車跟汽車。
link |
好,那我們一樣測任務2呢,它有一些testing的data,我們一樣把它的testing data丟給這個Fseta上標2 star,然後看看說得到的正確率怎麼樣,我們就計算出L2。
link |
L2就是這個learning的algorithm它在第二個任務上的表現。
link |
我們現在知道說,這個learning的algorithm F5在任務1跟任務2上的表現以後,我們就把任務1跟任務2上的表現把它加起來,就得到這個algorithm的total loss。
link |
那這邊呢,我們在做舉例的時候只講了兩個任務,但是實際上你在做meta learning的時候,你不會只準備兩個任務,你會準備一大堆的任務。
link |
哦,所以你今天的大L的Five啊,這個Five到底有多好呢?你會看在所有任務上面loss的平均值。
link |
你會準備大N個任務,這個N可以是一個很大的數字,你準備一個大N個binary二元分類的任務,然後把用Five來當作參數的這個learning algorithm去這些大N個任務上都跑過一遍。
link |
在這大N個任務上都訓練出大N個classifier,然後在大N個任務的測試資料上去看看說,這一個classifier,這大N個classifier表現怎麼樣,然後計算出大N個loss,把所有的loss平均起來,就代表了現在這個learning algorithm它的表現有多好。
link |
好,講到這邊啊,有一件事情你可能會覺得有點怪怪的。這邊在每一個任務我們要計算一個loss的時候,對每一個任務要計算loss的時候,我們是用測試資料來進行計算。
link |
而在一般的machine learning裡面,所謂的loss其實是用訓練資料來進行計算的。在一般的machine learning裡面,我們的大L是用訓練資料進行計算,但是在meta learning裡面,我們的這個小L是用測試資料進行計算。
link |
你一聽到什麼用測試資料是不是就覺得讓你心跳一下,咦,這邊怎麼可以用測試資料呢?我們在第一堂課就有學過說,你是在訓練資料上面進行訓練,然後把你的classifier用在測試資料上啊,在訓練資料上訓練一個模型,然後用在測試資料上啊,你怎麼會把測試資料拿來做使用呢?
link |
但是這邊啊,跟一般machine learning不一樣的地方是,我們做的是meta learning,我們的訓練的單位是task,是任務,所以你可以用訓練的任務裡面的測試資料,訓練的任務裡面的測試資料是可以在meta learning的訓練的過程中被使用到的。
link |
那我知道聽到這邊也許你會有一點confused,這個在胡說什麼,怎麼又有訓練任務,然後訓練任務裡面又有訓練的資料,也有測試資料,聽起來亂亂的。
link |
那等一下呢,我們把meta learning的演算法介紹完以後,我們會把meta learning跟machine learning再做一次比較,希望那個比較可以讓你更清楚meta learning跟一般machine learning它們相同的、不相同的地方在哪裡。
link |
好,我們講完了兩個step,我們現在已經知道要train什麼,我們也可以定出loss,第三個任務就是要找一個learning的algorithm,找一個find,讓loss越小越好。
link |
這件事怎麼做呢?我們已經寫出了那個loss的function,叫l.find,l.find是summation over大N個任務的ln。
link |
那我們現在要找一個find,去讓l.find它的值最小。那怎麼做呢?就是找一個find,讓l.find的值最小,那這個可以讓l.find的值最小的這個find,我們叫做find stop。
link |
那怎麼解這個optimization的問題呢?就看看你要用什麼方法解都可以啊,看你知道什麼你可以解optimization問題的方法啊。假設今天啊,我們知道怎麼計算partial find、partial l.find,假設我們會計算這個gradient,那沒有問題,直接用gradient descent就結束了。
link |
但是有時候你會遇到一些問題就是,如果這一項是沒有辦法計算的呢?因為這個find,它可能是一些什麼network架構啊之類很複雜的東西,如果partial find、partial l.find,這個find對大L的gradient是無法計算的,那怎麼辦呢?
link |
那你記不記得我告訴你說,如果你在解一個optimization的problem的時候,如果你沒有辦法計算gradient,沒有辦法計算微分的時候怎麼辦呢?用reinforcement learning硬train下去就結束了。
link |
所以假設今天L.find沒有辦法對find做微分,那沒關係,也許你可以考慮用RL硬做,或者是也有人會用一些evolutionary的algorithm硬做,反正就是硬把這個optimization問題解開,你就得到一個learning的algorithm叫做find star了。
link |
好,那假設反正不管用什麼方法,我們現在把這個optimization的問題解開了,得到find star了,那就結束了,我們就讓機器自己找出來了一個learning的algorithm。
link |
這個learning的algorithm是一個被learn出來的learning的algorithm,它是一個被學出來的學習的演算法,我們叫它F下標find star。
link |
所以整個meta learning的framework是這個樣子,你收集了一大堆訓練資料,根據這些訓練資料,透過我們剛才講的三個步驟,你就學出來了一個學習的algorithm。
link |
這個學習的algorithm是學出來的,你有一個learn的learning algorithm,聽起來有點拗口,它是一個learn的learning algorithm,我們叫做F find star。
link |
接下來呢,你有測試的任務,假設訓練的時候,訓練的任務是教機器分蘋果跟橘子,教機器分腳踏車跟汽車,測試的時候是要分貓跟狗。
link |
那每一個任務裡面都有訓練資料,都有測試資料,那你就把測試任務裡面的訓練資料,這個有點拗口哦,它是測試任務裡面的訓練資料,
link |
你把測試任務裡面的訓練資料丟到這個學習的演算法裡面,讓它進行學習,學出一個classifier,然後呢,再把這個classifier用在測試任務裡面的測試資料上,然後你就可以得到你想要的結果。
link |
好,那測試的任務是我們真正關心、真正要解的、真正希望我們有好結果的任務,而訓練任務是跟測試任務無關的那些任務,這些訓練的任務它的目標是要來找出學習的演算法。
link |
那用這些訓練的任務找出學習的演算法以後,用在測試的任務上,希望會有好的結果。那像這一種啊,學習的演算法它厲害在哪裡呢?不知道大家有沒有聽過fusion learning,翻成中文通常是翻成那個小樣本學習啦,fusion learning,
link |
就是期待機器只看幾個example,每個類別都只給它三張圖片,它就可以學會做分類。那很多人聽到fusion learning往往會跟meta learning搞混在一起,就想說meta learning其實就是fusion learning。
link |
那其實它們兩者是有不太一樣的區別的,fusion learning比較像是我們期待機器達成的目標,就是只用一點點訓練資料就可以訓練出我們要的結果,而meta learning是學習如何學習這一件事情。
link |
但是為什麼大家會覺得fusion learning跟meta learning非常的像呢?那就是因為今天你想要達到fusion learning,你想要有一個什麼學習的演算法,它只要看到一點點的資料就可以學起來,往往不是人類可以想得出來的學習演算法。
link |
所以那些fusion learning的algorithm通常就是用meta learning得到的,所以大家往往會覺得說fusion learning幾乎就等同於是meta learning,不過兩者還是有微妙的區別的。
link |
我們到這邊看一下同學們有沒有問題要問的。
link |
好,我看一下。好,這個建成說等於測試任務是不能碰的,對照一般ML的話,沒錯,對照一般ML的話,這個是你的訓練資料,這個是你的測試資料。
link |
不過我覺得在meta learning裡面,我們講這個訓練資料這句話的時候要非常的小心,這個很容易跟訓練任務裡面的訓練資料搞混。
link |
所以我們有一堆訓練任務,我們有一堆測試任務,訓練的任務拿來訓練,然後用在測試任務上。
link |
有個同學說每個任務的測試資料對於meta learning算是訓練資料,對,就是訓練任務裡面的訓練資料跟測試資料就是我們的訓練資料,但是在meta learning裡面我們要避免用訓練資料這個詞。
link |
很多paper在寫meta learning相關的事情的時候,他其實也就沒那麼講究,他就會告訴你說,哦,我用了一些training data,他就沒有講清楚說他的training data到底是指training task還是說testing task裡面的training data,這個就非常容易造成誤解。
link |
所以在這一堂課裡面,我們就說訓練的任務裡面有訓練資料跟測試資料,測試的任務裡面有訓練資料跟測試資料。就想成是training task跟testing task就好。
link |
對,對,對,就是要想成training task跟testing task。testing task的training data在meta learning裡面是不能碰的,對,testing task的training data是不能碰的。
link |
好,那個建成說fusion是目標,meta是手段,對,對,就是這個意思,那看起來大家的觀念都還蠻正確的。好,那接下來呢,呃,就先跟大家稍微比較一下machine learning跟meta learning的差異,然後呢,我們再休息10分鐘。
link |
好,我們來看一下machine learning跟meta learning的目標。machine learning的目標是要找一個function,我們這邊用小f來表示。這個function可能是一個classifier,擺張圖片丟進去,它就告訴你分類的結果。
link |
meta learning一樣是找一個function,但它要找的function我們這邊用大f來表示,我們要找一個大f,這個大f是一個可以找小f的大f,不知道大家聽不聽得懂我在說什麼。
link |
總之你有一個learning的algorithm叫做大f,這個大f持訓練資料作為輸入,它直接輸出訓練的結果,也就是一個classifier,希望這個classifier可以被拿來使用,希望這個classifier可以丟一張圖片進去,就輸出分類的結果。
link |
那訓練資料呢?在machine learning裡面,你是拿某一個任務裡面的訓練資料來進行訓練。在meta learning裡面,我們是拿訓練的任務來進行訓練,而每一個訓練任務裡面都有訓練資料跟測試資料。
link |
不過,因為訓練任務裡面有訓練資料跟測試資料,這個很容易搞混,所以你會發現很多文獻為了解套,怎麼解套呢?他們不把任務裡面的訓練資料跟測試資料叫做訓練資料跟測試資料。
link |
在文獻上常常有一個解套的方法是,把任務裡面的訓練資料叫做support set,把測試資料叫做query set,尤其是在一個叫做learning to compare那個系列的work裡面,更常使用support set跟query set這個詞彙。
link |
所以你看到有個paper說,他用support set做了什麼,再用query set怎樣怎樣怎樣,這個support set跟query set指的就是一個任務裡面的訓練資料跟測試資料。
link |
那在machine learning裡面呢,我們就是有一個handcrafted的learning algorithm,訓練資料丟進去,訓練結果也就是一個classifier跑出來。在meta learning裡面,我們是有一堆訓練的任務,我們要用這些訓練的任務找出一個learning的algorithm。
link |
那因為meta learning它所謂的訓練是involve一大堆任務的,所以在這一堂課裡面,我們把meta learning的learning叫做across-task learning,across-task training,它是跨任務的學習。
link |
我們把一般的machine learning的學習叫做within-task的training,因為如果我們講training的時候,你很容易誤解,不知道它是這樣子的training,任一個learning algorithm的training,還是有了learning algorithm以後找出某一個classifier的training。
link |
這兩個training是不一樣的,所以這個也是一個training的過程,這個也是一個training的過程,但為了區別這兩種training的過程,我們把根據一堆任務學出learning algorithm這件事叫做across-task的training,把只用一個任務裡面的訓練資料來學出一個classifier這件事叫做within-task的training。
link |
所以在machine learning裡面,完整的framework就是你有訓練資料,然後你把這些訓練資料拿去產生一個classifier,然後把testing的data丟到這個classifier裡面,你就得出classifier的結果。
link |
而在meta-learning裡面,你是有一堆訓練的任務,把這些訓練的任務拿來產生一個學出來的learning algorithm,叫做SEDA 5-star。
link |
接下來,你有一個測試的任務,測試的任務裡面有query set跟testing set,也就是suppose set跟query set,你把測試任務裡面的訓練資料丟到認出來的learning algorithm裡面,得到一個classifier,再把測試資料丟進去,然後得到分類的結果。
link |
我們把meta-learning裡面的這個測試叫做across-task的testing,因為它不是一般的testing,一般的machine learning,你的testing我們叫做within-task的testing,你就是把測試資料丟進去就結束了。
link |
那在meta-learning裡面,我們要測試的不是一個classifier表現的好壞,而是一個learning algorithm表現的好壞,所以在meta-learning裡面,我們的testing還包含了training。
link |
大家了解嗎?在meta-learning裡面,我們的testing還包含了within-task的training,所以為了要強調說meta-learning的testing不是一般的testing,我這邊叫做across-task的testing,跨任務的測試。
link |
在這個跨任務的測試裡面,在across-task的testing裡面,包含了within-task的training跟within-task的testing,所以今天在across-task的testing裡面,你有within-task的training加within-task的testing。
link |
那有時候呢,你在一些文件上會看到說,這整個流程,一次within-task的training加一次within-task的testing,這個流程合起來叫做一個episode。
link |
那Loss呢,那在machine learning裡面,我們有一個大寫的L of theta,那這個L是summation over所有的training data,但這個training data是來自於某一個任務。
link |
在meta learning裡面呢,我們是summation over,在meta learning裡面呢,這個小寫的L,它是summation over某一個任務裡面所有的測試資料,而這個summation呢,是summation over所有的任務。
link |
所以machine learning,你的大L是用一個任務算出來的,meta learning,你的大L是用一把任務,大N個任務算出來的。
link |
好,那接下來呢,我們來稍微講一下training的時候會發生什麼樣的狀況。
link |
在meta learning裡面呢,假設你training的時候需要算小L的N,因為一般我們在做training的時候,假設你今天要用gradient descent,那你通常會需要把你的Loss能夠求出來,你當然要能夠求出你的Loss。
link |
那你要能夠求出這個大L,我們就要能夠算每一個任務的小L。要算每一個任務的小L,其實沒有那麼容易,要算每一個任務的小L,你需要經過一次within task的training,一次within task的testing,也就是一個完整的episode,你才能夠算出一個小L。
link |
哦,所以這邊要算一個小L啊,這個運算量往往非常大,你光是要算一個任務的小L,然後把它通通加起來變成大L,你就要做一次完整的訓練,再做一次測試,你才能夠把這個小L把它給算出來。
link |
好,那假設我們今天這個optimization的algorithm裡面,你要找一個範例讓L的範例最小這件事情的時候,你需要算這個大L很多次的話,哇,那你的across task training裡面就要包含做within task training跟within task testing好多次,也就是你的across task training裡面就要包含很多個episode。
link |
那在文獻上啊,尤其是learning to initialize,也就是非常知名的memo那系列的work裡面,往往把across task training叫做outer loop,把within task training叫做inner loop,因為你在across task training裡面,你要跑好幾次within task training。
link |
所以across task training是outer loop,那within task training是inner loop。不過outer loop、inner loop這個稱呼啊,通常只有在learning to initialize那個系列的work上才會有啦,如果不是learning to initialize那個系列的work,通常也不會這樣叫。
link |
因為有時候你的learning的algorithm啊,它不見得是iterative,我們在做gradient descent的時候,那個learning的algorithm就是要反覆跑嘛,要iterative去跑嘛,所以它有很多loop,所以這邊叫outer loop跟inner loop。但有些learning的algorithm其實沒有loop,那這樣叫outer loop跟inner loop就有點怪啦,所以我這邊就叫做within task training跟across task training。
link |
但是在learning to initialize那個系列的文章裡面,within task training叫inner loop,across task training叫做outer loop。
link |
好,剛才講的都是meta learning跟machine learning的差別,那它們有沒有什麼一樣的地方呢?它們其實有蠻多一樣的地方的。
link |
事實上很多你在machine learning那邊學到的知識跟基本概念,都可以直接搬到meta learning來用。舉例來說,在machine learning上面,你會害怕overfeed在你的training data上,對不對?
link |
你會害怕說你在training data上做得很好,但是在testing data上做得不好。在meta learning裡面也有一樣的問題,你會害怕說你machine找了一個learning algorithm,
link |
但這個learning algorithm只有在training的task上做得好,來一個新的testing的task反而會做得不好,所以meta learning也有可能有overfeeding的問題。
link |
如果遇到overfeeding的問題怎麼辦呢?在machine learning裡面,你是不是最釜底抽薪的方法就是收集更多的訓練資料。
link |
在meta learning裡面也可以做一樣的事,你要meta learning真的做得好,那你就收集更多的訓練的任務。
link |
你如果訓練的任務越多,就代表你的training example越多,那你在這些training任務上學出來的learning algorithm就越有機會可以generalize用到新的任務上面。
link |
那我們在machine learning上會做data augmentation,你會用一些方法來增加在沒有增加太多額外負擔的情況下增加你的訓練資料。
link |
在meta learning裡面,你也可以做task augmentation,你也可以想一些方法來增加你的訓練的任務。
link |
那這邊有一個meta learning的問題,你知道在做meta learning的時候,我們還是要做optimization,你還是要想辦法去找一個fine可以讓L2的fine越小越好。
link |
但是假設你今天minimize L2 fine的方法一樣用的是gradient descent,難道那個gradient descent就不用調參數了嗎?
link |
假設你要learn learning rate,但是你learn learning rate的時候,你也要用gradient descent,你不是有另外一組learning rate要調嗎?
link |
對,你就是有另外一組learning rate要調,所以你在自己實做meta learning的時候,也是要爆調一波參數的,只是你爆調的不是每一個任務訓練的參數,而是learn learning algorithm的時候的參數。
link |
所以你有時候會覺得,哇,做meta learning好像是為了避免讓自己壓力更大反而壓力更大,為了避免禿頭然後讓自己壓力更大結果反而禿頭,所以做meta learning也是需要調參數的。
link |
但是meta learning期待做到的目標是,假設我們花了很多力氣爆調一波參數,找到一個好的learning algorithm以後,它可以用在任何新的任務上,以後在新的任務上就再也不用調參數了。
link |
一勞永逸,我們爆調一次參數,找出一個好的learning algorithm,這個好的learning algorithm就不必調參數了,可以用在任何新的任務上。
link |
好,那既然講到要調參數啊,那就遇到一個問題了,記不記得在做machine learning的時候,我們不是只有training set跟testing set,我們是有training set,有development set,有testing set。
link |
你用development set來選擇你的模型,對不對?你用development set來決定比如說你的network架構應該長什麼樣子。
link |
而meta learning,我們也有參數要調啊,那meta learning是不是應該要有development task呢?我認為meta learning應該要有development task。
link |
所以在meta learning裡面,你應該要有training task,要有development task來決定訓練那個learning algorithm的時候的一些hyperparameter,然後才跑在testing的task上面。
link |
不過如果你讀meta learning的文獻,你會發現說很多meta learning的文獻,它是沒有development task的,它是只有training task跟testing task,但是我認為meta learning應該要有development task。
link |
好,我看一下哦。有同學問說,這樣會不會無限遞回,學習如何學習如何學習之類的?
link |
對,就是有可能會有這個問題。這就是一個梗啦,就是現在有meta learning,以後就會有人去提meta、meta learning,還會有人在提meta、meta、meta learning,不知道什麼時候才會停止。
link |
什麼狀況,L of phi會沒辦法對phi做為分?
link |
取決於你的,有同學問說L of phi什麼時候沒辦法對phi做為分,取決於你的phi是什麼,對不對?就是假設你的phi是比如說learning rate,你要能夠做為分啊,你要那個東西,就是你拿phi去對L of phi做為分的時候,你要能夠計算當phi做小小變化的時候,L of phi會有什麼樣的影響。
link |
那假設你的phi它根本就是discrete的東西,它是離散的東西,比如說neural架構一層兩層三層,那它根本沒有辦法做小小的變化啊,你根本沒有辦法說從三層變到三點一層,看它會發生什麼事嘛。
link |
所以,如果你的phi是一些離散的東西,那你沒辦法做為分。
link |
哦,下面有同學回答說,phi包含神經元連結的資訊之類的。
link |
對,然後,對,有一個同學說,像meta learning裡面,ilga之類的都可以用。
link |
development task是什麼?這個就是,你想想看,你在做meta learning的時候,你不是比如說你用gradient descent來解那個L of phi嗎?
link |
那gradient descent裡面不是也要調learning rate嗎?那你那個learning rate要怎麼決定?你是不是要試不同的learning rate?
link |
那你試不同的learning rate,有得到不同的learning algorithm以後,就我們現在的learning rate是要找learning algorithm的那個learning rate哦,我們試不同的learning rate得到一把learning algorithm以後,你怎麼知道哪一個是最好的呢?
link |
那你應該用development set來挑嘛,然後挑出development set最好的那個learning algorithm,然後才把它用在testing的task上面,對不對?
link |
這樣你才不會overfit到,你才不會等於是拿那個testing的task來調你的hyperparameter。
link |
很多人不知道用development task這件事,大家其實也不必太訝異,我覺得這個一個新的技術在發展的過程中啊,本來就會有很多的磕磕絆絆。
link |
那今天不是所有的論文,你會發現很多meta論語的論文,它沒有development task,但是我相信在比如說十年後,大家都會知道應該要用development task。
link |
那就好像說,哎,我十年前其實修過林宣田老師的機器學習,其實我也沒有修,我沒簽,我其實你知道就是機器學習這種課都不是你想要修就可以修的嘛,我當時也沒簽到啦,我是旁聽而已啦。
link |
那那個時候林宣田老師就說,哎,不是每個人都知道要用development的data set,你讀了很多論文,有些論文就沒有用development data set,它就是train在training data上,直接用在testing data上,用testing data來調參數。
link |
那個林宣田老師就說這個是cheating,那我們要知道不要這麼做。
link |
那今天大家都知道說machine learning就是要切training set、development set跟testing set,那未來大家也都會知道說meta learning就是要切training task、development task跟testing task。
link |
好,希望這樣有回答到大家的問題。我們在這邊休息一下,十分鐘後回來,我們就是五點四十六分回來。