細(xì)說(shuō)何愷明團(tuán)隊(duì)在無(wú)監(jiān)督領(lǐng)域的頂作:MoCo三部曲

極市導(dǎo)讀
本文從初代MoCo開始從頭探索了MoCo系列,探究MoCo系列為什么對(duì)Self-Suoervised Learning領(lǐng)域產(chǎn)生了這么大的影響。 >>加入極市CV技術(shù)交流群,走在計(jì)算機(jī)視覺的最前沿
趁著最近FAIR出了MoCov3,剛好湊夠MoCo三部曲,從頭捋一遍MoCo整個(gè)系列做了什么事情,探究MoCo系列為何對(duì)Self-Supervised Learning領(lǐng)域所產(chǎn)生的影響如此之大。
有關(guān)Self-Supervised和InfoNCE的基礎(chǔ)知識(shí)可以看Self-Supervised: 如何避免退化解,本文只涉及MoCo系列的Self-Supervised方法是如何演變的。
MoCov1
時(shí)間撥回到19年末,那時(shí)NLP領(lǐng)域的Transformer進(jìn)一步應(yīng)用于Unsupervised representation learning,產(chǎn)生后來(lái)影響深遠(yuǎn)的BERT和GPT系列模型,反觀CV領(lǐng)域,ImageNet刷到飽和,似乎遇到了怎么也跨不過(guò)的屏障,在不同task之間打轉(zhuǎn),尋求出路。就在CV領(lǐng)域停滯不前的時(shí)候,又是那個(gè)人Kaiming He帶著MoCo橫空出世,橫掃了包括PASCAL VOC和COCO在內(nèi)的7大數(shù)據(jù)集,至此,CV拉開了Self-Supervised的新篇章,與Transformer聯(lián)手成為了深度學(xué)習(xí)炙手可熱的研究方向。
MoCo主要設(shè)計(jì)了三個(gè)核心操作:Dictionary as a queue、Momentum update和Shuffling BN。
Dictionary as a queue
正如我之前的文章中提到的,避免退化解最好的辦法就是同時(shí)滿足alignment和uniformity,即需要positive pair和negative pair。其中uniformity是為了不同feature盡可能均勻的分布在unit hypersphere上,為了更有效率的達(dá)到這個(gè)目的,一個(gè)非常直觀的辦法是增加每次梯度更新所包含的negative pair(即batch size),在MoCo之前有很多方法對(duì)如何增加negative pair進(jìn)行了大量研究。

其中圖(a)是最簡(jiǎn)單粗暴,直接end-to-end,batch size的大小取決于GPU容量大小。圖(b)設(shè)計(jì)了一個(gè)memory bank保存數(shù)據(jù)集中所有數(shù)據(jù)的特征,使用的時(shí)候隨機(jī)從memory bank中采樣,然后對(duì)采樣進(jìn)行momentum update,這樣可以認(rèn)為多個(gè)epoch近似一個(gè)大的batch,但是這種方法存在一個(gè)問(wèn)題,就是保存數(shù)據(jù)集中所有數(shù)據(jù)特征非常的占顯存。

MoCo提出了將memory bank的方法改進(jìn)為dictionary as a queue,意思就是跟memory bank類似,也保存數(shù)據(jù)集中數(shù)據(jù)特征,只不過(guò)變成了queue的形式存儲(chǔ),這樣每個(gè)epoch會(huì)enqueue進(jìn)來(lái)一個(gè)batch的數(shù)據(jù)特征,然后dequeue出去dictionary中保存時(shí)間最久的一個(gè)batch的數(shù)據(jù)特征,整體上來(lái)看每個(gè)epoch,dictionary中保存的數(shù)據(jù)特征總數(shù)是不變的,并且隨著epoch的進(jìn)行會(huì)更新dictionary的數(shù)據(jù)特征同時(shí)dictionary的容量不需要很大,精髓!
Momentum update
但是MoCo僅僅將dictionary as a queue的話,并不能取得很好的效果,是因?yàn)椴煌琫poch之間,encoder的參數(shù)會(huì)發(fā)生突變,不能將多個(gè)epoch的數(shù)據(jù)特征近似成一個(gè)靜止的大batch數(shù)據(jù)特征,所以MoCo在dictionary as a queue的基礎(chǔ)上,增加了一個(gè)momentum encoder的操作,key的encoder參數(shù)等于query的encoder參數(shù)的滑動(dòng)平均,公式如下:
和分別是key的encoder和query的encoder的參數(shù),m是0-1之間的動(dòng)量系數(shù)。
因?yàn)閙omentum encoder的存在,導(dǎo)致key支路的參數(shù)避免了突變,可以將多個(gè)epoch的數(shù)據(jù)特征近似成一個(gè)靜止的大batch數(shù)據(jù)特征,巧妙!
Shuffling BN
另外,MoCo還發(fā)現(xiàn)ResNet里的BN層會(huì)阻礙模型學(xué)習(xí)一個(gè)好的特征。由于每個(gè)batch內(nèi)的樣本之間計(jì)算mean和std導(dǎo)致信息泄露,產(chǎn)生退化解。MoCo通過(guò)多GPU訓(xùn)練,分開計(jì)算BN,并且shuffle不同GPU上產(chǎn)生的BN信息來(lái)解決這個(gè)問(wèn)題。
實(shí)驗(yàn)

