天天看點

小樣本學習(one/few-shot learning)

原文:https://blog.csdn.net/mao_feng/article/details/78939864

原博位址:https://blog.csdn.net/xhw205/article/details/79491649

小樣本學習

來源:我們人類是具有快速從少量(單)樣本中快速學習能力的,其實在我們學習的過程中,人類的大腦将對象和類别組成有用的資訊将之分類。

首先需要聲明的是,小樣本學習屬于遷移學習。接着,舉個例子詳細闡述。

人類從未見到過“澳洲的鴨嘴獸”,給我們一張鴨嘴獸的照片後,人類就認識了!

有的朋友可能會想,為什麼我們人類總是能快速的學習到未知的事物?簡單的說,是因為人類生活中各種知識的積累以及人類天生的思考能力(如:類比能力)。知識的積累意味着我們是存在各種知識的先驗的,天生的思考能力意味着我們擁有強大的類比能力、強大的大腦算力。

以“人類從未見到過“澳洲的鴨嘴獸”,給我們一張鴨嘴獸的照片後,人類就認識了!”這句話為例。鴨嘴獸就代表未知的事物(new class),而我們生活中已經見到過的鴨子、狸貓、魚等動物就代表知識的先驗,我們把這種知識的先驗稱為 元知識 (Meta Knowledge),我們大腦的能快速的把從未見過的鴨嘴獸與這些元知識快速的類比(可能還存在一些其他腦力活動,如視覺提取物體的特征),得出結論:這個長得像鴨子嘴,還能像魚一樣遊泳、身形扁扁的新動物就是鴨嘴獸。

這裡有的朋友可能會疑問了,如果你是一個剛學會走路的孩子,什麼都沒見過,是否還存在這種快速的樣本學習能力呢?可以這麼想,人生來都是初始化的,裝備全靠打,IQ 高的元知識積累的就快,IQ 低的元知識積累的就慢。吐舌頭

機器學習目前都是類比人類的智能來做的,那麼對應我們的機器模型,few-shot learning 又是怎麼樣的呢?

對應我們的機器模型,few-shot learning 的核心任務可以當成識别新的類。例如:我們已經通過些許動物(狗除外)的樣本訓練出來了模型,我們想讓模型識别新的類-----狗。顯然,這就是要把源知識(source)遷移到包含狗的知識領域來(target)。顯然這正是遷移學習的範疇。這時候我們需要識别新的類------狗,比較簡單的解決方案是什麼呢?絕大部分同學會想到,把源模型當做預訓練模型,修改全連接配接層,進行 fine-tune。需要注意的是:

源模型是需要大量帶 label 的樣本訓練的,一般的如 Imagenet上預訓練模型
fine-tune 也是需要樣本量的支援的,不然 retrain 全連接配接層時很容易過拟合。 
           

fine-tune 本質還是依賴深度學習 big data 喂餐的政策,仿佛與我們的小樣本學習背道而馳。

我們來看看真正的 few shot 吧~

為了完成識别新類(狗)的問題,于是需要新來一張标好 label 的樣本(如 :有 label,樣本是田園土狗, 稱作 sample set 或 support set)用來泛化模型,那麼再來 test 樣本時候(如:無 label,樣本是哈士奇,稱作 query set 或者 test set),我們就可以把這個 哈士奇的樣本 label 标出來,達到分類的目的。這種學習叫做 one-shot learning,即單樣本學習。

注意:我這裡舉得例子,各品種狗的 label 都是 dog,不單獨區分細粒度。

同樣的,如果剛才來的是一堆标好 label 的樣本(除了田園土狗,可能還有京巴、吉娃娃、泰迪等做 support set),這種學習叫做 few-shot learning,即小樣本學習,一般 few 不會大于 20。

經過我上邊的介紹,可以對小樣本學習做個定義:

小樣本學習(one/few-shot learning)

自己的話解釋一下就是: 模型隻有少量的有 label 的訓練樣本 S ,S 中包括 N 個樣本,yi 代表各樣本的 label。因為測試樣本集中每個樣本都有一個正确的類别,我們希望,再來新的待分類的測試樣本 x’ 時候,正确預測出 x’ 标簽是 y’。

