作者:ALme (電子科大 CS碩士在讀)
這兩年看見很多人,包括我實習的mentor在內,都在批評few-shot learning,覺得是學術界在自high,思考良久,感覺有必要給這個領域正個名~(注意,此答案僅關注few-shot image classification)
首先,要討論few-shot learning的價值,咱得先把few-shot learning(FSL)這個問題的定位搞清楚。而要搞清楚few-shot learning的定位,咱得先把FSL和transfer learning的關係捋清楚。
transfer learning大家都知道,一個典型例子就是在Imagenet訓練一個backbone,然後在另一個新的數據集上(比如cifar、cub)的訓練集微調(fine-tune)backbone,然後在這個新的數據集的測試集上對模型進行測試。那咱為啥不在新數據上從頭train一個模型呢?
我們都知道,Imagenet圖片量很大,且圖片所覆蓋域較為全面,可以近似看作對真實世界數據分布的刻畫,因此希望在ImageNet上訓練的模型能夠提取通用的圖片特徵,而這種通用的特徵很可能能遷移到下游一個沒有見過的圖片域。
因此廣泛認為,在ImageNet(或者更大的數據集)上訓練一個backbone,然後再微調是最好的方式。這也是為什麼這兩年大家如此鍾愛於超大數據預訓練模型,有監督半監督自監督應有盡有,就是想着像bert一樣造一個萬能模型解決一切任務。
transfer learning有一個區別於domain adaptation的非常關鍵的點,即訓練時的數據集和微調時的數據集的圖片不僅domain不同,category也通常是不一樣的。由於category不同,導致微調時原有的網絡分類層不能用了,得重新學一個;而由於domain不一樣了,backbone提取的特徵也不夠discriminative了,因此需要finetune backbone。後面將看到,從這兩點將直指few-shot learning核心問題。
重點來了,transfer learning的setting,是假設我們能夠接觸到足夠多的目標數據集的labeled data的,但在實際應用時,往往目標數據集的labeled data是不足的。
舉一個我實習過程遇到的真實案例,當時遇到一個項目,是零件的異常檢測,即給定一張工業零件的圖片,判斷其是否合格。大家都知道,零件造出來往往都是正常的,出錯的概率是很低的,因此能夠拿到的異常零件圖片是很少的,當時的想法是imagenet學到的backbone直接在這些極少量的圖片上finetune,最後結果很差很差;另一個例子是醫學病情診斷,同樣的,某些病情發病率極低,能夠拿到的圖片十分稀少,如果有機會可以試一試網上公開的ChestX [1]數據集,在labeled data數量給定的情況,從ImageNet finetune的效果也是極差。因此,這種setting在預訓練模型十分重要的當下,是極具價值的。那麼這個setting和few-shot learning有啥關係?
其實,這個在transfer learning目標域labeled data不足的setting,就是咱常說的few-shot image classification,或者也可以叫做few-shot transfer [2]。few-shot image classification早期常用的benchmark,比如miniImageNet [5],滿足了few-shot transfer learning中的category gap,而domain gap雖然有,但是不明顯。為彌補這一缺陷,後續提出了cross-domain few-shot learning的benchmark [3] 以及Meta-Dataset [4],這兩年這些benchmark發展迅速,大部分刷傳統benchmark的頂會論文也開始把cross-domain的效果放入論文。
這些進展使得few-shot learning與實際應用場景的gap迅速縮小。大部分批評FSL的着重點可能都在miniImageNet上,其實,即使是miniImageNet,如果仔細觀察,也可以發現其實訓練集和測試集類別之間大多數是存在一個較大的gap的,比如測試集出現的微生物、花瓶,在訓練集很難找出類似的類。追溯批評的原因,還是大家在20年之前並沒有把few-shot learning和transfer learning的關係搞清楚,自然會覺得玩miniImageNet這種benchmark的都是在圈地自萌。只有看清楚了這層關係,才能脫離出few-shot learning原本的範圍,站在一個更高的維度思考問題本質。令人慶幸的是,雖然水論文在這個領域占比較大,但仍有一部分人正在朝着正確的方向前進,這就夠了。
我們現在清楚了,few-shot image classification其實等價於限制目標域labeled data數量的transfer learning,那麼問題來了,transfer learning基本就finetune一條路,玩不出花,為啥一旦把目標域數據量限制到很小,就出現了各種百花齊放的方法呢?這些方法包括但不僅限於meta-learning、conventional training、metric-based method、generation-based method、linear classification、dense-feature based method。
其實,這一問題的答案可以追溯到19年穀歌發布於CVPR的一篇論文:Do Better ImageNet Models Transfer Better?該文探究了ImageNet上訓練的模型的transfer learning效果。論文中的圖9給出了transfer learning隨着目標域labeled data數量增長時的效果變化,圖片如下:

