はじめに
前回,AnoGANについての記事を書きました.
今回,読んだものはAnoGANの改良手法であるADGANです.
間違いや勘違いがありましたらコメントかTwitterで知らせてください.
論文:ANOMALY DETECTION WITH GENERATIVE ADVERSARIAL NETWORKS(https://openreview.net/forum?id=S1EfylZ0Z)
Chainerで書いたコード:(https://github.com/ihatasi/Learning/tree/master/Generation/GAN/ADGAN)
概要
GANを使った異常検知手法でAnoGANの改良手法になっています. 目的もAnoGANと同じで入力画像xに最も近い(似ている)画像x'を生成できるzの探索とスコアによる異常判定です.
AnoGANとの違い
AnoGANと異なる点は主に以下の3つです.
Generatorも更新する.
Generatorも更新することによって,Generatorが入力に近い画像を生成できるようになります.Discriminatorを使わない.
Discriminatorを使わないので他の生成モデルと比較ができるようになりました.同じデータに対して複数回スコアを出して平均を取る.
zの初期値にスコアが依存しないようにするために行われています.
学習
上図は,ADGANの学習過程です. DCGANを学習し終わったことろ時点でのとをととして,kステップ学習をします.正常データの時は,最適なとが求まりますが,異常データの時は右端の画像のようにうまく求まりません.ここで注意が必要で,kの回数を多くし過ぎてしまうと,Generator更新により,入力画像に非常に似た画像が出てきてしまいます.著者はk=5が良いと主張しています. 上図は学習アルゴリズムで回個別の学習を行い,初期値依存にならないようにその平均を最終的なスコアとして出すようです. この時,とはに初期化されます. また,損失関数はです.入力画像xに最も似た画像のとき,ロスは最小になります.
評価
MnistとCifar-10を使って他の手法とROC-AUCで比べた結果です.Mnistにおいてはn=1だと初期値に大きく影響を受けてしまいますが,n=8だと初期値の影響が少ないためかn=1に比べて良くなっています.しかし,Cifar-10では個々のラベルに対してはうまくいっていないようです.全体で見れば,他の手法に勝っているらしいです.
追試
今回もMnistの1
を正常データとして追試を行いました.ここではLossにL2ノルムではなくL1ノルムを使っており,n=1でスコアを求めています.またk=10でラベル1
,7
,8
をそれぞれ入れます.
結果は上図のようになりました.正常データである1
に比べて,異常データである7
と8
はちゃんとスコアが高く出ています.
ちなみにk=100でラベル8
の画像を入れると以下のようになります.
Generatorが入力に対して育ち過ぎたため,異常データであってもちゃんと再構築できるようになります.
感想
前回紹介したAnoGANに比べたらGeneratorが学習するため学習回数がグンと減りました.しかし,まだデータごとに学習を行わないといけないので結構手間だなと感じます.次回も異常検知系の論文を読んでいきます.