注: 把每個類别 yi 的單個樣本換成 k個樣本就 變成了k-shot learning , few-shot 一般指的是 k 不超過 20。
           

解決小樣本問題的一種模型(孿生網絡)

小樣本學習(one/few-shot learning)

結構意思就是:輸入兩張圖檔到兩個 CNN, 來比較兩種相同類别的機率。具體可檢視 https://sorenbouma.github.io/blog/oneshot/

如下圖簡單了解一下小樣本的訓練方式:

Training(訓練模型) Sample Set Query Set

Testing(測試模型) Support Set Test Set (無label)

訓練和測試過程是相似的,拿 Omniglot 資料集為例。

此資料集可以認為是小樣本學習的一個基準資料集。
它一共包含1623 類手寫體,每一類中包含20 個樣本。其中這 1623 個手寫體類來自 50 個不同地區(或文明)的 alphabets,如:Latin 文明包含 26 個alphabets,Greek 包含 24 個alphabets。
一般用于訓練的是 964 類(30個地區的字母),用于測試的是 659 類 (20個地區的字母)。

訓練的目的就是,用 964 個類來訓練模型,識别 659 個新的類。

如下圖的 24個 希臘字母,代表 Greek 文明下的 24 個類,每個字母隻有 20 個樣本。
           
小樣本學習(one/few-shot learning)

Training:

每次 iteration 從 964 個類中随機的選擇 20 個類,從每個類中的 20 個樣本采樣 5 個作為 support set,5 個 作為 query set。(選擇的這個數目可以自行改變)。
以孿生網絡為例,就是 query set 中的圖檔不斷的于 support set 的圖檔成對組合,訓練模型,确定模型參數。
           

Testing:

測試過程,對 659 個類中随機選擇 m 個類,每個類提供 k 個樣本作為 Support Set 來泛化模型。稱為 m-way k-shot。
以孿生網絡為例,在 m 個類中,若 Support Set 每類都為單樣本(即 m 個樣本),送進來的 Query Set ( 同樣的是 m 個類 )不斷的與 Support Set 成對相似度量,若相似,則歸于該類。
           

引言

深度學習(deep learning)已經廣泛應用于各個領域,解決各類問題,例如在圖像分類問題下,如圖1,區分這10類目标的準确率目前可以輕松做到94%。然而,deep learning是一種data hungry的技術,需要大量的标注樣本才能發揮作用。

小樣本學習(one/few-shot learning)

現實世界中,有很多問題是沒有這麼多的标注資料的,擷取标注資料的成本也非常大,例如在醫療領域、安全領域等。是以,我們現在讨論的是這樣一個問題的場景,也就是小樣本問題。它面臨的問題是:

訓練過程中有從未見過的新類,隻能借助每類少數幾個标注樣本;
不改變已經訓練好的模型。
           

還是用10類圖像分類資料為例,傳統的方法是基于左邊這些訓練集,獲得模型,然後對右邊測試集進行自動标注。而小樣本問題如圖2所示,我們大量擁有的是上方這5類的資料,而新問題(下方這5類)是隻有很少的标注資料。

小樣本學習(one/few-shot learning)

當标注資料量比較少時,怎麼學習出好的特征?我們需要泛化這些罕見的類别,而不需要額外的訓練,因為訓練會因為資料少、代價高、周期長而無法獲得收益。下面介紹近幾年幾種解決小樣本問題的方法,我們将這些方法稱為fewshot learning(如果隻有一個标注樣本,稱oneshot learning)。

基于Finetune

這種方法已被廣泛地應用。獲得一定量的标注資料,然後基于一個基礎網絡進行微調。

這個基礎網絡是通過含有豐富标簽的大規模資料集獲得的,比如imagenet,我們的淘寶電商資料,稱為通用資料域。然後在特定資料域上進行訓練。訓練時,會固定基礎網絡部分的參數,對領域特定的網絡參數進行訓練(這裡有很多訓練的trick,包括如何設定固定層和學習率等),如圖3。這個方法可以相對較快,依賴資料量也不必太多,效果還行。

小樣本學習(one/few-shot learning)

基于metric

