細說何愷明團隊在無監督領域的頂作:MoCo三部曲


MLNLP 

機器學習演算法與自然語言處理 

)社群是國內外知名自然語言處理社群,受眾覆蓋國內外NLP碩博生、高校老師以及企業研究人員。


社群的願景 是促進國內外自然語言處理,機器學習學術界、產業界和廣大愛好者之間的交流,特別是初學者同學們的進步。

轉載自 | 極市平臺
作者 | Smarter
來源 | Smarter
從頭捋一遍MoCo整個系列做了什麼事情,探究MoCo系列為何對Self-Supervised Learning領域所產生的影響如此之大。
有關Self-Supervised和InfoNCE的基礎知識可以看Self-Supervised: 如何避免退化解,本文只涉及MoCo系列的Self-Supervised方法是如何演變的。
1
『MoCov1』
時間撥回到19年末,那時NLP領域的Transformer進一步應用於Unsupervised representation learning,產生後來影響深遠的BERT和GPT系列模型,反觀CV領域,ImageNet刷到飽和,似乎遇到了怎麼也跨不過的屏障,在不同task之間打轉,尋求出路。就在CV領域停滯不前的時候,又是那個人Kaiming He帶著MoCo橫空出世,橫掃了包括PASCAL VOC和COCO在內的7大資料集,至此,CV拉開了Self-Supervised的新篇章,與Transformer聯手成為了深度學習炙手可熱的研究方向。
MoCo主要設計了三個核心操作:Dictionary as a queue、Momentum update和Shuffling BN。
Dictionary as a queue
正如我之前的文章中提到的,避免退化解最好的辦法就是同時滿足alignment和uniformity,即需要positive pair和negative pair。其中uniformity是為了不同feature儘可能均勻的分佈在unit hypersphere上,為了更有效率的達到這個目的,一個非常直觀的辦法是增加每次梯度更新所包含的negative pair(即batch size),在MoCo之前有很多方法對如何增加negative pair進行了大量研究。

其中圖(a)是最簡單粗暴,直接end-to-end,batch size的大小取決於GPU容量大小。圖(b)設計了一個memory bank儲存資料集中所有資料的特徵,使用的時候隨機從memory bank中取樣,然後對取樣進行momentum update,這樣可以認為多個epoch近似一個大的batch,但是這種方法存在一個問題,就是儲存資料集中所有資料特徵非常的佔視訊記憶體。

MoCo提出了將memory bank的方法改進為dictionary as a queue,意思就是跟memory bank類似,也儲存資料集中資料特徵,只不過變成了queue的形式儲存,這樣每個epoch會enqueue進來一個batch的資料特徵,然後dequeue出去dictionary中儲存時間最久的一個batch的資料特徵,整體上來看每個epoch,dictionary中儲存的資料特徵總數是不變的,並且隨著epoch的進行會更新dictionary的資料特徵同時dictionary的容量不需要很大,精髓!

Momentum update
但是MoCo僅僅將dictionary as a queue的話,並不能取得很好的效果,是因為不同epoch之間,encoder的引數會發生突變,不能將多個epoch的資料特徵近似成一個靜止的大batch資料特徵,所以MoCo在dictionary as a queue的基礎上,增加了一個momentum encoder的操作,key的encoder引數等於query的encoder引數的滑動平均,公式如下:
和分別是key的encoder和query的encoder的引數,m是0-1之間的動量係數。
因為momentum encoder的存在,導致key支路的引數避免了突變,可以將多個epoch的資料特徵近似成一個靜止的大batch資料特徵,巧妙!
Shuffling BN
另外,MoCo還發現ResNet裡的BN層會阻礙模型學習一個好的特徵。由於每個batch內的樣本之間計算mean和std導致資訊洩露,產生退化解。MoCo透過多GPU訓練,分開計算BN,並且shuffle不同GPU上產生的BN資訊來解決這個問題。
實驗
透過對end-to-end、memory bank和MoCo三種方法的對比實驗可以看出MoCo演算法有著巨大優勢。memory bank由於momentum update的是資料,可能訓練過程會更加不穩定,導致精度遠低於end-to-end和MoCo;end-to-end由於GPU容量大小的限制,導致不能使用更大的batch size;MoCo透過dictionary as a queue和momentum encoder和shuffle BN三個巧妙設計,使得能夠不斷增加K的數量,將Self-Supervised的威力發揮的淋漓盡致。
2
『MoCov2』
MoCov2在MoCov1的基礎上,增加了SimCLR實驗成功的tricks,然後反超SimCLR重新成為當時的SOTA,FAIR和Google Research爭鋒相對之作,頗有華山論劍的意思。
SimCLR vs MoCo

SimCLR其實使用的方法就是MoCo中提到的end-to-end的方法,當然同樣存在GPU容量大小限制的問題,但是

在Google面前,GPU容量大小算什麼限制,TPU我有一打

,於是SimCLR透過大batch、大epoch、更多更強的資料增強和增加一個MLP把MoCo拉下了王座,

