1. 程式人生 > >當小樣本遇上機器學習 fewshot learning

當小樣本遇上機器學習 fewshot learning

引言  

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


圖1 

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

  • 訓練過程中有從未見過的新類,只能藉助每類少數幾個標註樣本;
  • 不改變已經訓練好的模型。

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


圖2

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

基於Finetune

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



基於metric

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

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

  這個方法對輸入的結構進行限制並自動發現可以從新樣本上泛化的特徵。通過一個有監督的基於孿生網路的度量學習來訓練,然後重用那個網路所提取的特徵進行one/few-shot學習。
  它是一個雙路的神經網路,訓練時,通過組合不同類的樣本成對,同時輸入網路進行訓練,在最上層通過一個距離的交叉熵進行loss的計算,如圖4。在預測的時候,以5way-5shot為例,從5個類中隨機抽取5個樣本,把這個mini-batch=25的資料輸入網路,最後獲得25個值,取分數最高對應的類別作為預測結果,如圖5。


圖4 

圖5

  網路結構如圖6所示,是一個8層深度卷積孿生網路,圖中只展示了其中一路計算,在網路的4096維的全連線層後執行component-wise 的L1距離計算,產生一個4096維的特徵向量,並通過sigmoidal啟用獲得一個0到1的概率作為兩個輸入樣本是否相似的結果。


圖6

匹配網路(matching networks)[2]

  這篇文章的工作被李飛飛高徒karpath點贊過,成為之後相關研究中經常被對比的參照。該文章也是在不改變網路模型的前提下能對未知類別生成標籤,其主要創新體現在建模過程和訓練過程上。對於建模過程的創新,文章提出了基於memory和attantion的matching nets,使得可以快速學習。對於訓練過程的創新,文章基於傳統機器學習的一個原則,即訓練和測試是要在同樣條件下進行的,提出在訓練的時候不斷地讓網路只看每一類的少量樣本,這將和測試的過程是一致的。
  具體地,它嘗試獲得一個從支援集S(support set, 由k個樣本及其標籤組成)到分類器y^的一個對映,該對映是一個網路:P(y^|x^,S),它基於當前的S,對每個未見過的測試樣本x^給出其標籤y^,該標籤讓P達到最大值。這個模型可以表示為如公式1),其中a是一個attetion。

 ,  (公式1)

  即一個新樣本的輸出(即在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相關的。

 (公式2)

  進一步,支援集樣本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進行資訊互通。

, (公式3)

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


 (公式4)

  這兩個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模型能正確識別模型從未見過的輪胎和自行車。


圖7

原型網路 (Prototypical Networks)[3]

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


圖8

  其虛擬碼也十分清晰:

  文章採用在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,最後輸出樣本的預測標籤。


圖9

  在構建邊模型時,先採用一個4層的CNN網路獲得每個節點特徵向量,然後將節點對xi,xj的差的絕對值過4層帶Batch Norm和Leaky Relu的全連線層,從而獲得邊的embedding,如圖10的左側。隨後,我們將節點的embedding和邊的embedding一起過圖卷積網路,從而獲得更新後的節點的embedding,如圖10的右側。

  
圖10

  這篇文章和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在測試集上獲得高的精度。如下圖
圖11

下面介紹幾個經典的解決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。

圖12

優化器學習  (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的引數。

 (公式5)

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

 (公式6)

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

 (公式7)

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

(公式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的虛線左側和右側。


圖13

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


圖14

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

  meta learning 的目標是在各種不同的學習任務上學出一個模型,使得可以僅用少量的樣本就能解決一些新的學習任務。這種任務的挑戰是模型需要結合之前的經驗和當前新任務的少量樣本資訊,並避免在新資料上過擬合。
  文章提出的方法使得可以在小量樣本上,用少量的迭代步驟就可以獲得較好的泛化效能,而且模型是容易fine-tine的。而且這個方法無需關心模型的形式,也不需要為meta learning增加新的引數,直接用梯度下降來訓練learner。文章的核心思想是學習模型的初始化引數使得在一步或幾步迭代後在新任務上的精度最大化。它學的不是模型引數的更新函式或是規則,它不侷限於引數的規模和模型架構(比如用RNN或siamese)。它本質上也是學習一個好的特徵使得可以適合很多工(包括分類、迴歸、增強學習),並通過fine-tune來獲得好的效果。
  文章提出的方法,可以學習任意標準模型的引數,並讓該模型能快速適配。方法認為,一些中間表達更加適合遷移,比如神經網路的內部特徵。因此面向泛化性的表達是有益的。因為我們會基於梯度下降策略在新的任務上進行finetune,所以目標是學習這樣一個模型,它能對新的任務從之前任務上快速地進行梯度下降,而不會過擬合。事實上,是要找到一些對任務變化敏感的引數,使得當改變梯度方向,小的引數改動也會產生較大的loss,如圖15。


圖15

該方法的目標函式如公式9,即訓練關於全域性模型引數θ的具體任務引數θ‘,使其在從p(T )上取樣的各個任務上誤差最小。

 (公式9)

整個訓練的流程如下虛擬碼,有內外兩個迴圈,外迴圈是訓練meta learner的引數θ,即一個全域性的模型,內迴圈對每個取樣任務分別做梯度下降,進而在全域性模型上做梯度下降(a gradient through a gradient)。

效果對比

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

method

5-way 1-shot

5-way 5-shot

baseline finetune

28.86 ± 0.54%

49.79 ± 0.79%

baseline nearest neighbors

41.08 ± 0.70%

51.04 ± 0.65%

matching network

43.56 ± 0.84%

55.31 ± 0.73%

Prototypical network

49.42 ± 0.78%

68.20 ± 0.66%

graph neural network

49.8% ±0.22%

65.5% ±0.20%

meta-learning LSTM

43.44 ± 0.77%

60.60 ± 0.71%

Model-Agnostic

48.70% ±1.84%

63.1% ±0.92%

參考文獻

[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.