Abstract一種從少量帶標簽數(shù)據(jù)+大量無標簽數(shù)據(jù)中進行學習的方案是:現(xiàn)在無標簽數(shù)據(jù)集上采用無監(jiān)督學習方案進行預訓練,然后采用監(jiān)督學習方式在少量帶標簽數(shù)據(jù)上進行微調(diào)。盡管方案中的無標簽數(shù)據(jù)上的無監(jiān)督學習是一種任務不可知方式(不同于其他CV中半監(jiān)督學習),但是令人驚訝的是這種半監(jiān)督學習的放在ImageNet上極為有效。 該方案的一個重要組成是預訓練和微調(diào)階段采用了“大模型”。作者發(fā)現(xiàn):越少的標簽數(shù)據(jù),該方法越能從更大的模型中受益。經(jīng)過微調(diào)后,大模型可以進一步得以改善并蒸餾更多信息到小模型中(注:蒸餾階段會對無標簽數(shù)據(jù)進行二次利用,此時該數(shù)據(jù)將以任務已知方式進行應用)。 總而言之,所提半監(jiān)督方法可以總結(jié)為三步;(1)采用SimCLRv2方法在無標簽數(shù)據(jù)上對一個 所提方法在僅僅采用1%有標簽數(shù)據(jù)時,ResNet50取得了73.9%的top-1精度;當采用10%有標簽數(shù)據(jù)時,ResNet50的精度達到了77.5%的top-1精度。這個精度超越了采用全部有標簽數(shù)據(jù)時有監(jiān)督訓練的精度。 Introduction少量有標簽數(shù)據(jù)+大量無標簽數(shù)據(jù)的學習問題是機器學習中存在已有的問題。其中一種知名的方法是半監(jiān)督學習,它包含無監(jiān)督或自監(jiān)督訓練,后接有監(jiān)督微調(diào)。在預訓練階段該方法以任務未知方式利用無標簽數(shù)據(jù),而有標簽數(shù)據(jù)僅應用于微調(diào)階段。盡管這類方法在CV領域受到的關注較少,但它已成為NLP領域的主流方案(比如首先在無標簽文本數(shù)據(jù)上訓練一個大的語言模型,然后在有標簽數(shù)據(jù)上微調(diào)該模型)。在CV領域,常用的一種方案是:直接在以監(jiān)督方式利用無標簽數(shù)據(jù)(起正則作用)。這時的無標簽數(shù)據(jù)是以任務已知方式進行利用,即:要求多個不同模型在無標簽數(shù)據(jù)上的預測類標簽具有一致性;或者在不同數(shù)據(jù)增廣方式下輸出的類別標簽相一致。 受啟發(fā)于視覺表達領域自監(jiān)督學習的進展,該文首次對ImageNet上“無監(jiān)督預訓練、有監(jiān)督微調(diào)”的半監(jiān)督學習進行了系統(tǒng)研究。在自監(jiān)督預訓練階段,圖像以任務不可知方式進行應用,也就是說通過這種方式學習到的表達方式不會存在對特定分類任務的傾向性。作者發(fā)現(xiàn):對于無監(jiān)督數(shù)據(jù)的這種任務不可知的應用而言,模型的大小至關重要。在自監(jiān)督預訓練階段采用更大的模型,那么微調(diào)后的性能也會更高。除此之外,作者還描繪了對比學習中幾個重要的設計選項。 一旦卷積網(wǎng)絡完成預訓練和微調(diào),作者發(fā)現(xiàn):模型的任務已知預測屬性可以進一步改善并蒸餾到一個更小的網(wǎng)絡中。為此,作者對無標簽數(shù)據(jù)進行了二次利用以促使學生網(wǎng)絡盡可能的模擬老師網(wǎng)絡的標簽預測性能。所提方法的蒸餾階段采用偽標簽方式且不會造成額外的更多復雜度。 總而言之,所提半監(jiān)督方法可以總結(jié)為三步;(1)采用SimCLRv2方法在無標簽數(shù)據(jù)上對一個 針對ResNet的無監(jiān)督預訓練,作者在SimCLR基礎上進行了改進并稱之為SimCLRv2.在僅僅采用1%和10%有標簽數(shù)據(jù)時評估了所提方案的有效性,該方案主要包含下面三個貢獻:
組合上述發(fā)現(xiàn)得到了ImageNet上的半監(jiān)督學習的SOTA性能,見上圖2.SimCLRv2取得了79.8%的top-1精度,以4.3%絕對優(yōu)勢超過了此前SOTA方法。當僅僅采用1%和10%有標簽數(shù)據(jù)進行微調(diào)并蒸餾到相同模型后,模型的指標分別為76.6%和80.9%,分別以21.6%和8.7%的絕對優(yōu)勢超越了已有SOTA方法。通過蒸餾,上述性能改進可以遷移到更小的ResNet50網(wǎng)絡并取得了73.9%和77.5%的top1精度。相比較而言,ImageNet上有監(jiān)督訓練得到的ResNet50的精度為76.6%top精度。 Method受啟發(fā)于無標檢數(shù)據(jù)的成功學習,所提半監(jiān)督學習方案以任務未知和任務已知兩種方式利用無標簽數(shù)據(jù)。首先,采用任務未知方式利用無標簽數(shù)據(jù)進行無監(jiān)督預訓練以學習廣義視覺特征表達;然后;所學習的廣義特征表達通過有監(jiān)督微調(diào)進行方式;最后;采用任務已知方式利用無標簽數(shù)據(jù)進行模型蒸餾。為達到該目的,作者提出在無標簽數(shù)據(jù)集上訓練一個學生模型,而標簽則來自微調(diào)后的老師模型。該方案可以總結(jié)為: Self-supervised pretraining with SimCLRv2為更好的從無標簽數(shù)據(jù)上學習廣義視覺特征表達,作者對SimCLR進行了改進。SimCLR通過最大化不同增廣數(shù)據(jù)之前的一致性進行學習。給定輸入圖像,它將被增廣兩次,構(gòu)建關于同一數(shù)據(jù)兩次增廣,這兩個圖像通過編碼網(wǎng)絡進行編碼得到更易特征表達。這些特征表達然后經(jīng)過非線性變換網(wǎng)絡進行變換得到并用于對比學習。對比損失定義如下: 其中表示余弦相似性,表示溫標參數(shù)。 在這里,作者基于SimCLR提出了三個主要改進得到了SimCLRv2,總結(jié)如下:
Fine-tuning微調(diào)是將任務未知預訓練模型遷移到任務已知中常用技巧。在SimCLR的微調(diào)階段,非線性網(wǎng)絡會被直接完整丟棄而僅僅保留編碼器部分進行微調(diào)。而在SimCLRv2中則是集成非線性網(wǎng)絡的一部分(第一層)進行微調(diào)。 作者精心構(gòu)建了一個三層projection head ,其中表示ReLU激活函數(shù),為簡單起見這里忽略了偏置項。在微調(diào)階段,SimCLR采用進行微調(diào);而SimCLRv2則是采用進行微調(diào)。這一點點的改進是不是看上去非常簡單?能想到并去做才是難的! Self-training/knowledge distillation via unlabeled examples為進一步改善網(wǎng)絡在特定任務上的性能,作者提出直接采用無標簽數(shù)據(jù)進行特定任務學習。那么標簽從何而來呢?偽標簽咯。將簽署微調(diào)模型作為老師模型并給出無標簽數(shù)據(jù)對應的偽標簽用于蒸餾學生模型。蒸餾階段采用KL散度就可以了,有沒有覺得很簡單,方法都是現(xiàn)成的。 這個方法感覺跟Google之前提出的 Experiments沿著無監(jiān)督學習的設置方式,作者在ImageNet數(shù)據(jù)集上進行了實驗分析。注:作者采用的優(yōu)化器是LARS。 在預訓練階段,batch=4096,硬件平臺128CloudTPU,同時采用了全局BatchNorm,訓練了800epoch。學習率在前5%epoch線性提升到6.4然后按照余弦方式衰減,權值衰減因子為0.0001。非線性網(wǎng)路為三層感知器。記憶buffer設置為64K,同時采用了EMA技術。增廣技術類似于SimCLR,即隨機裁剪、顏色都懂以及高斯模糊。 在微調(diào)階段,作者對非線性網(wǎng)絡的第一層進行了微調(diào)。采用了全局BatchNorm,但移除了權值衰減、學習率warmup,而是采用了更小的學習率0.16和0.064用于標準ResNet和更大ResNet。batch=1024,在1%數(shù)據(jù)上微調(diào)60epoch,在10%數(shù)據(jù)上微調(diào)30epoch。 在蒸餾階段,作者提出僅僅采用無標簽數(shù)據(jù)進行蒸餾。作者采用了兩種類型的蒸餾:自蒸餾與 下表給出了自監(jiān)督、有監(jiān)督在不同模型大小下的性能評估??梢钥吹剑禾嵘P蛯挾?、深度以及添加SK可以取得更好的性能。 下圖給出了不同模型大小不同標簽數(shù)據(jù)時的性能對比。 下圖給出了非線性網(wǎng)絡部分改善前后的性能對比。 最后,下圖給出了蒸餾階段的性能對比。更多實驗對比分析建議查看原文。 Conclusion這篇比較詳細的描述了如何在SimCLR基礎上改進得到SimCLRv2的過程,整個思路的轉(zhuǎn)換非常清晰自然。通篇看下來,最大的感覺就是它和Noisy Student相同之處真的非常多,流程與思想都非常的相似。 論文與代碼鏈接 paper:https:///abs/2006.10029 code:https://github.com/google-research/simclr |
|
|