一文詳解最近異常火熱的self-supervised learning

2021-12-25 RUC AI Box
知乎連結:https://zhuanlan.zhihu.com/p/108625273

本文轉載自公眾號:深度學習技術前沿                             

【導讀】最近 self-supervised learning 變得非常火,首先是 kaiming 的 MoCo 引發一波熱議,然後最近 Yann 在 AAAI 上講 self-supervised learning 是未來。所以覺得有必要了解一下 SSL,也看了一些 paper 和 blog,最後決定寫這篇文章作為一個總結。什麼是 Self-Supervised Learning

首先介紹一下到底什麼是 SSL,我們知道一般機器學習分為監督學習,非監督學習和強化學習。而 self-supervised learning 是無監督學習裡面的一種,主要是希望能夠學習到一種通用的特徵表達用於下遊任務。其主要的方式就是通過自己監督自己,比如把一段話裡面的幾個單詞去掉,用他的上下文去預測缺失的單詞,或者將圖片的一些部分去掉,依賴其周圍的信息去預測缺失的 patch。

根據我看的文章,現在 self-supervised learning 主要分為兩大類:1. Generative Methods;2. Contrastive Methods。下面我們分別簡要介紹一下這這兩種方法。

Generative Methods

首先我們介紹一下 generative methods。這類方法主要關注 pixel space 的重建誤差,大多以 pixel label 的 loss 為主。主要是以 AutoEncoder 為代表,以及後面的變形,比如 VAE 等等。對編碼器的基本要求就是儘可能保留原始數據的重要信息,所以如果能通過 decoder 解碼回原始圖片,則說明 latent code 重建的足夠好了。

