高效利用無標註數據:自監督學習簡述

 一隻小狐狸帶你解鎖 煉丹術&NLP 祕籍 

作者:huyber
來源:https://zhuanlan.zhihu.com/p/108906502

BERT的大熱讓自監督學習成爲了大家討論的熱點,但其實word2vec和自編碼器也都屬於自監督學習範疇。本文通過整理自監督學習的一系列工作,把主流方法分成三大類,方便大家更全面的瞭解自監督學習的定義、方法、用途。

學習的範式

我們首先來回顧下機器學習中兩種基本的學習範式,如圖所示,一種是監督學習,一種是無監督學習。

監督學習利用大量的標註數據來訓練模型,模型的預測和數據的真實標籤產生損失後進行反向傳播,通過不斷的學習,最終可以獲得識別新樣本的能力。而無監督學習不依賴任何標籤值,通過對數據內在特徵的挖掘,找到樣本間的關係,比如聚類相關的任務。有監督和無監督最主要的區別在於模型在訓練時是否需要人工標註的標籤信息。

無監督學習中被廣泛採用的方式是自動編碼器(autoencoder):

編碼器將輸入的樣本映射到隱層向量,解碼器將這個隱層向量映射回樣本空間。我們期待網絡的輸入和輸出可以保持一致(理想情況,無損重構),同時隱層向量的維度大大小於輸入樣本的維度,以此達到了降維的目的,利用學習到的隱層向量再進行聚類等任務時將更加的簡單高效。對於如何學習隱層向量的研究,可以稱之爲表徵學習(Representation Learning)

但這種簡單的編碼-解碼結構仍然存在很多問題,基於像素的重構損失通常假設每個像素之間都是獨立的,從而降低了它們對相關性或複雜結構進行建模的能力。尤其使用 L1 或 L2 損失來衡量輸入和輸出之間的差距其實是不存在語義信息的,而過分的關注像素級別的細節而忽略了更爲重要的語義特徵。對於自編碼器,可能僅僅是做了維度的降低而已,我們希望學習的目的不僅僅是維度更低,還可以包含更多的語義特徵,讓模型懂的輸入究竟是什麼,從而幫助下游任務。而自監督學習最主要的目的就是學習到更豐富的語義表徵。

什麼是自監督學習?

自監督學習主要是利用輔助任務(pretext)從大規模的無監督數據中挖掘自身的監督信息,通過這種構造的監督信息對網絡進行訓練,從而可以學習到對下游任務有價值的表徵。

所以對於自監督學習來說,存在三個挑戰:

  • 對於大量的無標籤數據,如何進行表徵學習?

  • 從數據的本身出發,如何設計有效的輔助任務 pretext?

  • 對於自監督學習到的表徵,如何來評測它的有效性?

對於第三點,評測自監督學習的能力,主要是通過 Pretrain-Fintune 的模式。我們首先回顧下監督學習中的 Pretrain - Finetune 流程:我們首先從大量的有標籤數據上進行訓練,得到預訓練的模型,然後對於新的下游任務(Downstream task),我們將學習到的參數進行遷移,在新的有標籤任務上進行「微調」,從而得到一個能適應新任務的網絡。

而自監督的 Pretrain - Finetune 流程:首先從大量的無標籤數據中通過 pretext 來訓練網絡,得到預訓練的模型,然後對於新的下游任務,和監督學習一樣,遷移學習到的參數後微調即可。所以自監督學習的能力主要由下游任務的性能來體現。

自監督學習的主要方法

自監督學習的方法主要可以分爲 3 類:基於上下文(Context based) 、基於時序(Temporal Based)以及基於對比(Contrastive Based)。

1. 基於上下文(Context Based)

基於數據本身的上下文信息,我們其實可以構造很多任務,比如在 NLP 領域中最重要的算法 Word2vec 。Word2vec 主要是利用語句的順序,例如 CBOW 通過前後的詞來預測中間的詞,而 Skip-Gram 通過中間的詞來預測前後的詞。