通過(guò)對(duì)end-to-end、memory bank和MoCo三種方法的對(duì)比實(shí)驗(yàn)可以看出MoCo算法有著巨大優(yōu)勢(shì)。memory bank由于momentum update的是數(shù)據(jù),可能訓(xùn)練過(guò)程會(huì)更加不穩(wěn)定,導(dǎo)致精度遠(yuǎn)低于end-to-end和MoCo;end-to-end由于GPU容量大小的限制,導(dǎo)致不能使用更大的batch size;MoCo通過(guò)dictionary as a queue和momentum encoder和shuffle BN三個(gè)巧妙設(shè)計(jì),使得能夠不斷增加K的數(shù)量,將Self-Supervised的威力發(fā)揮的淋漓盡致。
MoCov2
MoCov2在MoCov1的基礎(chǔ)上,增加了SimCLR實(shí)驗(yàn)成功的tricks,然后反超SimCLR重新成為當(dāng)時(shí)的SOTA,F(xiàn)AIR和Google Research爭(zhēng)鋒相對(duì)之作,頗有華山論劍的意思。
SimCLR vs MoCo

SimCLR其實(shí)使用的方法就是MoCo中提到的end-to-end的方法,當(dāng)然同樣存在GPU容量大小限制的問(wèn)題,但是在Google面前,GPU容量大小算什么限制,TPU我有一打,于是SimCLR通過(guò)大batch、大epoch、更多更強(qiáng)的數(shù)據(jù)增強(qiáng)和增加一個(gè)MLP把MoCo拉下了王座,MoCo當(dāng)然不服氣,SimCLR你作弊,老子也要用更多更強(qiáng)的數(shù)據(jù)增強(qiáng)和MLP! 于是MoCov2以一種實(shí)驗(yàn)報(bào)告的形式誕生了。
實(shí)驗(yàn)

從實(shí)驗(yàn)中可以看出,增加MLP、更強(qiáng)的aug、大epoch都能夠大幅度的提升MoCo的精度。

MoCov2相比于SimCLR,在batch size更小的情況下,能夠達(dá)到更好的效果。
MoCov3
MoCov3的出發(fā)點(diǎn)是NLP領(lǐng)域的Unsupervised representation learning使用的架構(gòu)都是Transformer的,而CV領(lǐng)域的Self-Supervised還在使用CNN架構(gòu),是不是可以在Self-Supervised中使用Transformer架構(gòu)呢?于是MoCov3繼續(xù)探索Self-Supervised+Transformer的上限在哪里,有金融+計(jì)算機(jī)內(nèi)味了。
Stability of Self-Supervised ViT Training
MoCov3將backbone替換成ViT,然后進(jìn)行實(shí)驗(yàn)研究,探索Self-Supervised使用Transformer架構(gòu)是否可行。然而實(shí)驗(yàn)中使用ViT作為backbone會(huì)導(dǎo)致Self-Supervised的訓(xùn)練過(guò)程不穩(wěn)定,并且這個(gè)不穩(wěn)定現(xiàn)象無(wú)法通過(guò)最終遷移預(yù)測(cè)的結(jié)果捕捉到。為了揭示這個(gè)不穩(wěn)定現(xiàn)象是什么導(dǎo)致的,MoCov3使用kNN curves來(lái)監(jiān)控self-supervised的每一個(gè)epoch結(jié)果。
Empirical Observations on Basic Factors
通過(guò)控制變量,主要探究了batch size、learning rate和optimizer三個(gè)變量對(duì)self-supervised訓(xùn)練過(guò)程的影響程度。

從實(shí)驗(yàn)中可以看出隨著batch的增大或者lr的增大,kNN accuracy都逐漸出現(xiàn)了dip的情況,并且dip的程度逐漸增加,呈現(xiàn)周期性出現(xiàn)。當(dāng)使用LAMB optimizer時(shí),隨著lr的增加,雖然kNN accuracy還是平滑的曲線,但是中間部分任然會(huì)出現(xiàn)衰退。
A Trick for Improving Stability

