FAIR提出Barlow Twins:最簡單的無監(jiān)督學(xué)習(xí)方法
點藍(lán)色字關(guān)注“機(jī)器學(xué)習(xí)算法工程師”
設(shè)為星標(biāo),干貨直達(dá)!
AI編輯:我是小將
本文作者:王珣
https://zhuanlan.zhihu.com/p/355523266
本文已由原作者授權(quán)轉(zhuǎn)載
從Kaiming的MoCo和Hinton組Chen Ting的SimCLR開始,自監(jiān)督學(xué)習(xí)(SSL)成了計算機(jī)視覺的熱潮顯學(xué)。凡是大佬大組(Kaiming, VGG,MMLAB等),近兩年都是搞了幾個自監(jiān)督方法的。從一開始的新奇興奮地看著Arxiv上新發(fā)布的SSL方法(像MoCo, SwAV, BYOL, SimSiam等這些方法著實有趣),但是有一些相關(guān)的文章多少有些泛濫了,讓人很難覺得有趣。最近FAIR的一個新工作,著實讓我驚嘆,覺得很有意思,頗為嘆服。關(guān)鍵的是這個方法特別簡單,應(yīng)當(dāng)可以稱之為最簡單的SSL。文章名字是:《 Barlow Twins: Self-Supervised Learning via Redundancy Reduction》:https://arxiv.org/abs/2103.03230
藉此機(jī)會,我也自己梳理一下SSL在這不到兩年的時間里的個人認(rèn)為比較重要的認(rèn)知變化的節(jié)點:從SimCLR為起點,以這篇BarLow Twins為暫時的終點。個人感覺,從這個歷史線上去看SSL的發(fā)展非常有趣,整個圈子對于SSL的認(rèn)知在不斷打臉的過程中不斷深入。

