論文紹介 OCGAN:One-class Novelty Detection Using GANs with Constrained Latent Representations
この論文を選んだ理由は1つのクラスから異常検知を行えるから.またネットワークが苦手としていることを自分で探しつつ訓練をするアプローチが面白いと感じたから. この論文はCVPR 2019に採択された論文です. これドクターの学生が書いた論文なんですね, アメリカのドクター化物ですね.
勘違いしているところがあればご指摘いただけたら幸いです.
またスマホ版で見ると文字化けする可能性があるので, PC版で読んでいただくことを推奨します.
概要
- 異常検知のモデル.
- 訓練時の入力は1クラスのみで可能.
- Auto-encoderを使用.
この論文での見どころは4つ
- 潜在空間に制限を与える.
encoderの出力に tanh を利用 - Discriminatorを潜在変数に使用.
encoderの出力が一様分布になるように訓練を行う. - 2つめのDiscriminatorを入力空間に使用.
潜在空間内でどのような入力を受けてもin-classな出力ができるように訓練する. - generate-descent dased sampling techniqueの導入.
out-of-classを生成するような潜在空間内の点を探索.
より効果的なDecoderの訓練になる.
- 潜在空間に制限を与える.
Proposed Method : OCGAN
Motivation
in-classが訓練に用いられるクラスつまり異常なしの画像. 一方,out-of-classは異常ありの画像を表す.
Generatorはauto-encoderを用いる. Generatorはどのような入力を受けてもin-classの画像を生成するように訓練を行う. out-of-classな入力でもin-classの画像を出力するため,大きなlossの画像をauto-encoderが出力することができる.
Denoising auto-encoder
GeneratorにはDenoising auto-encoderを用いる. 過学習に強くなる.
損失関数については以下の式で与えられる. $$ l_{MSE}=||x-Decoder(Encoder(x+n))||^2_2 $$ $$ where \ n \sim \mathcal{N}(0,0.2) $$
Latent Discriminator
このDiscriminatorを用いるモチベーションはEncoderの出力が一様分布になるようにすること.
encoderの出力(潜在空間)がの一部しか使われない状況を避けたい. auto-encoderはどんな入力を受けてもin-classの出力をすることがこのモデルの目標である. 訓練時に出現していない潜在変数をDecoderが受けた時in-classな出力をする保証がない. Decoderがなるべく様々な潜在変数で訓練できるよう,encoderの出力の分布が一様分布になるように(encoderを)訓練する. よって潜在変数に対して,Discriminatorを使用する(Latent Discriminator). よって損失関数は $$ l_{latent} = - (\mathbb{E} [\log D_l(s)]+\mathbb{E} [log(1-D_l(Encoder(x+n)))]) $$ $$ where \ s\sim \mathbb{U(-1,1)}, x\sim p_x $$
上記の目的関数を $$ \max(Encoder)\min(D_l)l_{latent} $$ で訓練を行う. 訓練が完全に達成されればencoderの出力は完全に一様分布になる $$ Encoder(x+n) \sim \mathbb{U}(-1,1) $$
Visual Discriminator
Visual DiscriminatorはDecoderにより生成された画像か一様分布から生成されたかin-classの入力から生成されたかどうかを判定する. latent Discriimnatorでencoderの出力が一様分布になるように訓練しているため, Decoderに均一分布の入力がある場合をfakeとして訓練し,実際のEncoderの出力をtrueとして訓練する. 目的関数は以下である.
$$ l_{visual} = - (\mathbb{E}[\log D_v(Decoder(s))]+\mathbb{E}[log(1-D_v(x))]) $$
$$ where \ s \sim \mathbb{U} (-1,1), x\sim p_l $$
この損失関数を以下のように訓練する.
$$ \max(Decoder)\min(D_v)l_{visual} $$
Informative-negative Mining
上記のような手法を用いても潜在空間内でout-of-classを生成してしまうことがあった.
つまり上記の訓練手法のみでは潜在空間全てを訓練することができなかったということである. この問題を解決するため,低クオリティの画像を生成する潜在空間を場所を探すアプローチをとった. そしてその領域から生成された画像(クオリティの低い画像つまりout-of-classのような画像上の図でハイライトになっている部分)をinoformative-negativeなサンプルと呼ぶ. Informative-negativeなサンプルを探すため,潜在空間に対して勾配効果方を用いる. Informative-negativeを生成してまう潜在空間を探すためにnetworkのパラメータを更新するのではなく潜在空間を更新する.
Classifier
Decoderから出力されたサンプルをpositiveとnegativeのサンプルに用いる. 均一分布の中からランダムにサンプリングされた潜在変数から生成された画像をnegativeとして扱う.
Full OCGAN Model
OCGANの訓練するネットワークの全体像は以下に示している. このネットワークは2スッップにわかれている. 1ステップ目は分類器以外の全てのsub-networkを固定しClassifierの訓練を行う. 実際の画像で生成されたものをTrue, 均一分布をDecoderに入力して得た画像をFalseとして学習を行う. 次に分類器の勾配を固定してauto-encoderと二つのDiscriminatorを訓練する.
$$ 10 l_{MSE} + l_{visual} + l_{latent} $$
の比率でlossを計算した. 詳しいアルゴリズムに関しては,以下の図で詳しく説明する
ここで注目してほしいところは, $l_{mse}$ を計算する際にDecoderに代入する $l_2$ である. $l_2$ はInformative-Negative なサンプルを生成するような潜在空間を勾配効果法で局所解を求めたものである. その $l_2$ をDecoderの入力として入力して,訓練を行っている. ネットワークの苦手としている入力を探してそこを重点的に訓練するイメージだと思う.
Esperimental Results
Dataset and Experimental Results
結果
単純な誤差率を表す. カラーの画像の場合に弱い傾向にあるのかもしれない. アイディア自体は面白いと思った. ネットワークのauto-encoderの形状を変化させることでさらなる高性能化を期待できるかもしれないと考えた.