###### tags: `Contrastive Learning` `representation learning` # Contrastive Self-Supervised Learning *CURL* : Contrastive Unsupervised Representation Learning ### ジェラートの賭け > 2015年の最初の秋の日 (9/23)までにPascal VOCの物体検知タスクにおいて(例えばImageNet等の)特別な人間によるアノテーションデータによる事前学習を用いる R-CNN を倒す刺客が現れたらMr. マリックはEfros氏にジェラートを奢ることを約束する(**注: チョコレートとバニラの2段**) R-CNNはPASCAL VOCデータセットについてCVPR2014で優れた結果を見せつけた([arXiv:1311.2524](https://arxiv.org/abs/1311.2524)). PASCAL VOCデータセットはCNNを訓練するには少なすぎるので, ImageNetで事前学習した上でPASCALでファインチューニングした(**注**:転移学習 transfer learning は出力層のみを新しいデータに対して学習する. ファインチューニング fine tuning は全ての重みを再調整する. ). これは奇妙であるという. ImageNetとPASCALはラベルもその傾向も全く異なるデータである. なぜ性質の異なるデータでの事前学習に効果があったのか? 実はImageNetの*ラベル*ではなく*画像*が必要だったのではと. 科学的な問い:意味論的(semantic)な教師が良い表現を獲得するために必要なのか?そもそもPASCALに対して事前学習が必要ないかもしれないが([arXiv:1708.01241](https://arxiv.org/abs/1708.01241)), この賭けはICCV15から勃興した自己学習 self-supervised learningという流れを産んだのかもしれない. **ボスと賭けをするときはよく考えてからやれよ**! 彼はこの賭けには負けるわけだが... ついに自己学習が超越した! [arXiv:1911.05722](https://arxiv.org/abs/1911.05722) **Contrastive** learning (対照学習?) という流れが自己学習の再興を牽引している. ## 脳はピクセルレベルで表現学習していない? 左: 1ドル札を記憶を頼りに描いたもの 右: 見てから描いたもの ![](https://i.imgur.com/TxgGmCE.png) (出典: https://aeon.co/essays/your-brain-does-not-process-information-and-it-is-not-a-computer) ## Generative vs. Contrastive Methods ![](https://i.imgur.com/NMc8TiH.png) ## Contrastive methods - Data-Efficient Image Recognition with Contrastive Predictive Coding [arXiv:1905.09272](https://arxiv.org/abs/1905.09272) - ラベルなしImageNetで学習し線形分類で評価 - AlexNetを凌駕 - ラベルデータを学習する際にData efficiency データ効率性をみせる - Momentum Contrast for Unsupervised Visual Representation Learning [arXiv:1911.05722](https://arxiv.org/abs/1911.05722) #### ピクセルレベルでの再構成誤差に重きを置いて表現学習をする生成モデルとは異なる ## Contrastive methods の仕組み - 任意のデータ点$x$に対して contrastive methods は以下のようなencoder $f$を学習する $$ \text{score}(f(x),f(x^+)) >> \text{score}(f(x),f(x^-)) $$ - $x^+$は$x$に類似または合致するデータ点:正例 (positive sample) - $x^-$は$x$に類似しないデータ点:負例(negative sample) - $\text{score}$関数は2つの特徴量の類似度を測る距離(metric) #### $x$ はアンカー ''anchor'' データ点 - この性質を最適化するには, 正例と負例を正しく分類するsoftmax分類器をつくればよい! - $\text{score}$関数が正例に対して大きい値を, 負例に対して小さい値を返してくれればよい! $$ \mathcal{L}_N = -\mathbb{E}_X \left[\log\frac{\exp(f(x)^{\textsf{T}}f(x^+))}{\exp(f(x)^{\textsf{T}}f(x^+))+\sum_{j=1}^{N-1}\exp(f(x)^{\textsf{T}}f(x_j))} \right] $$ - 分母は$1$個の正例と$N-1$個の負例で構成されている ### 内積を$\text{score}$関数とした $$ \text{score}(f(x),f(x^+)) = f(x)^{\textsf{T}}f(x^+) $$ - これはよく知られた$N$-値softmax分類器に対する交差エントロピー誤差 - InfoNCE 誤差と呼ばれる - N-pair Loss - Improved Deep Metric Learning with Multi-class N-pair Loss Objective ([https://papers.nips.cc/paper/6200-improved-deep-metric-learning-with-multi-class-n-pair-loss-objective](https://papers.nips.cc/paper/6200-improved-deep-metric-learning-with-multi-class-n-pair-loss-objective)) - ranking-based NCE - Noise Contrastive Estimation and Negative Sampling for Conditional Models: Consistency and Statistical Efficiency [arXiv:1809.01812](https://arxiv.org/abs/1809.01812) ### InfoNCE 誤差は相互情報量と関連がある - InfoNCE 誤差の最小化:$f(X)$と$f(X^+)$の相互情報量の下界を最大化! - On Variational Bounds of Mutual Information [arXiv:1905.06922](https://arxiv.org/abs/1905.06922) ## Deep InfoMax 相互情報量最大化による表現学習 ### Learning deep representations by mutual information estimation and maximization [arXiv:1808.06670](https://arxiv.org/abs/1808.06670) ![](https://i.imgur.com/21tzGqE.jpg) https://github.com/rdevon/DIM - Contrastive task: 大域的な特徴量 global feature と局所的な特徴量 local feature が同じ画像からのものかどうかを分類するタスク:対照推定 - 大域的な特徴量: CNNエンコーダの最終層の出力 (a flat vector, $Y$) - 局所的な特徴量:CNNエンコーダの中間層の出力($M \times M$ feature map) - 各局所的な特徴マップ(local feature map)は限定された受容野をもつ - 大域的な特徴ベクトルは全ての異なる局所領域の情報を捉えているはず(仮定) ### DIMの誤差関数 - $f(x)$ : 大域的な特徴量 - $f(x^+)$ : 同じ画像からの局所的な特徴量(正例) - $f(x^-)$ : 異なる画像からの局所的な特徴量(負例) ### DIMの応用例 - Deep Graph Infomax [arXiv:1809.10341](https://arxiv.org/abs/1809.10341) - グラフ - Unsupervised State Representation Learning in Atari [arXiv:1906.08226](https://arxiv.org/abs/1906.08226) - 強化学習 - On Variational Bounds of Mutual Information - Greedy InforMax for Biologically Plausible Self-Supervised Represenation Learning - Region Mutual Information Loss for Semantic Segmentation #### On Mutual Information Maximization for Representation Learning [arXiv:1907.13625](https://arxiv.org/abs/1907.13625) >既存の相互情報量を最大化する表現学習は、Encoderと評価器の帰納バイアスがのっており、純粋に相互情報量を最大化するだけでは良い表現を得られないのではないか、という研究。簡便な評価器かつ(MIの理論値の)lower boundが低い方が成果を上げたり、相互情報量を大きくしながらも敵対的学習によって得られた表現から分類をする線形分類器の精度を下げるような学習ができる。 ## Learning Invariances with Contrastive Learning ![](https://i.imgur.com/jN7pm0y.jpg) ### Learning Representations by Maximizing Mutual Information Across Views (左) [arXiv:1906.00910](https://arxiv.org/abs/1906.00910) - Augement Multiscale DIM (巨大なDeep InfoMax & 細かい工夫) - 教師なし学習&線形分類でImageNet 68.4% Top-1 精度 - 実装: https://github.com/Philip-Bachman/amdim-public ### Contrastive MultiView Coding (右) [arXiv:1906.05849](https://arxiv.org/abs/1906.05849) - 同一画像の異なる可視化(深度, 輝度, 色度, 面法線, ラベル等)を不変な変換と表現のセットとみる ## Contrastive Predictive Coding ### Representation Learning with Contrastive Predictive Coding [arXiv:1807.03748](https://arxiv.org/abs/1807.03748) - 順序がある配列に使える - いくつかのタイムステップで共有されている情報(: 速く変化しない特徴量ということで''slow features''と呼ばれる)をエンコードする(局所情報は無視する)ことで表現学習する ![](https://i.imgur.com/Rt9zkUF.png) > Encodeした潜在表現からさらに自己回帰モデルでコンテキストを抜き, そこから複数ステップ先の潜在表現を予測させることでより抽象化された, 長期の推定に有用な表現を学習させる手法. 学習では, コンテキスト/データの量的偏りを改善するためコンテキストの有り無しにおける確率比率を使用している. > データの量的偏り:犬の画像, という場合「犬」というコンテキスト(=ラベル)より「画像」(=ピクセル)の方がデータ量が多いため, 普通に推定すると画像の方に偏った表現になる. そこで, この研究では確率比率(相互情報量)を使用した最適化を行っている. #### Data-Efficient Image Recognition with Contrastive Predictive Coding [arXiv:1905.09272](https://arxiv.org/abs/1905.09272) 教師なし学習&線形分類でImageNet 71.5% top-1 精度達成 ## A Simple Framework for Contrastive Learning of Visual Representations [arXiv:2002.05709](https://arxiv.org/abs/2002.05709) >対照学習の構成要素を分解し最適な選択を探索した研究。対照(ペア)にするData Augmentation、loss前ヘッドの有無/変換方法、バッチサイズ等のパラメーターの3つを調査。Random Crop/Color、非線形変換ヘッド、大きめバッチ/長めの学習stepがキーで、ImageNetにおいて1%のラベルで85.8% top-5を達成。 ## Scaling the number of negative examples (MoCo) ### Momentum Contrast for Unsupervised Visual Representation Learning [arXiv:1911.05722](https://arxiv.org/abs/1911.05722) #### Contrastive methods における負例の使い方に関する異なる戦略の比較 ![](https://i.imgur.com/Dn5UpxC.png) - $x^q$: 正例, $x^k$: 負例 >画像の教師なし表現学習において、辞書で距離学習的なことを行い、key算出ネットワークを徐々にquery算出ネットワークに近づける(momentum) MoCoを提案。ImageNetの潜在表現で線形回帰させるタスクで良いだけでなく、事前学習に使うと物体検知でも大幅な精度向上ができる。 >教師なしの表現学習で教師ありの表現(ImageNetの潜在表現等)を上回った研究。queryとマッチするデータを辞書から抜くというタスクで学習する。辞書は固定ではなく、queue処理でどんどん置き換わっていく。辞書のキーを作るencoderはquery側からコピーするが、momentumを使い徐々に変更していく。 ## Contrastive Representation Distillation [arXiv:1910.10699](https://arxiv.org/abs/1910.10699) ## A Simple Framework for Contrastive Learning of Visual Representations [arXiv:2002.05709](https://arxiv.org/abs/2002.05709) 実装: https://github.com/google-research/simclr ![](https://i.imgur.com/ydGHWFg.png) ![](https://i.imgur.com/UfY5Gfi.png) ブログ:https://ai.googleblog.com/2020/04/advancing-self-supervised-and-semi.html ## CURL: Contrastive Unsupervised Representations for Reinforcement Learning [arXiv:2004.04136](https://arxiv.org/abs/2004.04136) ![](https://i.imgur.com/r1SAQCn.png) >対象学習を強化学習に取り入れた手法。観測した状態を別々にEncodeし(queryとkey)、対象学習するとともにquery側を強化学習に使用する。勾配はquery側に流し、key側はquery側の重みの移動平均を使用する。シンプルな手法ながら連続値のDM ControlまたAtariで既存手法を上回る結果。 ## Supervised Contrastive Learning [arXiv:2004.11362](https://arxiv.org/abs/2004.11362) >複数の正例を許すcontrastive lossによってクラス情報を用いて教師ありcontrasive learningを行う.cross entropyよりハイパラ選択に鈍感で性能も高い(ResNet-50 top1で77.0→78.8). >自己教師あり学習で使われる対比損失は教師あり学習でも有効であり、クロスエントロピー誤差と比べ精度を改善、頑健性が向上し、ハイパーパラメータの違いに対し安定。バッチ内の複数の正例がある場合に対応するよう対比損失を拡張(Triplet lossは正例, 負例が一つずつ) ## 理論 http://proceedings.mlr.press/v97/saunshi19a/saunshi19a.pdf https://www.pacm.princeton.edu/sites/default/files/khandeparkar_hrishikesh_pacm_iw.pdf https://persagen.com/files/misc/arora2019contrastive.pdf ## Siamese NetworkではContrastive Lossが用いられる. メモ > - classification系のloss(Softmax-CE、ArcFace)と距離系のloss(Contrastive、Triplet)は、他クラス間類似度を小さくしてクラス内類似度をデカくしたい点で結局同じ > - ただこの2つは別のペナルティスケールで扱う方が良さそう > - 顔認識のデータセットみんな最近サチってる > https://github.com/lyakaap/Landmark2019-1st-and-3rd-Place-Solution/blob/master/retrieval_paper_memo.md