这可能是最简单又有效的自监督学习方法了
文 | 王珣@知乎
本文已獲作者授權,禁止二次轉載
從Kaiming的MoCo和Hinton組Chen Ting的SimCLR開始,自監督學習(SSL)成了計算機視覺的熱潮顯學。凡是大佬大組(Kaiming, VGG,MMLAB等),近兩年都是搞了幾個自監督方法的。從一開始的新奇興奮地看著Arxiv上新發布的SSL方法(像MoCo, SwAV, BYOL, SimSiam等這些方法著實有趣),但是有一些相關的文章多少有些泛濫了,讓人有些眼花繚亂。最近FAIR的一個工作,著實讓我眼前一亮,覺得好有意思,頗為嘆服。關鍵的是這個方法特別簡單,應當可以稱之為最簡單的SSL。
論文題目:
Barlow Twins: Self-Supervised Learning via Redundancy Reduction
論文鏈接:
https://arxiv.org/abs/2103.03230.pdf
Arxiv訪問慢的小伙伴也可以在 【夕小瑤的賣萌屋】訂閱號后臺回復關鍵詞 【0324】 下載論文PDF~
藉此機會,我也自己梳理一下SSL在這不到兩年的時間里的個人認為比較重要的認知變化的節點:從SimCLR,MoCo為起點,以這篇BarLow Twins為暫時的終點。從這個歷史線上去看SSL的發展非常有趣:計算機視覺圈子對于SSL的認知在不斷打臉的過程中不斷深入。
1.首先是2020年初的SimCLR
這個文章的核心貢獻有二:一是提供了使用google的豐富的計算資源和強大的工程能力,使用高達4096的mini-batch size,把SSL的效果推到了supervised方法差不多的效果(預訓練模型做下游任務);二是細致地整理了一些對SSL效果提升很有用的tricks: 如更長的訓練,多層MLP的projector以及更強的data augmentations。這些有用的trick在后來的SSL的論文中一直被沿用,是SSL發展的基石,而第一個點,則是指出了大batch-size出奇跡,為未來的論文指出了改進的路,或者樹立了一個進擊的靶子。
2.MoCo 共有兩版本
原始版本是2019年末放出來的。在SimCLR出現后之后,又吸收SimCLR的幾個SSL小技巧,改進出了V2版,但是整體方法的核心是沒有變化的,V2僅僅是一個2頁試驗報告。相比于SimCLR大力出奇跡,愷明設計了一個巧妙的momentum encoder 和 dynamic queue 去獲得大量的負樣本。這里的momentum encoder 采用了動量更新機制,除了文章本身的分析,另一層的理解是:其實momentum encoder相當于是teacher, 而dynamic里是來自不同mini-batch的樣本,所以teacher需要在時間維度上對于同一個樣本的輸出具有一致性,否則,要學習的encoder 也就是student,會沒有一個穩定的學習目標,難以收斂;當然另一方面,teacher 也不能一直不變,如果teacher一直不變,student就是在向一個隨機的teacher學習。綜上,動量更新機制是一個相當好理解的選擇。
階段小結
拋開細節,SimCLR和MoCo的核心點,都是認為negatives(負樣本) 非常重要,一定要有足夠多的負樣本,只不過實現方式略有不同。SimCLR 拿著TPU,直接把batch size搞到4096,一力降十會;愷明則是巧妙設計Momentum機制,避開了硬件工程的限制,做出了可以飛入尋常百姓家的MoCo。再次重申,這時候的認識,還是停留在需要大量的負樣本,來提升SSL model的效果這個歷史局限里。
3.BYOL 是Deep Mind 在2020年發布的工作
文章的核心點就是要破除負樣本迷信 ,BYOL認為不使用負樣本,照樣可以訓練出效果拔群的SSL model。但是如果直接拋棄負樣本,只拉近正樣本對的話,model 會容易陷入平凡解:對于任意樣本,輸出同樣的embedding。為了在沒有負樣本的幫助下,解決這個問題。BYOL 在Projector之上,增加了一個新的模塊,取名Predictor。整體可以理解為在MoCo的基礎上,但是不再直接拉近正樣本對(即同一個樣本,不同增強后的輸出)的距離,而是通過Predictor去學習online encoder 到 target encoder (即moco里的momentum encoder)的映射。另外,對target network梯度不會傳遞,即Stop-Gradient。(注:在MoCo中,momentum encoder也是沒有梯度回傳的,不過MoCo這么沒有給momentum encoder回傳梯度是因為queue里面的負樣本來自過去的mini-batch,其計算圖已經丟失,沒有辦法回傳梯度,而如果只回傳正樣本對的梯度,會很不合理。而BYOL是只考慮正樣本對,如果梯度對于online encoder 和 target encoder都回傳,不存在這個不合理的點,因此,Stop-Gradient是BYOL的一個特別的設計。)
4.SimSiam 是在BYOL的再次做減法
這里在BYOL的基礎上去除了momentum更新的target encoder, 直接讓target encoder = online encoder。指出了predictor+stop-gradinent 是訓練出強大SSL encoder的一個充分條件。
再次的階段小結
在這個階段,認識進展到了可以沒有負樣本的階段,但是不使用負樣本,模型就會有陷入平凡解的風險。為此,BYOL設計了predictor 模塊,并為之配套了stop-gradient技巧;SimSiam通過大量的試驗和控制變量,進一步做減法,去除了momentum update。讓模型進一步變得簡單。再次總結,就是predictor模塊,避免了直接拉近正樣本對,對于梯度的直接回傳,讓模型陷入平凡解。BYOL 和 SimSiam 在方法上都是很不錯的,試驗也做得很可信充分,可是對于方法的解釋并沒有那么深刻置信,可能要尋求一個扎實的解釋也確實很難。可以參見(https://spaces.ac.cn/archives/7980),也是另一個角度的解釋,頗為有趣合理。此時已經進入到了擺脫了負樣本了,但是在不使用負樣本的情況,要想成功訓練好一個SSL model,需要引入新的trick: 即predictor+stop-gradient。這樣子來看,難免有點像左手換右手的無用功,但是整體的技術認識是進步了很多的。
5.最后,終于到了這次的主角:Barlow Twins
在不考慮數據增強這種大家都有的trick的基礎上, Barlow Twins 既沒有使用負樣本,沒有動量更新,也沒有predictor和stop gradient的奇妙操作。Twins 所做的是換了一種視角去學習表示,從embeddig本身出發,而不是從樣本出發。優化目標是使得不同視角下的特征的相關矩陣接近恒等矩陣,即讓不同的維度的特征盡量表示不同的信息,從而提升特征的表征能力。這種做法,和以前傳統降維(如PCA)的方法是有共通之處的,甚至優化的目標可以說非常一致。
▲Barlow Twins 模型整體圖設模型為,其模型參數記為。
對于不同的視角下的輸入,分別輸出的特征, 其中。
那么Twins 方法和以上的基于正負樣本對的所有方法的區別,不嚴格(拋去特征normalize,BN等操作來說)的來說,可以用一句話,或者說兩個式子來概括。
過去的方法大多基于InfoNCE loss 或者類似的對比損失函數,其目的是為了是的樣本相關陣接近恒等矩陣,即
而Twins的目的是為了讓特征相關陣接近恒等,即:
對于對比損失類方法,比如SimCLR或MoCo需要很大的Batchsize或者用queue的方式去模擬很大的batchsize, 而Twins需要極大的特征維度(8192)。這種特性和以上兩個公式是完全對應且對稱的。一個需要大,一個需要大。
▲Barlow Twins 的核心在于提出了圖中新的損失函數總結
從歷史線上來看,從SimCLR和MoCo說一定要有大量的負樣本,到BYOL和SimSiam通過神奇操作(stop-grad+predictor)驗證了負樣本并非不可或缺,最終到了Twins切換了一直以來從對比學習去訓練SSL的視角,轉向從特征本身出發,推開了另一扇大門。對比而言,相比于最簡單的裸InfoNCE,Twins僅僅是換了一個loss function (+大維度的特征)。不過,大的維度相比于增加batchsize的代價要小得多,就是多占一點的顯存。
后臺回復關鍵詞【入群】
加入賣萌屋NLP/IR/Rec與求職討論群
后臺回復關鍵詞【頂會】
獲取ACL、CIKM等各大頂會論文集!
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的这可能是最简单又有效的自监督学习方法了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 四个关键步骤,精进算法和数据结构
- 下一篇: 微软中山大学开源超强的视觉位置编码,涨点