1. 首先是2020年初的SimCLR, 這個文章的核心貢獻(xiàn)有二:一是提供了使用google的豐富的計算資源和工程力,使用高達(dá)4096的mini-batch size,把SSL的效果推到了supervised方法差不多的效果(預(yù)訓(xùn)練模型做下游任務(wù));二是細(xì)致的整理了一些對SSL效果提升很有用的tricks: 如更長的訓(xùn)練,多層MLP的projector以及更強(qiáng)的data augmentations。這些有用的trick在后來的SSL的論文中一直被沿用,是SSL發(fā)展的基石,而第一個點,則是指出了大力出奇跡,為未來的論文指出了改進(jìn)的路,或者樹立了一個進(jìn)擊的靶子。
2. MoCo 共有兩版本,原始版本是2019年末愷明放出來的。在SimCLR出現(xiàn)后之后,又吸收SimCLR的幾個SSL小技巧,改進(jìn)出了V2版,但是整體核心方法是沒有變化的,V2僅僅是一個2頁試驗報告。相比于SimCLR大力出奇跡,愷明設(shè)計了一個巧妙的Momentum encoder 和 Dynamic queue 去獲得大量的負(fù)樣本。這里的momentum encoder 采用了動量更新機(jī)制,除了文章里的說法,另一層的理解是:其實momentum encoder相當(dāng)于是teacher, 而dynamic里是來自不同mini-batch的樣本,所以teacher需要在時間維度上對于同一個樣本的輸出具有一致性,否則,要學(xué)習(xí)的encoder 也就是student,會沒有一個穩(wěn)定的學(xué)習(xí)目標(biāo),難以收斂;當(dāng)然另一方面,teacher 也不能一直不變,如果teacher一直不變,student就是在向一個隨機(jī)的teacher學(xué)習(xí)。綜合以上,動量更新機(jī)制是一個相當(dāng)好理解的選擇。
階段小結(jié):拋開細(xì)節(jié),SimCLR和MoCo的核心點,都是認(rèn)為negatives(負(fù)樣本)非常重要,一定要有足夠多的負(fù)樣本,只不過實現(xiàn)方式略有不同。SimCLR 拿著TPU,直接把batch size搞到4096,一力降十會;愷明則是巧妙設(shè)計Momentum機(jī)制,避開了硬件工程的限制,做出了可以飛入尋常百姓家的MoCo。再次重申,這時候的認(rèn)識,還是停留在需要大量的負(fù)樣本,來提升SSL model的效果這個歷史局限里。
3. BYOL 是Deep Mind 在2020年發(fā)布的工作,文章的核心點就是要破除“負(fù)樣本迷信”,BYOL認(rèn)為不使用負(fù)樣本,照樣可以訓(xùn)練出效果拔群的SSL model。但是如果直接拋棄負(fù)樣本,只拉近正樣本對的話,model 會容易陷入平凡解:對于任意樣本,輸出同樣的embedding。為了在沒有負(fù)樣本的幫助下,解決這個問題。BYOL 在Projector之上,增加了一個新的模塊,取名Predictor。整體可以理解為在MoCo的基礎(chǔ)上,但是不再直接拉近正樣本對(即同一個樣本,不同增強(qiáng)后的輸出)的距離,而是通過Predictor去學(xué)習(xí)online encoder 到 target encoder (即moco里的momentum encoder)的映射。另外,對target network梯度不會傳遞,即Stop-Gradient。(注:在MoCo中,momentum encoder也是沒有梯度回傳的,不過MoCo這么沒有給momentum encoder回傳梯度是因為queue里面的負(fù)樣本來自過去的mini-batch, 本身計算圖沒有辦法保存,沒有辦法回傳梯度,而如果只回傳正樣本對的梯度,會很不合理。而BYOL是只考慮正樣本對,如果梯度對于online encoder 和 target encoder都回傳,是沒有特別不合理的點的,因此Stop-Gradient是作者的一個特別的設(shè)計。)
4. SimSiam 是在BYOL的再次做減法,這里在BYOL的基礎(chǔ)上去除了momentum更新的target encoder, 直接讓target encoder = online encoder。指出了predictor+stop-gradinent 是訓(xùn)練強(qiáng)大SSL encoder的一個充分條件。
再次的階段小結(jié):在這個階段,認(rèn)識進(jìn)展到了可以沒有負(fù)樣本的階段,但是不使用負(fù)樣本,模型就會有陷入平凡解的風(fēng)險。為此,BYOL設(shè)計了predictor 模塊,并為之配套了stop-gradient技巧;SimSiam通過大量的試驗和控制變量,進(jìn)一步做減法,去除了momentum update。讓模型進(jìn)一步變得簡單。再次總結(jié),就是predictor模塊,避免了直接拉近正樣本對,對于梯度的直接回傳,讓模型陷入平凡解。BYOL 和 SimSiam 在方法上都是很不錯的,試驗也做得很可信充分,可是對于方法的解釋其實做的還不夠,可能是要尋求一個扎實的解釋也確實很難??梢詤⒁姀膭恿W(xué)角度看優(yōu)化算法(六):為什么SimSiam不退化?- 科學(xué)空間|Scientific Spaces,也是很有意思的解釋。此時已經(jīng)進(jìn)入到了擺脫了負(fù)樣本了,但是在不使用負(fù)樣本的情況,要想成功訓(xùn)練好一個SSL model,需要引入新的trick: 即predictor+stop-gradient。難免有點像無用功,但是技術(shù)其實是在螺旋進(jìn)步的。
5. 最后,終于到了這次的主角:Barlow Twins。在不考慮數(shù)據(jù)增強(qiáng)這種大家都有的trick的基礎(chǔ)上, Barlow Twins 既沒有使用負(fù)樣本,也沒有動量更新的網(wǎng)絡(luò),也沒有predictor和stop gradient操作。Twins 所做的是換了一種視角去學(xué)習(xí)表示,從embeddig本身出發(fā),而不是從樣本出發(fā)。優(yōu)化目標(biāo)是使得不同視角下的特征的相關(guān)矩陣接近恒等矩陣,即讓不同的維度的特征盡量表示不同的信息,從而提升特征的表征能力。這種做法,感覺和以前傳統(tǒng)降維(如PCA)的方法是有共通之處的。




