對比學習Contrastive Learning總覽

2021-12-23 機器學習記事本

近兩年對比學習是機器學習中研究的一個熱點,作為我知識版圖中的一塊,對近期的學習做個總結。

常見的機器學習分類方法把機器學習分為監督學習、無監督學習、半監督學習,主要區別是訓練數據有無標籤。

無監督學習即訓練數據沒有標籤,這裡的無標籤指的是不需要人為地加標籤,不管是手動還是其他方法標註,典型算法如聚類算法。自監督學習本質屬於無監督學習,訓練數據不需要標註,直接用來訓練,只不過訓練過程中使用數據自身的內容作為學習目標,也可以說是從自身找標籤。

根據不同的學習目標,自監督學習可分為三類:

基於上下文的方法:NLP中的word2vec模型,通過句子中兩邊的詞預測中間的詞,這個中間詞就是學習的標籤,不需要人工標註,同樣通過中間詞預測兩邊的詞也一樣。還有著名的BERT模型,隨機遮住一些詞,然後預測遮住的內容,均屬於基於上下文的自監督方法。

基於時序的方法:主要指音頻或者視頻這類有時間先後順序的場景,相鄰時刻的內容具有相似關係,可以學習這種相似關係,也不需要人工標註。

基於對比的方法:從無標註數據中選擇數據做變換或增強,源數據和變換或增強後的數據互為正例,和其他數據互為負例,訓練過程中對比正例和負例,讓正例之間距離靠近並拉開負例之間的距離。

上面說了這麼多自監督的內容,是因為本文的主角對比學習屬於自監督學習的一種。那麼一般如何使用自監督學習呢,或者說用自監督學習來解決什麼實際問題呢?目前大部分場景是用自監督學習從海量的無標註數據中學習數據的特徵表示,常叫representation或者embedding,對於給定的數據,有了特徵表示就可以用來訓練各種下遊任務,比如分類問題、序列標註問題等,總之所有能用到向量來進行訓練的問題!

NLP中使用BERT在大規模無標籤數據上進行預訓練,同時使用Transformer結構,可以說是具有裡程碑式的意義,並且在工業界各個領域內實實在在地落地應用,取得了相當的成功。自然地,CV中能否用類似的思路來解決圖像相關的問題成了大家研究的重要方向,這是近年來對比學習火熱的主要原因。

對於文本數據,有典型的上下文關係或者時序關係,容易構建模型來學習這種上下文或者時序關係。但對於圖片,上下文關係不明顯,也無時序關係,於是大家想到了對圖片進行增強,常見的增強方法包括旋轉、放大縮小、變色等,增強後的圖片和源圖片相似,互為正例,源圖片和其他圖片不相似,互為負例,然後構建模型通過學習這種相似性和不相似性,讓模型有從數據中提取特徵的能力。

要做好對比學習,主要要解決以下問題:

如何構建正例和負例數據,使得數據更多樣化、更合理。

模型結構設計,讓模型更好地提取到數據的特徵。

損失函數設計,讓正例間距離越近、負例間距離越遠,並避免模型坍塌(Collapse),即避免不同輸入通過模型計算後映射到了同一個值。

距離函數,上述損失函數中用到的距離計算,使用什麼函數更合理。

各種層出不窮的對比學習模型主要是在想辦法改進上面四個問題。文章剩餘部分先介紹最經典的兩個基礎對比學習模型,然後介紹NLP領域近兩年對比學習相關的主要論文,有了這些知識,在實際工作中就可以根據需要進一步研究,選擇恰當的模型使用、擴展。

對比學習開始火熱,主要始於兩個模型,何凱明團隊的MoCo模型和Hinton團隊的SimCLR模型,兩個模型又分別進化了多個版本,下面分別介紹。


MoCo(https://arxiv.org/pdf/1911.05722.pdf)是Momentum Contrast首字母的縮寫,即動量對比,核心是動量更新key encoder網絡的參數值,下面我們具體解釋。

MoCo或者說很多對比學習模型的目的就是構造一個字典,模型訓練好後字典就構造好了,對於任何一個輸入,從字典中查詢的結果就是我們需要提取的特徵。這個和NLP的embedding類似,如果以word為單位,對每個word就可以從word embedding中查詢到特徵表示。只不過對圖像來說,不像NLP中的word那樣可以窮舉,需要想別的辦法。

先直接看MoCo的結構:

再結合對應的Pytorch偽代碼理解:

有兩個分別針對query和key的encoder網絡f_q和f_k,通過網絡後的結果就相當於從字典查詢到的結果。

對輸入x,分別做不同的增強得到x_q和x_k,通過f_q和f_k後得到的q和k互為正例,可以得到正例的loss。

維護一個負例的queue,當前的q和queue中所有數據互為負例,可計算得到當前batch負例的loss。聯合已經得到的正例loss就是當前batch的整體loss。

每次得到整體loss後還有兩件事情要做:

所以MoCo的特色就是維護了一個不斷更新的負例queue,同時key encoder不斷通過query encoder平滑動量更新。

了解MoCo核心後再挑幾個重點說說:

1)和其他模型結構的比較

