自監督式學習 Self-Supervised Learning for Computer Vision 之概述

李謦伊
謦伊的閱讀筆記
21 min readMay 2, 2022

機器學習演算法主要分為四種:監督式學習、非監督式學習、半監督式學習、強化學習。

  • 監督式學習 (Supervised Learning) 是指使用大量的標記資料進行訓練,應用的方向大致可分為分類、迴歸,為目前最常見的作法。
  • 非監督式學習 (Unsupervised Learning) 是指使用大量未標記的資料,藉由資料本身的特性找出潛在的規則,應用的方向有聚類、降維以及待會要介紹的自監督式學習 (Self-Supervised Learning)。
  • 半監督式學習 (Semi-Supervised Learning) 則是介於監督式學習和非監督式學習之間,結合少量的標記資料與其他大量未標記的資料一起使用,應用的方向有 Noisy StudentMeta Pseudo LabelsGenerative methods 等。
  • 強化學習 (Reinforcement Learning) 是透過獎懲的機制,讓機器在環境中進行 trial and error,並從中自我學習以取得最大的 Reward,應用的方向有 DQN、Temporal-Difference Learning 等。
source

由於資料標記的成本較高或是特定領域的資料取得不易,因此研究的方向逐漸關注於 Unsupervised Learning。而本文要介紹的 Self-Supervised Learning 就是屬於 Unsupervised Learning 的一種,透過挖掘大量無標記資料中本身的資訊,人為地製造標籤(pretext),如此一來就可以使用監督式學習的方式進行訓練,如同其名為通過自己來監督自己。目的是希望模型能夠學習到資料中的通用 representation,並應用至不同的下游任務裡。

作法如下圖所示,訓練步驟會分為兩部分,首先用這些未標記資料訓練一個初步的模型產生出一種通用的 Representation,接著再根據下游任務使用少量的有標籤資料 fine-tune (這邊僅需要少量有標籤資料是因為模型在第一部分時就已經將參數訓練得差不多了)。

source

Self-Supervised Learning 主要分為五種:Generative methods、Predictive methods、Contrastive methods、Booststrapping methods、Simply Extra Regularization methods

Generative methods

藉由訓練模型在 pixel space 的重建能力,以得到對於圖像理解的語義訊息。換句話說就是先將圖像上的某些 pixel 進行 mask,讓模型能夠還原回原來的圖像內容。

例如 Image Inpainting 的方法,使用 based on AutoEncoder 的模型 — Context Encoders 根據圖像缺失部分的周圍環境生成出合理的假設。

source

也可以利用 NLP 的模型如 BERT、GPT 來做到類似的事情,首先把圖像拉成一維再送入模型,下圖 (a) 是使用 GPT 來進行訓練,作法是使用某一段 pixel 來預測下一段 pixel;下圖 (b) 則是使用 BERT,作法是將這一維圖像中的某幾個 pixel mask 起來,讓模型去預測這些被 mask 的 pixel,接著就能將這些模型應用至下游任務中,詳細部分可參考 Image GPT 官方網站

source

Predictive methods

由於模型僅基於 pixel 生成出 high-level representation 是比較困難的任務,並且運算開銷也很大,因此希望能採用其他不重建圖像的方式。Predictive methods 不需重建圖像,而是藉由對圖像做各種變換,再讓模型還原回來。

其中較著名的論文之一為 ICCV 2015 的 Unsupervised Visual Representation Learning by Context Prediction,透過在圖像中選定兩個 patch,並利用其中一個 patch 來預測另一個 patch 的相對位置。

之二為 ECCV 2016 的 Unsupervised Learning of Visual Representations by Solving Jigsaw Puzzles,概念與上篇的論文相似,也是需要在圖像中選定一些 patch,差別在於選定的 patch 總共有九個。接著將這些 patch 的順序打亂,期望模型能夠識別該 patch 的組成分布,因而排列出正確的順序,如同其名是一個類似拚拼圖的問題。

之三為 ICLR 2018 的 Unsupervised Representation Learning by Predicting Image Rotations,該方法非常地簡單且有效,僅將圖像做了四次的旋轉 (0, 90, 180, 270 角度),再讓模型預測是旋轉幾度後的結果。

最後則是使用 Cluster 的方式結合 CNN,並進行 end to end 的訓練,在 ImageNet classification 和其他 transfer learning tasks 上都獲得了很好的結果。

