SimCLR
SimCLR (Simple Framework for Contrastive Learning of Visual Representations) は、2020 年に Google が提案した contrastive self-supervised learning の代表的手法です。「特別な architecture を持ち込まず、適切な augmentation と large batch があれば十分」というメッセージで、self-supervised learning ブームの起点になりました。
核となる三つの要素
- Strong augmentation: Random crop + color jitter が特に重要
- Projection head : Encoder の特徴を projection した後で contrastive loss を取る
- Large batch: 多くの negative を一度に使う
重要な観察
- Augmentation の選択が精度に最も大きく影響する
- Encoder の出力をそのまま contrastive せず、projection head 経由で loss を取ると downstream が良くなる
- Batch size を大きくするほど性能が伸びる (ただし計算量も増える)
なぜ projection head なのか
Contrastive loss は augmentation 不変性を強制しますが、それを encoder 出力に直接押し付けると、downstream で有用な情報まで潰してしまいます。Projection head を挟むことで、
- Loss は projection 後の空間で計算
- Encoder の特徴自体は augmentation 不変ほど強くは縛られない
という分離が起きます。
弱点
- 大きな batch (1024〜8192) が必要 → メモリ重い
- 計算コストが大きい
- Negative sample が batch に閉じる
これらを解決する方向として、MoCo (queue で negative を増やす) や BYOL (negative 不要) が出てきました。
数式で見る NT-Xent loss
SimCLR では、一つの画像から二つの augmentation view を作り、それらを positive pair とします。Batch 内に 個の view があるとき、view と positive view に対する NT-Xent loss は次のように書けます。
ここで、 は projection head の出力、 は cosine similarity、 は temperature、 は自分自身を denominator から除く indicator です。
この式の気持ちは、「positive pair の similarity を大きくしながら、同じ batch 内の他の view との similarity は相対的に小さくする」というものです。Large batch が重要になるのは、denominator に入る negative の数が増え、表現空間をより細かく押し広げられるからです。
関連ページ
主なソース
- SimCLR: https://arxiv.org/abs/2002.05709
- SimCLR v2: https://arxiv.org/abs/2006.10029