MoCo背景介紹----對比學習
MoCo這篇論文的寫作是假定讀者已經(jīng)對對比學習有一定的了解了,如果對之前的工作不了解的話,這里就不理解為什么要做Momentum Contrast(動量對比學習),也無法體會到MoCo的精妙之處
什么是對比學習?(視頻2:00處)

假如說有兩張圖,對比學習顧名思義就是對比著去學習,模型并不需要真的知道圖片中代表的是什么,而只需要知道哪些圖片是類似的,哪些圖片是不一樣的就可以了
假如將這三張圖片都通過一個網(wǎng)絡m,然后得到三個特征f1、f2、f3,分別對應的就是三張圖片的特征
假如說最后學好的三個特征是embedding space(特征空間)里的三個點,就希望對比學習能夠?qū)蓚€類似圖片的特征盡量拉近,而讓另外一個并不類似的特征盡量的遠離那兩個相似的特征點。如果真的能夠做到將所有的物體都在這個特征空間里相鄰的區(qū)域,而不類似的物體都在不相鄰的區(qū)域的話,那么其實目的就已經(jīng)達到了,學到的特征就會是一個很好的特征

對比學習雖然不需要知道每張圖里的標簽信息,但是它還是需要知道哪些圖片是類似的,也就意味著不還是需要標簽信息去做這種有監(jiān)督學習嗎,也還是需要知道哪些圖片是類似的,哪些圖片不是類似的才能去做模型的訓練,那么為什么對比學習在視覺領域一般被認為是無監(jiān)督的訓練方式呢?因為在視覺領域大家是通過設計一些巧妙的代理任務(pretext task),從而人為地定了一些規(guī)則,這些規(guī)則可以用來定義哪些圖片是相似的,哪些圖片不是相似的,從而可以提供一個監(jiān)督信號去訓練模型,這也就是所謂的自監(jiān)督訓練
例子:最廣為應用的代理任務:instance discrimination
這個代理任務是說有一個沒有標注的n張照片的數(shù)據(jù)集,x1、x2,一直到xn,那么該如何定義哪些圖片是相似的,哪些圖片不是相似的呢?
instance discrimination的做法是:
如果從這個數(shù)據(jù)集中選一張圖片xi,現(xiàn)在在這張圖片上最隨機裁剪,從而得到另外兩張圖,一張是xi1,另一張是xi2(當然在裁剪之后,還做了很多的數(shù)據(jù)增廣),這里把裁剪和增廣都叫做transformation(xi1和xi2對應的裁剪和增廣操作叫做T1和T2),最終可以得到兩張看起來很不一樣的照片,但是因為它們都是從同一張照片xi經(jīng)過某些變化得到的,它們的語義信息不應該發(fā)生變化,這兩張照片被稱為正樣本
至于和xi這張圖片不相似的那些圖片,instance discrimination這個代理任務認為這個數(shù)據(jù)集例剩下的所有照片都可以被當作不相似,也就是說xj(j≠i)這些樣本相對于xi來說都是負樣本
instance discrimination直譯過來就是個體判別,因為在這個任務看來,每張圖片都是自成一類的,剩下所有的圖片都跟它不是一個類的,拿ImageNet舉例的話,現(xiàn)在就不是有1000個類了,而是有100多萬個類(1000*1000),因為每個圖片都是它自己的類
一旦有了這個代理任務,就知道了怎么樣去定義正樣本,怎么樣去定義負樣本,接下來就是通過一個模型,再去得到一些特征,然后在這些特征上使用一些常見的對比學習的目標函數(shù)(比如說NCE loss)就可以了,基本上這樣一種框架就是對比學習里常見的一種學習方式了
看起來好像平平無奇,但是對比學習最厲害的地方就在于它的靈活性,只要能夠找到一種方式去定義正樣本和負樣本就足夠了,剩下的操作都是比較標準的。這樣可以打開腦洞去制定很多如何定義正樣本和負樣本的規(guī)則
比如說在視頻領域,很多人就認為同一個視頻中的任意兩幀都可以認為是正樣本,而其他視頻中的所有幀都可以認為是負樣本
在NLP領域里也可以這么使用,比如說SimSCE那篇論文就是把同樣的句子扔給模型,但是做兩次forward,每次forward使用不同的dropout,這樣得到的兩個特征作者認為是正樣本,其它所有句子的特征就是負樣本
還有在CMC這篇論文,作者認為一個物體的不同View(不同視角)也可以作為正樣本,比如說一個物體的正面和背面、一個物體的RGB圖像和一個物體的深度圖像等這些都可以作為不同形式的正樣本
以上也就說明了對比學習的靈活性,什么領域都能使用,自然而然后來也擴展到了多模態(tài)領域,也就造就了OpenAI的CLIP模型
----end----