而在圖像中,研究人員通過一種名爲 Jigsaw(拼圖)[7] 的方式來構造輔助任務。我們可以將一張圖分成 9 個部分,然後通過預測這幾個部分的相對位置來產生損失。比如我們輸入這張圖中的小貓的眼睛和右耳朵,期待讓模型學習到貓的右耳朵是在臉部的右上方的,如果模型能很好的完成這個任務,那麼我們就可以認爲模型學習到的表徵是具有語義信息的。

後續的工作[8]人們又拓展了這種拼圖的方式,設計了更加複雜的,或者說更難的任務。首先我們依然將圖片分爲 9 塊,我們預先定義好 64 種排序方式。模型輸入任意一種被打亂的序列,期待能夠學習到這種序列的順序屬於哪個類,和上個工作相比,這個模型需要學習到更多的相對位置信息。這個工作帶來的啓發就是使用更強的監督信息,或者說輔助任務越難,最後的性能越好。

除了這種拼圖的模式,還有一種是摳圖[9]。想法其實也很簡單粗暴,就是我們隨機的將圖片中的一部分刪掉,然後利用剩餘的部分來預測扣掉的部分,只有模型真正讀懂了這張圖所代表的含義,纔能有效的進行補全。這個工作表明自監督學習任務不僅僅可以做表徵學習,還能同時完成一些神奇的任務。

而對於這種摳圖的方式,其實和 nlp 中的 BERT [10] 的 MASK LM 訓練方式有異曲同工之妙,BERT 在訓練時也可以是看做隨機扣掉一些詞,然後來預測扣掉的詞,從而讓模型讀懂句子。

還有一種思路是通過圖片的顏色信息[11],比如給模型輸入圖像的灰度圖,來預測圖片的色彩。只有模型可以理解圖片中的語義信息才能得知哪些部分應該上怎樣的顏色,比如天空是藍色的,草地是綠色的,只有模型從海量的數據中學習到了這些語義概念,才能得知物體的具體顏色信息。同時這個模型在訓練結束後就可以做這種圖片上色的任務。

這種基於預測顏色的生成模型帶給了人們新的啓發,其實這種灰度圖和 ab 域的信息我們可以當做是一張圖片的解耦表達,所以只要是解耦的特徵,我們都可以通過這種方式互相監督的學習表徵,著名的 Split-Brain Autoencoders [12] 就在做這樣一件事情。對於原始數據,首先分成兩部分,然後通過一部分的信息來預測另一部分,最後再合成完成的數據。和傳統編碼器不同的是,這種預測的方式可以促使模型真正讀懂數據的語義信息才能夠實現,所以相當於間接地約束編碼器不單單靠 pixel-wise 層面來訓練,而要同時考慮更多的語義信息。

最後我們要介紹的是根據類似數據增廣的方式來尋找自監督上下文。ICLR 2018 [13]的工作是給定一張輸入的圖片,我們對其進行不同角度的旋轉,模型的目的是預測該圖片的旋轉角度。這種樸素的想法最後帶來的增益竟然是非常巨大的,所以數據增強對於自監督學習也是非常有益處的,我個人的想法是數據增強不僅帶來了更多的數據,還增加了預訓練模型的魯棒性。

自監督學習在預訓練模型中的成功讓研究人員覺得非常興奮,同時也激發了更多的靈感。我們之前介紹的模型都是在專注如何尋找自監督信息,而自監督學習一定要脫離下游的具體任務嗎?答案是否定的,越來越多的工作開始思考自監督學習和具體任務緊密結合的方法(Task Related Self-Supervised Learning)

Lee, Hankook et al [14]探索了在多任務學習中增加自監督學習的可能,他們將普通的分類任務中嵌入了旋轉預測任務。除了簡單的多任務學習,也可以設計聯合學習策略,直接預測兩種監督信息。同樣的想法也被用到了小樣本學習[15]中,一個分支進行傳統的小樣本分類,另一個分支來進行自監督旋轉預測,雖然這篇文章的想法和設計不是很亮眼,但提升還是比較明顯的。

