新たな学習方法！「教師あり」Contrastive Learningを解説！

**オミータです。[ツイッター](https://twitter.com/omiita_atiimo)で人工知能のことや他媒体の記事など** を紹介していますので、人工知能のことをもっと知りたい方などは **[@omiita_atiimo](https://twitter.com/omiita_atiimo)をご覧ください！**
他にも次のような記事を書いていますので興味があればぜひ！

> * [2020年超盛り上がり！自己教師あり学習の最前線まとめ！](https://qiita.com/omiita/items/a7429ec42e4eef4b6a4d)
> * [わずか1%のラベルでImageNet高精度「SimCLR」解説](https://ai-scholar.tech/articles/image-recognition/simclr-ai-400)
> * [【基本編】画像認識に使用されるData Augmentationを一挙にまとめてみた！](https://ai-scholar.tech/articles/data-augmentation/data-augmentation-image-recognition-survey)
> * [出きたてホヤホヤ！最新オプティマイザー「AdaBelief」を解説！](https://qiita.com/omiita/items/5012afa3cba4d73a7aed)
> * [画像認識の大革命。AI界で話題爆発中の「Vision Transformer」を解説！](https://qiita.com/omiita/items/0049ade809c4817670d7)

# 新たな学習方法！「教師あり」Contrastive Learningを解説！

2020年に大流行した自己教師あり学習の**Contrastive Learning**をご存知でしょうか。Contrastive Learning(以下、CL)とは言わばラベルなしデータたちだけを用いてデータの表現を学ぶ学習方法で、**「似ているものは似た表現、異なるものは違う表現に埋め込む」** ことをニューラルネットに学ばせます(CLの手法やアーキテクチャなどのまとめは拙著の[こちら](https://qiita.com/omiita/items/a7429ec42e4eef4b6a4d)をご覧ください)。このCLによって自己教師あり学習は2020年大きく飛躍したのですが、この**CLを教師あり学習と組み合わせた**ものが["Supervised Contrastive Learning", Khosla, P., Teterwak, P., Wang, C., Sarna, A., Tian, Y., Isola,  P., Maschinot, A., Liu, C., Krishnan, D., (NeurIPS'20)](https://arxiv.org/abs/2004.11362)で提案された**教師ありCL**です。**教師ありCLによって、クロスエントロピー損失を用いる通常の教師あり学習よりも高い分類精度およびロバスト性**を示しました。教師ありCLは、原理が簡単で注目度も高いです。それではその中身を見ていきましょう！

![SCL_fig1](https://i.imgur.com/dBZopG4.png)

> 画像: ["Supervised Contrastive Learning", Khosla, P., Teterwak, P., Wang, C., Sarna, A., Tian, Y., Isola,  P., Maschinot, A., Liu, C., Krishnan, D., (NeurIPS'20)](https://arxiv.org/abs/2004.11362)

**本記事の流れ**:

- **忙しい方へ**
- **教師ありContrastive Learningの説明**
  - **Contrastive Learning**
  - **SimCLR**
  - **教師ありContrastive Learning**
- **教師ありContrastive Learningの実験**
- **まとめと所感**
- **参考**


> 原論文: ["Supervised Contrastive Learning", Khosla, P., Teterwak, P., Wang, C., Sarna, A., Tian, Y., Isola,  P., Maschinot, A., Liu, C., Krishnan, D., (NeurIPS'20)](https://arxiv.org/abs/2004.11362)
> 公式実装: [TensorFlow](https://github.com/google-research/google-research/tree/master/supcon) / [PyTorch](https://github.com/HobbitLong/SupContrast) 

|略語|正式名称|
|:--:|:--:|
|**CL**|Contrastive Learning|
|**DA**|Data Augmentation|

## 0. 忙しい方へ

* Contrastive Learningにラベル情報を用いる**教師ありCL**を提案したよ
* 教師ありCLで用いる損失関数は**SupCon**(=Supervised Contrastive)という名前だよ
* **教師ありCLがクロスエントロピー損失を用いた通常の教師あり学習よりも高い性能**を示したよ
  * ImageNet/CIFAR-10/CIFAR-100の**画像分類タスクでより高い分類精度**を示したよ
  * ハイパーパラメーター(e.g. 学習率)への高い安定性も示したよ
  * ImageNet-Cへの**ロバスト性もより良い**よ


## 1. 教師ありContrastive Learningの説明
### 1.1 Contrastive Learning

![CL_fig15](https://i.imgur.com/jon1PF0.png)

> 画像: ["A Survey on Contrastive Self-supervised Learning", Jaiswal, A., Babu, A., Zadeh, M., Banerjee, D., Makedon, F., (2020)](https://arxiv.org/abs/2011.00362)

そもそもContrastive Learning(以下、CL)は、モデルの事前学習のように用いられることが多いです。つまり、画像の特徴量をうまく抽出できるようなモデル(上図のEncoder)をCLによって作ってしまおうということです。それを達成させるためにCLでは、「**似ているデータは潜在空間でも似た埋め込みベクトルになり、異なるデータは潜在空間でも異なる埋め込みベクトルになる**」ようにモデルを学習させます。これがCLの根幹にあるアイデアになります。

![CL_example](https://imgur.com/JhoPLVG.png)

CLではさらに **アンカー(Anchor)** と **正例(Positive)** と **負例(Negative)** の3つが登場します。アンカーを軸としてアンカーと似ているデータを正例、アンカーと異なるデータを負例と呼びます。上図の例ではアンカーとして犬画像を用い、アンカーをデータオーギュメンテーション(以下、DA)したものが正例になっています。一方で負例は建物の画像で全く異なるものになっています。上図のように、正例としてアンカーにDAを適用したものを用いることが多い一方で負例の獲得方法はいろいろなものが提案されています。教師ありCLでは、一番単純な「バッチ内のアンカー以外の画像たちを負例とする」作戦を取っています。そのほかの獲得方法について詳しく知りたい方は[こちら](https://qiita.com/omiita/items/a7429ec42e4eef4b6a4d#3-%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3)をご参照ください。これと同じ負例の定義をしているものに**SimCLR**[[Chen, T.(ICML'20)]](https://arxiv.org/abs/2002.05709)があります。実際に、**教師ありCLはそのほとんどがSimCLRを踏襲したもの**になっています。次項でSimCLRについて簡単に説明をしていきます。

 ### 1.2 SimCLR

![CL_simclr_r](https://i.imgur.com/ml37ky4.png)

> 画像: ["A Simple Framework for Contrastive Learning of Visual Representations", Chen, T., Kornblith, S., Norouzi, M., Hinton, G., (ICML'20)](https://arxiv.org/abs/2002.05709)加筆


[[Chen, T.(ICML'20)]](https://arxiv.org/abs/2002.05709)で提案されたSimCLRでは、負例としてバッチ内のアンカー以外の画像たちを用います。SimCLRでは次の3つが大きな構成部品となっています。
1. **データオーギュメンテーション, $t(\cdot)$**: $t$はDAの集合$\mathcal{T}$からサンプルし、バッチに適用。$t$と$t'$を別々に適用する
2. **エンコーダー, $f(\cdot)$**: 転移学習などにも用いる埋め込み表現(2048次元ベクトル、正規化済み)を出力するネットワーク。ResNet50などの識別器よりも前の部分。
3. **プロジェクションネットワーク, $g(\cdot)$**: Contrastive Learningで用いられる埋め込み表現(128次元ベクトル、正規化済み)を出力するネットワーク。

ここで1点注意して欲しいことは、SimCLRではアンカーもDAされていることです。そのため、アンカーの元画像にまた別のDAを適用したものが正例となります。通常のバッチが$N$個だとすると、それぞれのDAを適用したバッチがあるので全体で大きさ$2N$のバッチが出来上がります。前者(サイズN)をバッチ、後者(サイズ2N)を**multiviewedバッチ**と呼びます。

このSimCLRでは、CLの最大の目的「似ているデータは潜在空間でも似た埋め込みベクトルになり、異なるデータは潜在空間でも異なる埋め込みベクトルになる」を実現するために損失関数として以下式のNormalized Temperature Cross Entropy(=**NTXent**)を用います。

```math
\mathcal{L}^{self}=\sum_{i\in I} \mathcal{L}_i^{self} = -\sum_{i\in I}\log{\frac{ \exp(\mathbf{z}_i\cdot\mathbf{z}_{j(i)}/\tau) } { \sum_{a\in A(i)}\exp(\mathbf{z}_i\cdot\mathbf{z}_a/\tau) } }
```

ここで、$I$はmultiviewedバッチ内の画像たち全て、$i$はアンカー画像、$A$は$I{\backslash{i}}$つまりアンカー$i$以外の全ての画像として定義されます。$\mathbf{z}$は画像の埋め込み表現です。$\tau$は温度と呼ばれるハイパーパラメーターです。上式はぱっと見わかりづらいですが、よく見ると単にアンカー$\mathbf{z}_i$との内積たちに温度付きソフトマックスを適用しているだけです。つまり、**気持ちとしてはアンカー$\mathbf{z}_i$とその正例$\mathbf{z}_{j(i)}$の内積をアンカーと負例の内積たちよりも一番大きくしたい**、という感じです。

![SCL_fig2l](https://i.imgur.com/IuAXA1x.png)

> 画像: ["Supervised Contrastive Learning", Khosla, P., Teterwak, P., Wang, C., Sarna, A., Tian, Y., Isola,  P., Maschinot, A., Liu, C., Krishnan, D., (NeurIPS'20)](https://arxiv.org/abs/2004.11362)

最後に、通常のCLをもう一度図でまとめます。上図の画像たちを埋め込む時、アンカー(灰色)と正例(オレンジ色)は近くに配置され負例(赤色)たちはそれらよりも遠くに配置されます。これがCLの概要ですが、1つ問題を孕んでいます。それは、**同じ意味を有す画像たちも負例となってしまっていること**です。これは本来CLではラベル情報を使わずに負例を獲得するため、アンカーと同じラベルを有す画像だとしても元画像が異なるためにお構いなしで負例とみなされてしまうのです。上図で言うとアンカーの犬画像に対して、赤枠で囲われた犬画像が負例とされてしまっています。意味の似たような画像たちは近くに埋め込まれるべきなのに、上図のままでは遠くに配置させようとしまい学習に悪影響を与えそうです。これを回避するために、提案手法の**教師ありCLではラベル情報を使います**。ここに**教師あり**と呼ばれる所以がありますね。

### 1.3 教師ありContrastive Learning

![SCL_fig2r](https://i.imgur.com/aPoZTcQ.png)

> 画像: ["Supervised Contrastive Learning", Khosla, P., Teterwak, P., Wang, C., Sarna, A., Tian, Y., Isola,  P., Maschinot, A., Liu, C., Krishnan, D., (NeurIPS'20)](https://arxiv.org/abs/2004.11362)


上図のようにアンカーと同じ意味を持つ画像も正例としたいです。教師ありCLでは、これを実現するためにラベルを用いるだけです。とても簡単です。**同じラベルの画像たち(とそのDA)を正例とするだけ**です。これを学習に組み込むのは損失関数として次式を用いることでできます。下式で$P(i)$はアンカー$i$と同じラベルの正例たちで、$\{p\in A(i):\mathbf{\tilde{y}}_p = \mathbf{\tilde{y}}_i\}$で定義されます。

```math
\mathcal{L}^{sup}_{out}=\sum_{i\in I} \mathcal{L}^{sup}_{out, i} = \sum_{i\in I} \frac{-1}{|P(i)|} \sum_{p\in P(i)} \log{\frac{ \exp(\mathbf{z}_i\cdot\mathbf{z}_{p}/\tau) } { \sum_{a\in A(i)}\exp(\mathbf{z}_i\cdot\mathbf{z}_a/\tau) } }
```

**ラベルごとにCLの平均を取っている感じ**ですね。正例も負例と同様バッチ内から取ってきているようです。教師ありCLはこれを用いるだけです。あとはSimCLRとほぼ同じです。それではこの教師ありCLが通常のクロスエントロピーを用いた場合の教師あり学習と比べてどうなのかを次節で見ていきましょう。

## 2. 教師ありContrastive Learningの実験

実験内容は大きく次の3つです。

1. **画像分類**
2. **ロバスト性(ノイズ/ハイパーパラメーター)**
3. **転移学習**

比較対象として通常の教師あり学習である**クロスエントロピー損失を用いた学習モデル**と自己教師あり学習の**SimCLR**を主に用いています。ネットワークは**ResNet-50/-200/-101**を用いています。

### 2.1 画像分類
![SCL_tab2](https://i.imgur.com/mRaxRHY.png)

> 画像: ["Supervised Contrastive Learning", Khosla, P., Teterwak, P., Wang, C., Sarna, A., Tian, Y., Isola,  P., Maschinot, A., Liu, C., Krishnan, D., (NeurIPS'20)](https://arxiv.org/abs/2004.11362)


まずは**ResNet-50におけるCIFAR10/CIFAR100/ImageNetの画像分類**を行っています。上表の通り、通常の教師あり学習であるCross-Entropyや自己教師あり学習のSimCLRよりも**提案手法のSupConが良い**ことがわかりますね。下表にはより詳しく書かれています。

![SCL_tab3](https://i.imgur.com/VC6Hpj0.png)

> 画像: ["Supervised Contrastive Learning", Khosla, P., Teterwak, P., Wang, C., Sarna, A., Tian, Y., Isola,  P., Maschinot, A., Liu, C., Krishnan, D., (NeurIPS'20)](https://arxiv.org/abs/2004.11362)


**ResNet-50においてはSupConにAutoAugmentを用いたものが最も良い**です。**ResNet-200においてはSupConにStacked RandAugmentを用いたものが最もいい**です。AutoAugment[[Cubuk, T. (CVPR'19)]](https://arxiv.org/abs/1805.09501)とは、強化学習で探索した最適なDAの組み合わせを用いたもので、Stacked RandAugmentとは、SimCLRで用いられたDAにランダムにハイパーパラメータを探索するRandAugment[[Cubuk, T. (CVPRW'20)]](https://arxiv.org/abs/1909.13719)を組み合わせたものです。

### 2.2 ロバスト性
#### 2.2.1 ノイズへのロバスト性

![SCL_imagenetc](https://i.imgur.com/T1P3BXs.jpg)

> 画像: ["Benchmarking Neural Network Robustness to Common Corruptions and Perturbations", Hendrycks, D., Dietterich, T. (ICLR'19)](https://arxiv.org/abs/1903.12261)

ここでは、モデルのノイズへの堅牢性(ロバスト性)を見ます。このとき上図のような何かしらの自然的な変化が加えられた画像を用います。ここでは**ImageNet-C**(上図)と呼ばれるデータセットで評価します。用いる評価指標はmCE(=mean Corruption Error)とrel. mCE(=relative mCE)です。mCEは単なるエラー率で、rel. mCEはTop-1分類精度が異なるモデル同士での比較に向いている指標です。これらを比較したものが下表です。

![SCL_fig3l](https://i.imgur.com/pWoQZwS.png)

> 画像: ["Supervised Contrastive Learning", Khosla, P., Teterwak, P., Wang, C., Sarna, A., Tian, Y., Isola,  P., Maschinot, A., Liu, C., Krishnan, D., (NeurIPS'20)](https://arxiv.org/abs/2004.11362)

baselinesは論文から取ってきたもののようです。**提案手法の教師ありCLが一番ノイズへのロバスト性がありますね**。続いて、このノイズの具合を徐々に高めていったときの挙動を見ていきます。

![SCL_fig3r](https://i.imgur.com/8Tmhg7b.png)

> 画像: ["Supervised Contrastive Learning", Khosla, P., Teterwak, P., Wang, C., Sarna, A., Tian, Y., Isola,  P., Maschinot, A., Liu, C., Krishnan, D., (NeurIPS'20)](https://arxiv.org/abs/2004.11362)

横軸がノイズの強さ(Corruption Severity)を表しており、右に行けば行くほどノイズが強くなっていきます。そのため、Top-1精度も落ちていきます。青がクロスエントロピーで、紫が提案手法の教師ありCLになっています。わずかではありますが、紫の方がTop-1精度が常に高いです。このことからも**教師ありCLのノイズのロバスト性が通常のクロスエントロピーよりも高い**ことがわかります。


#### 2.2.2 ハイパーパラメーターへのロバスト性

![SCL_fig4](https://i.imgur.com/rJndO1c.png)

> 画像: ["Supervised Contrastive Learning", Khosla, P., Teterwak, P., Wang, C., Sarna, A., Tian, Y., Isola,  P., Maschinot, A., Liu, C., Krishnan, D., (NeurIPS'20)](https://arxiv.org/abs/2004.11362)

ここでは各ハイパーパラメーターを変化させた時のモデル(ResNet-50)の挙動を見ていきます。全体を通して紫が提案手法、青がクロスエントロピーを示しています。上図の左から右にその結果から得られる考察をまとめました。

* **DA/オプティマイザー/学習率**: 提案手法(紫)の方が分散が小さく、ハイパーパラメーターによる影響を受けづらい。
* **バッチサイズ**: いずれのバッチサイズにおいても提案手法(紫)がより良い。2048(でか。)くらいでちょうどいい。
* **エポック数**: 350くらいがちょうどいい。
* **温度**: あまり大きくない方がよく、0.1がベスト。

### 2.3 転移学習

![SCL_tab4](https://i.imgur.com/4SGFFZ5.png)

> 画像: ["Supervised Contrastive Learning", Khosla, P., Teterwak, P., Wang, C., Sarna, A., Tian, Y., Isola,  P., Maschinot, A., Liu, C., Krishnan, D., (NeurIPS'20)](https://arxiv.org/abs/2004.11362)

転移学習に関しては提案手法の教師ありCL(SupCon)が一番というわけではなく、**他のSimCLRやクロスエントロピー(Xent)と拮抗**した感じです。ImageNetの精度が高いからと言って転移学習もうまくいくわけではなく、**通常の学習と転移学習との関連性はFuture Work**としています。

## 3. まとめと所感

新たに提案された教師ありCLについて見てきました。教師ありCLとは単にラベル情報を用いたContrastive Learningで、画像分類精度およびロバスト性において通常のクロスエントロピーを用いた教師あり学習よりも高い性能を示しました。ただし、バッチサイズは2048ととても大きいため、ここさえ解決できれば画像のみならずNLPやグラフなど**他分野でも新たな学習方法として広く注目される**可能性もあります。いずれにせよこの先もContrastive Learningがいろいろなところで猛威を奮ってきそうですね。


**Twitterで人工知能のことや他媒体の記事などを紹介していますので[@omiita_atiimo](https://twitter.com/omiita_atiimo)もご覧ください。**

こちらもどうぞ：
> * [2020年超盛り上がり！自己教師あり学習の最前線まとめ！](https://qiita.com/omiita/items/a7429ec42e4eef4b6a4d)
> * [わずか1%のラベルでImageNet高精度「SimCLR」解説](https://ai-scholar.tech/articles/image-recognition/simclr-ai-400)
> * [【基本編】画像認識に使用されるData Augmentationを一挙にまとめてみた！](https://ai-scholar.tech/articles/data-augmentation/data-augmentation-image-recognition-survey)
> * [出きたてホヤホヤ！最新オプティマイザー「AdaBelief」を解説！](https://qiita.com/omiita/items/5012afa3cba4d73a7aed)
> * [画像認識の大革命。AI界で話題爆発中の「Vision Transformer」を解説！](https://qiita.com/omiita/items/0049ade809c4817670d7)

## 4. 参考
* ["Supervised Contrastive Learning", Khosla, P., Teterwak, P., Wang, C., Sarna, A., Tian, Y., Isola,  P., Maschinot, A., Liu, C., Krishnan, D., (NeurIPS'20)](https://arxiv.org/abs/2004.11362)  
原論文