那么Twins 方法和以上的基于正負(fù)樣本對的所有方法的區(qū)別,不嚴(yán)格(拋去特征normalize,BN等操作來說)的來說,可以用一句話,或者說兩個式子來概括。
過去的方法大多基于InfoNCE loss 或者類似的對比損失函數(shù),其目的是為了是的樣本相關(guān)陣接近恒等矩陣,即

而Twins的目的是為了讓特征相關(guān)陣接近恒等,即:

對于對比損失類方法,比如SimCLR或MoCo需要很大的Batchsize或者用queue的方式去模擬很大的batchsize, 而Twins需要極大的特征維度(8192)。這種特性和以上兩個公式是完全對應(yīng)且對稱的。一個需要大
,一個需要大
。

另外,另一個有意思的點是Loss里面的超參數(shù),在論文里,超參數(shù)
是通過搜索得到的,然后發(fā)現(xiàn)在等于0.0002=1/5000是效果不錯。其實,這里的loss略微改寫,是可以省卻這個不必要的超參數(shù)的。損失函數(shù)的第二項里的求和換成平均即可。首先,里面的求和換成平均等價于原來公式中
,雖然數(shù)字和搜出來并非完全相等,但是,這種超參數(shù),從經(jīng)驗來說,在數(shù)量級上可以是完全一致了??梢院侠淼南胂癫聹y在搜索這個超參數(shù)時,作者本人也是從數(shù)量級跨度去搜的。效果上,
應(yīng)當(dāng)不會有差。那么,一個有意思的問題,為什么是平均呢?我認(rèn)為是平衡“正負(fù)樣本”(對于Twins其實沒有這個概念了,為了方便,類別來說,指的其實是對角線和非對角線)的梯度,InfoNCE其實是通過softmax形式來隱式的獲得了梯度之間的平衡,而這里是直接累加,對應(yīng)的梯度回傳也是直接累加,如果不用平均,或者說沒有極小且合適的
?!柏?fù)樣本對”梯度將會占據(jù)主導(dǎo),結(jié)果就是,我們的相關(guān)矩陣的非對角線大多已經(jīng)接近0,loss第二項確實優(yōu)化得很好,但是第一項沒有長進(jìn)。也就是說對角線元素距離“夢想中的1”會比較遠(yuǎn)。如果我以上的臆測分析是對的,那么就可以用平均去換掉loss內(nèi)部求和,為保證公式的對稱性,左一項也可以稍作等價改寫,具體的Loss形式可以如下:

這樣子,省掉一個較為難調(diào)的超參數(shù),公式上更加對稱,會讓Twins顯得更簡潔合理。
總結(jié):從歷史線上來看,從需要大量的負(fù)樣本的SimCLR和MoCo,到通過特殊技術(shù)(stop-grad+predictor)實踐說明了負(fù)樣本的不必要性的BYOL和SimSiam,最終到了Twins, Twins切換了一直以來從對比學(xué)習(xí)去看待SSL的訓(xùn)練,而是從特征本身出發(fā)。刪繁就簡,可以認(rèn)為相比于最簡單的裸InfoNCE,僅僅是換了一個loss function。另外,大的維度相比于增加batchsize的代價要小得多,只是encoder最后幾層比較大,需要大一點的顯存,而不是成倍的顯存。
推薦閱讀
谷歌提出Meta Pseudo Labels,刷新ImageNet上的SOTA!
"未來"的經(jīng)典之作ViT:transformer is all you need!
漲點神器FixRes:兩次超越ImageNet數(shù)據(jù)集上的SOTA
CondInst:性能和速度均超越Mask RCNN的實例分割模型
mmdetection最小復(fù)刻版(十一):概率Anchor分配機(jī)制PAA深入分析
MMDetection新版本V2.7發(fā)布,支持DETR,還有YOLOV4在路上!
無需tricks,知識蒸餾提升ResNet50在ImageNet上準(zhǔn)確度至80%+
不妨試試MoCo,來替換ImageNet上pretrain模型!
mmdetection最小復(fù)刻版(七):anchor-base和anchor-free差異分析
mmdetection最小復(fù)刻版(四):獨家yolo轉(zhuǎn)化內(nèi)幕
機(jī)器學(xué)習(xí)算法工程師
一個用心的公眾號

