對比學(xué)習(xí)(Contrastive Learning)在CV與NLP領(lǐng)域中的研究進(jìn)展
對比學(xué)習(xí)方法(CV)
對比學(xué)習(xí)要做什么?
有監(jiān)督訓(xùn)練的典型問題,就是標(biāo)注數(shù)據(jù)是有限的。
目前NLP領(lǐng)域的經(jīng)驗,自監(jiān)督預(yù)訓(xùn)練使用的數(shù)據(jù)量越大,模型越復(fù)雜,那么模型能夠吸收的知識越多,對下游任務(wù)效果來說越好。這可能是自從Bert出現(xiàn)以來,一再被反復(fù)證明。
所以對比學(xué)習(xí)的出現(xiàn),是圖像領(lǐng)域為了解決“在沒有更大標(biāo)注數(shù)據(jù)集的情況下,如何采用自監(jiān)督預(yù)訓(xùn)練模式,來從中吸取圖像本身的先驗知識分布,得到一個預(yù)訓(xùn)練的模型”。
對比學(xué)習(xí)是自監(jiān)督學(xué)習(xí)的一種,也就是說,不依賴標(biāo)注數(shù)據(jù),要從無標(biāo)注圖像中自己學(xué)習(xí)知識。
目前,對比學(xué)習(xí)貌似處于“無明確定義、有指導(dǎo)原則”的狀態(tài),它的指導(dǎo)原則是:通過自動構(gòu)造相似實例和不相似實例,要求習(xí)得一個表示學(xué)習(xí)模型,通過這個模型,使得相似的實例在投影空間中比較接近,而不相似的實例在投影空間中距離比較遠(yuǎn)。
對比學(xué)習(xí)Paper都會涉及到的一些關(guān)鍵點:
- 如何構(gòu)造相似實例,以及不相似實例;
- 如何構(gòu)造能夠遵循上述指導(dǎo)原則的表示學(xué)習(xí)模型結(jié)構(gòu);
- 以及如何防止模型坍塌(Model Collapse);
SimCLR:一個典型的負(fù)例對比學(xué)習(xí)方法
SimCLR它是圖像領(lǐng)域2020年ICML會議提出的,是一個比較“標(biāo)準(zhǔn)”的對比學(xué)習(xí)模型。
第一,它相對于之前的模型效果有明顯的提升;第二,它采取對稱結(jié)構(gòu),整體相對簡潔清晰;第三,它奠定的結(jié)構(gòu),已成為其它對比學(xué)習(xí)模型的標(biāo)準(zhǔn)構(gòu)成部分。
如何構(gòu)造正負(fù)例
正例構(gòu)造方法如上圖所示。對于某張圖片,我們從可能的增強(qiáng)操作集合T中,隨機(jī)抽取兩種:t1~T及t2~T,分別作用在原始圖像上,形成兩張經(jīng)過增強(qiáng)的新圖像,兩者互為正例。訓(xùn)練時,Batch內(nèi)任意其它圖像,都可做為x1或x2的負(fù)例。
對比學(xué)習(xí)希望習(xí)得某個表示模型,它能夠?qū)D片映射到某個投影空間,并在這個空間內(nèi)拉近正例的距離,推遠(yuǎn)負(fù)例距離。也就是說,迫使表示模型能夠忽略表面因素,學(xué)習(xí)圖像的內(nèi)在一致結(jié)構(gòu)信息,即學(xué)會某些類型的不變性,比如遮擋不變性、旋轉(zhuǎn)不變性、顏色不變性等。SimCLR證明了,如果能夠同時融合多種圖像增強(qiáng)操作,增加對比學(xué)習(xí)模型任務(wù)難度,對于對比學(xué)習(xí)效果有明顯提升作用。
構(gòu)造表示學(xué)習(xí)系統(tǒng)
指導(dǎo)原則:通過這個系統(tǒng),將訓(xùn)練數(shù)據(jù)投影到某個表示空間內(nèi),并采取一定的方法,使得正例距離比較近,負(fù)例距離比較遠(yuǎn)。
上圖展示了SimCLR模型的整體結(jié)構(gòu)。是的,它是一個雙塔模型,不過圖像領(lǐng)域一般叫Branch(上下兩個分支)。
我們隨機(jī)從無標(biāo)訓(xùn)練數(shù)據(jù)中取N個構(gòu)成一個Batch,對于Batch里的任意圖像,根據(jù)上述方法構(gòu)造正例,形成兩個圖像增強(qiáng)視圖:Aug1和Aug2。Aug1 和Aug2各自包含N個增強(qiáng)數(shù)據(jù),并分別經(jīng)過上下兩個分支,對增強(qiáng)圖像做非線性變換,這兩個分支就是SimCLR設(shè)計出的表示學(xué)習(xí)所需的投影函數(shù),負(fù)責(zé)將圖像數(shù)據(jù)投影到某個表示空間。
以上分支為例。Aug1首先經(jīng)過特征編碼器Encoder(一般采用ResNet做為模型結(jié)構(gòu),這里以函數(shù) fθ代表),經(jīng)CNN轉(zhuǎn)換成對應(yīng)的特征表示 。之后,是另外一個非線性變換結(jié)構(gòu)Projector(由[FC->BN->ReLU->FC]兩層MLP構(gòu)成,這里以函數(shù) gθ代表),進(jìn)一步將特征表示hi映射成另外一個空間里的向量zi。這樣,增強(qiáng)圖像經(jīng)過 gθ(fθ(x)) 兩次非線性變換,就將增強(qiáng)圖像投影到了表示空間,下分枝的Aug2過程類似。(問題:為什么這種投影操作,要做兩次:經(jīng)驗結(jié)果)。
對于Batch內(nèi)某張圖像x來說,在Aug1和Aug2里的對應(yīng)的增強(qiáng)后圖像分別是xi和xj,他們互為正例,而xi和Aug1及Aug2里除xj之外的其它任意2N-2個圖像都互為負(fù)例。在經(jīng)過變換后,增強(qiáng)圖像被投影到表示空間。通過定義合適的損失函數(shù),來實現(xiàn)“正例距離較近,負(fù)例距離較遠(yuǎn)”的目標(biāo)。
距離度量函數(shù)
首先需要一個度量函數(shù),以判斷兩個向量在投影空間里的距離遠(yuǎn)近,一般采用相似性函數(shù)來作為距離度量標(biāo)準(zhǔn)。
具體而言,相似性計算函數(shù)采取對表示向量L2正則后的點積或者表示向量間的Cosine相似性:
損失函數(shù)
損失函數(shù)很關(guān)鍵,SimCLR的損失函數(shù)采用InfoNCE Loss,某個例子對應(yīng)的InfoNCE損失為:
其中代表兩個正例相應(yīng)的Embedding。
InfoNCE函數(shù),分子部分鼓勵正例相似度越高越好,也就是在表示空間內(nèi)距離越近越好;而分母部分,則鼓勵任意負(fù)例之間的向量相似度越低越好,也就是距離越遠(yuǎn)越好。
上面介紹了SimCLR的關(guān)鍵做法,本身這個過程,其實是標(biāo)準(zhǔn)的預(yù)訓(xùn)練模式;利用海量的無標(biāo)注圖像數(shù)據(jù),根據(jù)對比學(xué)習(xí)指導(dǎo)原則,學(xué)習(xí)出好的Encoder模型以及它對應(yīng)產(chǎn)生的特征表示。所謂好的Encoder,就是說輸入圖像,它能學(xué)會并抽取出關(guān)鍵特征,這個過程跟Bert模型通過MLM自監(jiān)督預(yù)訓(xùn)練其實目的相同,只是做法有差異。學(xué)好Encoder后,可以在解決下游具體任務(wù)的時候,用學(xué)到的參數(shù)初始化Encoder中的ResNet模型,用下游任務(wù)標(biāo)注數(shù)據(jù)來Fine-tuning模型參數(shù),期待預(yù)訓(xùn)練階段學(xué)到的知識對下游任務(wù)有遷移作用。由此可見,SimCLR看著有很多構(gòu)件,比如Encoder、Projector、圖像增強(qiáng)、InfoNCE損失函數(shù),其實我們最后要的,只是Encoder,而其它所有構(gòu)件以及損失函數(shù),只是用于訓(xùn)練出高質(zhì)量Encoder的輔助結(jié)構(gòu)。目前所有對比學(xué)習(xí)模型都是如此,這點還請注意。
SimCLR的貢獻(xiàn),一個是證明了復(fù)合圖像增強(qiáng)很重要;另外一個就是這個Projector結(jié)構(gòu)。這兩者結(jié)合,給對比學(xué)習(xí)系統(tǒng)帶來很大的性能提升,將對比學(xué)習(xí)性能提升到或者超過了有監(jiān)督模型,在此之后的對比學(xué)習(xí)模型,基本都采取了Encoder+Projector的兩次映射結(jié)構(gòu),以及復(fù)合圖像增強(qiáng)方法。
評判對比學(xué)習(xí)系統(tǒng)的標(biāo)準(zhǔn)
對比學(xué)習(xí)在做特征表示相似性計算時,要先對表示向量做L2正則,之后再做點積計算,或者直接采用Cosine相似性,為什么要這么做呢?
很多研究表明,把特征表示映射到單位超球面上,有很多好處。這里有兩個關(guān)鍵,一個是單位長度,一個是超球面。首先,相比帶有向量長度信息的點積,在去掉長度信息后的單位長度向量操作,能增加深度學(xué)習(xí)模型的訓(xùn)練穩(wěn)定性。另外,當(dāng)表示向量被映射到超球面上,如果模型的表示能力足夠好,能夠把相似的例子在超球面上聚集到較近區(qū)域,那么很容易使用線性分類器把某類和其它類區(qū)分開(參考上圖)。在對比學(xué)習(xí)模型里,對學(xué)習(xí)到的表示向量進(jìn)行L2正則,或者采用Cosine相似性,就等價于將表示向量投影到了單位超球面上進(jìn)行相互比較。
很多對比學(xué)習(xí)模型相關(guān)實驗也證明了:對表示向量進(jìn)行L2正則能提升模型效果。
Alignment和Uniformity
論文 《Understanding Contrastive Representation Learning through Alignment and Uniformity on the Hypersphere》,對好的對比學(xué)習(xí)系統(tǒng)進(jìn)行了探討。它提出好的對比學(xué)習(xí)系統(tǒng)應(yīng)該具備兩個屬性。
Alignment:指的是相似的例子,也就是正例,映射到單位超球面后,應(yīng)該有接近的特征,也即是說,在超球面上距離比較近
Uniformity:指的是系統(tǒng)應(yīng)該傾向在特征里保留盡可能多的信息,這等價于使得映射到單位超球面的特征,盡可能均勻地分布在球面上,分布得越均勻,意味著保留的信息越充分。分布均勻意味著兩兩有差異,也意味著各自保有獨有信息,這代表信息保留充分。
模型坍塌(Collapse)
Uniformity特性的極端反例,是所有數(shù)據(jù)映射到單位超球面同一個點上,這極度違背了Uniformity原則,因為這代表所有數(shù)據(jù)的信息都被丟掉了,體現(xiàn)為數(shù)據(jù)極度不均勻得分布到了超球面同一個點上。也就是說,所有數(shù)據(jù)經(jīng)過特征表示映射過程后,都收斂到了同一個常數(shù)解,一般將這種異常情況稱為模型坍塌(Collapse)(參考上圖)。
重新審視類似SimCLR結(jié)構(gòu)的對比學(xué)習(xí)模型
可以看到,對比學(xué)習(xí)模型結(jié)構(gòu)里的上下兩個分枝,首先會將正例對,或者負(fù)例對,通過兩次非線性映射,將訓(xùn)練數(shù)據(jù)投影到單位超球面上。然后通過體現(xiàn)優(yōu)化目標(biāo)的InfoNCE損失函數(shù),來調(diào)整這些映射到單位超球面上的點之間的拓?fù)浣Y(jié)構(gòu)關(guān)系,希望能將正例在超球面上距離拉近,負(fù)例在超球面上推遠(yuǎn)。那么損失函數(shù)InfoNCE又是怎么達(dá)成這一點的呢?
分子部分體現(xiàn)出“Alignment”屬性,它鼓勵正例在單位超球面的距離越近越好;而分母里負(fù)例,則體現(xiàn)了“Uniformity”屬性,它鼓勵任意兩對負(fù)例,在單位超球面上,兩兩距離越遠(yuǎn)越好。
溫度超參 τ 有什么作用呢?目前很多實驗表明,對比學(xué)習(xí)模型要想效果比較好,溫度超參 τ 要設(shè)置一個比較小的數(shù)值,一般設(shè)置為0.1或者0.2。問題是:將這個超參設(shè)大或設(shè)小,它是如何影響模型優(yōu)化過程的呢?目前的研究結(jié)果表明,InfoNCE是個能夠感知負(fù)例難度的損失函數(shù),而之所以能做到這點,主要依賴超參。
對比學(xué)習(xí)方法分類(圖像)
如果從防止模型坍塌的不同方法角度,我們可大致把現(xiàn)有方法劃分為四種:基于負(fù)例的對比學(xué)習(xí)方法、基于對比聚類的方法、基于不對稱網(wǎng)絡(luò)結(jié)構(gòu)的方法,以及基于冗余消除損失函數(shù)的方法。
對比學(xué)習(xí)方法歸類
基于負(fù)例的對比學(xué)習(xí)方法
所有在損失函數(shù)中采用負(fù)例的對比學(xué)習(xí)方法,都是靠負(fù)例的Uniformity特性,來防止模型坍塌的,這包括SimCLR系列及Moco系列等很多典型對比學(xué)習(xí)模型
基于對比聚類的方法
代表模型SwAV。
對于Batch內(nèi)某張圖像x來說,假設(shè)其經(jīng)過圖像增強(qiáng)Aug1和Aug2后,獲得增強(qiáng)圖像x1,x2,x1與x2則互為正例。x1走上分枝,x2走下分枝,SwAV對Aug1和Aug2中的表示向量,根據(jù)Sinkhorn-Knopp算法,在線對Batch內(nèi)數(shù)據(jù)進(jìn)行聚類。SwAV要求表示學(xué)習(xí)模型根據(jù)x1預(yù)測x2所在的類,同樣的,也要求x2預(yù)測x1所在的類。
該方法要求某個投影點在超球面上,向另外一個投影點所屬的聚類中心靠近,體現(xiàn)了Alignment原則;和其它聚類中心越遠(yuǎn)越好,這體現(xiàn)了Uniformity屬性。
SwAV面臨模型坍塌問題,具體表現(xiàn)形式為:Batch內(nèi)所有實例都聚類到同一個類里。所以為了防止模型坍塌,SwAV對聚類增加了約束條件,要求Batch內(nèi)實例比較均勻地聚類到不同的類別中。本質(zhì)上,它與直接采用負(fù)例的對比學(xué)習(xí)模型,在防止模型坍塌方面作用機(jī)制是類似的,是一種隱形的負(fù)例。
基于不對稱網(wǎng)絡(luò)結(jié)構(gòu)的方法
代表模型BYOL:只用正例來訓(xùn)練對比學(xué)習(xí)模型,靠上下分枝的結(jié)構(gòu)不對稱,防止模型坍塌。
基于冗余消除損失函數(shù)的方法
代表模型 Barlow Twins。
既沒有使用負(fù)例,也沒有使用不對稱結(jié)構(gòu),主要靠替換了一個新的損失函數(shù),可稱之為“冗余消除損失函數(shù)”,來防止模型坍塌。
實驗結(jié)果
目前絕大多數(shù)對比學(xué)習(xí)模型在做模型訓(xùn)練的時候,采用的是ImageNet數(shù)據(jù)集,在評測的時候,主要實驗也是在ImageNet上做的,那么問題是:對比學(xué)習(xí)本質(zhì)上是種自監(jiān)督預(yù)訓(xùn)練模型,希望能夠從ImageNet數(shù)據(jù)集上自監(jiān)督地學(xué)到一些圖像先驗知識與結(jié)構(gòu)。那么,這種從ImageNet數(shù)據(jù)集學(xué)到的知識,能否很好地遷移到其它數(shù)據(jù)集呢?
論文“How Well Do Self-Supervised Models Transfer?”對13個知名自監(jiān)督模型,在40多種數(shù)據(jù)集上進(jìn)行相對公平地對比測試,得出了一些很有價值的結(jié)論。
對比學(xué)習(xí)方法(NLP)
CV領(lǐng)域的對比學(xué)習(xí)研究在近兩年風(fēng)生水起,也逐漸影響到NLP領(lǐng)域,從2020年起,NLP領(lǐng)域逐漸有一些利用對比學(xué)習(xí)思想,自監(jiān)督訓(xùn)練sentence-embedding的idea。
我自己的調(diào)研中,通過如何運用Contrastive Learning思想,分成兩類:
- 損失聯(lián)合方式自監(jiān)督:將CL的loss和其他loss混合,通過聯(lián)合優(yōu)化,使CL起到效果:CLEAR,DeCLUTER,SCCL。
- 非聯(lián)合方法自監(jiān)督:構(gòu)造增強(qiáng)樣本,fine-tune模型:Bert-CT,ConSERT,SimCSE。
下面分別從背景、方案、數(shù)據(jù)增強(qiáng)方法和實驗效果介紹幾個典型模型。
損失聯(lián)合方式自監(jiān)督
1.CLEAR
鏈接:
https://arxiv.org/pdf/2012.15466.pdf
背景:作者認(rèn)為,當(dāng)前的預(yù)訓(xùn)練模型都是基于word-level的,沒有基于sentence-level的目標(biāo),對sentence的效果不好。
方案:word-level和sentence-level的loss聯(lián)合。
對比損失函數(shù):
數(shù)據(jù)增強(qiáng)方法:token層
實驗效果:
GLUE:
SentEval:
2.DeCLUTR
鏈接:https://arxiv.org/abs/2006.03659
方案:是一個不用訓(xùn)練數(shù)據(jù)的自監(jiān)督的方法,是對pretrain過程的優(yōu)化。
數(shù)據(jù)增強(qiáng)方法:
方案:選N個document組成一個batch,每個document取A個anchor,就有AN個,anchor取一個positive,也有AN個,共2AN個點。對于每一個點,除了和它組成正例的一對的2個,其他2AN-2都是負(fù)例
宗旨:認(rèn)為距離anchor span越近的文本越相似,因此anchor span和它周邊的span作為正例
用不同的Beta分布去限制anchor和positive span的長度,一般anchor比positive要長,而且anchor最長可以到512。
作者認(rèn)為:
1. 長anchor可以讓embedding達(dá)到同時表征sentence級別和paragraph級別的作用
2. 這樣配置下游任務(wù)效果好 a)學(xué)到了global-to-local的信息 b)生成多個positive后可以獲得diversity的信息
3. 因為一個batch里有多個文檔,不同文檔的span組成的負(fù)例是easy負(fù)例,同文檔的span組成的負(fù)例是hard負(fù)例。
實驗效果:對比學(xué)習(xí)過程中的ENCODER和MLM部分的Pretrained model是RoBerta和DistillRoBerta,pooling用的mean pooling。
擴(kuò)展知識:Bert vs RoBerta vs AlBert
評測數(shù)據(jù)集是SentEval,SentEval是一個用于評估句子表征的工具包,包含 17 個下游任務(wù),其輸入是句子表示,輸出是預(yù)測結(jié)果。
可以看到本文方案往往不是最優(yōu)的那個,但是作者對比了 沒用對比學(xué)習(xí)方法和用了對比學(xué)習(xí)方法(最后的Transformer-* VS DeCLUTER-*)的結(jié)果,說明了自己方案有效。
3.Supporting Clustering with Contrastive Learning
鏈接:https://arxiv.org/abs/2103.12953(NAACL 2021)
背景:在學(xué)習(xí)過程的開始階段,不同的類別常常在表征空間中相互重疊,對如何實現(xiàn)不同類別之間的良好分離,帶來了巨大的挑戰(zhàn)。
方案:利用對比學(xué)習(xí),去做更好的分離。通過聯(lián)合優(yōu)化top-down聚類損失和bottom-up 實體級別的對比loss,來達(dá)到同時優(yōu)化intra-cluster和inter-cluster的目的。
分Instance-CL部分和Clustering部分兩個部分。
Instance-CL:
- 隨機(jī)選M個樣本組成一個batch,數(shù)據(jù)增強(qiáng)方法生成2M個樣本,依然是從一個樣本中生成的2個為一對正樣本,和其他2M-2組成負(fù)樣本
- 數(shù)據(jù)增強(qiáng)方法:
- 每個樣本用InfoCNE去算loss, Instance-CL loss 為2M樣本的平均值。
數(shù)據(jù)增強(qiáng)方法:
- WordNet Augmenter:用wordNet中的同義詞進(jìn)行替換;
- Contextual Augmenter:用pretrained model去找最合適的詞去進(jìn)行插入或替換;
- Paraphrase via back translation:翻譯成一種語言再翻譯回來;
實驗效果:
非聯(lián)合方式自監(jiān)督
1.BERT-CT (ICLR2021)
背景:從各種預(yù)訓(xùn)練模型的某層中取出的embedding,并不能很好表征句子,而且越接近目標(biāo)的層,效果越不好。作者認(rèn)為訓(xùn)練目標(biāo)極為重要。
方案:用兩個超參不一樣的模型來取sentence embedding,盡可能讓正例對的點積更大,負(fù)例對的點積更小。
數(shù)據(jù)增強(qiáng)方法:
正例:同句子的不同embedding;
負(fù)例:隨機(jī)選7個不同的句子;
實驗效果:
2.SimCSE
鏈接:https://arxiv.org/abs/2104.08821
背景:直接用BERT句向量做無監(jiān)督語義相似度計算效果會很差,任意兩個句子的BERT句向量的相似度都相當(dāng)高,其中一個原因是向量分布的非線性和奇異性,正好,對比學(xué)習(xí)的目標(biāo)之一就是學(xué)習(xí)到分布均勻的向量表示,因此我們可以借助對比學(xué)習(xí)間接達(dá)到規(guī)整表示空間的效果,這又回到了正樣本構(gòu)建的問題上來,而本文的創(chuàng)新點之一正是無監(jiān)督條件下的正樣本構(gòu)建。
方案&數(shù)據(jù)增強(qiáng)方法:本文作者提出可以通過隨機(jī)采樣dropout mask來生成xi+,回想一下,在標(biāo)準(zhǔn)的Transformer中,dropout mask被放置在全連接層和注意力求和操作上,其中z是隨機(jī)生成的dropout mask,由于dropout mask是隨機(jī)生成的,所以在訓(xùn)練階段,將同一個樣本分兩次輸入到同一個編碼器中,我們會得到兩個不同的表示向量z,z',將z'作為正樣本,則模型的訓(xùn)練目標(biāo)為:
這種通過改變dropout mask生成正樣本的方法可以看作是數(shù)據(jù)增強(qiáng)的最小形式,因為原樣本和生成的正樣本的語義是完全一致的(注意語義一致和語義相關(guān)的區(qū)別),只是生成的embedding不同而已。
實驗效果:
作者介紹
對白,碩士畢業(yè)于清華,現(xiàn)大廠算法工程師,拿過八家大廠的SSP offer。本科時獨立創(chuàng)業(yè)五年,成立兩家公司,并拿過總計三百多萬元融資(已到賬),項目入選南京321高層次創(chuàng)業(yè)人才引進(jìn)計劃。創(chuàng)業(yè)做過無人機(jī)、機(jī)器人和互聯(lián)網(wǎng)教育,保研后選擇退出。