參考鏈接:
https://zhuanlan.zhihu.com/p/85277741
https://zhuanlan.zhihu.com/p/99116121
https://blog.csdn.net/weixin_37589575/article/details/92801610
https://blog.csdn.net/weixin_40123108/article/details/89003325
基本概念
小樣本學習(few shot learning,FSL)可以看做每個類別樣本數目遠遠小於類別數目,也就是說每個類別僅僅只有幾個樣本可供訓練。
支持集(support set):包含着少量標註的樣本。
查詢集(query set):包含着未標註的樣本,和支持集的類別空間一致。
N-way K-shot: 表示支持集包含着個類別,每個類別有個標註樣本
episode training: 訓練在訓練集上進行,採用episode training機制。此機制和test階段是一樣的,即每一個episode 隨機採樣個類別,每個類別採樣個標註樣本構成支持集,每個類別的剩餘一小部分樣本構成查詢集,怎樣將支持集和查詢集樣本嵌入到合適的空間,使之類內的樣本相似度高,類間的樣本相似度低,是一個構建的問題。
數據集劃分:按照約定,數據集會被劃分爲訓練集,驗證集和測試集,三個集之間的類別是不相交的。
test stage:在測試階段,我們當前拿到的測試集的label當然是已知的。此時也進行類似episode training的機制,每一個episode從測試集中隨機採樣個類別,每個類別採樣個標註樣本構成支持集,此時支持集的label是已知的也是可用的,之後每個類別的剩餘一小部分樣本構成查詢集,這些樣本是需要模型分類的,label是未知的,通過模型計算得到查詢集樣本的accuracy,此時就模擬了我們在每個類別小樣本label已知的情況下,去預測其他相同label空間樣本。
在測試階段我們要進行多次episode,得到多個accuracy的值,所以此時約定取最終的accuracy爲多個episode的平均值,並report 95%的置信區間。
流行的方法
1.數據增強和正則化
這類方法比較簡單直接,數據增強是針對樣本數量過少來增加樣本,小樣本學習設置下模型非常容易陷入過擬合,因此數據增強和正則化都能作爲正則化來防止過擬合。
2.元學習(Meta Learning)
是目前主流的解決方案,首先介紹什麼是元學習。
概念介紹: 元學習的目標是利用已經學到的知識來解決新的問題。這也是基於人類學習的機制,我們學習都是基於已有知識的,而不像深度學習一樣都是從 0 開始學習的,也稱爲“學會學習” (Learning to learn)。
元學習將學習(訓練)的任務稱爲meta-training task,新的任務稱爲meta-test task。在小樣本學習中, meta training 階段將數據集分解爲不同的 meta task,去學習類別變化的情況下模型的泛化能力,在 meta testing 階段,面對全新的類別,不需要變動已有的模型,就可以完成分類。
例如分類 MiniImagenet,其中有 100 個類,我們用其中 60 個類來學習先驗知識,20個做 validation,剩餘 20 個做測試。注意我們測試的 20 個類和前面 80 個類是完全不同的,也就是新的類、新的概念、新的問題,並且這 20 個類每個類只有很少的幾張已知label的圖片 (few-shot 問題)!然後前面的 80 個類用來訓練模型和確定超參數,也就是學習幫助我們解決新問題的先驗知識。
2.1 學習微調 (Learning to Fine-Tune)
這種方法已被廣泛地應用。首先給定一個預訓練的基礎網絡,通過含有豐富標籤的大規模數據集訓練得到的,比如imagenet,然後根據特定領域的數據進行微調,通常在少量的樣本上訓練一下就可以得到不錯的效果。
數據集
1.Omniglot
介紹:它一共包含1623 類手寫體,每一類中包含20 個樣本。其中這 1623 個手寫體類來自 50 個不同地區(或文明)的 alphabets,如:Latin 文明包含 26 個alphabets,Greek 包含 24 個alphabets。
劃分:train的是 964 類(30個地區的字母),用於test的是 659 類 (20個地區的字母)。