論文比較了MoCo和end-to-end以及memory bank結構,唯一區別就是key encoder部分。

end-to-end結構兩個encoder通過反向傳播單獨更新,二者的參數可以相同也可以不同,重點是每次字典就是通過當前batch數據查詢,所以字典大小受限於當前batch數據大小,一般來講,大的字典比小的字典好,MoCo使用多個batch數據,字典更大。

Memory bank維護一個包含所有數據的memory bank,每個mini-batch隨機從中採樣負例數據,比MoCo需要更多內存開銷,並且memroy bank中內容更新沒有MoCo更新得及時和平滑。

2)encoder網絡結構

使用ResNet。

3)損失函數

使用對比學習常用的InfoNCE損失函數:

q是f_q查詢的結果,ki是f_k查詢的結果,k+是f_k中唯一一個和q匹配的正例,T是溫度超參數。分子表示q和k+的距離,距離越近,值越大,loss越小,分母表示負例間距離,距離越遠,值越小,loss越小。達到了拉近正例、拉開負例間距離的目標。

4)動量更新公式

f_k參數通過f_q的動量更新公式:

m是一個權重係數,實驗證明大點的m,比如0.999,比小點的值,比如0.9的效果更好,m越大,參數更新越平緩。


SimCLR(https://arxiv.org/pdf/2002.05709.pdf)提出比MoCo稍晚,結構更簡單明了:

邏輯上和之前描述的對比學習思路相同,包括以下幾步:

其中,即cosine相似度。

更直觀點的圖如下(源自知乎張俊林):

算法描述如下:

論文重點對batch size大小、模型大小、數據增強方法、projection非線性層、損失函數對模型影響做了實驗對比和分析。

MoCo和SimCLR各自出了第一個版本後,分別又出了新的版本改進,互相借鑑,各個版本的主要變化如下(源自知乎張俊林):

除了上述兩個經典的模型,常見的模型還有引入聚類的SwAV模型,只使用正例的BYOL、Barlow Twins模型等。


本文開頭提到, 由於NLP領域自監督學習的成功,CV領域開始研究,帶火了對比學習。隨著CV領域對比學習的火熱,NLP領域也開始嘗試如何使用對比學習,所謂我中有你,你中有我,互相學習,不斷向前發展。

我平時的工作更多在於NLP方面,所以整理下NLP中部分對比學習論文:

1)CERT

https://arxiv.org/pdf/2005.12766.pdf

解決BERT類預訓練模型定義於token級別,不能很好第捕捉句子級別語義的問題,在句子級別使用對比學習,用回傳方式做數據增強。

2)CLEAR

https://arxiv.org/pdf/2012.15466.pdf

也是基於句子級別的對比學習,數據增強的方法使用字或者文本段(span)的刪除、重排序或者替換。loss聯合了MLM loss和對比學習的loss。

3)SimCSE

https://arxiv.org/pdf/2104.08821.pdf

先使用了無監督學習,對比學習部分只使用dropout作為數據增強方法就取得了不錯的效果,負例在batch內取。然後進行了有監督學習及比較。

4)SCL

https://arxiv.org/pdf/2011.01403.pdf

監督的對比學習,在預訓練模型微調階段聯合交叉熵和自定義的SCL loss,具體loss如下:

實驗結果顯示在測試集上好於RoBERTa-Large模型的基線模型性能。

5)DeCLUTR

https://arxiv.org/pdf/2006.03659.pdf

數據增強方法從每個文檔中取A個anchor文本段 (anchor span),

訓練時每個anchor有一個正例span,其餘span之間互為負例。不同span的長度用Beta分布決定。loss聯合MLM loss和對比學習loss。


