談談無監督Meta Learning的研究
大家好!在今天這篇文章中我們來談談Unsupervised Meta Learning,這是一個很有意思的研究方向。
在 ofollow,noindex">Meta Learning單排小教學 中,我們已經提到,Meta Learning很神奇的地方就是Task裡面的Train和Test是可以不一樣的,比如Train是無監督學習,而Test是有監督,那麼我們就可以利用Test的有監督訊號來學習一個無監督學習了。因為這樣的設定,我們就可以構造出下面的無監督學習任務:
1)使用無標籤樣本來學習一個好的特徵表達feature representation
2)利用這個feature representation在Few-Shot Learning問題上取得好的效果
這樣的問題設計是很合理的,因為我們無監督學習的最終目標也是要在特定任務上取得比較好的效果。傳統的無監督學習方法比如VAE,我們訓練這個神經網路學出來了一些特徵表達,但是我們卻無法直接說明VAE的這套學習方式是直接對特定任務有利。舉一個類似的例子:image captioning影象標註問題,一開始的做法是使用純粹的監督學習來訓練這個神經網路,但是我們是使用人為設計的評價指標如BLEU,CIDEr-D來評價效果的好壞,這種情況下監督學習和評價指標沒有直接聯絡。所以近年來image captioning就採用增強學習的方法,基於評價指標來改進網路的效果,這就有了直接聯絡。
回到現在的無監督學習問題上,Few-Shot Learning這個task就是無監督學習的指標,我們可以利用這個指標通過Meta Learning來引導學習無監督學習,從而學到一個好的representation。
目前這一塊的研究有兩篇文章,一篇是《Learning Unsupervised Learning Rules》,另一篇是剛剛出來的《Unsupervised Learning via Meta Learning》。我們這裡簡單的說一下這兩篇文章的idea。兩篇文章的問題設定是一樣的。
1. Learning Unsupervised Learning Rules
這篇文章的idea就是直接利用Meta Learning特性,先利用無監督資料更新一下網路引數,然後利用更新後的網路引數來做Few-Shot Learning。通過反覆的訓練,就能夠使得這套神經網路在Few-Shot Learning上表現更好。所以,核心的問題是
如何用無監督資料更新網路引數呢?
這篇文章採用的是生成引數的方法,也就是本來如果是有監督學習,我們通過Loss可以通過反向傳播得到梯度進行更新,現在我們沒有了Loss,我們就自己額外構造一個神經網路利用當前的引數來直接預測要更新的引數:

這裡作者設計的是Neuron-Local的方式,既每一個神經元輸入到這個額外的神經網路中輸出對應的更新值,這樣的設計就不會受限於網路的結構了。簡化一下這個idea的基本過程就如下圖所示:

按照上圖,我們可以認為這個Meta Network學習到了Unsupervised Learning rule。輸入一些無監督資料,我們就可以來更新神經網路。更新完之後我們再用Few-Shot Learning監督學習來更新整個網路包括Meta Network:

Meta Network的設計其實也可以不按這篇文章的來,比如把Feature encoder的網路大小固定,那麼Meta Network就可以直接變成一個HyperNetwork,輸入所有當前引數,輸出一個新的更新引數。
2 Unsupervised Learning via Meta-Learning
這篇文章的idea和上一篇不一樣,比較人工的做法,主要是研究如何讓無監督資料也能做Few-Shot Learning。可是沒有標籤怎麼做?先用傳統的無監督學習方法學出一個基本的feature representation,然後使用K-means將無監督資料做分類,分完類那就變成有標籤資料了,這樣就可以構造task然後用MAML這樣的meta learning演算法來訓練。那我們肯定會懷疑,這樣分類顯然不會準啊,這樣構造的task也會有偏,沒有關係,因為我們有Test階段真實的有監督資料,通過Meta Learning,就可以使得無監督資料的分類效果越來越好了。所以,這篇文章把這個演算法稱為Clustering to Automatically Construct Tasks for Unsupervised meta-learning (CACTUs),核心在於自動為無監督資料構造Task。

這篇文章的idea也是有道理的,但是看起來有點醜,很麻煩的做法。
小結一下
今天我們簡單分析了一下無監督Meta Learning的基本思路和兩篇文章的做法,可以說這個問題確實很新,可以優化的地方還很多,怎麼才能學到一個更好的Meta Network是值得去思考的。與此同時,無監督Meta Learning也可以直接應用到RL領域上,事實上也有相關文章了,我們可以以後再談。最後,我們能否構造出更新更奇特的Meta Learning設定呢?train和test的不同還可以到什麼程度?這可能是更重要的問題。