一種從少量帶標簽數據+大量無標簽數據中進行學習的方案是:現在無標簽數據集上采用無監督學習方案進行預訓練,然后采用監督學習方式在少量帶標簽數據上進行微調。盡管方案中的無標簽數據上的無監督學習是一種任務不可知方式(不同于其他CV中半監督學習),但是令人驚訝的是這種半監督學習的放在ImageNet上極為有效。
該方案的一個重要組成是預訓練和微調階段采用了“大模型”。作者發現:越少的標簽數據,該方法越能從更大的模型中受益。經過微調后,大模型可以進一步得以改善并蒸餾更多信息到小模型中(注:蒸餾階段會對無標簽數據進行二次利用,此時該數據將以任務已知方式進行應用)。
總而言之,所提半監督方法可以總結為三步;(1)采用SimCLRv2方法在無標簽數據上對一個Big ResNet模型進行預訓練;(2)在有標簽數據上通過有監督方式進行微調;(3)在無標簽數據上采用蒸餾方式進行進行知識遷移。
所提方法在僅僅采用1%有標簽數據時,ResNet50取得了73.9%的top-1精度;當采用10%有標簽數據時,ResNet50的精度達到了77.5%的top-1精度。這個精度超越了采用全部有標簽數據時有監督訓練的精度。
【導讀】無監督學習再發力!Facebook AI 研究團隊的陳鑫磊、樊昊棋、Ross Girshick、何愷明等人提出了第二版動量對比(MoCo)的無監督訓練方法。使用一個MLP投影頭和更多的數據增強——建立了比Hinton前一久的SimCLR更強的基準,并且不需要大量的訓練。
對比式無監督學習最近取得了令人鼓舞的進展,例如動量對比(MoCo)和SimCLR。在本文中,我們通過在MoCo框架中實現SimCLR的兩個設計改進來驗證它們的有效性。通過對MoCo的簡單修改——即使用一個MLP投影頭和更多的數據增強——我們建立了比SimCLR更強的基準,并且不需要大量的訓練。我們希望這將使最先進的無監督學習研究更容易獲得。代碼將被公開。
論文鏈接://arxiv.org/pdf/2003.04297.pdf
最近關于從圖像中進行無監督表示學習的研究[16,13,8,17,1,9,15,6,12,2]都集中在一個中心概念上,即對比學習[5]。結果是非常有希望的:例如,動量對比(MoCo)[6]表明,在多個檢測和分割任務中,無監督前訓練可以超越其圖像監督后,而SimCLR[2]進一步減少了無監督和監督前預訓練表示之間的線性分類器性能的差距。
本文介紹在MoCo框架內建立了更強、更可行的基線。我們報告了SimCLR中使用的兩個設計改進,即一個MLP投影頭和更強的數據增強,與MoCo和SimCLR框架是正交的,當與MoCo一起使用時,它們會帶來更好的圖像分類和目標檢測遷移學習結果。此外,MoCo框架可以處理大量的負樣本,而不需要大量的訓練批(圖1)。與需要TPU支持的SimCLR的大4k~8k批相比,我們的“MoCo v2”基線可以在典型的8-GPU機器上運行,并且獲得比SimCLR更好的結果。我們希望這些改進的基線能夠為未來的無監督學習研究提供參考。
圖1:對比學習的兩種優化機制的批處理透視圖。圖像被編碼到一個表示空間中,在這個表示空間中計算成對的相似度。
方法
對比學習及其最新進展可以看做是為查詞典任務訓練一個編碼器。
假設有一個編碼的查詢 q 和一組編碼的樣本 {k0, k1, k2, ...},它們都是詞典的鍵。詞典中有一個鍵(k+)與 q 相匹配。對比損失是一個函數,該函數的值在 q 類似于其正鍵 k+且不同于其他所有鍵(q 的負鍵)時很低。研究者使用點積的相似度度量,這是一種對比損失函數的形式,名為 InfoNCE。本文采用了這個函數:
這一對比損失函數充當一個無監督目標函數,用于訓練表征查詢和鍵的編碼器網絡。總體來說,查詢表征是 q = f_q(x^q ),其中的 f_q 是一個編碼器網絡,x^q 是查詢樣本。
改進設計
SimCLR[2]在三個方面改進了實例識別的端到端變體:(i)能夠提供更多負樣本的更大的批處理(4k或8k);(ii)將輸出的fc投影頭[16]替換為MLP頭;(三)數據擴充能力增強。
在MoCo框架中,大量的負樣本是現成的;MLP頭和數據擴充與對比學習的實例化方式是正交的。接下來,我們研究MoCo中的這些改進。
實驗設置
在1.28M的ImageNet[3]訓練集上進行無監督學習。(i) ImageNet線性分類:對特征進行凍結,訓練監督線性分類器;我們報告了1種crop(224×224),驗證準確率排名第一。(ii) 遷移到VOC目標檢測[4]:更快的R-CNN檢測器[14](c4 -主干)在VOC 07+12訓練集上對所有條目(包括監督和MoCo v1基線)進行端到端微調,我們對VOC進行24k迭代微調,高于[6]中的18k。并在VOC 07測試集上使用COCO標準[10]進行評估。我們使用與MoCo[6]相同的超參數(除非特別指出)和代碼庫。所有結果使用標準大小的ResNet-50[7]。
MLP頭 在[2]之后,我們將MoCo中的fc頭替換為2層MLP頭(隱藏層2048-d,使用ReLU)。注意,這只影響到非監督訓練階段;線性分類或遷移階段不使用這個MLP頭。[2]之后,我們尋找一個最佳的τ關于ImageNet線性分類準確率:
使用默認τ= 0.07[16,6],訓練的MLP頭提高從60.6%至62.9%;切換到MLP的最優值(0.2),準確度度提高到66.2%。表1(a)顯示了它的檢測結果:與ImageNet上的大飛躍相比,檢測增益更小。
數據增強 我們通過在[2]中加入模糊增強來擴展[6]中的原始增強(我們發現在[2]中更強的顏色失真在我們更高的基線中有遞減的增益)。單獨的額外增加(即(no MLP)將ImageNet上的MoCo基線提高了2.8%,達到63.4%,見表1(b)。有趣的是,它的檢測準確率比單獨使用MLP要高,表1(b)與(a),盡管線性分類準確度要低得多(63.4%比66.2%)。這說明線性分類精度與檢測中的遷移性能不是單調相關的。對于MLP,額外的增強將ImageNet的精度提高到67.3%,見表1(c)。
與SimCLR進行比較 表2將SimCLR[2]與我們的結果MoCo v2進行了比較。為了公平比較,我們還研究了SimCLR采用的一個余弦(半周期)學習速率調度[11]。表1(d, e)。MoCo v2使用200個epoch和256個批量大小的預訓練,在ImageNet上達到67.5%的準確率,比SimCLR在相同epoch和批量大小下的準確率高5.6%,比SimCLR的大批量結果高66.6%。通過800-epoch的預訓練,MoCo v2達到了71.1%,超過了SimCLR的69.3%,達到了1000個epoch。
計算成本
在表3中,我們報告了實現的內存和時間成本。端到端案例反映了GPU中的SimCLR成本(而不是[2]中的TPUs)。即使在高端的8-GPU機器上,4k的批處理大小也是難以處理的。而且,在相同的批處理大小為256的情況下,端到端變體在內存和時間上仍然更昂貴,因為它向后傳播到q和k編碼器,而MoCo只向后傳播到q編碼器。
表2和表3表明,為了獲得良好的準確性,不需要大的訓練批處理。我們研究的改進只需要對MoCo v1進行幾行代碼更改,我們將公開代碼以方便將來的研究。