該方法是對樣本間距離分布進行模組化,使得屬于同類樣本靠近,異類樣本遠離。簡單地,我們可以采用無參估計的方法,如KNN。KNN雖然不需要訓練,但效果依賴距離度量的選取, 一般采用的是一個比較随意的距離計算(L2)。另一種,也是目前比較好的方法,即通過學習一個端到端的最近鄰分類器,它同時受益于帶參數和無參數的優點,使得不但能快速的學習到新的樣本,而且能對已知樣本有很好的泛化性。下面介紹3個相關的方法。

孿生網絡 (Siamese Neural Networks)[1]

這個方法對輸入的結構進行限制并自動發現可以從新樣本上泛化的特征。通過一個有監督的基于孿生網絡的度量學習來訓練,然後重用那個網絡所提取的特征進行one/few-shot學習。

它是一個雙路的神經網絡,訓練時,通過組合不同類的樣本成對,同時輸入網絡進行訓練,在最上層通過一個距離的交叉熵進行loss的計算,如圖4。在預測的時候,以5way-5shot為例,從5個類中随機抽取5個樣本,把這個mini-batch=25的資料輸入網絡,最後獲得25個值,取分數最高對應的類别作為預測結果,如圖5。

小樣本學習(one/few-shot learning)

網絡結構如圖6所示,是一個8層深度卷積孿生網絡,圖中隻展示了其中一路計算,在網絡的4096維的全連接配接層後執行component-wise 的L1距離計算,産生一個4096維的特征向量,并通過sigmoidal激活獲得一個0到1的機率作為兩個輸入樣本是否相似的結果。

小樣本學習(one/few-shot learning)

比對網絡(matching networks)[2]

這篇文章的工作被李飛飛高徒karpath點贊過,成為之後相關研究中經常被對比的參照。該文章也是在不改變網絡模型的前提下能對未知類别生成标簽,其主要創新展現在模組化過程和訓練過程上。對于模組化過程的創新,文章提出了基于memory和attantion的matching nets,使得可以快速學習。對于訓練過程的創新,文章基于傳統機器學習的一個原則,即訓練和測試是要在同樣條件下進行的,提出在訓練的時候不斷地讓網絡隻看每一類的少量樣本,這将和測試的過程是一緻的。

具體地,它嘗試獲得一個從支援集S(support set, 由k個樣本及其标簽組成)到分類器y^ 的一個映射,該映射是一個網絡:P(y^ |x^ ,S),它基于目前的S,對每個未見過的測試樣本x^ 給出其标簽y^,該标簽讓P達到最大值。這個模型可以表示為如公式1),其中a是一個attetion。

小樣本學習(one/few-shot learning)

即一個新樣本的輸出(即在S上類别的分布)是S上的類attation線性組合,也就是對于離x^最遠的xi,其在某度量下的attation是0, 那麼其值就是和x^相似的xi所對應标簽的權重融合。

上述的attention具體是,對訓練樣本xi和測試樣本x^分别進行embedding,然後求内積(cosine),這就是文章提出的"matching",然後輸入到一個softmax中,公式如公式2),其中c是cosine距離。其中兩個embedding的模型是share的,比如用CNN。這個a是和度量學習(metric learning)相關的,對于待分類的樣本x, 讓其和那些标簽為y的樣本對齊,和其它的不對齊,這種loss其實就是和NCA,triplet loss和margin nearest neighbor相關的。

小樣本學習(one/few-shot learning)

進一步,支援集樣本embedding模型g能繼續優化,并且支援集樣本應該可以用來修改測試樣本的embedding模型f。這個可以通過如下兩個方面來解決:即1)基于雙向LSTM學習訓練集的embedding,使得每個訓練樣本的embedding是其它訓練樣本的函數;2)基于attention-LSTM來對測試樣本embedding,使得每個測試樣本的embeding是訓練集embedding的函數。文章稱其為FCE(fully-conditional embedding)。

