自監督學習算法整理 (1)谷歌組 SimCLR v1 & v2 (2) FAIR組 MoCo v1&v2, SwAV,Simsiam DeepMind BYOL


該領域論文主要來自三大組:
Facebook AI Research (FAIR) :MoCo v1&v2, SwAV,Simsiam,Twins
Google Research, Brain Team:SimCLR v1 & v2
DeepMind Research:BYOL

(1)谷歌組 SimCLR v1 & v2

SimCLR是self-supervised learning與contrastive learning中重要的一個相當重要的里程碑,其最大的特點在於研究各種數據增強 (data augmentation) 作爲SSL的歸納偏置 (inductive bias),並利用不同data間彼此的互斥強化學習目標,避免contrastive learning的output collapse。

整體運作概念分爲三個階段:

先sample一些圖片(batch of image)
對batch裏的image做兩種不同的data augmentation
希望同一張影像、不同augmentation的結果相近,並互斥其他結果。
如果要將SimCLR的架構劃分階段,大致可以分成兩個階段,首先是大個embedding網絡執行特徵抽取得到y,接下來使用一個小的網絡投影到某個固定爲度的空間得到z。



對於同一個x,用data augmentation得到不同的v,通過網絡抽取、投影得到固定維度的特徵,計算z的contrastive loss,直接用gradient decent同時訓練兩個階段的網絡。

SimCLR直接比MoCo高出了7個點,並直逼監督模型的結果。

(2) FAIR組 MoCo v1&v2, SwAV,Simsiam

MoCo (momentum contrast) 的想法是維持兩個encoder,一個使用gradient decent訓練,另一個的參數則是跟著第一個encode的參數,但是使用momentum更新,保持一個相似但不同的狀態。而這個momentum encoder的輸出會被一個queue儲存起來,取代原本的memory bank。相比原本的memory bank作法,MoCo的儲存的representation比較新,保持一致性的同時也藉由momentum encoder確保了足夠的對比性。



MoCo v2 只是將SimCLR的兩個組件 (stronger data augmentation與投影網絡 )加入MoCo的架構。相對於SimCLR,多了momentum encoder與memory bank,且不需要特別大的batch。

具體的,如下圖,圖中的頂行和底行表示相同的網絡(由θ參數化),MoCo將單個網絡拆分爲θ參數化的在線網絡(頂行)和ξ參數化的動量網絡(下排)。在線網絡採用隨機梯度下降法進行更新,動量網絡則基於在線網絡權值的指數移動平均值進行更新。動量網絡允許MoCo有效地利用過去預測的記憶庫作爲對比損失的反面例子。這個內存庫使批處理的規模小得多。在我們的狗圖像插圖中,正面的例子是相同圖像的狗的作物。反面例子是在過去的小批量中使用的完全不同的圖像,它們的投影存儲在內存庫中。



SimSiam簡單用一句話描述就是沒有momentum encoder的BYOL。BYOL拿掉了MoCo的memory bank,SimSiam進一步地拿掉了momentum encoder。方法簡單,實務上同樣能避免collapsing output的發生。

SimSiam的架構與BYOL一樣是三個階段的架構,先過主網絡embedding,再過小網絡projection,最後過小網絡prediction。與BYOL不同之處在於SimSiam並沒有兩組網絡參數,同一個網絡對於不同的view交互地用latent projection互爲彼此的prediction target。在更新參數時,都只計算prediction那條路線的gradient,也自然沒有什麼momentum encoder。
這裏在BYOL的基礎上去除了momentum更新的target encoder, 直接讓target encoder = online encoder。指出了predictor+stop-gradinent 是訓練出強大SSL encoder的一個充分條件。
再次的階段小結:在這個階段,認識進展到了可以沒有負樣本的階段,但是不使用負樣本,模型就會有陷入平凡解的風險。爲此,BYOL設計了predictor 模塊,併爲之配套了stop-gradient技巧;SimSiam通過大量的試驗和控制變量,進一步做減法,去除了momentum update。讓模型進一步變得簡單。再次總結,就是predictor模塊,避免了直接拉近正樣本對,對於梯度的直接回傳,讓模型陷入平凡解。


DeepMind BYOL

BYOL建立在MoCo動量網絡概念的基礎上,添加了一個MLP來從 z 預測 p ,而不是使用對比損失,BYOL使用歸一化預測 p 和目標z’之間的L2 loss。繼續使用我們的dog image示例,BYOL嘗試將dog圖像的兩個裁剪轉換爲相同的表示向量(使 p 和 z’相等)。因爲這個損失函數不需要負示例,所以在BYOL中沒有內存庫的用處。

在BYOL中的兩個MLP僅第一個線性層之後使用批處理標準化。
文章的核心點就是要破除“負樣本迷信”,BYOL認爲不使用負樣本,照樣可以訓練出效果拔羣的SSL model。但是如果直接拋棄負樣本,只拉近正樣本對的話,model 會容易陷入平凡解:對於任意樣本,輸出同樣的embedding。爲了在沒有負樣本的幫助下,解決這個問題。BYOL 在Projector之上,增加了一個新的模塊,取名Predictor。整體可以理解爲在MoCo的基礎上,但是不再直接拉近正樣本對(即同一個樣本,不同增強後的輸出)的距離,而是通過Predictor去學習online encoder 到 target encoder (即moco裏的momentum encoder)的映射。另外,對target network梯度不會傳遞,即Stop-Gradient。



階段小結 Simclr+MOCO

拋開細節,SimCLR和MoCo的核心點,都是認爲negatives(負樣本)非常重要,一定要有足夠多的負樣本,只不過實現方式略有不同。SimCLR 拿着TPU,直接把batch size搞到4096,一力降十會;愷明則是巧妙設計Momentum機制,避開了硬件工程的限制,做出了可以飛入尋常百姓家的MoCo。再次重申,這時候的認識,還是停留在需要大量的負樣本,來提升SSL model的效果這個歷史侷限裏。

再次的階段小結 BYOL+SimSiam

在這個階段,認識進展到了可以沒有負樣本的階段,但是不使用負樣本,模型就會有陷入平凡解的風險。爲此,BYOL設計了predictor 模塊,併爲之配套了stop-gradient技巧;SimSiam通過大量的試驗和控制變量,進一步做減法,去除了momentum update。讓模型進一步變得簡單。 再次總結,就是predictor模塊,避免了直接拉近正樣本對,對於梯度的直接回傳,讓模型陷入平凡解。BYOL 和 SimSiam 在方法上都是很不錯的,試驗也做得很可信充分,可是對於方法的解釋並沒有那麼深刻置信,可能要尋求一個紮實的解釋也確實很難。可以參見從動力學角度看優化算法(六):爲什麼SimSiam不退化? - 科學空間|Scientific Spaces,也是另一個角度的解釋,頗爲有趣合理。此時已經進入到了擺脫了負樣本了,但是在不使用負樣本的情況,要想成功訓練好一個SSL model,需要引入新的trick: 即predictor+stop-gradient。這樣子來看,難免有點像左手換右手的無用功,但是整體的技術認識是進步了很多的。

參考文獻:https://zhuanlan.zhihu.com/p/342244090

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章