本文接續前文繼續介紹一些近年來熱門的 visual self-supervised learning 的論文。
SimCLR v2
本文最主要做的事情是實驗 "unsupervised pre-train, supervised fine-tune" 的方法。以下為文章中的示意圖 [1]:
方法分成三步:
- 利用一個較大的 CNN 來訓練 unsupervised pre-train 模型,而模型的細節與前文的 SimCLR 差不多,只是在 projection head 變成三層。
- 拿 projection head 的第一層以及少數的標註資料來 fine-tuning。
- 通過未標註的資料對模型進行蒸餾並轉移到特定的任務上。
實驗的結果顯示在只使用 1% 的標註資料之下能與 100% 的 supervised learning 方法達到相同的效果。
BYOL
前面介紹的一些方法都需要負樣本,而 BYOL [2] 提出的方法則不再需要負樣本了。負樣本的存在是 contrastive learning 的基礎,因此像 MoCo 與 SimCLR 都在努力提升負樣本的數量。本文提出的模型與 MoCo 非常相似,但是加入一些工程細節以後不需要負樣本也可以訓練出很好的模型。以下為架構圖:
而用到的工程細節包含:
- Exponential Moving Average 更新下方網路的參數。
- Predictor 網路增加了靈活性。
- Batch Normalization 其實隱含了contrastive learning 的精神,因為每一張圖片都會與同 batch 中的其他圖片作比較。
SwAV
SwAV [3] 一樣也是一種不需要負樣本的方法,以下為架構圖:
此方法的精神在於同一張圖片\(X\) 的 multi-crop 後的圖片 \(x_t, x_s\) 的特徵向量應該可以由類似的 cluster codes 來表示。Loss function 為以下函數:
Code \(q_s\) 是從 z_s (第一個 crop 的特徵向量)跟 cluster C 產生的,而 \(p_t\) 是由第二個 crop 的特徵向量與 C 求出的 softmax 結果,因此本式的意思是同一張圖片不管怎麼 crop,其一支 code 得跟另一支求出來的 softmax 係數相符合,而整個系統的 loss function 會把兩種可能相加起來:\[L = l(z_t, q_s) + l(z_s, q_t)\]而 code Q 的設計是要讓 feature z 與 cluster 的 prototype c 越接近越好,因此用此式來求解:\[Q = argmax\ Tr(Q^T C^T Z) + \epsilon H(Q)\] 其中 H(Q) 為 Q 的 entropy。而在實務上用的是迭代的近似解 Sinkhorn-Knopp algorithm:\[Q* = Diag(u)exp(\frac{C^T Z}{\epsilon})Diag(v)\]其中 u 與 v 是用來 normalization 的向量。實驗結果表示只要迭代三次就能得到不錯的 Q 了。SimSiam
SimSiam [4] 藉由更多工程的技巧將前面介紹的模型架構簡化了,以下為不同模型的比較圖:
只用一句話來描述 SimSiam 的話,可以說是沒有 momentum encoder 的 BYOL。跟其他方法相比 SimSiam 效果不是最佳的,但卻是實作起來最簡單的方法。參考資料
[1] Big Self-Supervised Models are Strong Semi-Supervised Learners
[2] Bootstrap your own latent: A new approach to self-supervised Learning
[3] Unsupervised Learning of Visual Features by Contrasting Cluster Assignments
沒有留言:
張貼留言