Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

RUTILEA社内勉強会第4回 「敵対的生成ネットワーク(GAN)」

124 views

Published on

RUTILEA社内で定期的に行っている勉強会の第4回です.
第4回のテーマは”敵対的生成ネットワーク(GAN)”です.

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

RUTILEA社内勉強会第4回 「敵対的生成ネットワーク(GAN)」

  1. 1. 敵対的⽣成ネットワーク(GAN) 2020/1/10
  2. 2. Contents ▪ ニューラルネットワークの学習 ▪ 敵対的⽣成ネットワーク(GAN) ▪ GANによる異常検知 2
  3. 3. ニューラルネットワークの学習 3 ▪ ニューラルネットワークの学習 =パラメタの更新 ▪ どうやって学習する︖ ▪ 損失関数(loss)を設定しそれが⼩さくなるように 誤差逆伝播法で重みを更新していく ▪ 例︓クロスエントロピー誤差 𝐿(𝒚, 𝒕) = − ∑* 𝑡*log 𝑦* ▪ ニューラルネットワークの重要な要素 ▪ ネットワーク構造 ▪ 損失関数 𝑊1 𝑊2 𝒙 𝒉 𝒚 𝒉 = 𝑓 𝑊1 𝒙 + 𝒃 𝟏 𝒚 = 𝑔(𝑊2 𝒉 + 𝒃 𝟐) 0.3 0.7 𝒕 0 1 教師 ラベル
  4. 4. 敵対的⽣成ネットワーク(GAN): Generative Adversarial Network [Goodfellow+ 14] ▪ 画像⽣成分野で注⽬されている ニューラルネットワークの⼀種 ▪ 学習データの特徴を学習して それっぽい画像を⽣成することができる ▪ 2つのネットワークから成る ▪ Generator: ランダムノイズから画像を⽣成する ▪ Discriminator: 画像が本物か偽物かを識別する 4
  5. 5. 敵対的⽣成ネットワーク(GAN): ネットワーク構造 5 Generator Discriminator 𝑍 1 (Real) or 0 (Fake) ⽬標: Dに本物だと誤認識させる ような画像を⽣成する ⽬標: 本物と偽物を⾒分ける Real画像 Fake画像 潜在変数 (noise)
  6. 6. Generatorの学習 ▪ ⼆つのネットワークを交互に更新していく 敵対的⽣成ネットワーク(GAN): 損失関数 6 Real画像に関する項 Fake画像に関する項 DがReal画像を正しく 認識できるほど (=𝐷(𝑥)が1に近いほど) ⼤きくなる DがFake画像を正しく 認識できるほど (=𝐷(𝐺(𝑧))が0に近いほど) ⼤きくなる GがDを誤認識させるほど (=𝐷(𝐺(𝑧))が1に近いほど) ⼩さくなる Discriminatorの学習
  7. 7. GANによる異常検知: AnoGAN [Schlegl+ 17] ▪ GANを⽤いた教師なし異常検知の 先駆けとなった論⽂ ▪ 仮説︓ 正常データのみで学習した場合 GANは潜在空間上の𝑧から 異常データを⽣成することができない ▪ ⇨ 画像を潜在空間上に逆写像して 得られた𝑧から元画像が復元できれば正常 できなければ異常と判断 7 GAN: 潜在空間𝑧から観測空間𝑥に写像する𝐺(𝑧)を学習
  8. 8. GANによる異常検知: AnoGAN [Schlegl+ 17] ▪ 異常検知アルゴリズム 1. GANを正常画像のみで学習 2. 判定したい画像𝑥を潜在空間上の点𝑧@に逆写像 3. 点𝑧Aから画像を⽣成(𝐺(𝑧@)を計算) 4. 元画像𝑥と⽣成画像𝐺(𝑧@)を⽐較して差が⼀定以上であれば異常と判断 8 正常画像 異常画像 2. 潜在空間に 逆写像 𝑧@ 𝑧@′ 1. 正常画像のみで 学習したGANの Generator 3. 復元 4. 元画像との 差分をとる
  9. 9. GANによる異常検知: AnoGAN [Schlegl+ 17] ▪ 異常検知アルゴリズム 1. 2. 判定したい画像𝑥を潜在空間上の点𝑧@に逆写像 3. 4. 9 正常画像 異常画像 2. 潜在空間に 逆写像 𝑧@ 𝑧@′ 1. 正常画像のみで 学習したGANの Generator 逆写像はどうやって 求める︖
  10. 10. GANによる異常検知: AnoGAN [Schlegl+ 17] ▪ 逆写像を求めることは困難… ▪ ⇨ 損失関数を導⼊して最適な𝑧@を勾配法で探索する ▪ Residual Loss: ⽣成画像と元画像の(直接的な)差 ▪ Discrimination Loss: ⽣成画像と元画像の特徴量の差 (𝑓はDiscriminatorの中間層の出⼒) 10 正常画像で 学習した Discriminator 𝑥 中間層 Real / Fake 特徴量 SDTestと同じ
  11. 11. GANによる異常検知: AnoGAN [Schlegl+ 17] ▪ 勾配法とは… ▪ 解析的に解けない(微分が厳しいなど)ような関数の最⼩値や最⼤値を求めるためのアルゴリズム ▪ 関数𝑓(𝑥)の最⼩値を求めるとすると 1. 初期値𝑥を定める 2. 値𝑥における𝑓の傾き CD CE を数値微分で求める 3. 傾きと学習率𝜂にもとに𝑥を更新 𝑥 ← 𝑥 − 𝜂 CD CE 4. 傾きが0となる𝑥 を⾒つけるまで2〜3を繰り返す 11
  12. 12. GANによる異常検知: AnoGAN [Schlegl+ 17] 12 ▪ 異常検知アルゴリズム(訂正版) 1. GANを正常画像のみで学習 2. 判定したい画像𝑥に近い画像を⽣成できる点𝑧@を勾配法で求める i. 初期値𝑧@を定める ii. 損失関数𝐿(𝑧@)を計算し傾きを求める iii. 傾きと学習率をもとに𝑧@を更新 iv. 傾きが0となる𝑧@ を⾒つけるまでii〜iiiを繰り返す 3. 点𝑧Aから画像を⽣成(𝐺(𝑧@)を計算) 4. 元画像𝑥と⽣成画像𝐺(𝑧@)を⽐較して差が⼀定以上であれば異常と判断 ▪ Anomaly Score: 𝐴 𝑥 = 𝐿(𝑧@) 解決︕
  13. 13. GANによる異常検知: AnoGAN [Schlegl+ 17] ▪ 異常検知アルゴリズム(訂正版) 1. GANを正常画像のみで学習 2. 判定したい画像𝑥に近い画像を⽣成できる点𝑧@を勾配法で求める i. 初期値𝑧@を定める ii. 損失関数𝐿(𝑧@)を計算し傾きを求める iii. 傾きと学習率をもとに𝑧@を更新 iv. 傾きが0となる𝑧@ を⾒つけるまでii〜iiiを繰り返す 3. 点𝑧Aから画像を⽣成(𝐺(𝑧@)を計算) 4. 元画像𝑥と⽣成画像𝐺(𝑧@)を⽐較して差が⼀定以上であれば異常と判断 ▪ Anomaly Score: 𝐴 𝑥 = 𝐿(𝑧@) 13 問題点: 時間がかかる…
  14. 14. GANによる異常検知: Efficient GAN [Zenati+ 18] ▪ AnoGANの改良版 ▪ GANのネットワークに画像𝑥から潜在変数𝑧を求めるEncoderを追加(BiGANという) ▪ ⇨ 𝑧@の探索時に時間がかかってしまう問題を解決 ▪ Discriminatorは画像と潜在変数のペアを⼊⼒として(𝑥, 𝐸(𝑥)) / (𝐺(𝑧), 𝑧)を識別 14 1 (𝑥, 𝐸(𝑥)) or 0 (𝐺(𝑧), 𝑧) Realペア Fakeペア Realペア Fakeペア
  15. 15. GANによる異常検知: Efficient GAN [Zenati+ 18] ▪ 損失関数 15 Generatorの学習 Realペア(𝑥, 𝐸(𝑥))に関する項 Fakeペア(𝐺(𝑧), 𝑧)に関する項 Discriminatorの学習 DがRealペアを正しく 認識できるほど (=𝐷(𝑥, 𝐸(𝑥))が1に近いほど) ⼤きくなる DがFakeペアを正しく 認識できるほど (=𝐷(𝐺(𝑧), 𝑧)が0に近いほど) ⼤きくなる GがDを誤認識させるほど (=𝐷(𝐺(𝑧), 𝑧)が1に近いほど) ⼩さくなる Encoderの学習 EがDを誤認識させるほど (=𝐷(𝑥, 𝐸(𝑥))が0に近いほど) ⼩さくなる
  16. 16. GANによる異常検知: Efficient GAN [Zenati+ 18] ▪ 異常検知アルゴリズム 1. GANを正常画像のみで学習 2. 判定したい画像𝑥を潜在空間上の点𝑧@ = 𝐸(𝑥)を得る 3. 点𝑧Aから画像を⽣成(𝐺(𝑧@)を計算) 4. 元画像𝑥と⽣成画像𝐺(𝑧@)を⽐較して差が⼀定以上であれば異常と判断 ▪ Anomaly Score: ▪ : ⽣成画像と元画像の(直接的な)差 ▪ : ⽣成画像と元画像の特徴量の差 (𝑓JはDiscriminatorの中間層の出⼒) 16 ⼀発で終わり︕
  17. 17. まとめ ▪ GAN: GeneratorとDiscriminatorの⼆つのネットワークを競わせて学習させるモデル ▪ GANによる異常検知 ▪ アイデア: 正常画像のみで学習したGANは異常画像を復元できないのでは︖ ▪ ⇨ 画像を潜在空間上の点に逆写像し、それをさらに復元して⽐較することで正常/異常を判定 ▪ 潜在変数𝑧の求め⽅ ▪ AnoGAN: 損失関数を設定し勾配法で求める ▪ Efficient GAN: 画像から潜在変数を求めるEncoderをGANに追加して学習 17 以上です︕
  18. 18. 参考⽂献 ▪ Generative Adversarial Nets http://papers.nips.cc/paper/5423-generative-adversarial-nets ▪ Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker Discovery https://arxiv.org/abs/1703.05921 ▪ Efficient GAN-Based Anomaly Detection https://arxiv.org/abs/1802.06222 ▪ Adversarial Feature Learning https://arxiv.org/abs/1605.09782 ▪ 異常検知とGANのまとめ(ベースとなっている論⽂のおさらい) https://note.com/koichirot11/n/n24151f3c7af8 18
  19. 19. 参考⽂献(画像拝借) ▪ [簡単に分かる] プログラミング⾔語「Python」を使ったニューラルネットワークの作り⽅ https://ai-kenkyujo.com/2017/09/14/python-nn/ ▪ 本物はどれ︖ AIが⽣成した「顔」がリアルすぎて最終形態に突⼊ https://nazology.net/archives/26831 ▪ Deep Learningで「いらすとや⾵⼈間画像⽣成モデル」を作った話(DCGAN、 Wasserstein GAN) https://mickey24.hatenablog.com/entry/irasutoya_deep_learning ▪ AnoGANの論⽂を読んでMNISTの異常検知をしてみた https://qiita.com/NakaokaRei/items/231ec4efe42dfe79d1ff ▪ 誤差逆伝播法をはじめからていねいに https://qiita.com/43x2/items/50b55623c890564f1893 19

×