博客專欄

EEPW首頁 > 博客 > 一文讀懂自監(jiān)督學習

一文讀懂自監(jiān)督學習

發(fā)布人:計算機視覺工坊 時間:2022-11-19 來源:工程師 發(fā)布文章
作者丨Sherlock

來源丨Smarter 


導讀:最近 self-supervised learning 變得非?;?,首先是 kaiming 的 MoCo 引發(fā)一波熱議,然后最近 Yann 在 AAAI 上講 self-supervised learning 是未來。所以覺得有必要了解一下 SSL,也看了一些 paper 和 blog,最后決定寫這篇文章作為一個總結(jié)。


圖片 


一、什么是 Self-Supervised Learning

 

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


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


二、Generative Methods


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


圖片

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

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


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


  1. 基于 pixel 進行重建計算開銷非常大;

  2. 要求模型逐像素重建過于苛刻,而用 GAN 的方式構(gòu)建一個判別器又會讓任務復雜和難以優(yōu)化。


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

圖片

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


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


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


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


下面是這兩類方法的總結(jié)圖片。


圖片

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


四、為什么需要 self-supervised learning


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


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


最后我們總結(jié)一下監(jiān)督學習和自監(jiān)督學習的特點,其中 supervised learning 的特點如下:


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

  2. 訓練數(shù)據(jù)都是人所標注的

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


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


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

  2. 對于視頻,可以預測未來的幀

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


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


五、Contrastive Predictive Coding 


第一篇文章是 Representation Learning with Contrastive Predictive Coding(https://arxiv.org/abs/1807.03748)。這篇文章主要是通過 contrastive 的方式在 speech, images, text 和 在reinforcement learning 中都取得了很好的效果。


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


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




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


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




對于這個 density ratio,可以構(gòu)建左邊的函數(shù) f 去表示它,只要基于函數(shù) f 構(gòu)造下面的損失函數(shù),優(yōu)化這個損失函數(shù)就等價于優(yōu)化這個 density ratio,下面論文會證明這一點。




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


下面我們證明如果能夠最優(yōu)化這個損失函數(shù),則等價于優(yōu)化了 density ratio,也就優(yōu)化了互信息。


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



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




有了這個 loss,我們只需要采集正負樣本就可以了。對于語音和文本,可以充分利用了不同的 k 時間步長,來采集正樣本,而負樣本可以從序列隨機取樣來得到。對于圖像任務,可以使用 pixelCNN 的方式將其轉(zhuǎn)化成一個序列類型,用前幾個 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


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

圖片

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


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


八、MoCo


有了上面這么多工作的鋪墊,其實 contrastive ssl 的大框架已經(jīng)形成了,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,普通人根本用不起。


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


十、Results


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


最后展示了不同方法的結(jié)果,可以看到在性能其實已經(jīng)逼近監(jiān)督學習的效果,但是需要 train 4x 的時間,同時網(wǎng)絡參數(shù)也比較大。


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


Reference

contrastive self-supervised learning,https://ankeshanand.com/blog/2020/01/26/contrative-self-supervised-learning.html

deep infomax 和 深度學習中的互信息,https://zhuanlan.zhihu.com/p/46524857


本文僅做學術分享,如有侵權,請聯(lián)系刪文。


*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。

LCD顯示屏相關文章:lcd顯示屏原理


led顯示器相關文章:led顯示器原理


lcd相關文章:lcd原理
全息投影相關文章:全息投影原理


關鍵詞: AI

相關推薦

技術專區(qū)

關閉