這邊討論兩篇相關論文,首先是 ECCV 2018 的 Deep Clustering for Unsupervised Learning of Visual Features,使用 k-means 對大量未標記的資料進行訓練得到 Pseudo-labels,再用 Supervised Learning 的方式去學習。

第二篇是 ICLR 2020 的 Self-labelling via simultaneous clustering and representation learning,在該篇論文中加入了 constraint — 所有樣本預測的 label 分布要盡可能地平均分配,因為 Clustering 演算法得到的 Pseudo-labels 不一定是正確的,可能會產生某個類別佔了大多數的情況。

Contrastive methods

Contrastive Learning 目前在 Self-Supervised Learning 中最為廣泛運用,其概念為相同類別的圖像間的相似度越高越好 (即距離盡可能地近),不同類別的圖像相似度越低越好 (即距離盡可能地遠),模型架構主要是使用 Siamese Network。

Siamese Network

但我們的資料並沒有標籤,該怎麼區分哪些圖像是相同類別呢?因此我們先對圖像做各種 data augmentation 後,再讓模型去預測經過 data augmentation 後的圖像與原圖之間的相似度,該結果要越高越好,同時對其他圖的預測則是越低越好。

source

代表作有 FAIR 提出的 MoCov1MoCov2MoCov3,Google Brain 提出的 SimCLRv1SimCLRv2,這邊僅介紹 MoCov1 及 SimCLRv1,若想了解更詳細的內容可參考其論文和以下我覺得寫得滿好的文章:

MoCov1

主要貢獻為提出 Dictionary as a queue、Momentum Encoder、Shuffling BN

從過往的實驗結果中可知使用更多的負樣本來訓練能得到更好的結果,但負樣本的數量與 batch size 成正比,而 batch size 越大會需要越多的運算成本,因此沒辦法使用太大的 batch size。為了解決難以運用大量負樣本的問題採用了 Dictionary as a queue 的方式,就是將原本的 memory bank (用於保存所有資料的 representation) 改成 queue 的形式來儲存。

Dictionary as a queue 的作法為每個 epoch 會 enqueue 一個 batch 的 representation,並 dequeue 保存最久的一個 batch 的 representation,如此一來這個 queue dictionary 的總數不會隨著 epoch 而變大,不會占用太多的記憶體及運算成本。

Momentum Encoder 是指下圖 (c) 中 key encoder 參數 θ_k 的更新方式改為 query encoder 參數 θ_q 的移動平均,目的是為了讓 queue dictionary 中的數據保持一致性,公式如下

在提出 Momentum Encoder 之前的參數更新是使用下圖 (b) 的更新方法,對於樣本 x_q 做 data augmentation 得到正樣本、從 memory bank 中抽取出 k 個作為負樣本後,再去計算 Contrastive loss 並更新 θ_q 和這些負樣本的 key 值 (即 k 值),這邊並不會去做 key encoder 參數 θ_k 的反向傳播。這樣的作法會導致某些 key 值在很多次迭代後才被採樣並更新,但 query encoder 每次都會更新,以至於抽取出的樣本與當前的 query encoder 沒有一致性。

Shuffling BN 是針對於 Data Leakage 的解決方法,因為模型能透過每個 batch 間計算的平均數和變異數找到一些資訊而導致 Data Leakage 的現象。因此在訓練前會先將樣本的順序打亂,提取特徵後再恢復原本的順序。

SimCLRv1

主要貢獻為提出 Data augmentation combination 的想法、增加 Projection head、NT-Xent loss function

其思路非常簡單,首先抽取一些圖像組成一個 batch,將 batch 裡的圖像做不同的 data augmentation,其中包括 random crop、color distortion、Gaussian blur,接著進行 Contrastive Learning,即區分是否為相同的圖像。

對於 Data augmentation,論文提到只單純用 random crop 沒太大效果,需要結合 color distortion,這是因為 random crop 後的圖像與原本圖像在 pixel value 的分布差異不大 (下圖左)。同時也實驗了使用兩種 data augmentation combination 的結果會更好 (下圖右)。

SimCLRv1 的整體流程如下圖所式,由 Encoder 得到的 representation 會再經過 Projection head 映射到較低維的空間中,得到新的 representation z_i、z_j。該 Projection head 是一個兩層的 MLP,只在 Self-Supervised Learning 訓練時使用,其作用為去除 Encoder 中 data augmentation 後的資訊,僅關注於原本數據的訊息。

