(轉載)基於比較的少樣本(one/few-shoting)分類

基於比較的方法

先經過CNN獲得目標特徵,而後與參考目標的特徵進行比較. 不一樣在於比較的方法不一樣而已.網絡

基本概念

  • 數據集Omniglot:50種alphabets(文字或者文明); alphabet中15-40 characters(字母); 每一個字母有20drawers(20個不一樣的人寫的).
  • 每次迭代叫mini_batch或者epsiode.
  • N-ways指的是有多個類別,N-shot是指於多少個目標進行比較取均值中的最高值做爲最後的結果.
  • 測試集與訓練集中樣本的類別不同.
  • cosine(餘弦)距離: [公式]
  • 概括偏置(inductive bias): 單靠數據自己不足以找到惟一的解, 由於咱們須要作一些特別且合理的假設, 以便咱們能獲得惟一的解.
  • Bregman divergence(散度): 若是你抽象地定義一種在特定空間裏兩個點之間的"距離", 而後在這些點知足任意的機率的狀況下,這些點的平均值點必定是空間距離這些點的平均距離最小的點. [公式] .能夠經過求和再求導的方式得出上述結論(從上面也能夠看出距離函數是非負的凸函數).下圖展現了知足其性質的距離公式:

 

 

Siamese Neural Networks

模型能夠分解成特徵提取器和比較器:其中特徵提取器中的權重是共享.以下圖所示:機器學習

 

 

一路是support(已經知道到標籤), 一路是query.比較二者的類似度.(直接相減取絕對值,而後接sigmoid激活,再接全鏈接層和sigmoid,表示類似程度)函數

 

訓練

每次迭代從訓練集中隨機的選擇20個類, 從每一個類中的20個樣本採樣5個做爲support set, 5個做爲query set. 選取的個數影響batch_size的大小. 從上面選取的樣本中組成一個mini_batch(輸入是成對出現的),一半是相同class,一半是不一樣類別.同時batch_size也收到硬件的限制,通常取32.性能

測試

從測試集中隨機選取m個類,每一個類提供k個樣本做爲support Set.這就是N-way k-shot.每一個query與[公式] 個樣本進行比較,獲得類似分數,而後同類取平均值, 找出類別最高的分數即爲這個query的類別.學習

 

分析與思考

  • 把問題從推理問題變成了判斷問題,極大了下降了問題的複雜度.
  • 與常規深度學習分類模型不同, 這裏網絡學習的是一種比較能力,比較器和特徵提取器相輔相成,提升最終性能.而常規學習的是類別具備的特徵分佈;因此常規模型能夠進行很好的遷移,具備很好的語義提取能力.可是這裏的模型不能很好的遷移(不必定能具備).
  • 咱們能夠發現,其實訓練模型數據並很多,可以組成上千萬個不一樣的batch. 因此從這一點來講, 深度學習依舊是須要不少數據,只不過數據的角度不同.

Matching Networks

基本思想

在編碼中引入set和注意力的概念, 將全部類別的編碼當作一個總體看待,這樣能夠加強類間差別.同時做者也對訓練過程進行的改進, 同時保證了傳統機器學習的一個原則, 即訓練和測試集要在一樣的條件下進行的, 學習的目標由 [公式] 變成 [公式] .最終是一個權重式的最鄰近分類器.測試

步驟

1. 對支持集和測試集的樣本進行encode,函數分爲 [公式] ,獲得 [公式] , [公式] 表明的query樣本, [公式] 表明的是支持集裏面的樣本. 圖中的虛線表示的是這兩部分編碼是能夠共享的.優化

 

2. 再對 [公式] 的編碼進一步處理,處理方法是基於雙向的LSTM對support set進行總體embedding(full Context Embedding):編碼

[公式]

[公式]

[公式]

經過如上的編碼咱們能夠發現support set的樣本編碼產生了相互影響的效果,從而更有利於區分出類別之間的差別.對類似卻不一樣的類別的編碼具備好處.spa

3. 基於attention-LSTM來對測試樣本embedding:prototype

[公式]

計算詢問樣本特徵與support set的特徵類似性. 具體計算以下:

[公式]

根據類似性來計算獲得reuse的特徵

[公式]

[公式]

[公式]

須要注意的是K是能夠隨便定的, 最終的 [公式] 即爲最終測試樣本的編碼.分析能夠這裏的過程能夠理解爲一個可學習的增強特徵器, 用於增強那些與support set類似可是不明顯的特徵(若是某個樣本的特徵與support set中某個樣本稍微類似,可是不足以斷定類別, 這裏就會循環向原始特徵中加入可以加強其判別的信息).

4. 獲得 [公式] 的編碼後,利用下式獲得最終的結果.

[公式]

其中a的表達式以下:

[公式]

須要說明的是上式中的 [公式] 一個N-way大小的向量(通常是one-hot),若是是K-shot,編碼處也會發生變化,同時取的是最終y值最大對應的標籤.

訓練

