【筆記】關於N-Way K-Shot 分類問題的理解

  • Time: 2019年10月27日
  • Author:Veagau

在看講Repitle的論文【On First-Order Meta-Learning Algorithm】時,實驗環節對N-Way K-Shot分類問題的SetUp進行的描述引發了個人二度思考,之前對這個問題的理解感受沒摸透,以此爲契機,從新思考得出了一種理解。算法

所謂N-Way K-Shot 分類問題就是指用少許樣本構建分類任務。主要應用於少樣本學習(Few-Shot Learning)領域樣本數據不足的狀況,後來逐漸延伸到元學習(Meta-Learning)領域。性能

元學習須要經過在大量的任務上進行學習,學習到泛化能力強大的模型算法,以快速適應新的任務,即學會學習學習

由於元學習是以一個個的任務(如分類任務)做爲本身的訓練數據的,傳統的基於大量數據的訓練任務顯然不適用於目前的研究(算力約束)。測試

從字面上理解,N-Way就是N-路或N-類K-Shot就是K-次或K-個code

每次在構建分類任務時,從數據集裏抽取N-類的數據,每一類數據由K-個樣本構成。這樣就造成了一個小型分類任務的數據集,實際上就是原始數據集的一次採樣。it

那這個小型分類任務的訓練集和測試集具體是怎麼劃分的呢?io

其實這個問題也是困擾我好久的,看了幾篇文獻都沒明白。訓練過程當中用的是什麼數據?測試過程當中呢?直到我看到這篇論文中的描述:table

If we are doing K-shot, N-way classification, then we sample tasks by selecting N classes from C and then selecting K + 1 examples for each class. We split these examples into a training set and a test set, where the test set contains a single example for each class.class

其中關鍵的一點就是,在取數據時對於N類數據,每一類其實取了K+1個樣本,而不是K個!test

而後就是這個+1引出了個人理解。

以5-Way 5-Shot分類問題爲例,在構建一個任務的數據集時的具體流程應該以下:

  1. 從元數據集(Meta-dataset)中隨機抽取5類(Way)樣本,每一類樣本隨機抽取5+1個(Shot)實例

    元數據集:也就是總體數據集中,能夠理解爲傳統的大型數據集,其中的數據類別>>N-Way,每一類的實例數量>>K-Shot.

  2. 從這5類樣本的6個實例中,每類樣本隨機抽取5個實例一塊兒做爲Training Set(→Support Set),每一類剩下的一個實例一塊兒組成Testing Set(→Query Set)。

    因爲元學習是以任務(Task)做爲本身的訓練數據的,即元學習的實際訓練集和測試集是由一個個的Task組成的,因此爲了進行區分,每一個任務內部的訓練集(Training Set)改名爲支持集(Support Set)、測試集改名爲查詢集(Query Set)

  3. 訓練:從Support Set中每一類隨機選取一個實例,一塊兒夠成一組訓練數據,輸入到模型中,進行訓練。

  4. 測試:從Query Set中隨機抽取一個實例,用模型判斷其屬於哪一類。

    這個判斷過程其實能夠視爲一種查詢過程,給定了支持集,只要讓模型可以準確的查詢到其屬於支持集中的哪一類便可證實模型性能較好。

  5. 重複幾輪,最終得出該任務模型的準確率,實際上便是元學習參數肯定的模型在該任務上的損失

  6. 損失梯度反向傳播到元學習參數,對其進行更新,也即元學習過程。

圖示以下:

Way 1
(C1)
Way 2
(C2)
Way3
(C3)
Way 4
(C4)
Way5
(C5)
C~11~ C~21~ C~31~ C~41~ C~51~ Support
C~12~ C~22~ C~32~ C~42~ C~52~ Support
C~13~ C~23~ C~33~ C~43~ C~53~ Support
C~14~ C~24~ C~34~ C~44~ C~54~ Support
C~15~ C~25~ C~35~ C~45~ C~55~ Support
C~16~ C~26~ C~36~ C~46~ C~56~ Query
相關文章
相關標籤/搜索