當要在下游任務上進行 Fine-tune 時就不會使用到 Projection head,會另外接一層 Non-Linear Classifier。

source

NT-Xent loss function (Normalized Temperature-Scaled Cross-Entropy Loss) 的計算方式分為三個步驟:

  • 計算一組 pair 間的相似度,並且每一個 batch 中的所有 pair 都要計算 (每次只計算一個 batch 是為了降低運算量)。
  • 計算正樣本 pair 的相似度機率,分子為正樣本相似度、分母為所有正、負樣本的相似度之和。值得注意的是對於同一個 pair 需要交換順序再計算一次。公式中的 N 表示為一個 batch 所擁有的圖像張數,經過 data augmentation 後會有 2N 張圖像。
  • 將每一個 batch 中的所有 pair 計算出來的 loss 加總取平均
source1, source2

Booststrapping methods

由於 Contrastive methods 需要選取負樣本且其資料特性不能夠太簡單,也不能太難,因此如何選擇負樣本是一個困難的問題。

負樣本的主要貢獻在於避免發生 model collapse 的現象,若訓練資料只有正樣本,模型會傾向得到 trivial solution。這句話的意思就是指不論輸入什麼樣的圖像,模型的兩個分支皆輸出一模一樣的 representation 以得到最高的相似度。

那有沒有辦法是不使用負樣本的呢? 以下來介紹兩篇相關論文:BYOLSimSiam

BYOL (Bootstrap your own latent)

主要貢獻為新增 predictor、使用 exponential moving average、batch normalization、L2 loss

BYOL 的模型架構與 MoCov2 類似,MoCov2 是基於 MoCov1 融合 SimCLRv1 的作法,加入 Projection head 以及更多的 data augmentation (增加了 blur augmentation)。

整體流程如下:

  • 先將影像 x 做兩種不同的 data augmentation t, t′,分別送入不同的分支,其中一個分支稱為 online (該分支多加了 prediction 層)、另一個稱為 target。
  • 各自經過 view (得到 data augmentation 後的結果 v, v′)、representation (經過 encoder f_θ, f_ξ 得到 representation y_θ, y′_ξ)、projection (經過 Projection head g_θ, g_ξ 映射到較低維的空間)。
  • 在 online 分支會再經過一層 prediction (為一個兩層的 MLP),接著與 target 分支的輸出 z′_ξ 計算 loss。BYOL 的 loss function 使用 L2 loss (下式1),另外也跟 SimCLRv1 一樣會交換順序再計算一次 (下式2)。
  • 與 MoCo 相同,loss 只會反向傳播給 online 分支 (下式3),而 target 分支的參數是由 online 分支參數 θ 的 exponential moving average (下式 4) 的方式來更新,下圖中的 sg 指 stop-gradient。

這樣的設計方式能防止 model collapse 的關鍵在於新增 predictor 和 stop-gradient 並使用 exponential moving average 來更新 target 分支,讓兩個分支的架構及參數不完全相同,模型較難以往 trivial solution 的方向走。

除此之外,還有一個大功臣 — 在 Projection head 中加入了 batch normalization。看下圖 BYOL 和 MoCov2 的比較,BYOL 的 Projection、predictor 都使用相同的 MLP 架構,而 MLP 中多新增了 batch normalization。

Understanding Self-Supervised and Contrastive Learning with “Bootstrap Your Own Latent” (BYOL) 一文中實驗了各種 batch normalization 的 ablation study,發現若不使用 batch normalization 就相當於 random 的結果,並猜測使用 batch normalization 是一種隱性的 Contrastive Learning。意思是指這樣的操作就是將 batch 中的每個圖像與 batch 的圖像平均做比較,而 batch 中的其他圖像為當前圖像的負樣本。

source

基於這個觀點,原文作者發表了一篇研究 BYOL works even without batch statistics 來解釋。作者認為 batch normalization 之所以有效是因為能讓模型有合適的初始化參數,以至於使得訓練更穩定,並實驗使用 Group normalization 和 weight standardization 也能有相同效果。

SimSiam (Simple Siamese)

主要貢獻為使結構更加簡潔,不須使用 negative sample pairs、large bacthes、momentum encoders