關于g 的優化。上述雖然是在整個支援集樣本上做分類,但用來做cosine距離計算的embedding 的獲得是互相獨立的,是以文章把對支援集樣本的embedding改為g(xi, S), 這當比如xj十分接近xi時改變g函數是有用的。文章用了雙向LSTM,即把S看成一個序列(文章并沒有提到這個序列的順序是怎麼生成的,也許是随機的),然後對每個xi進行編碼。具體公式如下,其中g’(xi)是原始隻依賴自己的embedding,xi通過BiLSTM進行資訊互通。

小樣本學習(one/few-shot learning)
小樣本學習(one/few-shot learning)
小樣本學習(one/few-shot learning)

關于f的優化。支援集樣本可以用來修改測試樣本的embedding模型。這個可以通過一個固定步數的LSTM和對支援集的attention模型來解決, 即如下公式,其中f’(x)是隻依賴測試樣本自己的特征,作為LSTM的輸入(每步不變),K是LSTM的步數,g(S)是支援集的embedding。由此,模型會忽略支援集S中的一些樣本。

小樣本學習(one/few-shot learning)
小樣本學習(one/few-shot learning)

這兩個embedding函數f和g是對特征空間進行了優化,進而讓精度提升。

關于訓練政策。文章對imagenet進行的采樣,制作了3種适合做one/few shot的資料集,其中miniImageNet,它包含100類,每類600張圖檔,其中80個類用來訓練,20類用來測試, 稱為後續相關研究經常被采用的資料集。以5-way 5-shot為例。訓練時,在80類中随機采樣5個類,然後把這5類中的資料分成支援集S和測試B,訓練matching net模型來使得在S條件下的B的預測結果誤差最小。測試時,在20個未被訓練過的類中抽取5類,每類5張圖,作為測試支援集S’。如圖7,MatchNet方法相對原始的Inception模型能正确識别模型從未見過的輪胎和自行車。

小樣本學習(one/few-shot learning)

原型網絡 (Prototypical Networks)[3]

該方法思想十分簡單高效,效果也非常好。它學習一個度量空間, 通過計算和每個類别的原型表達的距離來進行分類。文章基于這樣的想法:每個類别都存在一個聚在某單個原型表達周圍的embedding,該類的原型是support set在embedding空間中的均值。然後,分類問題變成在embedding空間中的最近鄰。如圖8,c1、c2、c3分别是三個類别的均值中心(稱Prototype),将測試樣本x進行embedding後,與這3個中心進行距離計算,進而獲得x的類别。

小樣本學習(one/few-shot learning)

其僞代碼也十厘清晰:

小樣本學習(one/few-shot learning)

文章采用在Bregman散度下的指數族分布的混合密度估計,實驗表明squared Euclidean距離比cosine距離要好14到17個點。另外,文章在訓練時采用相對測試時更多的類别數,即訓練時每個episodes采用20個類(20 way),而測試對在5個類(5 way)中進行,其效果相對訓練時也采用5 way的提升了2.5個點。

基于graph neural network

這是一篇比較新的文章,送出到ICLR 2018[4]。他定義了一個圖神經網絡架構,端到端地學習消息傳遞的“關系”型任務。在這裡,每個樣本看成圖的節點,該方法不僅學習節點的embedding,也學習邊的embedding。如圖9,在網絡第一層5個樣本通過邊模型A~建構了圖,接着通過圖卷積(graph conv)獲得了節點的embedding,然後在後面的幾層繼續用A~更新圖、用graph conv更新節點embedding, 這樣便構成了一個深度GNN,最後輸出樣本的預測标簽。

小樣本學習(one/few-shot learning)

在建構邊模型時,先采用一個4層的CNN網絡獲得每個節點特征向量,然後将節點對xi,xj的差的絕對值過4層帶Batch Norm和Leaky Relu的全連接配接層,進而獲得邊的embedding,如圖10的左側。随後,我們将節點的embedding和邊的embedding一起過圖卷積網絡,進而獲得更新後的節點的embedding,如圖10的右側。

小樣本學習(one/few-shot learning)

這篇文章和Siamese networks、Matching networks和Prototypical networks在本質上是有相同之處的,可以看作這3種方法的推廣,而且用圖來解決這類問題是一種創新,并取得了不錯的效果。

基于元學習meta learning

