Distillation Survey : Noisy Student

# Self-training with Noisy Student improves ImageNet classification

## Abstract
現在までに(2020年)*state-of-the art*なモデルである"*Noisy Student Training*"を紹介します。
アイデアは*self-training*と*Distillation*の拡張で、3つのノイズを加えて蒸留を複数回行うことで生徒モデルが教師モデルより優れた汎化性能を持つようになることを示す論文です。
なお、ここでのノイズは"*Dropout*", "*Stochastic depth*", "*Data augmentation*"を使用します。
論文は[こちら](https://arxiv.org/abs/1911.04252)を参照してください。

## Introduction
*state-of-the-art*(*SOTA*)モデルはラベル付きデータを多く必要とするという問題が残されています。
そこで著者らは、*SOTA*モデルを得るために、ラベルなしデータを使用して*self-training*と*Distillation*の組み合わせを使用することで汎化性能を高めようとしました。
ここで一般的な*self-training*と*Distillation*と異なることが(1)生徒モデルを大きく(もしくは同等に)していくこと、(2)生徒モデルの学習時に学習データに対してノイズを付与すること、の2つです。
このような学習から生成された生徒モデルは*ImageNet*で88.4%という結果を出しました(*SOTA*から2%向上)。またロバストなモデルであるとも主張されています。

## Noisy Student Training
学習の流れは以下の通りです。

1. ラベルあり学習データで教師モデルを最適化する
1. 教師モデルによるラベルなしデータへのラベリング(ソフトラベルorハードラベル)
1. ラベルあり学習データとラベルなし学習データを用いて生徒モデルを最適化
1. 生徒モデルを教師モデルとして扱い、新しい生徒モデルに対しててステップ2,3を繰り返す。

この学習の中で、特徴となることは以下の2つです。

* 生徒モデルの学習の際にノイズを加えること
* 生徒モデルの規模は教師モデルと同じ、または大きいものを使用すること

Distillationを実装する際に、通常はノイズを加えず、また生徒モデルは教師モデルよりも小さいものを使用することが一般的です。
論文ではこの手法は「知識の拡張」と表現しています。生徒モデルに対して、厳しい学習環境と十分な容量を持たせることで、教師モデルの知識を拡張したより良い生徒モデルを作成することを目的としています。

実験では入力にノイズを付与するパターンとモデルにノイズを付与する2種類のノイズが使用されます。
入力に付与されるのノイズには*Data Augmentation*である*RandAugment*を使用しています。
RnadAugmentに関しては[この記事](https://qiita.com/takoroy/items/e2f1ee627311be5d879d)を読むといいかも。
モデルに付与されるノイズには*Dropout*と*Stochastic Depth*が使用されます。
同様に[この記事](https://qiita.com/supersaiakujin/items/eb0553a1ef1d46bd03fa)を参照するといいかも。

また、論文中では*Data filtering, Data balancing*を使用すると更なる性能向上が見込めるといわれています。教師モデルが疑似ラベルを生成する時に、ドメイン外の信頼度が小さい画像に関しては、フィルタリングを行って学習に使用しないようにして、ラベルなし学習データとラベルあり学習データの分布が合致するようにラベルなしデータの量の調整を行っています。

疑似ラベルの生成はソフトなものとハードなもの両方が行われるが、ソフトラベルの方がドメイン外のラベルなしデータに対して、わずかに良い性能を出すらしいです。
以降の実験結果では全てソフトラベルを使用しています。

## Experiments
### Experiment Details
ラベル付きデータにはImageNetを使用し、ラベルなしデータにはJFTデータを使用しています。
始めに、*ImageNet*で学習された*EfficientNet-B0*でJFTデータセットに対してラベリングを行い、その中で確信度が0.3以上の画像を選択します。
そして各クラスに対して、確信度が高い順に130K枚選択して疑似ラベルとします。この時に、130K枚選択できない場合は、ランダムに画像の複製を行って補充をしています(*Data balancing*)。

分類器のモデルとしては、*EfficientNets*をベースラインとしています。学習時にはモデル規模をスケールアップさせる必要があるので、*EfficientNetB-7*を拡張した*EfficientNetL-2*を使用しています。

### ImageNet Results
検証データセットに対して*NoisyStudent*が*SOTA*のモデルよりも3.5％良い性能を獲得させました。
また、この3.5％のうち0.5％がモデルの大きさによるもので、2.9％が*NoisyStudent*によるものであると主張されています。

### Robustness Results on ImageNet-A, ImageNet-C and ImageNet-P
まず初めにImageNet-A,C,Pとは堅牢性を測る指標となるデータセットです。
それぞれ以下のような特徴があります。

* ImageNet-A : 性能を低下させるような分類の難しい画像のみで構成されているデータセット
* ImageNet-C : 強いノイズ(破損など)が掛けられているデータセット
* ImageNet-P : スケールが異なるようにノイズが掛けられているデータセット

これらのデータセットに対してテストを行った結果、*Noisy Student*は*SOTA*なモデルよりも優れて性能(堅牢性)を獲得させる結果となりました。

### Adversarial Robustness Results
*Noisy student*は高い分類性能と堅牢性を持つことが分かりました。
ここで、著者らは*FGSM*攻撃のような意図的に分類間違いを起こさせるような攻撃に対しての*Noisy student*の性能を検証しています。
結果としては*Noisy Student*がそのような攻撃に対しても強いことが実験から示されました。
攻撃の度合いを増加させた場合、*Noisy Student*は分類性能をわずかに減少させてしまうが、従来のモデルよりもその落ち幅は小さいようです。

## Ablation Study
この章では、ノイズなどの学習手法を構成する様々な工夫の有効性を検証しています。

### The Importance of Noise in Self-training
ここでは、ノイズの有効性を検証するために、*student*に対して、ノイズを付加しないバージョンとノイズを一部付加するバージョン、ノイズをすべて付加するバージョンを比較しています。
結果としては、ノイズをすべて付加したい場合が最も性能の向上を図ることができています。

### A Study of Iterative Training
ここでは、学習を繰り返すことの有効性を検証しています。
最初の教師モデルを*EfficientNet-B7*、生徒モデルを*EfficientNet-L2*として、*Noisy Student Training*を行っていきます。
結果としては、3回繰り返しを行ってその全ての場合で性能の向上を実現しました。

### Additional Ablation Study Summarization
まとめると以下のようになります。

1. 規模が大きく高性能な教師モデルを使用するとより良い性能を得ることができる
1. 優れた性能を獲得するためには大量のラベルなしデータが必要である
1. 特定の場合では、ソフトラベルの方がハードラベルよりも優れている
1. Studentは規模が大きい方が優れたモデルを獲得できる
1. *Data balancing*は小さいモデルに対して有効である
1. ラベルなしデータとラベルありデータで学習する方がラベルなしで学習しファインチューニングするよりも優れている
1. ラベルなしデータのバッチサイズとラベルありデータのバッチサイズの比率を大きくすることで性能が向上する
1. Studentの初期値はランダムでもさほど性能に影響を与えない

## Conclusion

* ラベルなしデータを用いることで、画像の分類性能と堅牢性を高めることができた
* ラベルなしデータに疑似ラベルを付与し学習を行う*semi-supervised training*と*self-training*の組み合わせが従来手法よりも優れている可能性がある