source: [Towards Data Science](https://towardsdatascience.com/generating-images-with-autoencoders-77fd3a8dd368)

這種直接在 pixel level 上計算 loss 是一種很直觀的做法,除了這種直接的做法外,還有生成對抗網絡的方法,通過判別網絡來算 loss。

對於 generative methods,有一些問題,比如:

基於 pixel 進行重建計算開銷非常大;

要求模型逐像素重建過於苛刻,而用 GAN 的方式構建一個判別器又會讓任務複雜和難以優化。

從這個 blog 中我看到一個很好的例子來形容這種 generative methods。對於一張人民幣,我們能夠很輕易地分辨其真假,說明我們對其已經提取了一個很好的特徵表達,這個特徵表達足夠去刻畫人民幣的信息, 但是如果你要我畫一張一模一樣的人民幣的圖片,我肯定沒法畫出來。通過這個例子可以明顯看出,要提取一個好的特徵表達的充分條件是能夠重建,但是並不是必要條件,所以有了下面這一類方法。

source: [blog](https://ankeshanand.com/blog/2020/01/26/contrative-self-supervised-learning.html)Contrasive self-supervised learning

除了上面這類方法外,還有一類方法是基於 contrastive 的方法。這類方法並不要求模型能夠重建原始輸入,而是希望模型能夠在特徵空間上對不同的輸入進行分辨,就像上面美元的例子。

這類方法有如下的特點:1. 在 feature space 上構建距離度量;2. 通過特徵不變性,可以得到多種預測結果;3. 使用 Siamese Network;4. 不需要 pixel-level 重建。正因為這類方法不用在 pixel-level 上進行重建,所以優化變得更加容易。當然這類方法也不是沒有缺點,因為數據中並沒有標籤,所以主要的問題就是怎麼取構造正樣本和負樣本。

目前基於 contrastive 的方法已經取得了很好的緊張,在分類任上已經接近監督學習的效果,同時在一些檢測、分割的下遊任務上甚至超越了監督學習作為 pre-train的方法。

下面是這兩類方法的總結圖片。

source: [blog](https://ankeshanand.com/blog/2020/01/26/contrative-self-supervised-learning.html)為什麼需要 self-supervised learning

上面我們講了什麼是 self-supervised learning,那麼為什麼我們需要自監督學習呢,以及它能夠給我們帶來哪些幫助?

在目前深度學習發展的情況下,對於監督學習,我們希望使用更少的標註樣本就能夠訓練一個泛化能力很好的模型,因為數據很容易獲取,但是標註成本卻是非常昂貴的。而在強化學習中,需要大量的經驗對 agent 進行訓練,如果能搞減少 agent 的嘗試次數,也能夠加速訓練。除此之外,如果拿到一個好的特徵表達,那麼也有利於做下遊任務的 fintuen和 multi-task 的訓練。

最後我們總結一下監督學習和自監督學習的特點,其中 supervised learning 的特點如下:

對於每一張圖片,機器預測一個 category 或者是 bounding box

訓練數據都是人所標註的

每個樣本只能提供非常少的信息(比如 1024 個 categories 只有 10 bits 的信息)

於此對比的是,self-supervised learning 的特點如下:

對於一張圖片,機器可以預任何的部分

對於視頻,可以預測未來的幀

每個樣本可以提供很多的信息

所以通過自監督學習,我們可以做的事情可以遠超過監督學習,也難怪 Yann 未來看好 self-supervised learning。目前出現的性能很好的文章主要是基於 contrastive 的方法,所以下面我們介紹幾篇基於 contrastive 方法的文章。

Contrastive Predictive Coding

第一篇文章是 Representation Learning with Contrastive Predictive Coding。這篇文章主要是通過 contrastive 的方式在 speech, images, text 和 在reinforcement learning 中都取得了很好的效果。

從前面我們知道,由一個原始的 input 去建模一個 high-level representation 是很難的,這也是自監督學習想做的事情。其中常用的策略是:future,missing 和 contextual,即預測未來的信息,比如 video 中當前幀預測後面的幀;丟失的信息或者是上下文的信息,比如 NLP 裡面的 word2vec 和 BERT。

對於一個目標 x 和他的上下文 c 來說,直接去建模輸出 p(x|c) 會損失很多信息,將 target x 和 context c 更合適的建模方式是最大化他們之間的 mutual information,即下面的公式

優化了他們之間的互信息,即最大化  ,說明  要遠大於  ,即在給定 context c 的情況下, 要找到專屬於 c 的那個 x,而不是隨機採樣的 x。

基於這個觀察,論文對 density ratio 進行建模,這樣可以保留他們之間的互信息

對於這個 density ratio,可以構建左邊的函數 f 去表示它,只要基於函數 f 構造下面的損失函數,優化這個損失函數就等價於優化這個 density ratio,下面論文會證明這一點。

而這個損失函數,其實就是一個類似交叉熵的函數,分子是正樣本的概率,分母是正負樣本的概率求和。

下面我們證明如果能夠最優化這個損失函數,則等價於優化了 density ratio,也就優化了互信息。

首先將這個 loss 函數變成概率的形式,最大化這個正樣本的概率分布,然後通過 bayesian 公式進行推導,其中 X 是負樣本,和  以及 c 都無關。

通過上面的推導,可以看出優化這個損失函數其實就是在優化 density ratio。論文中把 f 定義成一個 log 雙線性函數,後面的論文更加簡單,直接定義為了 cosine similarity。

有了這個 loss,我們只需要採集正負樣本就可以了。對於語音和文本,可以充分利用了不同的 k 時間步長,來採集正樣本,而負樣本可以從序列隨機取樣來得到。對於圖像任務,可以使用 pixelCNN 的方式將其轉化成一個序列類型,用前幾個 patch 作為輸入,預測下一個 patch。

source: [blog](https://ankeshanand.com/blog/2020/01/26/contrative-self-supervised-learning.html)source: [Representation Learning with Contrastive Predictive Coding](https://arxiv.org/abs/1807.03748)Deep InfoMax

通過上面的分析和推導,我們有了這樣一個通用的框架,那麼 deep infomax 這篇文章就非常好理解了,其中正樣本就是第 i 張圖片的 global feature 和中間 feature map 上個的 local feature,而負樣本就是另外一張圖片作為輸入,非常好理解。

source: [Learning deep representations by mutual information estimation and maximization](https://arxiv.org/abs/1808.06670)Contrastive MultiView Coding

除了像上面這樣去構建正負樣本,還可以通過多模態的信息去構造,比如同一張圖片的 RGB圖 和 深度圖。CMC 這篇 paper 就是從這一點出發去選擇正樣本,而且通過這個方式,每個 anchor 不僅僅只有一個正樣本,可以通過多模態得到多個正樣本,如下圖右邊所示。

source: [Contrastive Multiview Coding](http://arxiv.org/abs/1906.05849)

現在我們能夠拿到很多正樣本,問題是怎麼獲得大量的負樣本,對於 contrastive loss 而言,如何 sample 到很多負樣本是關鍵,mini-batch 裡面的負樣本太少了,而每次對圖片重新提取特徵又非常的慢。雖然可以通過 memory bank 將負樣本都存下來,但是效果並不好,所以如何節省內存和空間獲得大量的負樣本仍然沒有很好地解決。

MoCo

有了上面這麼多工作的鋪墊,其實 contrastive ssl 的大框架已經形成了,MoCo 這篇文章也變得很好理解,可以把 target x 看成第 i 張圖片的隨機 crop,他的正樣本通過一個 model ema 來得到,可以理解為過去 epochs 對這張圖片的 smooth aggregation。而負樣本則從 memory bank 裡面拿,同時 memory bank 的 feature 也是通過 model ema 得到,並且通過隊列的形式丟掉老的 feature。

source: [Momentum Contrast for Unsupervised Visual Representation Learning](https://arxiv.org/abs/1911.05722)

MoCo 通過工程的方式,和一些 trick,比如 model ema 和 shuffleBN 來解決之前沒法很好 sample 負樣本的問題。

SimCLR

最近,hinton 組也放了一篇做 ssl 的 paper,其實都是用的同一套框架,也沒有太多的 novelty。雖然摘要裡面說可以拋棄 memory bank,不過細看論文,訓練的 batchsize 需要到幾千,要用32-128 cores 的 TPU,普通人根本用不起。

不過這篇文章系統地做了很多實驗,比如探究了一下數據增強的影響,以及的 projection head 的影響等,不過也沒有從理論上去解釋這些問題,只是做了實驗之後獲得了一些結論。

Resultssource: [A Simple Framework for Contrastive Learning of Visual Representations](https://arxiv.org/abs/2002.05709)

最後展示了不同方法的結果,可以看到在性能其實已經逼近監督學習的效果,但是需要 train 4x 的時間,同時網絡參數也比較大。

雖然性能沒有超過監督學習,不過我認為這仍然給了我們很好的啟發,比如訓練一個通用的 encoder 來接下遊任務,或者是在 cross domain 的時候只需要少量樣本去 finetune,這都會給實際落地帶來收益。

Reference

contrastive self-supervised learning

https://link.zhihu.com/?target=https%3A//ankeshanand.com/blog/2020/01/26/contrative-self-supervised-learning.html

deep infomax 和 深度學習中的互信息:

https://zhuanlan.zhihu.com/p/46524857

相關焦點

  • Self-supervised Learning入門
    收錄於話題 #self-supervised         自監督學習(Self-supervised)的思想,簡單來說,就是在只有一堆無監督的數據時,通過數據本身的結構或者特性,人為構造標籤(pretext
  • Self-Supervised Learning in Computer Vision
    來自 | 知乎作者 | NoahSYZhang地址 | https://zhuanlan.zhihu.com/p/336933815編輯 | 機器學習算法與自然語言處理公眾號本文僅作學術分享,若侵權,請聯繫後臺刪文處理最近在組會討論
  • 【機器學習基礎】Self-Supervised Learning入門介紹
    最近 self-supervised learning 變得非常火,首先是 kaiming 的 MoCo 引發一波熱議,然後最近 Yann 在 AAAI 上講 self-supervised learning 是未來。
  • 【綜述專欄】Self-supervised Learning
    https://zhuanlan.zhihu.com/p/212873650supervised learning在過去的十年裡取得了巨大的成功,但是他對數據的依賴和易於攻擊的特點促使人們尋找更好的解決方案。作為一種替代方法,自監督學習(SSL)近年來因其在表示學習方面的卓越表現而吸引了許多研究者。自監
  • 一文讀懂 Self-Supervised Learning
    導讀:最近 self-supervised learning 變得非常火,首先是 kaiming 的 MoCo 引發一波熱議,然後最近 Yann 在 AAAI 上講 self-supervised learning 是未來。所以覺得有必要了解一下 SSL,也看了一些 paper 和 blog,最後決定寫這篇文章作為一個總結。
  • 春節充電系列:李宏毅2017機器學習課程學習筆記12之半監督學習(Semi-supervised Learning)
    本文內容涉及機器學習中半監督學習的若干主要問題:semi-supervised learning for generative model, low-density separation assumption, smoothness assumption以及better representation。話不多說,讓我們一起學習這些內容吧 。
  • 自監督學習(Self-supervised Learning)
    前段時間在杭州參加華爾茲,和小團體分別兩年後成功再聚首。
  • 【自監督學習】Self-supervised Learning 再次入門
    唉,這個時代,已經不僅僅是做科研需要手速了,在知乎寫分享也要快 :(本文通過整理自監督學習的一系列工作,把主流方法分成三大類,方便大家更全面的了解自監督學習的定義、方法、用途。學習的範式我們首先來回顧下機器學習中兩種基本的學習範式,如圖所示,一種是監督學習,一種是無監督學習。
  • DivideMix:Learning with Noisy Labels as Semi-supervised Learning
    損失函數設計訓練過程中,有標籤集採用交叉熵損失,無標籤集採用均方誤差損失。
  • 自監督學習(Self-Supervised Learning) 2018-2020年發展綜述
    不僅在AAAI 上 LeCun, Bengio 與 Hinton 都對這領域寄與厚望;最近發表的文章也顯示 SSL 得到的模型表現在 ImageNet dataset 上逐漸逼近了傳統 Supervised Learning 的表現了。
  • 一文掌握《對比學習(Contrastive Learning)》要旨,詳述MoCo和SimCLR算法
    "An empirical study of training self-supervised visual transformers." arXiv preprint arXiv:2104.02057 (2021).[5]Chen, Ting, et al.
  • 長文總結半監督學習(Semi-Supervised Learning)
    consistency targets improve semi-supervised deep learning results論文連結:https://arxiv.org/abs/1703.01780代碼連結:
  • 2021最新對比學習(Contrastive Learning)相關必讀論文整理分享
    本資源整理了最近幾年對比學習相關論文,需要的朋友自取。資源整理自網絡,資源獲取見源地址:https://github.com/asheeshcric/awesome-contrastive-self-supervised-learning
  • self-supervised系列-何凱明的MoCo
    But supervised pre-training is still dominant in computer vision, where unsupervised methods generally lag behind.   現在CV中,有監督的預訓練仍舊是主流,無監督方向大有潛力。
  • Multi-task Learning and Beyond: 過去,現在與未來
    在 supervised auxiliary learning 的 setting 中,整個網絡和任務的選擇非常依賴於人類的先驗知識,並不具備絕對的普遍性。Meta Auxiliary Learning考慮 supervised auxiliary learning 對於任務選擇的局限性,我後續提出了一種基於 meta learning 的方法來自動生成
  • 名著導讀 | Deep learning
    In computer science, computational learning theory (or just learning theory) is a subfield of artificial intelligence devoted to studying the design and analysis of machine learning algorithms.
  • ICLR 2021 | Group-Supervised Learning: 通過可控的解耦表徵學習模擬人腦想像力
    https://openreview.net/pdf?圖1 Group-Supervised Learning 零鏡頭生成(zero-shot synthesis)效果下面將詳細介紹工作的具體內容。一、Motivation 靈長類動物(人類)往往在泛化的任務(generalization task)上表現很好,當看到一個物體,他們可以立即想像出同一個物體在不同屬性時的樣子,比如不同的 3D pose[1],即使他們從未見過。
  • 淺談學習技能|自我調節Self-regulation
    Pre-service teachers' self-regulated learning and their developing concepts of SRL. Brock Education, 23(1), 58-76.Cambron, C., Kosterman, R., Catalano, R. F., Guttmannova, K., Herrenkohl, T.
  • 異常檢測(Anomaly Detection)綜述
    半監督Semi-supervised DAD由於正常數據集比異常數據集更好獲得,所以半監督學習DAD方法被非常廣泛的使用,擁有了足夠的數據集,我們能更好地標出正常數據,異常數據,新數據的界限,半監督學習模型列舉三篇論文。
  • 【一分鐘論文】輕鬆解讀Semi-supervised Sequence Learning半監督序列學習
    跟隨小博主,每天進步一丟丟最近師兄在寫這個評測論文,我也在幫忙準備下實驗數據。昨天師兄發現了一個極其簡單的半監督方法論文,挺後悔這麼簡單當初沒用上。今天就來說說這個很簡單的論文。給還不了解的小夥伴普及下半監督和無監督哈:半監督semi-supervised半監督學習(Semi-Supervised Learning,SSL)是模式識別和機器學習領域研究的重點問題,是監督學習與無監督學習相結合的一種學習方法。半監督學習使用大量的未標記數據,以及同時使用標記數據,來進行模式識別工作。