通過大量的資料,現在的AI系統能從0開始學習一個複雜的技能。我們希望AI系統能獲得多種技能并能适應各種環境,但針對每種技能都從0開始訓練是無法承受的。是以,我們希望它能夠從之前的經驗快速地學習新的技能,而不是把新的任務孤立地考慮。這個方法,我們稱為元學習(learning to learn,或meta learning), 使得我們的系統在它的整個生命周期中可以持續地學習各種各樣的任務。

meta learning是機器學習的一個子領域,它自動學習一些應用于機器學習實驗的中繼資料,主要目的是使用這些中繼資料來自動學習如何在解決不同類型的學習問題時變得靈活,進而提高現有的學習算法。靈活性是非常重要的,因為每個學習算法都是基于一組有關資料的假設,即它是歸納偏(bias)的。這意味着如果bias與學習問題中的資料相比對,那麼學習就會很好。學習算法在一個學習問題上表現得非常好,但在下一個學習問題上表現得非常糟糕。這對機器學習或資料挖掘技術的使用造成了很大的限制,因為學習問題與不同學習算法的有效性之間的關系尚不清楚。

通過使用不同類型的中繼資料,如學習問題的屬性,算法屬性(如性能測量)或從之前資料推導出的模式,可以選擇、更改或組合不同的學習算法,以有效地解決給定的學習問題。

元學習一般有兩級,第一級是快速地獲得每個任務中的知識,第二級是較慢地提取所有任務中學到的資訊。下面從不同角度解釋了元學習的方法

通過知識誘導來表達每種學習方法如何在不同的學習問題上執行,進而發現元知識。中繼資料是由學習問題中的資料特征(一般的,統計的,資訊論的......)以及學習算法的特征(類型,參數設定,性能測量...)形成的。然後,另一個學習算法學習資料特征如何與算法特征相關。給定一個新的學習問題,測量資料特征,并且可以預測不同學習算法的性能。是以,至少在誘導關系成立的情況下,可以選擇最适合新問題的算法。
stacking. 通過組合一些(不同的)學習算法,即堆疊泛化。中繼資料是由這些不同算法的預測而形成的。然後,另一個學習算法從這個中繼資料中學習,以預測哪些算法的組合會給出好的結果。在給定新的學習問題的情況下,所選擇的一組算法的預測被組合(例如通過權重投票)以提供最終的預測。由于每種算法都被認為是在一個問題子集上工作,是以希望這種組合能夠更加靈活,并且能夠做出好的預測。
boosting. 多次使用相同的算法,訓練資料中的示例在每次運作中獲得不同的權重。這産生了不同的預測,每個預測都集中于正确預測資料的一個子集,并且結合這些預測導緻更好(但更昂貴)的結果。
動态偏選擇(Dynamic bias selection)通過改變學習算法的感應偏來比對給定的問題。這通過改變學習算法的關鍵方面來完成,例如假設表示,啟發式公式或參數。
learning to learn,研究如何随着時間的推移改進學習過程。中繼資料由關于以前的學習事件的知識組成,并被用于高效地開發新任務的有效假設。其目标是使用從一個領域獲得的知識來幫助其他領域的學習。
           

在meta learning中,我們在訓練集上訓練一個訓練過程(meta learner)來生産生一個分類器(learner)使得learner在測試集上獲得高的精度。如下圖

小樣本學習(one/few-shot learning)

下面介紹幾個經典的解決fewshot的meta learning的方法。

遞歸記憶模型 (Memory-Augmented Neural Networks)[5]

基于記憶的神經網絡方法早在2001年被證明可以用于meta-learning。他們通過權重更新來調節bias,并且通過學習将表達快速緩存到記憶中來調節輸出。然而,利用循環神經網絡的内部記憶單元無法擴充到需要對大量新資訊進行編碼的新任務上。是以,我們需要讓存儲在記憶中的表達既要穩定又要是元素粒度通路的,前者是說當需要時就能可靠地通路,後者是說可選擇性地通路相關的資訊;另外,參數數量不能被記憶體的大小束縛。像神經圖靈機(NTMs)和記憶網絡就符合這種必要條件。