SimSiam 由 FAIR 所提出,其模型架構與 BYOL 非常相似,去除了使用 exponential moving average 的更新方式,直接使用 Siamese network,即兩分支的 encoder f 共享參數,如下圖和 Pseudocode 可看出整體結構更簡潔。

Architecture

作者做了一系列的 ablation study 來分析讓模型免於 collapse 的原因,例如:有無使用 stop-gradient、Predictor、Batch size (64~4096)、Batch Normalization、Similarity Function、分支結構對稱與否 (Symmetrization/ Asymmetrization/Asymmetrization 2x),大多無可避免影響準確度,除了拿掉 stop-gradient 或 Predictor 之外,其他操作並不會造成 model collapse 的現象。

作者認為最關鍵的主因在 stop-gradient,相當於引入了額外的變量,讓 SimSiam 的實現類似於 Expectation-Maximization (EM) 演算法,並針對這個假設做實驗來驗證。

在該假設下的 loss function (下式 5) 中 F_θ 為 encoder f、τ 為 data augmentation、η 為引入的額外變量 (下標 x 是指圖像 x,這邊可以將 η_x 想像成是 stop-gradient 分支的 representation),接著針對該 loss function 進行優化 (下式 6),期望能最小化兩分支 encoder 輸出的距離的期望值。

首先固定 η 求解 θ (下式 7),再固定 θ 去求解 η (下式 8),反覆迭代進行訓練,目標是得到下式 11 的結果 (將 η_x 代入至下式 5、6,並找出最佳參數 θ)。由於 η_x 是圖像 x 的 representation,因此可寫成如下式 9 的樣子,下式 10 就是指使用不同 data augmentation。

Simply Extra Regularization methods

除了 Booststrapping methods 外,Simply Extra Regularization methods 也能夠在不使用負樣本的情況下,取得優秀的結果。概念為從 representation 本身挖掘更多的資訊去學習,在訓練過程中加上一些 regularization,讓正樣本經過 data augmentation 後的兩個 representation 間越相似越好。

以下來介紹兩篇相關論文:SwAVBarlow Twins

SwAV (Swapping Assignments between Views)

主要貢獻為提出 Prototypes、Multi-crop strategy

在 Contrastive Learning 的基礎上結合 clustering,不直接比較 representation,而是比較不同視角 (View) 下的聚類結果 (clustering assignments),並且該結果可以互相交換預測 (Swapping)。

兩者的差異如下圖,在 SwAV 的作法中會將 representation z_i 與 Prototypes C 做內積後再進行 softmax,計算出相似程度得到 Codes Q,接著交叉預測不同 View 的 Codes,其中 Prototypes 為 clustering 中心。

loss function 定義為交叉預測結果之和

loss function

此外,提出了新的 data augmentation 方法 — Multi-crop,由 2 個較大的 crops 和 V 個較小的 crops 所組成 (ex: 2 個 160 resolution+4 個 96 resolution),能夠學習更局部的特徵、提升正樣本的數量,也不會增加計算量。由下圖的實驗結果可得知採用 Multi-crop 能增加 4% 的準確率,而且不只在 SwAV 有效,對於其他的 SSL 方法也有很大的幫助。

以下是各個 Siamese architectures 的比較圖,可看出這些模型的結構都非常類似。

Barlow Twins

主要貢獻為提出 cross-correlation matrix

前半部與 Contrastive Learning 相同,後半部則是對 batch 中的所有圖像提取的 representations (即下圖的 Embeddings) 去計算 cross-correlation matrix,並期望該 matrix 近似 identity matrix,也就是對角線上的值為 1,其餘的值為 0。如此一來,可以表示為相同樣本在不同 data augmentation 下所得到的 representation 非常相近,而不同樣本則會越遠。

loss function 定義如下:

  • invariance term 為讓在對角線上的元素盡可能地為 1
  • redundancy reduction term 為讓不在對角線上的元素盡可能地為 0
  • λ 用於調節這兩項的 trade-off

以上是我對於 SSL 的一些統整與理解,很大部分的論文是 based on Contrastive Learning 的思想做更深入的研究。而在 Vision Transformer (ViT) 問世後,有更多針對 ViT 架構去訓練的方法,如 MoCo v3DINOMasked Autoencoders (MAE)iBOT 等,在 MoCo v3 中還有談到如何使用 trick 以更加穩定的訓練 ViT (fixed random patch projection layer),非常值得一讀。

--

--