博客專欄

EEPW首頁(yè) > 博客 > 一文讀懂自監(jiān)督學(xué)習(xí)

一文讀懂自監(jiān)督學(xué)習(xí)

發(fā)布人:計(jì)算機(jī)視覺(jué)工坊 時(shí)間:2022-11-19 來(lái)源:工程師 發(fā)布文章
作者丨Sherlock

來(lái)源丨Smarter 


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


圖片 


一、什么是 Self-Supervised Learning

 

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


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


二、Generative Methods


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


圖片

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

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


對(duì)于 generative methods,有一些問(wèn)題,比如:


  1. 基于 pixel 進(jìn)行重建計(jì)算開(kāi)銷非常大;

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


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

圖片

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


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


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


目前基于 contrastive 的方法已經(jīng)取得了很好的緊張,在分類任上已經(jīng)接近監(jiān)督學(xué)習(xí)的效果,同時(shí)在一些檢測(cè)、分割的下游任務(wù)上甚至超越了監(jiān)督學(xué)習(xí)作為 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)督學(xué)習(xí)呢,以及它能夠給我們帶來(lái)哪些幫助?


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


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


  1. 對(duì)于每一張圖片,機(jī)器預(yù)測(cè)一個(gè) category 或者是 bounding box

  2. 訓(xùn)練數(shù)據(jù)都是人所標(biāo)注的

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


于此對(duì)比的是,self-supervised learning 的特點(diǎn)如下:


  1. 對(duì)于一張圖片,機(jī)器可以預(yù)任何的部分

  2. 對(duì)于視頻,可以預(yù)測(cè)未來(lái)的幀

  3. 每個(gè)樣本可以提供很多的信息


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


五、Contrastive Predictive Coding 


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


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


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




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


基于這個(gè)觀察,論文對(duì) density ratio 進(jìn)行建模,這樣可以保留他們之間的互信息




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




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


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


首先將這個(gè) loss 函數(shù)變成概率的形式,最大化這個(gè)正樣本的概率分布,然后通過(guò) bayesian 公式進(jìn)行推導(dǎo),其中 X 是負(fù)樣本,和 以及 c 都無(wú)關(guān)。



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




有了這個(gè) loss,我們只需要采集正負(fù)樣本就可以了。對(duì)于語(yǔ)音和文本,可以充分利用了不同的 k 時(shí)間步長(zhǎng),來(lái)采集正樣本,而負(fù)樣本可以從序列隨機(jī)取樣來(lái)得到。對(duì)于圖像任務(wù),可以使用 pixelCNN 的方式將其轉(zhuǎn)化成一個(gè)序列類型,用前幾個(gè) patch 作為輸入,預(yù)測(cè)下一個(gè) 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


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

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


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

圖片

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


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


八、MoCo


有了上面這么多工作的鋪墊,其實(shí) contrastive ssl 的大框架已經(jīng)形成了,MoCo 這篇文章也變得很好理解,可以把 target x 看成第 i 張圖片的隨機(jī) crop,他的正樣本通過(guò)一個(gè) model ema 來(lái)得到,可以理解為過(guò)去 epochs 對(duì)這張圖片的 smooth aggregation。而負(fù)樣本則從 memory bank 里面拿,同時(shí) memory bank 的 feature 也是通過(guò) model ema 得到,并且通過(guò)隊(duì)列的形式丟掉老的 feature。

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


MoCo 通過(guò)工程的方式,和一些 trick,比如 model ema 和 shuffleBN 來(lái)解決之前沒(méi)法很好 sample 負(fù)樣本的問(wèn)題。 


九、SimCLR


最近,hinton 組也放了一篇做 ssl 的 paper,其實(shí)都是用的同一套框架,也沒(méi)有太多的 novelty。雖然摘要里面說(shuō)可以拋棄 memory bank,不過(guò)細(xì)看論文,訓(xùn)練的 batchsize 需要到幾千,要用32-128 cores 的 TPU,普通人根本用不起。


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


十、Results


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


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


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


Reference

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

deep infomax 和 深度學(xué)習(xí)中的互信息,https://zhuanlan.zhihu.com/p/46524857


本文僅做學(xué)術(shù)分享,如有侵權(quán),請(qǐng)聯(lián)系刪文。


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

LCD顯示屏相關(guān)文章:lcd顯示屏原理


led顯示器相關(guān)文章:led顯示器原理


lcd相關(guān)文章:lcd原理
全息投影相關(guān)文章:全息投影原理


關(guān)鍵詞: AI

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