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