為了探究dip出現(xiàn)的原因,作者進(jìn)一步畫出隨著epoch的增加,模型的first layer和last layer梯度的變化情況。發(fā)現(xiàn)在訓(xùn)練過(guò)程中,不同的layer都會(huì)發(fā)生梯度突變的情況,導(dǎo)致dip的出現(xiàn)。通過(guò)比較各個(gè)layer的梯度峰值發(fā)現(xiàn)first layer會(huì)更早的出現(xiàn)梯度峰值,然后逐層蔓延到last layer。
基于這個(gè)觀察現(xiàn)象,作者大膽猜測(cè)不穩(wěn)定現(xiàn)象在淺層會(huì)更早產(chǎn)生。于是作者進(jìn)行消融實(shí)驗(yàn)比對(duì)fixed random patch projectionr和learned patch projection兩種情況的結(jié)果。

可以看到訓(xùn)練過(guò)程中,在不同Self-Supervised算法下,fixed random patch projection比起learned patch projection會(huì)穩(wěn)定許多,并且kNN accuracy也有一定的提升。
作者也提到fixed random patch projection只能一定程度上緩解不穩(wěn)定問(wèn)題,但是無(wú)法完全解決。當(dāng)lr足夠大時(shí),任然會(huì)出現(xiàn)不穩(wěn)定現(xiàn)象。first layer不太可能是不穩(wěn)定的根本原因,相反,這個(gè)不穩(wěn)定問(wèn)題跟所有l(wèi)ayer相關(guān)。只不過(guò)first layer使用的是conv跟后面的self-attention之間gap更大,對(duì)不穩(wěn)定影響更大,first layer固定住更容易處理而已。

實(shí)驗(yàn)結(jié)果不出所料的吊打之前的Self-Supervised算法,總體上MoCov3通過(guò)實(shí)驗(yàn)探究洞察到了Self-Supervised+Transformer存在的問(wèn)題,并且使用簡(jiǎn)單的方法緩解了這個(gè)問(wèn)題,這給以后的研究者探索Self-Supervised+Transformer提供了很好的啟示。
總結(jié)
說(shuō)一下自己的看法,未來(lái)CV很大可能是類似NLP,走無(wú)監(jiān)督預(yù)訓(xùn)練,CNN的架構(gòu)可能支撐不起大量數(shù)據(jù)的無(wú)監(jiān)督預(yù)訓(xùn)練,那么使用transformer作為CV的無(wú)監(jiān)督預(yù)訓(xùn)練架構(gòu)是有必要的。從MoCov3的探索可以看出,F(xiàn)AIR試圖從Self-Supervised和Transformer兩大炙手可熱的方向?qū)で驝V未來(lái)的方向,NLP從Transformer -> BERT -> GPT系列,逐漸統(tǒng)治整個(gè)NLP領(lǐng)域,MoCo似乎也想復(fù)制出NLP的成功路徑,從MoCov1 -> MoCov2 -> MoCov3逐漸探索CV領(lǐng)域Unsupervised representation learning的上限,Self-Supervised+Transformer會(huì)是CV領(lǐng)域的BERT嗎?

最后我想說(shuō)的是,正如截圖所示,雖然叫MoCov3,但其實(shí)越來(lái)越不像MoCo了,缺少了MoCo最精髓的dictionary as a queue,沒有了MoCo的精氣神,可以看出FAIR對(duì)于精度的無(wú)奈與妥協(xié),MoCo最初的精彩或許只能存在于歷史之中。
Reference
[1] Momentum Contrast for Unsupervised Visual Representation Learning
[2] Improved Baselines with Momentum Contrastive Learning
[3] An Empirical Study of Training Self-Supervised Visual Transformers
本文亮點(diǎn)總結(jié)
如果覺得有用,就請(qǐng)分享到朋友圈吧!
推薦閱讀
2020-12-09
2021-04-06
2021-04-20

# CV技術(shù)社群邀請(qǐng)函 #
備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測(cè)-深圳)
即可申請(qǐng)加入極市目標(biāo)檢測(cè)/圖像分割/工業(yè)檢測(cè)/人臉/醫(yī)學(xué)影像/3D/SLAM/自動(dòng)駕駛/超分辨率/姿態(tài)估計(jì)/ReID/GAN/圖像增強(qiáng)/OCR/視頻理解等技術(shù)交流群
每月大咖直播分享、真實(shí)項(xiàng)目需求對(duì)接、求職內(nèi)推、算法競(jìng)賽、干貨資訊匯總、與 10000+來(lái)自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動(dòng)交流~

