敵対的画像生成で学習サンプル増量

2020.05.25

Lab研究員 北山

もくじ

  1. 1.これまでの整理
  2. 2.AutoEncoder
  3. 3.敵対的画像生成で学習サンプル増量
  4. 4.考察

これまでの整理

前回、中途半端に終わりましたので、いままでのお話を整理します。
ニューラルネットワークの画像分類器“C”に画像を入力すると予測クラスを出力します。

Lab_202005_01.png

ここで C は 分類器 Classifier の略

ニューラルネットワークの学習の仕組みである勾配法を逆手にとると、AIを騙す敵対的画像を生成することができます。

Lab_202005_02.png

敵対的画像を学習データに加えて再学習すると、AIは騙されなくなります。

Lab_202005_03.png

しかし、同じ手順で元画像から新たな敵対的画像を生成するとAIはまた騙されます
その画像を学習データに加えて再学習するとAIは騙されなくなります。

AIは自分で自分をだまし、さらに騙されないようにそれを学習する。
いたちごっこのようです。

ここで敵対的画像生成を画像分類器”C”から分離しジェネレータ”G”と呼ぶことにし、この繰り返し手順を次図のように表します。

Lab_202005_04.png

このサイクルを延々、繰り返すとAIがどんどん賢くなるのではないか、というのが本取り組みのモチベーションです。

この図からも分かるように分類器“C”と生成器“G”は直接つながっておらず、分けて考えることができそうです。そこで”C”と”G” を競わせながら個々に学習させようとしたのがGANです。

でもGANは囚人のジレンマに例えられるように”C”と”G”を競わせるため学習を収束させるのが難しいことで知られています。

AutoEncoder

ですので当初はGANではなく、 AutoEnCoderのアーキテクチャで安定的に学習できることを目指しました。

Lab_202005_05.png

AutoEncoderといってもジェネレータ“G”を学習させるのではなく、逆伝播で行っていたのと同じ演算を行わせようとしました。

Lab_202005_06.png

しかし、この方法には課題があります。
詳細は省略しますが、RELU関数など勾配を求めるために特徴マップを必要とするものがあり、コードが非常に複雑、面倒になるということです。

プーリングの逆伝播演算を実装するときは Unpooling関数を使うとか、他にもいろいろあるのですが説明が長くなるので今回は割愛します。
そこで AutoEnCoderは一旦、横において、まずは敵対的画像生成で学習サンプルを増量すると分類性能がどうなるかを検証しました。

敵対的画像生成で学習サンプル増量

検証に用いたデータは手書き数字のMNISTです。
テスト用サンプルは1万画像です。

学習サンプルは5万画像あり、それをすべて使えばテストデータの正解率が99%を超えることが分かっています。
ですが、今回は学習サンプルを少なくします。128、256、512画像の3パターンを試しました。

敵対的画像生成によるサンプル増量ありとなしを比較しました。
結果はかなり有望です↓

Lab_202005_07.png

ただし、安定的に性能を得るためにはいくつかコツや注意点があります。

学習エポック数
学習エポック数をかなり大きくしないと性能が安定しません。
学習用サンプルを更新し続けるためです。今回は256エポックとしました。

サンプルの増やし方
元画像を主軸に学習しないと、増量したサンプルでばかり学習していると不安定になり、場合によってはいつまでも正解率が上がりません。具体的には増量したサンプルを追加し続けるのではなく、新しいサンプルで古いサンプルを上書きすることで元画像の比率50%を維持しました。

共変量シフト
共変量シフト対策を行うことでかなり学習が安定しました。
その結果、前回紹介したLSR損失の顕著な性能向上が見られなくなりました。
→ その後、共変量シフトが発生していた原因はコードの不具合であることが分かりました。

画像生成時の係数の大きさ
この係数は学習係数に相当するハイパーパラメータで、元画像にどれくらい変化を加えるかを調整するためのものです。小さすぎるとあまり性能が上がりません。大きすぎると学習が収束しません。

考察

敵対的画像生成によるサンプル増量で何が起こっているのでしょうか。
次はサンプル増量しない場合の特徴量の分布です。

学習データ

Lab_202005_08.png

テストデータ

Lab_202005_09.png

次はサンプル増量した場合の特徴量の分布です。
金平糖のように四方八方に分布が広がっているイメージです。

学習データ

Lab_202005_10.png

テストデータ

Lab_202005_11.png

よく見るとプロット点が×印になっているものがありますが、これは予測を間違えたサンプルです

サンプルを増量した場合、

1.各クラスのバラツキが似ている(等分散性)
2.分布の中心が原点にほぼ一致
3.各特徴の成す角が大きい
4.敵対的画像生成による学習を延々と続けると各特徴がより先鋭化 ↓

Lab_202005_12.png

敵対的画像生成によるサンプル増量はクラスの分離性向上に効果がありそうです。
敵対的画像生成によるサンプル増量が、本当に効果があるのかどうか、さらに検証が必要です。

今回の一連の検証で AutoEnCoder の可能性を再認識しました。ある程度、結果を保証しなければならないビジネス用途では不安定な GAN よりも AutoEnCoder の方がよいのではないかと感じました。

次のステップとしては、本ノウハウのOneClass分類への応用や、特徴量の分布に着目した Variational AutoEnCoder の画像分類への導入などが考えられますが、別の機会にお話しできればと思います。

最後までお読みいただき、ありがとうございました。

  • LINE
  • Mail