[ML筆記] Self-Supervised Learning (SSL)

 

Self-Supervised Learning (SSL)

本篇是台大電機王鈺強老師 DLCV 課程筆記
投影片 from 課程網站: http://vllab.ee.ntu.edu.tw/dlcv.html

Self-Supervised Learning (SSL)

用沒有 label 的 data 先 pretrain 再用有 label 的 data fine-tune
好處:label data 資料不夠時,可以用這招訓練 model

Self-Supervised Learning (SSL) 怎麼做?

  • PreText Tasks (自己對data製造合理的 label 下去 train)
    • Jigsaw
    • RotNet
  • Contrastive Learning (對比學習)
    • CPC
    • SimCLR
  • Learning w/o negative sample

PreText - RotNet

用不同角度的旋轉,分別作為不同類別下去 pretrain

PreText - Jigsaw Puzzle

如圖,圖片切成擷取九宮格,把九宮格順序打亂,把一種打亂的順序當作一種 label 下去 train

一種打亂的方式就對應到一種 one-hot vector 當做 ground-truth

Contrastive Predictive Coding(CPC)

想法:把照片切成很多 patches
同一張照片當中的 patches 當做 positive pair (正樣本)
不同張照片之間的 patches 當做 negative pair (負樣本)
去訓練模型可以 Max 正樣本的相似度,min 負樣本的相似度

Q: 這麼做,有什麼限制
A: 在挑 pair 的時候,可能會挑到不是重點的 patch,例如一張圖片我們任意切,隨機挑到的區塊可能只是個背景,這樣下去訓練正樣本 pair 與負樣本 pair 之間的 similarity 容易出問題;
因爲,即便是負樣本之間,如果剛好挑到的背景都是藍天白雲,那訓練時就會讓模型 容易 confuse。

SimCLR

接續上一段話題,
這次我們不做在圖片上切區塊的 patche-wise pair 之間的拉近跟推遠策略,
而是做 image-wise 之間的拉近與推遠策略!

作法:
把同一張照片,
透過 image augmentation 手法製造出另一張照片,這樣的 pair 做為 positive pair
在不同張照片之間做操作後產出來的 pair 為 negative pair
用這兩種 pair 下去 train,訓練模型可以區分出 pair 之間相似度的遠近

如圖,train 完後拿圖上 model 架構中比較 low-level 的 feature “f” 下去做 fine-tune

SimCLR 的實驗

Label 1% 的意思是,拿 99% 的 unlabeled 資料下去做 pretrain,拿 1% 的 label data 去做 fine-tune

Bootstrap Your One Latent (BYOL)

跟 SimCLR 的策略一樣,將一張原始圖片做 image augmentation 處理後產生新的圖下去 train 新產生的圖與原圖之間的 similarity

“No Need of neative pairs”
但與 SimCLR 不同點在於,BYOL 沒有做不同圖片之間的 “不相似的” similarity 訓練,只有訓練正樣本之間的 similarity

BYOL 架構跟 SimCLR 的比較

如圖,BYOL 左邊的 encoder (θS)直接透過算出來的 gradient 更新參數
BYOL 右邊的 encoder (θT)沒有直接透過 gradient 更新參數,而是用左邊 encoder (θS)在更新參數時,透過 EMA 某種比率(τ)上慢慢地更新參數

Exponential Movine Average (EMA): θTτθT+(1τ)θS

思考: SimCLR 架構中使用 shared encoder 有什麼問題,以至於 BYOL 要採用這樣的架構?
在 SimCLR 架構中,可能會發生 mode collapse 的問題,因為無論是原圖還是透過 augmentation 手法產生的新圖片,都會去透過 grad. 直接更新到 encoder 的參數,造成類似訓練 GAN 模型時會遇到的 mode collapse 問題,mode collapse 這種問題概念上來說,就是只會產生出自己看過的少許幾種表現形式,缺少 diversity

所以在 BYOL 的架構中,只有原圖輸入時的 grad 會直接更新參數,產生的圖片訓練時的 momentum encoder 不直接被訓練,而是透過(下圖BYOL)左邊的 encoder 間接透過一定的比率更新參數,可以提升輸出端的 diversity

Barlow Twins

接續上面一段的話題,這是另一種提升 diversity 的策略
概念如下圖說明

YA 跟 YB 都是透過原圖 X 產生出來的新圖片,兩張圖片分別作為 input 拿去訓練我們的神經網路 fθ,所分別產生的 embedding 為 ZA 與 ZB
接著相 ZA 與 ZB 做外積,可以得到一個矩陣 C 矩陣的長寬為 ZA 與 ZB 的 dimension
接著我們要讓這個矩陣的對角線方向的 feature 越接近 Identity Matrix I 越好

幫大家複習一下線性代數,所謂的 Identity Matrix I
就是除了對角線方向為 1 以外,其餘的數字為 0,例如:
Identity Matrix (3x3)
I3=[100010001]

原因是,對角線方向的 feature 是這兩張圖產生的 vector 與 vector 之間對於同一張圖片的相同特徵處的對應點,透過 Loss function 讓他們越接近 Identity 的好處是可以讓模型訓練時,可以分別聚焦在不同特徵的特性上,而不是讓整張 matrix 產生出來的圖片長得像就好,可以更聚焦在學習"特徵本身"上,這麼做的好處,以 “聚焦在特徵上” 的策略來得到增強 diversity 效果

以上是我個人學習筆記與心得,如有錯誤之處,歡迎路過的大大們不吝留言指教與討論,謝謝大家~

相關文章整理

留言

這個網誌中的熱門文章

[筆記] CRLF跟LF之區別 --- 隱形的 bug

[ML筆記] Batch Normalization

[筆記] 統計實習(1) SAS 基礎用法 (匯入資料並另存SAS新檔,SUBSTR,計算總和與平均,BMI)

[ML筆記] Ensemble - Bagging, Boosting & Stacking