橫軸為目標域每類labled image個數,縱軸為準確率
紅色的線為finetune方法效果,綠色的線為凍住backbone,僅在特徵之上用目標域數據訓練一個線性logistic分類器的效果,黑色為在目標數據集上從頭訓練一個模型。
首先,黑色線效果不行,說明transfer的必要性。
其次,更為有趣的是finetune和線性分類的performance在給定不同目標域數據量的差異。在目標域labeled data數據量較大情況下,finetune通常占據壓倒性優勢,但在few-shot場景下,finetune方法往往比不過凍住backbone的線性分類方法,注意到,該論文雖然降低了每類數目,但沒有降低類別數目,而這些數據集上類別數目都很大,後來我自己做了實驗,發現當類別數目變小時兩種方法差異更大,這表示finetune效果與labeled data數據總量正相關。這種現象,仔細思考其實很好理解,就是finetune backbone調整的參數量過多,在few-shot下很容易使得模型過擬合。這也解釋了為什麼MAML這類基於finetune的方法在few-shot learning下表現明顯不如metric-based method等其他凍住backbone的方法。
既然不能finetune,那麼理所當然地,在源域所學得的network backbone質量就至關重要。換句話說,從backbone引導出的feature space必須足夠general,足夠generalizable。這一目標正是19-21年整個few-shot community關注的重點之一 [2, 6-8],而該目標又恰好和這兩年基於linear protocol evaluation的對比學習一致,好的,few-shot learning本質問題至此來到了vision problem的深水區:怎麼學得一個泛化能力極強的visual representation,使得在遇到下游極端奇異且少量labeled data時仍表現良好?或者說,現有學得的visual representation在很奇怪的圖片上時仍然存在怎樣的問題?這些問題都是finetune打遍天下的傳統transfer learning不具有的,也是few-shot learning的核心問題之一。從早期的元學習,到後來metric-based pretraining(cosine classifier)以及加各種自監督學習、蒸餾學習的loss,目標都是學一個更好的特徵表示。
如果看過Big Transfer(BiT)[9]那篇文章,可能會問一個問題:是不是只要數據量足夠大,特徵表示就足夠好,小樣本分類問題就解決了?回答應該是,partially solved。首先小樣本分類效果和源域數據集大小在絕大部分目標數據集上是正相關關係,因此增大訓練數據量是一個非常好的途徑;但是,實驗發現,這一增長在某些domain gap差距較大的數據集上,特別是實際遇到的真實應用場景中,是有上限的,如果不能從根本探究清楚pretrained visual representation在小樣本下存在的問題,或者不使用除finetune之外的目標數據集adaptation方法,這一瓶頸看上去將無法解決。因此,few-shot image classfication這一問題有其獨特價值,與image representation learning的核心問題緊密相關。
訓練從源域學得general image representation之後,在測試時,目標域few-shot任務的所有圖片,不管是support(訓練)圖片還是query(測試)圖片,大部分方法均會先將其轉為representation再進行下一步操作。這導向另一個問題,即在給定的representation下,如何最大化利用support set少量圖片的representation構造一個分類器,使該分類器具有良好泛化能力?把圖像represention的潛力發揮到極致的方法很多,而這直接導致了few-shot learning方法的百花齊放。比如元學習方法,從訓練開始就target這一問題,但這些元學習方法忽略了一個重要問題:訓練源數據分布和測試時的目標數據分布是不同的,而這直接導致元學習的任務同分布假設不成立,這是元學習效果不佳的重要原因之一。這裡再舉另外一個例子,由於
1. 目標域labeled data少
2.目標域類別在訓練時沒見過
因此backbone網絡會不知道在紛繁複雜的圖片應該關注什麼信息。比如一張圖,一個人牽着一隻狗,標籤為人,但由於網絡在訓練時可能只把狗作為標籤(比如imagenet),因此提取特徵時便關注狗去了,而不是人。為解決這類問題,dense-feature based方法應運而生,其核心思想是backbone出來的feature不過global pooling,保留spatial信息,對比不同圖片的spatial feature map,從中找出對應關係,這樣如果有兩張圖,其共性是人而不是狗,那通過這種人和人的對應關係就能把狗這一confounding factor給去除。這一類方法論文如:CAN[16]、CTX[2]、DeepEMD [10]、LDAMF[17]、MCL[18]。
可以看到,訓練學得一個good representation,和測試時從有限labeled data建立一個好的分類器在一般的任務中是可以統一起來的。但在few-shot learning中,隨着元學習方法的缺點不斷被挖掘,這兩點割裂開來,成為兩個獨立的問題。
前者涉及vision representation的本質問題,若為了漲效果可以照搬cv近期各自提升feature質量的trick,比如對比學習、蒸餾等等,成為了各大cv頂會刷點必備,這些方法水一水是可以的,但要真正解決問題,還是要探究visual representation在目標域labeled data是few-shot時所存在的核心問題,這樣的研究最近是有[11-13],但很少;
後者涉及如何給定pretrained feature,做到快速task adaptation,核心點是 1. 取pretrained feature之精華,去其糟粕 2. 從support set feature及目標query feature中最大化可用信息,比如從support set中找類內共性,或者找support feature和query feature之間的對應關係,或者從訓練集中找尋並利用和support set的相似圖片,這第二點可以統稱為task adaptation。
最後安利一下meta-dataset,這個benchmark非常接近真實場景,其中multi-domain FSL的setting從根本上解決了訓練集單一domain泛化差的問題,根除了元學習方法的泛化障礙,可能能夠使得task adaptation方法更加自然、有效,是一種可能的真正解決few-shot learning的方法途徑。這裡提一嘴meta-dataset存在的一個bias,即測試時shot和way普遍偏高,這導致partial fine-tune[14,15]方法重現江湖,但實驗後發現這些方法在1-shot和5-shot表現不佳,是值得注意的點。
最後的最後,吐槽一下transductive few-shot learning,我是真的不理解這種setting能有什麼價值,如果有人知道,請告訴我:)
References:
[1] ChestX-ray8: Hospital-scale Chest X-ray Database and Benchmarks on Weakly-Supervised Classification and Localization of Common Thorax Diseases. CVPR 2017.
[2] Crosstransformers: Spatially-aware Few-shot Transfer. NeurIPS 2020.
[3] A Broader Study of Cross-Domain Few-Shot Learning. ECCV 2020.
[4] Meta-Dataset: A Dataset of Datasets for Learning to Learn from Few Examples. ICLR 2020.
[5] Matching Networks for One Shot Learning. NeurIPS 2016.
[6] Rapid learning or feature reuse? towards understanding the effectiveness of MAML. ICLR 2020.
[7] A baseline for few-shot image classification. ICLR 2020.
[8] Rethinking few-shot image classification: A good embedding is all you need? ECCV 2020.
[9] Big Transfer (BiT): General Visual Representation Learning. ECCV 2020.
[10] DeepEMD: Few-Shot Image Classification with Differentiable Earth Mover’s Distance and Structured Classifiers. CVPR 2020.
[11] Interventional Few-Shot Learning. NeurIPS 2020.
[12] Powering Finetuning in Few-Shot Learning: Domain-Agnostic Bias Reduction with Selected Sampling. AAAI 2022.
[13] Z-Score Normalization, Hubness, and Few-Shot Learning. ICCV 2021.
[14] Learning a Universal Template for Few-shot Dataset Generalization. ICML 2021.
[15] Cross-domain Few-shot Learning with Task-specific Adapters. CVPR 2022.
[16] Cross Attention Network for Few-shot Classification. NeurIPS 2019.
[17] Learning Dynamic Alignment via Meta-filter for Few-shot Learning. CVPR 2021.
[18] Learning to Affiliate: Mutual Centralized Learning for Few-shot Classification. CVPR 2022.
——The End——

文章轉載自知乎,著作權歸屬原作者
分享
收藏
點讚
在看
