画像認識の最新SoTAモデル「Noisy Student」を徹底解説!
3つの要点
✔️ その1 ImageNetでTop-1 Acc. 88.4 %を叩き出し、SoTAモデル。おまけに高いロバスト性を兼ね備える。
✔️ その2 Self-trainingにおいてStudentに強いノイズをかけ、反復的にTeacherとStudentを入れ変える。
✔️ その3 TeacherおよびStudentのベースモデルはEfficientNet(解説)を使用し、EfficentNet-L2という拡張モデルでSoTA
Self-training with Noisy Student improves ImageNet classification
written by Qizhe Xie, Minh-Thang Luong, Eduard Hovy, Quoc V. Le
(Submitted on 11 Nov 2019 (v1), last revised 7 Jan 2020 (this version, v2))
Subjects: Machine Learning (cs.LG); Computer Vision and Pattern Recognition (cs.CV); Machine Learning (stat.ML)
GoogleによるTensorFlowによる実装がGitHub上にこちらとこちらにあります。
本記事で使用している画像は論文中のものまたはそれを参考にし作成したものを使用しております。
導入
画像認識や自然言語処理などで広く使われ、おもしろいことにも使える人工知能ですが、今回紹介するのは画像認識分野でSoTAを達成したNoisy Studentです。精度も去ることながら、ロバスト性も兼ね備えておりノイズのある画像に対しても使うことができます。
本記事では以下の流れで論文を解説していきます。
- NoisyStudent 解説
- NoisyStudent 実験結果
- 結論
1. Noisy Student
Noisy Studentの前にまずSelf trainingについて簡単に説明します。
そのあとでNoisy Studentを使ったNoisy Studentについて説明します。
1.1 Self training
Self trainingとはモデルの学習方法の1つです。
TeacherモデルとStudentモデルを用意し、データセットはラベル付きおよびラベルなしデータの両方を使います。最終的にはより良いStudentモデルを獲得することが目標となっています。手順は以下の3つです。その下に図で表します。
- ラベル付きデータでTeacherモデルを訓練
- ラベルなしデータに対して、先ほどの学習済みTeacherモデルでラベルを予測させ擬似ラベルとする
- ラベル付きデータ+擬似ラベル付きデータの両方を使ってStudentモデルを訓練
これらを視覚的に表すと下のようになります。
1.2 Noisy Studentを使ったSelf training
いよいよ本題のNoisy Studentです。と言っても原理は単純で、1.1で紹介したSelf trainingとの違いは2つだけです。
- Studentの学習時にノイズをたくさんかけて学習させる。
- Studentモデルを学習させたらそのモデルを新たなTeacherモデルとし、より大きいモデルを新たなStudentモデルとして学習を繰り返す。
つまり、「ノイズをたくさんかける」ことと「より大きなStudentモデルを使って学習を繰り返す」ことの2つがポイントとなってきます。この2つをふまえた上でNoisy Studentを使ったSelf trainingのアルゴリズム(論文を参考に訳)を見てみましょう。ちなみに擬似ラベルはSoft labelです。Soft labelとは、犬猫の分類タスクにおいて、ある猫の画像に対してモデル予測が(犬, 猫) = (0.2, 0.8)であれば擬似ラベルを(0,1)とするのではなく、(0.2, 0.8)としてラベルに優しさを持たせる感じです。ちなみに前者の(0,1)はHard labelと呼ばれ、本研究においてはSoft labelの方がわずかに精度が良かったようです。
ここでStudentにかけるノイズですが、3つです。
- RandAugment: 画像オーグメンテーションの手法をランダムで選択する。(解説 )
- Dropout: 訓練時に一定の確率でニューロンを一時的に取り除く
- Stochastic Depth: 訓練時に一定の確率で層を一時的に取り除く
Teacherよりも大きいStudentに対して訓練時にたくさん負荷(ノイズ)をかけることで、StudentがTeacherよりも良い精度になるようにしているのですね。
ここまでをまとめて図で表すと以下になります。
2. Noisy Student 実験結果
ここではNoisy Studentの精度の高さとロバスト性を見ていき、最後にアブレーションスタディでノイズの重要性などを見ていきます。
2.1 実験方法
2.1.1 データセット
ラベル付きデータとラベルなしデータを使います。
- ラベル付きデータ: ImageNet 2012 ILSVRC
- ラベルなしデータ: JFTデータセット
2.1.2 アーキテクチャ
モデルはEfficientNet-B7とそれをスケールアップしたEfficientNet-L2を使います。$w, d$ はそれぞれEfficientNetの広さと深さを決定するハイパーパラメータです。詳しく知りたい場合は拙著の解説記事をご覧ください。
2.1.3 訓練方法
ベストパフォーマンスはTeacherモデルとStudentモデルを3回入れ替えた時で、内訳は以下図。
2.2 ImageNet
Noisy StudentのImageNetのTop-1精度は88.4 %でSoTAを達成しました。他のモデルとの比較は以下図です。
ここで前のSoTAであったFixRes ResNeXt-101 WSLと比べてNoisy Studentが特に優れているのは2点。
モデル (精度) |
FixRes ResNeXt-101 WSL (86.4 %) |
Noisy Student (88.4 %) |
優れている点 |
外部データ数 (データ) | 35億枚 (Instagram) | 3億枚 (JFT) | データ数が $\frac{1}{10}$ |
パラメータ数 | 8.29億個 | 4.8億個 | パラメータ数が半分 |
さらにNoisy Studentの有用性を見るために、EfficientNet-B0からB7までをノイズを使ったSelf trainingによって学習させImageNetの精度を測り、通常のEfficientNetとの精度の違いを見ていきます。このとき、計算量が膨大であると言う理由からSoTAを達成したモデルのようにTeacherとStudentを入れ替えるような処理はせず、単純に同じモデル2つ用意し、それぞれをTeacherとStudentとしてノイズを使って一度だけSelf trainingした時の精度を見ています。その結果は以下図。
ノイズを用いたSelf trainingが精度向上をもたらしていることがわかります。
2.3 ロバスト性
続いてNoisy Studentのロバスト性を見ていきます。使用するデータセットは3つでImageNet-A, ImageNet-C, ImageNet-Pです。それぞれモデルのロバスト性を測るためのテストセットです(ImageNet-Aは分類が難しい画像たちで、-Cと-Pは強いノイズがかかっている画像たち)。実験はSoTAを達成したNoisy Studentに対して行い、各3つのテストセットに対する精度を見ていきます。結果は以下表で、いずれにおいても他手法と比べてNoisy Studentが大幅に精度向上しており画像にノイズがあってもうまく認識できていることがわかります。
実際にどういう画像を分類できたかを見てみましょう。ここで黒文字はNoisy Studentが正しく推測した正解ラベルで、赤文字は通常のEfficientNetによる誤った出力です。
これを見て人間でも間違えてしまいそうな画像までもNoisy Studentは正しく推測できていることがわかります。例えばImageNet-Aにおいて、一番上左の画像はEfficientNetはブイを灯台と勘違いして灯台として認識していますが、Noisy Studentは正解ラベルであるアシカをしっかりと認識できています。またImageNet-Cの一番上右の画像は、人間でも何が写っているか分からないですが、Noisy Studentはブランコと認識できています。これはすごすぎます。
Noisy Studentは実はAdversarial Exampleに対してもそのロバスト性の高さが確認されています。具体的にはFGSM(Fast Gradient Sign Method)攻撃と言われる攻撃手法に対するロバスト性を測っています。このFGSM攻撃に関する説明はこちらがわかりやすかったです。それでは結果を見てみましょう。$\epsilon$ が大きいほど攻撃の度合いが大きくなります。
Noisy StudentがFGSM攻撃に対してもロバスト性を持っていることがわかりますね。
2.4 アブレーションスタディ
ここではノイズの大切さと反復的な学習方法の大切さについて深掘りしていきます。
2.4.1 Self trainingにおけるノイズ
本研究において使っているノイズはRand Augment、Stochastic DescentそしてDropoutの3つで、それぞれStudentモデルにのみかけています。ここではノイズの必要性およびTecherにもノイズをかけた場合を見ていきます。その結果が以下の表です。ベースモデルにはEfficientNet-B5を使っており、w.はwith, w/oはwithoutを意味しています。
Studentモデルにノイズをかけることで、StudentモデルがTeacherモデル以上の知識を学べていることがわかりますね。
2.4.2 反復的な学習
今回以下図のように反復的に学習させてベストパフォーマンスを達成しました。
3回のイテレーションを行うことでSoTAを達成していますが、次の表のように各イテレーションでの精度を見てみるとイテレーションごとに精度が上がっていることがわかり、反復的な学習の重要性がわかります。Batch Size Ratioはラベルなしデータとラベル付きデータのバッチサイズ比です。
2.4.3 その他アブレーションスタディ
ここではさらなる理解のために8つほどアブレーションスタディをしています。それによってわかったこと8つをまとめて紹介します。
- Teacherモデルは大きい方が高い精度
- ラベルなしデータは大量に使うべき
- 特定のケースではソフト擬似ラベルの方がハード擬似ラベルよりも良かったが、どちらを使うかはケースバイケース
- Studentモデルも大きい方がよい
- 小さいモデルにはdata balancing(=全ラベル同じデータ数に調整)は有効
- ラベルなし+ラベル付きデータによる学習は、事前学習+ファインチューニングによる学習よりも良い
- ラベルなしデータのバッチサイズをラベル付きデータよりも大きくすると高い精度
- Studentモデルの初期値はランダムで良い
3. 結論
self trainingのstudentモデルに強いノイズをかけることでImageNetに対してSoTAを記録し、高いロバスト性を示したNoisy Student。これまで深層学習では「事前学習からのファインチューニング」というのが主流な学習方法でしたが、これからはもしかするとこの記事で紹介したようなSelf trainingが主流になっていく可能性もありそうです。そんなNoisy Studentを使ってみたいという方はぜひ実装を試してみてはいかがでしょうか!
この記事に関するカテゴリー