文章基于神經網絡圖靈機(NTMs)的思想,因為NTMs能通過外部存儲(external memory)進行短時記憶,并能通過緩慢權值更新來進行長時記憶,NTMs可以學習将表達存入記憶的政策,并如何用這些表達來進行預測。由此,文章方法可以快速準确地預測那些隻出現過一次的資料。文章基于LSTM等RNN的模型,将資料看成序列來訓練,在測試時輸入新的類的樣本進行分類。具體地,網絡的輸入把上一次的y (label)也作為輸入,并且添加了external memory存儲上一次的x輸入,這使得下一次輸入後進行反向傳播時,可以讓y (label)和x建立聯系,使得之後的x能夠通過外部記憶擷取相關圖像進行比對來實作更好的預測。這裡的RNN就是meta-learner。

小樣本學習(one/few-shot learning)

優化器學習 (meta-learning LSTM)[6]

文章研究了在少量資料下,基于梯度的優化算法失敗的原因,即無法直接用于meta learning。首先,這些梯度優化算法包括momentum, adagrad, adadelta, ADAM等,無法在幾步内完成優化,特别是在非凸的問題上,多種超參的選取無法保證收斂的速度。其次,不同任務分别随機初始化會影響任務收斂到好的解上。雖然finetune這種遷移學習能緩解這個問題,但當新資料相對原始資料偏差比較大時,遷移學習的性能會大大下降。我們需要一個系統的學習通用初始化,使得訓練從一個好的點開始,它和遷移學習不同的是,它能保證該初始化能讓finetune從一個好的點開始。

文章學習的是一個模新參數的更新函數或更新規則。它不是在多輪的episodes學習一個單模型,而是在每個episode學習特定的模型。具體地,學習基于梯度下降的參數更新算法,采用LSTM表達meta learner,用其狀态表達目标分類器的參數的更新,最終學會如何在新的分類任務上,對分類器網絡(learner)進行初始化和參數更新。這個優化算法同時考慮一個任務的短時知識和跨多個任務的長時知識。文章設定目标為通過少量的疊代步驟捕獲優化算法的泛化能力,由此meta learner可以訓練讓learner在每個任務上收斂到一個好的解。另外,通過捕獲所有任務之前共享的基礎知識,進而更好地初始化learner。

基于梯度下降的參數更新公式如公式5所示,θt-1 是learner在第t-1次updates後的模型參數,αt 是學習率,Lt是損失函數。θt是learner的參數。

小樣本學習(one/few-shot learning)

(公式5)

這個形式和lstm是一樣的,如公式6,

小樣本學習(one/few-shot learning)

(公式6)

狀态Ct為模型參數。it是學習率,如公式7,學習率是目前參數、目前梯度、目前損失和上一次學習率的函數。由此,meta learner 可以精細地控制學習率,進而可以快速地學習而不會發散。

小樣本學習(one/few-shot learning)

(公式7)

ft為忘記門,當learner陷入局部最優,需要大的改變才能逃脫的時候,即梯度為0但損失很大。我們需要忘記以前的值,是以ft 應該是這個資訊的函數:

小樣本學習(one/few-shot learning)

(公式8)

c0是learner的初始化參數。好的初始值是讓優化快速收斂的關鍵。

以訓練miniImagenet資料集為例,訓練過程中,我們從Dmeta-train的訓練集(64個類,每類600個樣本)中随機采樣5個類,每個類5個樣本,構成訓練集,去學習learner;然後從Dmeta-train測集的樣本(64個類,每類剩下的樣本)中采樣構成測試集,集合中每類有15個樣本,用來獲得learner的loss,去學習meta leaner。評估過程一樣,我們從Dmeta-test的訓練集(16個類,每類600個樣本)中随機采樣5個類,每個類5個樣本,構成訓練集,去學習learner;然後從Dmeta-test測集的樣本(16個類,每類剩下的樣本)中采樣構成測試集,集合中每類有15個樣本,用來獲得learner的loss,去學習meta leaner。這兩個過程分别如圖13的虛線左側和右側。

小樣本學習(one/few-shot learning)