而自監督和半監督學習[16]也可以進行結合,對於無標記的數據進行自監督學習(旋轉預測),和對於有標記數據,在進行自監督學習的同時利用聯合訓練的想法進行有監督學習。通過對 imagenet 的半監督劃分,利用 10% 或者 1% 的數據進行實驗,最後分析了一些超參數對於最終性能的影響。

這兩篇文章最後都中了 ICCV 2019,說明目前來說審稿人對於這類任務相關的自監督模型都是比較感興趣的。

2. 基於時序(Temporal Based)

之前介紹的方法大多是基於樣本自身的信息,比如旋轉、色彩、裁剪等。而樣本間其實也是具有很多約束關係的,這裏我們來介紹利用時序約束來進行自監督學習的方法。最能體現時序的數據類型就是視頻了(video)。

第一種思想是基於幀的相似性[17],對於視頻中的每一幀,其實存在着特徵相似的概念,簡單來說我們可以認爲視頻中的相鄰幀特徵是相似的,而相隔較遠的視頻幀是不相似的,通過構建這種相似(position)和不相似(negative)的樣本來進行自監督約束。

另外,對於同一個物體的拍攝是可能存在多個視角(multi-view),對於多個視角中的同一幀,可以認爲特徵是相似的,對於不同幀可以認爲是不相似的。

還有一種想法是來自 @Xiaolong Wang 大佬 ICCV 2015 [18]的基於無監督追蹤方法,首先在大量的無標籤視頻中進行無監督追蹤,獲取大量的物體追蹤框。那麼對於一個物體追蹤框在不同幀的特徵應該是相似的(positive),而對於不同物體的追蹤框中的特徵應該是不相似的(negative)。

除了基於特徵相似性外,視頻的先後順序也是一種自監督信息。比如ECCV 2016, Misra, I. [19] 等人提出基於順序約束的方法,可以從視頻中採樣出正確的視頻序列和不正確的視頻序列,構造成正負樣本對然後進行訓練。簡而言之,就是設計一個模型,來判斷當前的視頻序列是否是正確的順序。

基於順序的約束還被應用了到了對話系統中,ACL 2019 [20] 提出的自監督對話學習就是基於這種思想。這篇文章主要是想解決對話系統中生成的話術連貫性的問題,期待機器生成的回覆和人類交談一樣是符合之前說話的風格、習慣等等。從大量的歷史預料中挖掘出順序的序列(positive)和亂序的序列(negative),通過模型來預測是否符合正確的順序來進行訓練。訓練完成後就擁有了一個可以判斷連貫性的模型,從而可以嵌入到對話系統中,最後利用對抗訓練的方式生成更加連貫的話術。

而 BERT 的另一種訓練方式,Next Sentence Prediction 也可以看作是基於順序的約束,通過構造大量的上下文樣本,目的是讓模型理解兩個句子之間的聯繫。這一任務的訓練語料可以從語料庫中抽取句子對包括兩個句子A和B來進行生成,其中50%的概率B是A的下一個句子,50%的概率B是語料中的一個隨機句子。該任務預測B是否是A的下一句。

3. 基於對比(Contrastive Based)

第三類自監督學習的方法是基於對比約束,它通過學習對兩個事物的相似或不相似進行編碼來構建表徵,這類方法的性能目前來說是非常強的,從最近的熱度就可以看出,很多大牛的精力都放在這個方向上面。關於這個方向的方法,[22] 總結的比較好。這裏我們再簡單的闡述一下,加上一些我個人的看法。

其實我們第二部分所介紹的基於時序的方法已經涉及到了這種基於對比的約束,通過構建正樣本(positive)和負樣本(negative),然後度量正負樣本的距離來實現自監督學習。核心思想樣本和正樣本之間的距離遠遠大於樣本和負樣本之間的距離:

這裏的 x 通常也稱爲 「anchor」數據,爲了優化 anchor 數據和其正負樣本的關係,我們可以使用點積的方式構造距離函數,然後構造一個 softmax 分類器,以正確分類正樣本和負樣本。這應該鼓勵相似性度量函數(點積)將較大的值分配給正例,將較小的值分配給負例:

通常這個損失也被稱爲 InfoNCE (多麼炫酷的名字啊),後面的所有工作也基本是圍繞這個損失進行的。

DIM

我們首先介紹 ICLR 2019 的 DIM [23],DIM 的具體思想是對於隱層的表達,我們可以擁有全局的特徵(編碼器最終的輸出)和局部特徵(編碼器中間層的特徵),模型需要分類全局特徵和局部特徵是否來自同一圖像。所以這裏 x 是來自一幅圖像的全局特徵,正樣本是該圖像的局部特徵,而負樣本是其他圖像的局部特徵。這個工作的開創性很強,已經被應用到了其他領域,比如 graph [24]。

CPC

CPC 同樣是一個基於對比約束的自監督框架,主要是可以應用於能夠以有序序列表示的任何形式的數據:文本、語音、視頻、甚至圖像(圖像可以被視爲像素或塊的序列,後面作者也給出了具體的想法)。CPC 主要是利用自迴歸的想法,對相隔多個時間步長的數據點之間共享的信息進行編碼來學習表示,這個表示 c_t 可以代表融合了過去的信息,而正樣本就是這段序列 t 時刻後的輸入,負樣本是從其他序列中隨機採樣出的樣本。CPC的主要思想就是基於過去的信息預測的未來數據,通過採樣的方式進行訓練。

CMC

所以基於對比約束的自監督方法主要圍繞如何選取正負樣本, @慕容腹黑 大佬提出了利用多模態(多視角)的信息來構造樣本[26] ,一個樣本的多個模態爲正樣本,其他樣本的模態爲負樣本。我認爲這個工作還是很有啓發性的,很遺憾 ICCV2019 沒有中,真心希望這篇文章能夠有一個好的歸宿。

Memory Bank

對於具體的實現上,因爲存在大量的樣本,如何存取和高效的計算損失是急需解決的。研究人員提出了memory bank [27]的概念,也就是說我們把之前模型產生樣本特徵全部存起來,當前計算損失的時候直接拿來用就可以了,每次模型更新完後將當前的特徵重新更新到 memory bank 中,以便下一次使用。這個工作的缺點就在於每次需要將所有樣本的特徵全部存起來。後續 kaiming 大神提出的 Moco[28], 主要的貢獻是 Momentum Update、 shuffleBN 等技術點來優化這個過程。關於 Moco 知乎上已經有了很多的解釋了,推薦大家閱讀 [2],這裏我們就不展開介紹了。

SImCLR

最近 hinton 組又放出了 SimCLR[29],這個工作主要是對於一個輸入的樣本,進行不同的數據增廣方式,對於同一個樣本的不同增廣是正樣本,對於不同樣本的增廣是負樣本。整個過程比之前kaiming提出的動量對比(MoCo)更加的簡單,同時省去了數據存儲隊列。這個工作的創新主要有兩個:

  1. 在表徵層和最後的損失層增加了一個非線性映射可以增加性能 (這個地方我比較好奇,希望能有大佬給出更直觀的解釋)。

  2. 數據增廣對於自監督學習是有益的,不同數據增廣方式的結合比單一增廣更好。
    同時作者公佈了非常多的實驗經驗,比如自監督學習需要更大的 batch 和更長的訓練時間。

Discussion

通過閱讀這些經典工作,我自己的思考主要如下:

  • 找到合適的輔助任務(pretext)對於自監督學習是最需要解決的問題。

  • 數據和資源越多,自監督預訓練的效果會更好(Bert, MoCo, SimCLR)。

  • 自監督直接和具體任務的結合(Task Related Self-Supervised Learning)是個可探索的方向,已經在很多任務中初露頭角,也比較符合審稿人的口味。

夕小瑤的賣萌屋

_

關注&星標小夕,帶你解鎖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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章