MoCo當然不服氣,SimCLR你作弊,老子也要用更多更強的資料增強和MLP!

於是MoCov2以一種實驗報告的形式誕生了。

實驗

從實驗中可以看出,增加MLP、更強的aug、大epoch都能夠大幅度的提升MoCo的精度。

MoCov2相比於SimCLR,在batch size更小的情況下,能夠達到更好的效果。
3
『MoCov3』
MoCov3的出發點是NLP領域的Unsupervised representation learning使用的架構都是Transformer的,而CV領域的Self-Supervised還在使用CNN架構,是不是可以在Self-Supervised中使用Transformer架構呢?於是MoCov3繼續探索Self-Supervised+Transformer的上限在哪裡,有金融+計算機內味了。
Stability of Self-Supervised ViT Training
MoCov3將backbone替換成ViT,然後進行實驗研究,探索Self-Supervised使用Transformer架構是否可行。然而實驗中使用ViT作為backbone會導致Self-Supervised的訓練過程不穩定,並且這個不穩定現象無法透過最終遷移預測的結果捕捉到。為了揭示這個不穩定現象是什麼導致的,MoCov3使用kNN curves來監控self-supervised的每一個epoch結果。
Empirical Observations on Basic Factors
透過控制變數,主要探究了batch size、learning rate和optimizer三個變數對self-supervised訓練過程的影響程度。
從實驗中可以看出隨著batch的增大或者lr的增大,kNN accuracy都逐漸出現了dip的情況,並且dip的程度逐漸增加,呈現週期性出現。當使用LAMB optimizer時,隨著lr的增加,雖然kNN accuracy還是平滑的曲線,但是中間部分任然會出現衰退。
A Trick for Improving Stability
為了探究dip出現的原因,作者進一步畫出隨著epoch的增加,模型的first layer和last layer梯度的變化情況。發現在訓練過程中,不同的layer都會發生梯度突變的情況,導致dip的出現。透過比較各個layer的梯度峰值發現first layer會更早的出現梯度峰值,然後逐層蔓延到last layer。
基於這個觀察現象,作者大膽猜測不穩定現象在淺層會更早產生。於是作者進行消融實驗比對fixed random patch projectionr和learned patch projection兩種情況的結果。
可以看到訓練過程中,在不同Self-Supervised演算法下,fixed random patch projection比起learned patch projection會穩定許多,並且kNN accuracy也有一定的提升。
作者也提到fixed random patch projection只能一定程度上緩解不穩定問題,但是無法完全解決。當lr足夠大時,任然會出現不穩定現象。first layer不太可能是不穩定的根本原因,相反,這個不穩定問題跟所有layer相關。只不過first layer使用的是conv跟後面的self-attention之間gap更大,對不穩定影響更大,first layer固定住更容易處理而已。
實驗結果不出所料的吊打之前的Self-Supervised演算法,總體上MoCov3透過實驗探究洞察到了Self-Supervised+Transformer存在的問題,並且使用簡單的方法緩解了這個問題,這給以後的研究者探索Self-Supervised+Transformer提供了很好的啟示。
4
『總結』
說一下自己的看法,未來CV很大可能是類似NLP,走無監督預訓練,CNN的架構可能支撐不起大量資料的無監督預訓練,那麼使用transformer作為CV的無監督預訓練架構是有必要的。從MoCov3的探索可以看出,FAIR試圖從Self-Supervised和Transformer兩大炙手可熱的方向尋求CV未來的方向,NLP從Transformer -> BERT -> GPT系列,逐漸統治整個NLP領域,MoCo似乎也想複製出NLP的成功路徑,從MoCov1 -> MoCov2 -> MoCov3逐漸探索CV領域Unsupervised representation learning的上限,Self-Supervised+Transformer會是CV領域的BERT嗎?

最後我想說的是,正如截圖所示,雖然叫MoCov3,但其實越來越不像MoCo了,缺少了MoCo最精髓的

dictionary as a queue

,沒有了MoCo的精氣神,可以看出FAIR對於精度的無奈與妥協,MoCo最初的精彩或許只能存在於歷史之中。

參考文獻
[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
技術交流群邀請函
△長按新增小助手
掃描二維碼新增小助手微信
請備註:姓名-學校/公司-研究方向
(如:小張-哈工大-對話系統)
即可申請加入自然語言處理/Pytorch等技術交流群

關於我們

MLNLP社群  機器學習演算法與自然語言處理 ) 是由國內外自然語言處理學者聯合構建的民間學術社群,目前已經發展為國內外知名自然語言處理社群,旗下包括  萬人頂會交流群、AI臻選匯、AI英才匯  以及  AI學術匯  等知名品牌,旨在促進機器學習,自然語言處理學術界、產業界和廣大愛好者之間的進步。
社群可以為相關從業者的深造、就業及研究等方面提供開放交流平臺。歡迎大家關注和加入我們。

相關文章