はじめに
ICLR 2018 から以下の論文
[1] L. Deecke, et. al. "ANOMALY DETECTION WITH GENERATIVE ADVERSARIAL NETWORKS"
のまとめ
論文のページ
https://openreview.net/forum?id=S1EfylZ0Z
関連記事としてGANsを使ったモデル anoGAN のまとめ
https://qiita.com/masataka46/items/09e4e13be097a68174cd
特にanoGANとの違い、という観点でまとめる
概要
まずanoGANと同じ点。
- GANsを使った異常検知モデル
- GANsで正常データを生成するよう学習した後に、与えられた画像に対応するノイズを探索することでその画像が正常か異常かを判定する
次にanoGANと違う点。
- ノイズ探索フェーズにおいて、$z$ の初期値を複数とり、異常scoreの算出においてはそれらの平均値を用いる
- ノイズ探索フェーズにおいて、generatorのパラメータも更新する
- ノイズ探索、及び異常scoreの算出にdiscriminatorの出力(または中間層の出力)を用いない
ノイズ探索フェーズのアルゴリズム
以下([1]algorithm 1)がノイズ探索フェーズでのアルゴリズム。
ロス:$l$
generatorのパラメータ:$\theta$
ノイズ:$z$
ノイズ探索の学習
anoGANと同様にノイズ $z$ を勾配降下法で更新する。
z_{j,l} \leftarrow z_{j,l-1} - \gamma \cdot \nabla_{z_{j,l-1}} l (g_{\theta_{j,l-1}} (z_{j,l-1}), x)
anoGANと違ってgeneratorのパラメータも更新する。
\theta_{j,l} \leftarrow \theta_{j,l-1} - \gamma_{\theta} \cdot \nabla_{\theta_{j,l-1}} l (g_{\theta_{j,l-1}} (z_{j,l-1}), x)
generatorのパラメータまで更新してしまって大丈夫なの?って疑問が湧くだろう。更新された $g'(z)$ は正常値で学習した $g(z)$ とは異なるので、それで正常・異常の判定ができるのか?と。
その辺、Bojanowski[2]とかに書かれているらしいが、ちゃんと読んでません。
異常scoreの算出
anoGANと違って探索は $z$ の初期値を変えて $n_{seed}$ 回行う。 異常scoreはこれらの平均値とする。
A(x) = \frac{1}{n_{seed}} \sum^{n_{seed}}_{j=1} {l}(g_{\theta_{j,l-1}} (z_{j,l-1}), x)
reference
[2] P. Bojanowski, et. al."Optimizing the Latent Space of Generative Networks"