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 學習 |
---|---|
測試樣本未在訓練集中見過 | 查詢樣本沒見過 |
測試樣本的類在訓練集中見過 | 查詢樣本的類屬於未知 |
基於微調的Few-shot方法封為三個步驟:
先省略第二步的微調,看看一般的預訓練Few-shot預測。
以上圖為例,將每一個類的平均特徵堆疊得到矩陣\(M\in\mathbb{R}^{3\times n}\),這裡\(n\)表示特徵數。
將查詢的圖片提取特徵、做歸一化得到\(q\in\mathbb{R}^{1\times n}\),並進行預測。
本例中,輸出的第一類的概率最大。
歸納一下上述使用預訓練模型預測查詢集影象的步驟:
以上固定了\(W=M, b=2\)。但可以在支援集進行訓練,微調\(W\)和\(b\)。於是設定損失函數去學習\(W\)和\(b\),由於支援集較小,需要加入正則項防止過擬合:
大量實驗證明,微調確實能提高精度。以下是一些常用的技巧:
其中\(\mathrm{sim}=\frac{w^Tq}{\lVert w\rVert_2\cdot \lVert q\rVert_2}\)。
基於兩種方式解決Few-shot問題的對比
元學習(Meta-Learning) | 微調(Fine-Tuning) | |
---|---|---|
策略 | 基於元學習的方法旨在通過在元任務上訓練來使模型學會更好地適應新任務。它們通常涉及在多個元任務(task)上進行訓練,以使模型能夠從不同任務中學到共性。 | 基於微調的方法通常涉及在一個預訓練的模型上進行微調,以適應特定的 few-shot 任務。在訓練階段,模型通常會使用大規模的資料集進行預訓練,然後在少量訓練資料上進行微調。 |
適用性 | 基於元學習的方法特別適用於 few-shot 任務,因為它們的目標是使模型從少量範例中快速學習。它們在少量資料和新任務上通常表現出色。 | 基於微調的方法在具有大量預訓練資料的情況下通常表現出色。它們適用於很多不同型別的任務,但在資料稀缺或新領域的 few-shot 問題上可能表現不佳。 |
泛化能力 | 基於元學習的方法旨在提高模型在新任務上的泛化能力,因為它們通過從多個元任務中學習共性來實現這一目標。它們在適應新任務和未見資料上的表現通常較好。 | 基於微調的方法通常在預訓練領域上有較強的泛化能力,但在新任務上的泛化能力可能有限,特別是當訓練資料非常有限時。 |