最後,談點自己的感悟。學術界雖然按照研究對象和解決問題的不同分了不同的領域,其實在理論層面的本質都是相通的。一個理論在一個領域碰出了點火花,會迅速在其他領域燎原起來,最近我們在ASR中也在調查看能否用對比學習解決一些問題。相關論文層出不窮,對工業界來說,怎麼把已有的理論聯繫實際問題,並落地解決問題最重要。

參考文章:

對比學習研究進展精要,張俊林

https://zhuanlan.zhihu.com/p/367290573

對比學習在CV與NLP領域中的研究進展,對白

https://zhuanlan.zhihu.com/p/389064413

對比學習在CV,NLP,MM的應用,胡安文

https://zhuanlan.zhihu.com/p/378456417

相關焦點

  • Debiased Contrastive Learning
    自監督表示學習的核心是對比語義相似和不相似的樣本對,學習泛化的樣本表達,供下遊任務使用。在無標籤的情況下,先前的對比學習方法在做負採樣時,由於均勻採樣所產生的bias,有可能採樣到False Negative的負樣本,從而對模型的學習帶來負面影響。如下右圖所示,帶標籤的負採樣和不帶標籤的負採樣結果存在較大差距。
  • 2021最新對比學習(Contrastive Learning)相關必讀論文整理分享
    要說到對比學習(Contrastive Learning),首先要從自監督學習開始講起。
  • 對比學習(Contrastive Learning)綜述
    2.2 分類:2.2.1生成式學習生成式學習以自編碼器(例如GAN,VAE等等)這類方法為代表,由數據生成數據,使之在整體或者高級語義上與訓練數據相近。2.2.2對比式學習對比式學習著重於學習同類實例之間的共同特徵,區分非同類實例之間的不同之處。
  • 一文掌握《對比學習(Contrastive Learning)》要旨,詳述MoCo和SimCLR算法
    本文將介紹對比學習的基本思路以及經典的MoCo系列[2][3][4]、SimCLR系列模型[5][6],了解對比學習的方法和特性。2.研究動機首先自監督學習的定義為:自監督學習屬於無監督學習範式的一種,特點是不需要人工標註的類別標籤信息,直接利用數據本身作為監督信息,來學習樣本數據的特徵表示,並用於下遊任務。
  • 再介紹一篇Contrastive Self-supervised Learning綜述論文
    具體而言,contrastive learning最近已成為在計算機視覺、自然語言處理(NLP)和其他領域中自監督學習方法的主要部分。本文對contrastive learning方法的自監督方法進行了綜述,包括contrastive learning中常用的pretext任務,以及提出的不同體系結構,並對多種下遊任務(例如圖像分類、目標檢測和動作識別)的不同方法進行性能比較。最後,對方法的局限性以及未來方向做了介紹。自監督學習方法
  • 2021最新對比學習(Contrastive Learning)在各大頂會上的經典必讀論文解讀
    對比學習在無監督表徵學習領域的潛力無需多言,已經有非常多的例子證明其效果,目前比較多的針對對比學習的改進包括損失函數、抽樣策略、數據增強方法等多方面,但是針對負對的研究相對而言更少一些,一般在構造正負對時,大部分模型都簡單的把單張圖像及其增強副本作為正對
  • 初探對比學習(Contrastive Learning)
    那麼有沒有其他的方案來優化這個問題呢,對比學習是其中一種可能。這裡包含了兩個重要信息,一是這篇文章中提出了一個對比學習的框架,二是框架目標是視覺表示。根據大神的介紹,對比學習在搜推廣(搜索、推薦、廣告)的應用中也主要是套用了這個框架來學習user或item的表示,進而應用到後續的CTR任務中。這也是為什麼選擇以這篇論文為主線。
  • 【機器學習基礎】Self-Supervised Learning入門介紹
    什麼是 Self-Supervised Learning首先介紹一下到底什麼是 SSL,我們知道一般機器學習分為監督學習,非監督學習和強化學習。而 self-supervised learning 是無監督學習裡面的一種,主要是希望能夠學習到一種通用的特徵表達用於下遊任務。
  • 無監督對比學習(CL)最新必讀經典論文整理分享
    本資源整理了最近幾年,特別是2020年對比無監督學習最新的一些必讀論文,方便需要的朋友研究使用。2020    •Contrastive Representation Learning: A Framework and Review, Phuc H.
  • 深度學習 | 圖解Contrastive Predictive Coding從臉盲說起,超直觀無公式
    Contrastive Learning (對比學習) 是這兩年深度學習非常熱的話題,可以說是刷新了很多人對無監督學習對認知。最初谷歌寫的Representation Learning with Contrastive Predictive Coding (CPC) 公式十分抽象,不好理解。
  • 從 SimCLR, MoCo, BYOL 了解目前圖像自監督對比學習預訓練在做什麼
    在不使用任何的標籤的情況下,使用自監督對比學習預訓練出的CNN編碼器參數能夠在分類、分割、檢測等基礎任務上都有上佳的表現。這篇文章重點總結了SimCLR, MoCo, BYOL三個經典的CV領域無監督對比學習預訓練的方法。
  • 全監督語義分割訓練新範式「像素對比學習」,蘇黎世聯邦理工等出品
    最近,蘇黎世聯邦理工學院及商湯研究院的研究者提出了一種新的、全監督語義分割訓練範式:像素對比學習(pixel-wise contrastive learning),強調利用訓練集中、跨圖像的像素 - 像素對應關係(cross-image pixel-to-pixel relation)來學習一個結構化(well structured)的特徵空間,用來替代傳統的、基於圖像的(image-wise)訓練範式
  • 醫療圖像分割中有限標註情況下的全局和局部特徵的對比學習
    自監督學習提供了一種利用無標籤數據預訓練網絡的策略,隨後利用少量有標籤的數據針對下遊任務進行微調。對比學習是自監督學習的一種變體,能夠學習到圖片級別的表示。本文提出的方法,利用了domain-specific和problem-specific的線索,拓展了在少量標註數據情況下,針對3D醫療圖像分割的對比學習框架。
  • 一文詳解最近異常火熱的self-supervised learning
    什麼是 Self-Supervised Learning首先介紹一下到底什麼是 SSL,我們知道一般機器學習分為監督學習,非監督學習和強化學習。而 self-supervised learning 是無監督學習裡面的一種,主要是希望能夠學習到一種通用的特徵表達用於下遊任務。
  • 推薦系統中不得不學的對比學習(Contrastive Learning)方法
    我想大家將對比學習與推薦系統結合主要有以下四個原因:一、是因為數據的稀疏性。眾所周知,在推薦系統中有點擊的數據是非常少的,可能系統推薦了十篇文章,用戶只點擊了一篇文章,因此我們可以通過自監督學習對點擊數據進行增強;二、是因為item的長尾分布。
  • ICLR2021對比學習(Contrastive Learning)NLP領域論文進展梳理
    本文通過引入對比學習損失,讓模型從負樣本中區分正樣本,使得模型暴露於不同的噪聲情況下,來解決這一問題。然而,完全隨機生成噪聲樣本會導致模型非常容易區分,特別是對於預訓練模型而言。因此,本文提出了一種對抗擾動方法,添加擾動使得正樣本具有較高的似然度;是的負樣本具有較低的似然度。
  • 何愷明團隊:stop gradient是孿生網絡對比學習成功的關鍵
    作者期望:這個簡單的基準方案可以驅動更多研員重新思考無監督表達學習中的孿生結構。前述內容已經說明了所提方法的有效性,接下來將從ImageNet以及遷移學習的角度對比一下所提方法與其他SOTA方法。上表給出了所提方法與其他SOTA方法在遷移學習方面的性能對比。
  • 海康威視提出:無監督圖像分類的深度表徵學習
    ,同時還分析了和deep clustering和contrastive learning的區別。接著文章開始討論和embedding clustering還有就是contrastive learning的關聯。
  • 何愷明團隊最新力作SimSiam:消除表徵學習「崩潰解」,探尋對比表達學習成功之根源
    Comparison前述內容已經說明了所提方法的有效性,接下來將從ImageNet以及遷移學習的角度對比一下所提方法與其他SOTA方法。上表給出了所提方法與其他SOTA方法在遷移學習方面的性能對比。相關文章SimCLR: A simple framework for contrastive learning of visual representationsSimCLRv2: Big self-supervised models are strong semi-supervised learners.SwAV:Unsupervised learning of visual features
  • 【論文解讀】何愷明團隊最新力作SimSiam:消除表徵學習「崩潰解」,探尋對比表達學習成功之根源
    Comparison前述內容已經說明了所提方法的有效性,接下來將從ImageNet以及遷移學習的角度對比一下所提方法與其他SOTA方法。上表給出了所提方法與其他SOTA方法在遷移學習方面的性能對比。相關文章SimCLR: A simple framework for contrastive learning of visual representationsSimCLRv2: Big self-supervised models are strong semi-supervised learners.SwAV:Unsupervised learning of visual features