對meta-learner的訓練過程進行可視化,把gate的值畫出來,觀察其在不同的資料之間是否存在變化。在1-shot上,meta learner學了10步,5-shot上學了5步。對于遺忘門,meta-leanrer采用一個簡單的權值衰減政策,而且每層都比較一緻。輸入門在不同資料上的變化比較大,說明meta learner沒有采用一個固定的優化政策,而且1-shot和5-shot的表現也不同,說明meta learner對兩者采用了不同的方法。如圖14:

小樣本學習(one/few-shot learning)

模型無關自适應(Model-Agnostic)[7]

meta learning 的目标是在各種不同的學習任務上學出一個模型,使得可以僅用少量的樣本就能解決一些新的學習任務。這種任務的挑戰是模型需要結合之前的經驗和目前新任務的少量樣本資訊,并避免在新資料上過拟合。

文章提出的方法使得可以在小量樣本上,用少量的疊代步驟就可以獲得較好的泛化性能,而且模型是容易fine-tine的。而且這個方法無需關心模型的形式,也不需要為meta learning增加新的參數,直接用梯度下降來訓練learner。文章的核心思想是學習模型的初始化參數使得在一步或幾步疊代後在新任務上的精度最大化。它學的不是模型參數的更新函數或是規則,它不局限于參數的規模和模型架構(比如用RNN或siamese)。它本質上也是學習一個好的特征使得可以适合很多任務(包括分類、回歸、增強學習),并通過fine-tune來獲得好的效果。

文章提出的方法,可以學習任意标準模型的參數,并讓該模型能快速适配。方法認為,一些中間表達更加适合遷移,比如神經網絡的内部特征。是以面向泛化性的表達是有益的。因為我們會基于梯度下降政策在新的任務上進行finetune,是以目标是學習這樣一個模型,它能對新的任務從之前任務上快速地進行梯度下降,而不會過拟合。事實上,是要找到一些對任務變化敏感的參數,使得當改變梯度方向,小的參數改動也會産生較大的loss,如圖15。

小樣本學習(one/few-shot learning)

該方法的目标函數如公式9,即訓練關于全局模型參數θ的具體任務參數θ‘,使其在從p(T )上采樣的各個任務上誤差最小。

小樣本學習(one/few-shot learning)

整個訓練的流程如下僞代碼,有内外兩個循環,外循環是訓練meta learner的參數θ,即一個全局的模型,内循環對每個采樣任務分别做梯度下降,進而在全局模型上做梯度下降(a gradient through a gradient)。

小樣本學習(one/few-shot learning)

效果對比

比較one/fewshot learning的方法一般采用Omniglot和miniImagenet兩個資料集,由于前者相對比較簡單,準确率已經比較容易達到99%,是以這裡隻給出miniImagenet上的對比測試結果。miniImagenet的資料集從 https://drive.google.com/file/d/0B3Irx3uQNoBMQ1FlNXJsZUdYWEE/view 這裡下載下傳。

參考文獻

[1] G Koch, R Zemel, and R Salakhutdinov. Siamese neural networks for one-shot image recognition. In ICML Deep Learning workshop, 2015.

[2] Oriol Vinyals, Charles Blundell, Tim Lillicrap, Daan Wierstra, et al. Matching networks for one shot learning. In Advances in Neural Information Processing Systems, pages 3630–3638, 2016.

[3] Jake Snell, Kevin Swersky, and Richard S Zemel. Prototypical networks for few-shot learning. arXiv preprint arXiv:1703.05175, 2017.

[4] Victor Garcia, Joan Bruna. Few-shot learning with graph neural networs. Under review as a conference paper at ICLR 2018.

[5] Santoro, Adam, Bartunov, Sergey, Botvinick, Matthew, Wierstra, Daan, and Lillicrap, Timothy. Meta-learning with memory-augmented neural networks. In International Conference on Machine Learning (ICML), 2016.

[6] Ravi, Sachin and Larochelle, Hugo. Optimization as a model for few-shot learning. In International Conference on Learning Representations (ICLR), 2017.

[7] Chelsea Finn, Pieter Abbeel, and Sergey Levine. Model-agnostic meta-learning for fast adaptation of deep networks. arXiv preprint arXiv:1703.03400, 2017.

繼續閱讀