何もわからない

よくわからん

論文読み[ADGAN]

はじめに

前回,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つです.

  1. Generatorも更新する.
    Generatorも更新することによって,Generatorが入力に近い画像を生成できるようになります.

  2. Discriminatorを使わない.
    Discriminatorを使わないので他の生成モデルと比較ができるようになりました.

  3. 同じデータに対して複数回スコアを出して平均を取る.
    zの初期値にスコアが依存しないようにするために行われています.

学習

f:id:ihatasi:20190516024014j:plain
学習過程
上図は,ADGANの学習過程です. DCGANを学習し終わったことろ時点でのzg_{θ}z_0g_{θ_0}として,kステップ学習をします.正常データの時は,最適なzg_{θ}が求まりますが,異常データの時は右端の画像のようにうまく求まりません.ここで注意が必要で,kの回数を多くし過ぎてしまうと,Generator更新により,入力画像に非常に似た画像が出てきてしまいます.著者はk=5が良いと主張しています.
f:id:ihatasi:20190516025524j:plain
学習アルゴリズム
上図は学習アルゴリズムn_{seed}回個別の学習を行い,初期値依存にならないようにその平均を最終的なスコアとして出すようです. この時,zg_{θ}n_{seed}に初期化されます. また,損失関数はL_R = \sum{||{\bf x}-G({\bf z})||_2}です.入力画像xに最も似た画像G({\bf z})のとき,ロスは最小になります.
f:id:ihatasi:20190516030418p:plain
ADGANの学習モデル

評価

f:id:ihatasi:20190516030541j:plain
他の手法との比較
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をそれぞれ入れます.

f:id:ihatasi:20190516031436p:plain
追試結果
結果は上図のようになりました.正常データである1に比べて,異常データである78はちゃんとスコアが高く出ています. ちなみにk=100でラベル8の画像を入れると以下のようになります.
f:id:ihatasi:20190516031627j:plain
k=100での異常データ(ラベル8)
Generatorが入力に対して育ち過ぎたため,異常データであってもちゃんと再構築できるようになります.

感想

前回紹介したAnoGANに比べたらGeneratorが学習するため学習回数がグンと減りました.しかし,まだデータごとに学習を行わないといけないので結構手間だなと感じます.次回も異常検知系の論文を読んでいきます.