選擇少數幾個類別(5類),在每一個類別中選擇少許的樣本(5個),將選出的集合劃分紅參考集和測試集,利用本次迭代的參考集,計算測試集的偏差,計算梯度,更新參數.這樣的一個流程稱爲episode.與孿生網絡不一樣,在一次計算中能夠直接獲得最終的label, 可是基於比較的思想沒有變化.

測試

步驟與訓練同樣,只是再也不更新梯度,同時計算正確率.

 

Prototypical Network

基本思想

加入適當且合適的偏置概括,來減輕或者消除過擬合問題.這裏的假設是存在一個特徵空間使得對於每一類都有一個point cluster圍繞一個單一的prototype representation. 分類問題就變成尋找最近原型的問題.對每一個類而言模型也能夠當作是一個線性模型.

基本步驟

1.計算原型表達

[公式]

其中 [公式] 表明的是第k類原型表達, [公式] 表明的是support set中第k類的集合.

2. 在類別維度上歸一化距離,獲得類別標籤

[公式]

訓練

  1. 從K個類內中均勻選擇 [公式] 個類別,( [公式] 指的是一個episode的類別數)
  2. 在從數據集中選擇相應類別分別選取 [公式] 個樣本做爲support set.
  3. 再在剩下的數據集中選取 [公式] 個樣本做爲測試樣本.
  4. 接下來按照上面的步驟,計算出測試樣本的機率和偏差,而後利用SGD進行優化.

補充

  • 能夠將原型模型的解釋爲線性模型:

[公式]

  • 而後在通過softmax處理,可是咱們能夠看到第一項在每一類中都有,因此能夠在分子分母中約掉.而剩下的則變成: 

[公式]

[公式] 若是隻從分類器的角度看,當問題是one-shot時,matchnet和當前模型等效.

 

Relation Network for few-shot learning

前文說網絡學習的是比較能力,主要是體如今對特徵的學習和約束上(這些特徵容易經過線性或者最最近鄰的方法進行區分),這裏將其延伸至比較器,比較方式也是經過網絡本身來學習,而不是人工指定,這也符合咱們一向的認識,能讓網絡作的, 儘可能讓網絡去作. 本身學習了一個非線性比較器.在zero-shot learning中,relation module是學習比較query圖像和描述之間關係.

模型

  1. 首先是一個embedding module將query和support的照片進行編碼.
  2. 而後是一個relation module用來進行比較,算出得分.

relation module

[公式]

上面公式輸出的是一個在[0,1]之間的值,做者使用的是以下結構來表示 [公式] :

經過上面的公式咱們能夠看出,不一樣參考樣本鏈接query樣本特徵以後在relation module中的權重是共享的,因此在實現的時候,維度變化以下C((S,H,W,D), (Q,H,W,D))-->(Q*S, H,W, D) 而後作卷積,再reshape.須要注意的是做者在K-shot,是將support中相同類別的圖像特徵相加後,而後於query的特徵相鏈接,這樣又變成了上述的one-shot問題.

 

轉載於:

知乎:基於比較的少樣本(one/few-shoting)分類

注: 5way1shot是指:測試集有5類,每類只有1張是有標記樣本,其他樣本都是無標記的。咱們須要根據用已有的訓練樣本(訓練樣本比較理想,就是類別數不少,都有標籤等)來模仿測試過程。具體而言,就拿5way1shot來講(假設訓練集有1000類,都有大量有標籤數據),每次,個人訓練樣本是隨機選5類,每類選1張圖,這5張圖通過網絡獲得5個特徵向量,而後怎麼計算loss?我須要從這5類裏面每類再挑出一些樣本也通過網絡獲得他們的特徵向量,而後去和以前那5個向量計算距離(relation),但願他們同一類的距離儘量小。這樣的話,個人網絡其實就是學的是relation,而不是簡單的分類。那測試的時候,我把有標籤的這5張圖算個特徵向量,其他全部測試集中的圖像也都提個特徵向量,去和這5個比,看看誰近,近的話就認爲是同一個label。

 

 

小樣本學習:5 個類別,每一個類別只有 1 個樣本(稱做 5-way 1-shot),如何對測試圖片進行分類。

相比之下,藉助於以前豐富的知識積累,人類只需看一次就能輕鬆識別出新的類別。受到人類這種利用少許樣本便可識別新類能力的啓發,研究者們開始研究小樣本學習問題。 在小樣本學習問題中,咱們假設有一組基類,以及一組新類。每一個基類具備足夠的訓練樣本,而每一個新類只有少許標記樣本。 小樣本學習的目的是經過從基類轉移知識來學習識別具備少許標註樣本的新類別。咱們提出一種基於全局類別表徵的小樣本學習方法,能夠應用於:

  1. 標準小樣本學習問題:給定一個大規模的訓練集做爲基類,能夠類比於人類的知識積累,對於從未見過的新類(與基類不重疊),藉助每類少數幾個訓練樣本,須要準確識別新類的測試樣本。
  2. 廣義小樣本學習問題:相比與小樣本學習,廣義小樣本學習中測試樣本不只包含新類,還包含了基類。
轉載:知乎
相關文章
相關標籤/搜索