高效利用无标注数据:自监督学习简述
?一只小狐貍帶你解鎖?煉丹術(shù)&NLP?秘籍?
作者:huyber
來源:https://zhuanlan.zhihu.com/p/108906502
BERT的大熱讓自監(jiān)督學習成為了大家討論的熱點,但其實word2vec和自編碼器也都屬于自監(jiān)督學習范疇。本文通過整理自監(jiān)督學習的一系列工作,把主流方法分成三大類,方便大家更全面的了解自監(jiān)督學習的定義、方法、用途。
學習的范式
我們首先來回顧下機器學習中兩種基本的學習范式,如圖所示,一種是監(jiān)督學習,一種是無監(jiān)督學習。
監(jiān)督學習利用大量的標注數(shù)據(jù)來訓練模型,模型的預(yù)測和數(shù)據(jù)的真實標簽產(chǎn)生損失后進行反向傳播,通過不斷的學習,最終可以獲得識別新樣本的能力。而無監(jiān)督學習不依賴任何標簽值,通過對數(shù)據(jù)內(nèi)在特征的挖掘,找到樣本間的關(guān)系,比如聚類相關(guān)的任務(wù)。有監(jiān)督和無監(jiān)督最主要的區(qū)別在于模型在訓練時是否需要人工標注的標簽信息。
無監(jiān)督學習中被廣泛采用的方式是自動編碼器(autoencoder):
編碼器將輸入的樣本映射到隱層向量,解碼器將這個隱層向量映射回樣本空間。我們期待網(wǎng)絡(luò)的輸入和輸出可以保持一致(理想情況,無損重構(gòu)),同時隱層向量的維度大大小于輸入樣本的維度,以此達到了降維的目的,利用學習到的隱層向量再進行聚類等任務(wù)時將更加的簡單高效。對于如何學習隱層向量的研究,可以稱之為表征學習(Representation Learning)。
但這種簡單的編碼-解碼結(jié)構(gòu)仍然存在很多問題,基于像素的重構(gòu)損失通常假設(shè)每個像素之間都是獨立的,從而降低了它們對相關(guān)性或復(fù)雜結(jié)構(gòu)進行建模的能力。尤其使用 L1 或 L2 損失來衡量輸入和輸出之間的差距其實是不存在語義信息的,而過分的關(guān)注像素級別的細節(jié)而忽略了更為重要的語義特征。對于自編碼器,可能僅僅是做了維度的降低而已,我們希望學習的目的不僅僅是維度更低,還可以包含更多的語義特征,讓模型懂的輸入究竟是什么,從而幫助下游任務(wù)。而自監(jiān)督學習最主要的目的就是學習到更豐富的語義表征。
什么是自監(jiān)督學習?
自監(jiān)督學習主要是利用輔助任務(wù)(pretext)從大規(guī)模的無監(jiān)督數(shù)據(jù)中挖掘自身的監(jiān)督信息,通過這種構(gòu)造的監(jiān)督信息對網(wǎng)絡(luò)進行訓練,從而可以學習到對下游任務(wù)有價值的表征。
所以對于自監(jiān)督學習來說,存在三個挑戰(zhàn):
對于大量的無標簽數(shù)據(jù),如何進行表征學習?
從數(shù)據(jù)的本身出發(fā),如何設(shè)計有效的輔助任務(wù) pretext?
對于自監(jiān)督學習到的表征,如何來評測它的有效性?
對于第三點,評測自監(jiān)督學習的能力,主要是通過 Pretrain-Fintune 的模式。我們首先回顧下監(jiān)督學習中的 Pretrain - Finetune 流程:我們首先從大量的有標簽數(shù)據(jù)上進行訓練,得到預(yù)訓練的模型,然后對于新的下游任務(wù)(Downstream task),我們將學習到的參數(shù)進行遷移,在新的有標簽任務(wù)上進行「微調(diào)」,從而得到一個能適應(yīng)新任務(wù)的網(wǎng)絡(luò)。
而自監(jiān)督的 Pretrain - Finetune 流程:首先從大量的無標簽數(shù)據(jù)中通過 pretext 來訓練網(wǎng)絡(luò),得到預(yù)訓練的模型,然后對于新的下游任務(wù),和監(jiān)督學習一樣,遷移學習到的參數(shù)后微調(diào)即可。所以自監(jiān)督學習的能力主要由下游任務(wù)的性能來體現(xiàn)。
自監(jiān)督學習的主要方法
自監(jiān)督學習的方法主要可以分為 3 類:基于上下文(Context based) 、基于時序(Temporal Based)以及基于對比(Contrastive Based)。
1. 基于上下文(Context Based)
基于數(shù)據(jù)本身的上下文信息,我們其實可以構(gòu)造很多任務(wù),比如在 NLP 領(lǐng)域中最重要的算法 Word2vec 。Word2vec 主要是利用語句的順序,例如 CBOW 通過前后的詞來預(yù)測中間的詞,而 Skip-Gram 通過中間的詞來預(yù)測前后的詞。
而在圖像中,研究人員通過一種名為 Jigsaw(拼圖)[7] 的方式來構(gòu)造輔助任務(wù)。我們可以將一張圖分成 9 個部分,然后通過預(yù)測這幾個部分的相對位置來產(chǎn)生損失。比如我們輸入這張圖中的小貓的眼睛和右耳朵,期待讓模型學習到貓的右耳朵是在臉部的右上方的,如果模型能很好的完成這個任務(wù),那么我們就可以認為模型學習到的表征是具有語義信息的。
后續(xù)的工作[8]人們又拓展了這種拼圖的方式,設(shè)計了更加復(fù)雜的,或者說更難的任務(wù)。首先我們依然將圖片分為 9 塊,我們預(yù)先定義好 64 種排序方式。模型輸入任意一種被打亂的序列,期待能夠?qū)W習到這種序列的順序?qū)儆谀膫€類,和上個工作相比,這個模型需要學習到更多的相對位置信息。這個工作帶來的啟發(fā)就是使用更強的監(jiān)督信息,或者說輔助任務(wù)越難,最后的性能越好。
除了這種拼圖的模式,還有一種是摳圖[9]。想法其實也很簡單粗暴,就是我們隨機的將圖片中的一部分刪掉,然后利用剩余的部分來預(yù)測扣掉的部分,只有模型真正讀懂了這張圖所代表的含義,才能有效的進行補全。這個工作表明自監(jiān)督學習任務(wù)不僅僅可以做表征學習,還能同時完成一些神奇的任務(wù)。
而對于這種摳圖的方式,其實和 nlp 中的 BERT [10] 的 MASK LM 訓練方式有異曲同工之妙,BERT 在訓練時也可以是看做隨機扣掉一些詞,然后來預(yù)測扣掉的詞,從而讓模型讀懂句子。
還有一種思路是通過圖片的顏色信息[11],比如給模型輸入圖像的灰度圖,來預(yù)測圖片的色彩。只有模型可以理解圖片中的語義信息才能得知哪些部分應(yīng)該上怎樣的顏色,比如天空是藍色的,草地是綠色的,只有模型從海量的數(shù)據(jù)中學習到了這些語義概念,才能得知物體的具體顏色信息。同時這個模型在訓練結(jié)束后就可以做這種圖片上色的任務(wù)。
這種基于預(yù)測顏色的生成模型帶給了人們新的啟發(fā),其實這種灰度圖和 ab 域的信息我們可以當做是一張圖片的解耦表達,所以只要是解耦的特征,我們都可以通過這種方式互相監(jiān)督的學習表征,著名的 Split-Brain Autoencoders [12] 就在做這樣一件事情。對于原始數(shù)據(jù),首先分成兩部分,然后通過一部分的信息來預(yù)測另一部分,最后再合成完成的數(shù)據(jù)。和傳統(tǒng)編碼器不同的是,這種預(yù)測的方式可以促使模型真正讀懂數(shù)據(jù)的語義信息才能夠?qū)崿F(xiàn),所以相當于間接地約束編碼器不單單靠 pixel-wise 層面來訓練,而要同時考慮更多的語義信息。
最后我們要介紹的是根據(jù)類似數(shù)據(jù)增廣的方式來尋找自監(jiān)督上下文。ICLR 2018 [13]的工作是給定一張輸入的圖片,我們對其進行不同角度的旋轉(zhuǎn),模型的目的是預(yù)測該圖片的旋轉(zhuǎn)角度。這種樸素的想法最后帶來的增益竟然是非常巨大的,所以數(shù)據(jù)增強對于自監(jiān)督學習也是非常有益處的,我個人的想法是數(shù)據(jù)增強不僅帶來了更多的數(shù)據(jù),還增加了預(yù)訓練模型的魯棒性。
自監(jiān)督學習在預(yù)訓練模型中的成功讓研究人員覺得非常興奮,同時也激發(fā)了更多的靈感。我們之前介紹的模型都是在專注如何尋找自監(jiān)督信息,而自監(jiān)督學習一定要脫離下游的具體任務(wù)嗎?答案是否定的,越來越多的工作開始思考自監(jiān)督學習和具體任務(wù)緊密結(jié)合的方法(Task Related Self-Supervised Learning)。
Lee, Hankook et al [14]探索了在多任務(wù)學習中增加自監(jiān)督學習的可能,他們將普通的分類任務(wù)中嵌入了旋轉(zhuǎn)預(yù)測任務(wù)。除了簡單的多任務(wù)學習,也可以設(shè)計聯(lián)合學習策略,直接預(yù)測兩種監(jiān)督信息。同樣的想法也被用到了小樣本學習[15]中,一個分支進行傳統(tǒng)的小樣本分類,另一個分支來進行自監(jiān)督旋轉(zhuǎn)預(yù)測,雖然這篇文章的想法和設(shè)計不是很亮眼,但提升還是比較明顯的。
而自監(jiān)督和半監(jiān)督學習[16]也可以進行結(jié)合,對于無標記的數(shù)據(jù)進行自監(jiān)督學習(旋轉(zhuǎn)預(yù)測),和對于有標記數(shù)據(jù),在進行自監(jiān)督學習的同時利用聯(lián)合訓練的想法進行有監(jiān)督學習。通過對 imagenet 的半監(jiān)督劃分,利用 10% 或者 1% 的數(shù)據(jù)進行實驗,最后分析了一些超參數(shù)對于最終性能的影響。
這兩篇文章最后都中了 ICCV 2019,說明目前來說審稿人對于這類任務(wù)相關(guān)的自監(jiān)督模型都是比較感興趣的。
2. 基于時序(Temporal Based)
之前介紹的方法大多是基于樣本自身的信息,比如旋轉(zhuǎn)、色彩、裁剪等。而樣本間其實也是具有很多約束關(guān)系的,這里我們來介紹利用時序約束來進行自監(jiān)督學習的方法。最能體現(xiàn)時序的數(shù)據(jù)類型就是視頻了(video)。
第一種思想是基于幀的相似性[17],對于視頻中的每一幀,其實存在著特征相似的概念,簡單來說我們可以認為視頻中的相鄰幀特征是相似的,而相隔較遠的視頻幀是不相似的,通過構(gòu)建這種相似(position)和不相似(negative)的樣本來進行自監(jiān)督約束。
另外,對于同一個物體的拍攝是可能存在多個視角(multi-view),對于多個視角中的同一幀,可以認為特征是相似的,對于不同幀可以認為是不相似的。
還有一種想法是來自 @Xiaolong Wang 大佬 ICCV 2015 [18]的基于無監(jiān)督追蹤方法,首先在大量的無標簽視頻中進行無監(jiān)督追蹤,獲取大量的物體追蹤框。那么對于一個物體追蹤框在不同幀的特征應(yīng)該是相似的(positive),而對于不同物體的追蹤框中的特征應(yīng)該是不相似的(negative)。
除了基于特征相似性外,視頻的先后順序也是一種自監(jiān)督信息。比如ECCV 2016, Misra, I. [19] 等人提出基于順序約束的方法,可以從視頻中采樣出正確的視頻序列和不正確的視頻序列,構(gòu)造成正負樣本對然后進行訓練。簡而言之,就是設(shè)計一個模型,來判斷當前的視頻序列是否是正確的順序。
基于順序的約束還被應(yīng)用了到了對話系統(tǒng)中,ACL 2019 [20] 提出的自監(jiān)督對話學習就是基于這種思想。這篇文章主要是想解決對話系統(tǒng)中生成的話術(shù)連貫性的問題,期待機器生成的回復(fù)和人類交談一樣是符合之前說話的風格、習慣等等。從大量的歷史預(yù)料中挖掘出順序的序列(positive)和亂序的序列(negative),通過模型來預(yù)測是否符合正確的順序來進行訓練。訓練完成后就擁有了一個可以判斷連貫性的模型,從而可以嵌入到對話系統(tǒng)中,最后利用對抗訓練的方式生成更加連貫的話術(shù)。
而 BERT 的另一種訓練方式,Next Sentence Prediction 也可以看作是基于順序的約束,通過構(gòu)造大量的上下文樣本,目的是讓模型理解兩個句子之間的聯(lián)系。這一任務(wù)的訓練語料可以從語料庫中抽取句子對包括兩個句子A和B來進行生成,其中50%的概率B是A的下一個句子,50%的概率B是語料中的一個隨機句子。該任務(wù)預(yù)測B是否是A的下一句。
3. 基于對比(Contrastive Based)
第三類自監(jiān)督學習的方法是基于對比約束,它通過學習對兩個事物的相似或不相似進行編碼來構(gòu)建表征,這類方法的性能目前來說是非常強的,從最近的熱度就可以看出,很多大牛的精力都放在這個方向上面。關(guān)于這個方向的方法,[22] 總結(jié)的比較好。這里我們再簡單的闡述一下,加上一些我個人的看法。
其實我們第二部分所介紹的基于時序的方法已經(jīng)涉及到了這種基于對比的約束,通過構(gòu)建正樣本(positive)和負樣本(negative),然后度量正負樣本的距離來實現(xiàn)自監(jiān)督學習。核心思想樣本和正樣本之間的距離遠遠大于樣本和負樣本之間的距離:
這里的 x 通常也稱為 「anchor」數(shù)據(jù),為了優(yōu)化 anchor 數(shù)據(jù)和其正負樣本的關(guān)系,我們可以使用點積的方式構(gòu)造距離函數(shù),然后構(gòu)造一個 softmax 分類器,以正確分類正樣本和負樣本。這應(yīng)該鼓勵相似性度量函數(shù)(點積)將較大的值分配給正例,將較小的值分配給負例:
通常這個損失也被稱為 InfoNCE (多么炫酷的名字啊),后面的所有工作也基本是圍繞這個損失進行的。
DIM
我們首先介紹 ICLR 2019 的 DIM [23],DIM 的具體思想是對于隱層的表達,我們可以擁有全局的特征(編碼器最終的輸出)和局部特征(編碼器中間層的特征),模型需要分類全局特征和局部特征是否來自同一圖像。所以這里 x 是來自一幅圖像的全局特征,正樣本是該圖像的局部特征,而負樣本是其他圖像的局部特征。這個工作的開創(chuàng)性很強,已經(jīng)被應(yīng)用到了其他領(lǐng)域,比如 graph [24]。
CPC
CPC 同樣是一個基于對比約束的自監(jiān)督框架,主要是可以應(yīng)用于能夠以有序序列表示的任何形式的數(shù)據(jù):文本、語音、視頻、甚至圖像(圖像可以被視為像素或塊的序列,后面作者也給出了具體的想法)。CPC 主要是利用自回歸的想法,對相隔多個時間步長的數(shù)據(jù)點之間共享的信息進行編碼來學習表示,這個表示 c_t 可以代表融合了過去的信息,而正樣本就是這段序列 t 時刻后的輸入,負樣本是從其他序列中隨機采樣出的樣本。CPC的主要思想就是基于過去的信息預(yù)測的未來數(shù)據(jù),通過采樣的方式進行訓練。
CMC
所以基于對比約束的自監(jiān)督方法主要圍繞如何選取正負樣本, @慕容腹黑 大佬提出了利用多模態(tài)(多視角)的信息來構(gòu)造樣本[26] ,一個樣本的多個模態(tài)為正樣本,其他樣本的模態(tài)為負樣本。我認為這個工作還是很有啟發(fā)性的,很遺憾 ICCV2019 沒有中,真心希望這篇文章能夠有一個好的歸宿。
Memory Bank
對于具體的實現(xiàn)上,因為存在大量的樣本,如何存取和高效的計算損失是急需解決的。研究人員提出了memory bank [27]的概念,也就是說我們把之前模型產(chǎn)生樣本特征全部存起來,當前計算損失的時候直接拿來用就可以了,每次模型更新完后將當前的特征重新更新到 memory bank 中,以便下一次使用。這個工作的缺點就在于每次需要將所有樣本的特征全部存起來。后續(xù) kaiming 大神提出的 Moco[28], 主要的貢獻是 Momentum Update、 shuffleBN 等技術(shù)點來優(yōu)化這個過程。關(guān)于 Moco 知乎上已經(jīng)有了很多的解釋了,推薦大家閱讀 [2],這里我們就不展開介紹了。
SImCLR
最近 hinton 組又放出了 SimCLR[29],這個工作主要是對于一個輸入的樣本,進行不同的數(shù)據(jù)增廣方式,對于同一個樣本的不同增廣是正樣本,對于不同樣本的增廣是負樣本。整個過程比之前kaiming提出的動量對比(MoCo)更加的簡單,同時省去了數(shù)據(jù)存儲隊列。這個工作的創(chuàng)新主要有兩個:
在表征層和最后的損失層增加了一個非線性映射可以增加性能 (這個地方我比較好奇,希望能有大佬給出更直觀的解釋)。
數(shù)據(jù)增廣對于自監(jiān)督學習是有益的,不同數(shù)據(jù)增廣方式的結(jié)合比單一增廣更好。
同時作者公布了非常多的實驗經(jīng)驗,比如自監(jiān)督學習需要更大的 batch 和更長的訓練時間。
Discussion
通過閱讀這些經(jīng)典工作,我自己的思考主要如下:
找到合適的輔助任務(wù)(pretext)對于自監(jiān)督學習是最需要解決的問題。
數(shù)據(jù)和資源越多,自監(jiān)督預(yù)訓練的效果會更好(Bert, MoCo, SimCLR)。
自監(jiān)督直接和具體任務(wù)的結(jié)合(Task Related Self-Supervised Learning)是個可探索的方向,已經(jīng)在很多任務(wù)中初露頭角,也比較符合審稿人的口味。
可
能
喜
歡
斯坦福大學最甜網(wǎng)劇:知識圖譜CS520面向大眾開放啦!
Google|突破瓶頸,打造更強大的Transformer
ACL2020|對話數(shù)據(jù)集Mutual:論對話邏輯,BERT還差的很遠
ACL2020|FastBERT:放飛BERT的推理速度
LayerNorm是Transformer的最優(yōu)解嗎?
夕小瑤的賣萌屋
_
關(guān)注&星標小夕,帶你解鎖AI秘籍
訂閱號主頁下方「撩一下」有驚喜哦
參考文獻
[1] https://lawtomated.com/supervised-vs-unsupervised-learning-which-is-better/
[2] https://zhuanlan.zhihu.com/p/102573476
[3] https://zhuanlan.zhihu.com/p/107126866
[4] https://zhuanlan.zhihu.com/p/30265894
[5] https://zhuanlan.zhihu.com/p/108625273
[6] https://lilianweng.github.io/lil-log/2018/08/12/from-autoencoder-to-beta-vae.html
[7] Carl Doersch, Abhinav Gupta, and Alexei A. Efros. Unsupervised Visual Representation Learning by Context Prediction. In ICCV 2015
[8] Noroozi, M., & Favaro, P. Unsupervised learning of visual representations by solving jigsaw puzzles. In ECCV 2016.
[9] Deepak Pathak et al. Context Encoders: Feature Learning by Inpainting. In CVPR 2016.
[10] Devlin, Jacob et al. “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.” NAACL-HLT (2019).
[11] Zhang, R., Isola, P., & Efros, A. A. Colorful image colorization. In ECCV 2016.
[12] Zhang, R., Isola, P., & Efros, A. A. Split-Brain Autoencoders: Unsupervised Learning by Cross-Channel Prediction. In CVPR 2017
[13] Gidaris, Spyros et al. “Unsupervised Representation Learning by Predicting Image Rotations.” In ICLR 2018
[14] Lee, Hankook et al. “Rethinking Data Augmentation: Self-Supervision and Self-Distillation.” ArXiv abs/1910.05872 (2019): n. pag.
[15] Gidaris, Spyros et al. “Boosting Few-Shot Visual Learning with Self-Supervision.” ICCV 2019
[16] Zhai, Xiaohua et al. “SL: Self-Supervised Semi-Supervised Learning.” ” ICCV 2019
[17] Sermanet, Pierre et al. “Time-Contrastive Networks: Self-Supervised Learning from Video.” 2018 IEEE International Conference on Robotics and Automation (ICRA) (2017): 1134-1141.
[18] Wang, Xiaolong and Abhinav Gupta. “Unsupervised Learning of Visual Representations Using Videos.” 2015 IEEE International Conference on Computer Vision (ICCV) (2015): 2794-2802.
[19] Misra, I., Zitnick, C. L., & Hebert, M. Shuffle and learn: unsupervised learning using temporal order verification. In ECCV 2016.
[20] Wu, Jiawei et al. “Self-Supervised Dialogue Learning.” ACL (2019).
[21] https://cloud.tencent.com/developer/article/1389555
[22] https://ankeshanand.com/blog/2020/01/26/contrative-self-supervised-learning.html
[23] Hjelm, R. Devon et al. “Learning deep representations by mutual information estimation and maximization.” . ICLR 2019
[24] Velickovic, Petar et al. “Deep Graph Infomax.” ArXiv abs/1809.10341 (2018): n. pag.
[25] Oord, A?ron van den et al. “Representation Learning with Contrastive Predictive Coding.” ArXiv abs/1807.03748 (2018): n. pag.
[26] Tian, Yonglong et al. “Contrastive Multiview Coding.” ArXiv abs/1906.05849 (2019): n. pag.
[27] Wu, Zhirong et al. “Unsupervised Feature Learning via Non-parametric Instance Discrimination.” CVPR 2018
[28] He, Kaiming et al. “Momentum Contrast for Unsupervised Visual Representation Learning.” ArXiv abs/1911.05722 (2019): n. pag.
[29] Chen, Ting et al. “A Simple Framework for Contrastive Learning of Visual Representations.” ArXiv abs/2002.05709 (2020): n. pag.
總結(jié)
以上是生活随笔為你收集整理的高效利用无标注数据:自监督学习简述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这个自然语言处理“工具”,玩得停不下来
- 下一篇: 听说读论文也有trick?这篇文章告诉你