CV和NLP中的无监督预训练(生成式BERT/iGPT和判别式SimCLR/SimCSE)
文 | Smarter
在之前的文章中講過unsupervised learning主要分為生成式和判別式,那么unsupervised pretrain自然也分為生成式和判別式。目前CV和NLP都出現(xiàn)了非常強(qiáng)大的無監(jiān)督預(yù)訓(xùn)練,并且在生成式和判別式都各有造詣,本文主要想歸納一下CV和NLP各自領(lǐng)域的生成式和判別式的代表作及設(shè)計(jì)思路。其中CV的生成式以iGPT為例,判別式以SimCLR為例;NLP的生成式以BERT為例,判別式以SimCSE為例。有意思的是,iGPT的靈感來源于BERT,而SimCSE的靈感來源于SimCLR,這充分展現(xiàn)了CV和NLP兩個(gè)方向相互哺育,相輔相成的景象。
BERT
BERT之前主要有兩種主流的無監(jiān)督預(yù)訓(xùn)練方法:feature-based和fine-tuning。
feature-based方法
之前的ELMo無監(jiān)督預(yù)訓(xùn)練屬于feature-based的方法,先獨(dú)立訓(xùn)練從左到右和從右到左的LSTM,然后將兩部分輸出conate得到的features直接應(yīng)用于下游任務(wù)。
fine-tuning方法
GPT和BERT屬于fine-tuning方法,fine-tuning方法預(yù)訓(xùn)練的features不直接應(yīng)用于下游任務(wù),需要針對(duì)下游任務(wù)進(jìn)行fine-tuning。GPT使用從左到右的單向Transformer進(jìn)行預(yù)訓(xùn)練,然后針對(duì)下游任務(wù)進(jìn)行fine-tuning。BERT使用雙向Transformer進(jìn)行預(yù)訓(xùn)練,相較于GPT,更加充分的利用上下文信息,然后針對(duì)下游任務(wù)進(jìn)行fine-tuning。
Input/Output Representations
為了BERT更好的應(yīng)用于下游任務(wù),BERT預(yù)訓(xùn)練的時(shí)候輸入可以模糊表示,比如既可以表示成單個(gè)句子也可以表示成一對(duì)句子(<Question,Answer>)。輸入的第一個(gè)token總是特指classification token [CLS],對(duì)應(yīng)的輸出位置用來做分類任務(wù)。一對(duì)句子作為輸入時(shí),表示成單個(gè)序列,通過特殊的token [SEP]來分開不同句子,并且對(duì)每個(gè)輸入token加上一個(gè)可學(xué)習(xí)的embedding來指示屬于句子A還是屬于句子B。如上面左圖所示,將input embedding表示為E,token [CLS]對(duì)應(yīng)的輸出向量是C,第i個(gè)input token的輸出是。
其中input embedding由Position Embeddings、Segment Embeddings和Token Embeddings三部分相加得到。Position Embeddings指示不同token的順序,Segment Embeddings指示不同token屬于哪個(gè)句子,Token Embeddings指示不同token的語義信息。
Pre-training BERT
BERT設(shè)計(jì)了兩種無監(jiān)督任務(wù)進(jìn)行預(yù)訓(xùn)練,可以更好的應(yīng)用到下游任務(wù)。
Task 1:Masked LM
為了訓(xùn)練一個(gè)深度雙向的Transformer,BERT以一定比例隨機(jī)mask掉一些輸入tokens,然后對(duì)這些masked tokens進(jìn)行預(yù)測(cè),這個(gè)任務(wù)稱之為Masked LM(MLM),靈感來源于完形填空任務(wù),通過上下文預(yù)測(cè)masked的word是什么,最終BERT采用了隨機(jī)mask掉15%的輸入tokens。雖然Masked LM任務(wù)可以獲得一個(gè)雙向的預(yù)訓(xùn)練模型,但是預(yù)訓(xùn)練和fine-tuning存在著gap,因?yàn)閒ine-tuning的時(shí)候,輸入是不存在[MASK]token的,為了緩解這種問題,實(shí)際訓(xùn)練的時(shí)候不總是采用[MASK] token來替換。其中[MASK] token有80%的概率被選中,random token有10%的概率被選中,還有10%的概率不改變token。
Task 2:
Next Sentence Prediction(NSP)
很多下游任務(wù)是需要理解句子對(duì)之間的關(guān)系的,為了幫助下游任務(wù)更好的理解句子對(duì)之間的關(guān)系,BERT還設(shè)計(jì)了另一個(gè)預(yù)訓(xùn)練任務(wù)next sentence prediction(NSP)。具體的,選擇句子A和句子B作為預(yù)訓(xùn)練的輸入,有50%的概率B是A的下一個(gè)句子(標(biāo)記為IsNext),有50%的概率B不是A的下一個(gè)句子(標(biāo)記為NotNext),實(shí)際上就是一個(gè)二分類模型。如上面左圖所示,C被用于NSP任務(wù)進(jìn)行二分類。
iGPT
iGPT和BERT思路非常類似,只不過iGPT是在圖像上進(jìn)行的。
iGPT首先將輸入圖片resize然后reshape成1維序列。然后選擇兩種方法進(jìn)行預(yù)訓(xùn)練,其中Autoregressive的目標(biāo)是預(yù)測(cè)next pixel prediction(類似GPT單向模型),BERT的目標(biāo)是masked pixel prediction(類似BERT的MLM任務(wù))。最后,iGPT用linear probes(直接使用feature,類似feature-based的方法)或著fine-tuning兩種方法來評(píng)估學(xué)習(xí)到的特征。
iGPT可以通過圖像的上下文信息預(yù)測(cè)出masked的pixel,跟BERT有著異曲同工之妙。
看一下iGPT的生成效果,iGPT可以通過已知的上下文內(nèi)容對(duì)缺失部分進(jìn)行補(bǔ)充,看起來非常的邏輯自洽啊,tql!
SimCLR
SimCLR是一種非常簡(jiǎn)單直接的self-supervised方法。SimCLR框架流程如下:
對(duì)于每張輸入圖片隨機(jī)進(jìn)行數(shù)據(jù)增強(qiáng)得到兩個(gè)不同的views,同一張圖的兩個(gè)views可以認(rèn)為是positive pair。
每張輸入圖片的兩個(gè)views通過相同的encoder產(chǎn)生兩個(gè)表示向量。
每張輸入圖片的兩個(gè)表示向量通過相同的projection head產(chǎn)生兩個(gè)最終的向量。
最后對(duì)一個(gè)batch得到的最終向量進(jìn)行對(duì)比學(xué)習(xí),拉近positive pair,排斥negative pair。
對(duì)比學(xué)習(xí)的函數(shù)如下:
偽代碼如下:
一個(gè)batch有N個(gè)圖片,通過不同的數(shù)據(jù)增強(qiáng)產(chǎn)生2N個(gè)views,一個(gè)positive pair可以交換位置得到兩個(gè)loss,因此可以將一對(duì)positive pair的loss寫成positive pair交換位置的兩個(gè)loss之和的平均值,那么總的loss則是2N個(gè)views的loss的平均值。
SimCSE
看到計(jì)算機(jī)視覺的self-supervised大獲成功之后,自然語言處理也開始嘗試self-supervised。其中SimCSE的方法非常的簡(jiǎn)單有效,在Sentence Embeddings的任務(wù)中大幅度超過之前的方法。SimCSE名字應(yīng)該是借鑒了SimCLR。SimCSE提出了兩種方法,一種是Unsupervised SimCSE,另一種是Supervised SimCSE。
Unsupervised SimCSE的整體框架和SimCLR基本上保持一致。如圖(a)所示,將同一個(gè)句子通過兩種隨機(jī)的mask得到兩個(gè)postive pair(實(shí)線),不同句子的mask句子是negative pair(虛線),然后通過對(duì)比學(xué)習(xí)的方法,拉近positive pair,排斥negative pair。其中隨機(jī)mask句子其實(shí)就是句子的數(shù)據(jù)增強(qiáng),SimCSE實(shí)驗(yàn)發(fā)現(xiàn)隨機(jī)mask掉10%效果最好。
Supervised SimCSE的positive pair和negative pair是有標(biāo)注的。其中不同句子的entailment和contradiction都是negative pair,只有相同句子的entailment是positive pair。如圖(b)所示,第一個(gè)句子跟自己的entailment是positive pair(實(shí)線),跟其他句子的entailment/contradiction都是positive pair(虛線)。
上圖align表示positive pair拉近的能力(越小越好),uniform表示negative pair排斥的能力(越小越好)。最終SimCSE可視化分析發(fā)現(xiàn),Unsup. SimCSE可以得到更好的align和uniform,SimCSE通過有標(biāo)注的監(jiān)督信號(hào),可以進(jìn)一步的提升align和uniform。(ps:align和uniform概念可以看我之前的文章Self-Supervised: 如何避免退化解)
另外,SimCSE還有各種消融實(shí)驗(yàn)和可視化分析,非常精彩,建議看原文細(xì)細(xì)品味
總結(jié)
下面引用lecun的一張圖,談一談對(duì)CV和NLP中無監(jiān)督預(yù)訓(xùn)練的看法:
lecun通過Low dim -> High dim、Discrete -> Continuous和Less uncertainty -> More uncertainty三個(gè)維度來表示CV和NLP中不同無監(jiān)督方法的位置。文本是離散的,不確定性低,維度低;而圖像是連續(xù)的,不確定性高,維度高。 模態(tài)的不同,導(dǎo)致了無監(jiān)督的處理方式上的不同。
NLP任務(wù)因?yàn)榇_定性更高,生成式無監(jiān)督預(yù)訓(xùn)練方法可以非常好進(jìn)行預(yù)測(cè)(如BERT),而由于CV任務(wù)不確定性更高,導(dǎo)致需要設(shè)計(jì)更自由靈活的方法,對(duì)比方法相比于生成方法自由度更高,可能更加適合CV任務(wù)作為無監(jiān)督預(yù)訓(xùn)練方法。
猜測(cè)未來NLP領(lǐng)域生成式和判別式會(huì)出現(xiàn)并存的局面,sentence級(jí)別任務(wù)傾向于使用判別式,word級(jí)別任務(wù)傾向于使用生成式。而CV領(lǐng)域判別式會(huì)占主導(dǎo)地位,一方面由于圖像是二維的,生成式計(jì)算量會(huì)更龐大,另一方面判別式的自由度會(huì)更高一些。
尋求報(bào)道、約稿、文案投放:
添加微信xixiaoyao-1,備注“商務(wù)合作”
后臺(tái)回復(fù)關(guān)鍵詞【入群】
加入賣萌屋NLP/IR/Rec與求職討論群
后臺(tái)回復(fù)關(guān)鍵詞【頂會(huì)】
獲取ACL、CIKM等各大頂會(huì)論文集!
?
[1] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
[2] Generative Pretraining from Pixels
[3] A Simple Framework for Contrastive Learning of Visual Representations
[4] SimCSE: Simple Contrastive Learning of Sentence Embeddings
[5] https://ai.facebook.com/blog/self-supervised-learning-the-dark-matter-of-intelligence/
總結(jié)
以上是生活随笔為你收集整理的CV和NLP中的无监督预训练(生成式BERT/iGPT和判别式SimCLR/SimCSE)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 召回粗排精排-级联漏斗(上)
- 下一篇: Google、MS和BAT教给我的面试真