解決Few-shot問題的兩大方法:元學習與微調

jp發表於2023-11-11

基於元學習(Meta-Learning)的方法:

Few-shot問題或稱為Few-shot學習是希望能透過少量的標註資料實現對影像的分類,是元學習(Meta-Learning)的一種。

Few-shot學習,不是為了學習、識別訓練集上的資料,泛化到測試集,而是為了讓模型學會學習。也就是模型訓練後,能理解事物的異同、區分不同的事物。如果給出兩張圖片,不是為了識別兩張圖片是什麼,而是讓模型知道兩張圖片是相同的事物還是不同的事物。

Few-shot可以被定義為K-way,N-shot問題,表示支援集有k個類別,每個類別有n個樣本。不同於訓練深度深度神經網路每個類有大量樣本的資料集,Few-shot的訓練資料集規模很小

Meta-Learning的核心思想就是先學習到一個先驗知識(prior),這需要經歷多個task的訓練,每個task的分為支援集(support set)和查詢集(query set),支援集包含了k個類、每個類n張圖,模型需要對查詢集的樣本進行歸類以訓練模型的學習能力。

經過了很多個task學習先驗知識,才能解決新的task,新的task涉及的類,不包含在學習過的task! 我們把學習訓練的task稱為meta-training task,新的task稱為meta-testing task。最後的評價指標就是根據紅色部分表現結果。

meta training task
support query
support query
...
support query
meta testing task
support query

需要注意查詢集和測試集的區別,因為在Few-shot訓練過程也有查詢集,在Few-shot測試中,接觸的支援集和測試集都是全新的類。

Supervised Learning vs. Few-shot Learning

傳統監督學習 Few-shot 學習
測試樣本未在訓練集中見過 查詢樣本沒見過
測試樣本的類在訓練集中見過 查詢樣本的類屬於未知

基於微調(Fine-Tuning)的方法:

基於微調的Few-shot方法封為三個步驟:

  1. 預訓練:使用模型在大規模的資料集進行預訓練作為特徵提取器\(f\)
  2. 微調:在支援集上訓練分類器。
  3. Few-shot預測:
    1. 將支援集上的影像透過分類器轉為特徵向量;
    2. 對每一個類的特徵向量求平均,得到類的特徵向量:\(\mu_1,\dots,\mu_k\)
    3. 將查詢的特徵與\(\mu_1,\dots,\mu_k\)比較。

先省略第二步的微調,看看一般的預訓練Few-shot預測。

圖片來源[3] 圖片來源[3]

以上圖為例,將每一個類的平均特徵堆疊得到矩陣\(M\in\mathbb{R}^{3\times n}\),這裡\(n\)表示特徵數。

\[M =\begin{bmatrix} \mu_1 \\ \mu_2 \\ \mu_3 \end{bmatrix}\tag{1} \]

將查詢的圖片提取特徵、做歸一化得到\(q\in\mathbb{R}^{1\times n}\),並進行預測。

\[p = \mathrm{Softmax}(Mq) \tag{2} = \mathrm{Softmax}(\begin{bmatrix} \mu_1^Tq \\ \mu_2^Tq \\ \mu_3^Tq \end{bmatrix}) \]

本例中,輸出的第一類的機率最大。

歸納一下上述使用預訓練模型預測查詢集影像的步驟:

  1. 設定查詢集的標記樣本:\((x_j,y_j)\)
  2. 用預訓練模型提取特徵:\(f(x_j)\)
  3. 進行預測:\(p_j = \mathrm{Softmax}(W\cdot f(x_j)+b)\)

以上固定了\(W=M, b=2\)。但可以在支援集進行訓練,微調\(W\)\(b\)。於是設定損失函式去學習\(W\)\(b\),由於支援集較小,需要加入正則項防止過擬合:

\[\min\sum_j\mathrm{CrossEntropy}(y_j,p_j)+\mathrm{Regularization}\tag{3} \]

大量實驗證明,微調確實能提高精度。以下是一些常用的技巧:

  1. 對於預測分類器\(p=\mathrm{Softmax}=(W\cdot f(x)+b)\),可以進行初始化\(W=M,b=0\)
  2. 對於正則項的選擇可以考慮Entropy Regularization,相關的解釋可以參考文獻[3]。
  3. 將餘弦相似度加入Softmax分類器,即:

\[p=\mathrm{Softmax}=(W\cdot f(x)+b)=\mathrm{Softmax}(\begin{bmatrix} w^T_1q+b_1 \\ w^T_2q+b_2 \\ w^T_3q+b_3 \end{bmatrix}) \\ \Downarrow \\ p=\mathrm{Softmax}(\begin{bmatrix} \mathrm{sim}(w_1,q)+b_1 \\ \mathrm{sim}(w_2,q)+b_2 \\ \mathrm{sim}(w_3,q)+b_3 \end{bmatrix}) \tag{4} \]

其中\(\mathrm{sim}=\frac{w^Tq}{\lVert w\rVert_2\cdot \lVert q\rVert_2}\)

對比

基於兩種方式解決Few-shot問題的對比

元學習(Meta-Learning) 微調(Fine-Tuning)
策略 基於元學習的方法旨在透過在元任務上訓練來使模型學會更好地適應新任務。它們通常涉及在多個元任務(task)上進行訓練,以使模型能夠從不同任務中學到共性。 基於微調的方法通常涉及在一個預訓練的模型上進行微調,以適應特定的 few-shot 任務。在訓練階段,模型通常會使用大規模的資料集進行預訓練,然後在少量訓練資料上進行微調。

就目前來說,Fine-tuning的方法普遍要比Meta-learning簡單且表現更好,但對於它們的應用場景,以及誰更容易發生過擬合現象還需要根據實際情況。

參考文獻

  1. Few-shot learning(少樣本學習)入門
  2. Few-shot learning(少樣本學習)和 Meta-learning(元學習)概述
  3. 小樣本學習 Few-Shot Learning

相關文章