【敵対的生成ネットワークによる異常検知】異常検知連載シリーズその3

こんにちは。スキルアップAI編集部です。

[第1回の記事](https://qiita.com/skillup_ai/items/a2c2e60df71c7f835371)において、深層学習による異常検知は、大きく3つのアプローチに分けられるという話をしました。第3回となる本記事では、それらアプローチのうちの1つである、敵対的生成ネットワーク(Generative Adversarial Network; GAN)による異常検知に焦点を当て、その派生手法を紹介していきます。敵対的生成ネットワークによる異常検知の基本的な考え方については、[第1回の記事](https://qiita.com/skillup_ai/items/a2c2e60df71c7f835371)をご参照ください。

第2回は[こちら](https://qiita.com/skillup_ai/items/24b746dea43e2b876de0)
深層学習による異常検知の記事一覧は[こちら](https://qiita.com/tags/%e6%b7%b1%e5%b1%a4%e5%ad%a6%e7%bf%92%e3%81%ab%e3%82%88%e3%82%8b%e7%95%b0%e5%b8%b8%e6%a4%9c%e7%9f%a5)

<目次>
1. 敵対的生成ネットワークによる異常検知
2. ADGAN
3. Efficient-GAN
4. f-AnoGAN
5. もっと詳しく学びたい方へ
6. 参考文献

# 1. 敵対的生成ネットワークによる異常検知
[第1回の記事](https://qiita.com/skillup_ai/items/a2c2e60df71c7f835371)で、AnoGANによる異常検知をご紹介しました。AnoGANでは、テスト画像1枚ごとに勾配法を実行する必要があるため、推論に時間がかかるという課題がありました。そのため、AnoGAN以降に発表された手法では、推論を高速に行うための工夫が取り入れられています。

図1に近年の敵対的生成ネットワークによる異常検知における主な手法を示します。ここからは、AnoGAN以外の3つの手法について解説していきます。
<img width="600" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/bce6e8b8-2088-d60d-91df-04c36c57df69.png">
図1. 敵対的生成ネットワークによる異常検知における主な手法

# 2. ADGAN
図2にADGAN[1]による異常検知の模式図を示します。AnoGANでは推論時にノイズを勾配法によって更新しましたが、ADGANではノイズだけでなく生成器のパラメータも推論時に更新します。生成器のパラメータも更新することによって、生成器が生成する画像をテスト画像により近づけることができます。これにより、少ない回数で最適なノイズを見つけることができるようになります。
<img width="600" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/3d0ebf26-3cf1-f247-6d8a-ec27fc963664.png">
図2. ADGANによる異常検知の模式図

# 3. Efficient-GAN
Efficient-GAN[2]では、画像からノイズを生成するエンコーダを導入したモデルであるBiGAN [3]を用いて異常検知を行います。図3にBiGANの構造を示します。BiGANでは、ノイズから画像を生成することを学習するのと同時に、画像からノイズを生成することを学習します。これが、双方向な学習であることから、BiGAN（Bidirectional Generative Adversarial Networks）と名付けられました。図3におけるEがエンコーダです。
<img width="600" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/4d2b889c-f8ae-ff46-bc39-1d239cb22d47.png">
図3 . BiGANの構造(参考文献[3]より引用)

図4にEfficient-GANの推論時の模式図を示します。Efficient-GANによる異常検知の手順は次の通りです。

1. 正常画像でBiGANを学習
2. テスト画像xをエンコーダに入力し、ノイズE(x)を生成
3. 2で生成したノイズE(x)を生成器Gに入力し、画像G(E(x))を生成<br>
  ※テスト画像xが異常画像の場合、正しく復元することができません。
4. テスト画像xと生成画像G(E(x))の両方を識別器に入力して、異常度A(x)を算出
<img width="600" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/41252e33-cabe-bc98-330c-5b6f57af3d7e.png"><br>
図4. Efficient-GANの推論時の模式図

# 4. f-AnoGAN
Efficient-GANでは、生成器や識別器の学習と同時に、エンコーダを学習しましたが、f-AnoGAN[4]では、生成器と識別器を学習させた後、別にエンコーダを学習させます。f-AnoGANでは、3つのアーキテクチャが提案されていますが、本記事では、1番性能が良いとされるimage-z-image-fast(izif)アーキテクチャについて解説します。

図5にizifアーキテクチャによる異常検知の模式図を示します。f-AnoGAN のizifアーキテクチャによる異常検知の手順は次の通りです。

1. 正常画像で敵対的生成ネットワークを学習
2. 生成器Gと識別器Dのパラメータを固定し、生成器Gが元の正常画像を復元できるように、エンコーダEを学習
3. テスト画像xをエンコード・デコードし、画像G(E(x))を生成<br>
  ※テスト画像xが異常画像の場合、正しく復元することができません。
4. テスト画像xと生成画像G(E(x))を用いて、異常度AR(x)とAD(x)を算出

<img width="600" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/3ef9d548-a07d-d95b-45e0-ab6af4ae17c2.png">
図5. f-AnoGAN(izifアーキテクチャ)による異常検知の模式図
(参考文献[4]より引用)

# 5. もっと詳しく学びたい方へ
本記事では敵対的生成ネットワークによる異常検知について、概括的に解説しました。スキルアップAIの[現場で使える異常検知基礎講座](https://bit.ly/3gIyrrU)では、機械学習による異常検知について、実務ですぐに使える知識を学ぶことができます。是非ともご検討ください。また、深層学習について詳しく学びたい方は、[現場で使えるディープラーニング基礎講座](https://bit.ly/3qNEyQm)もご検討ください。

第4回は[こちら](https://qiita.com/skillup_ai/items/97ec829e73dd092e2726)
深層学習による異常検知の記事一覧は[こちら](https://qiita.com/tags/%e6%b7%b1%e5%b1%a4%e5%ad%a6%e7%bf%92%e3%81%ab%e3%82%88%e3%82%8b%e7%95%b0%e5%b8%b8%e6%a4%9c%e7%9f%a5)

# 6. 参考文献
[1] [D. Lucas, V. A. Robert, R. Lukas, M. Stephan, and K. Marius: Image anomaly detection with generative adversarial networks, In European Conference on Machine Learning and Knowledge Discovery in Databases, (2018).](http://www.ecmlpkdd2018.org/wp-content/uploads/2018/09/223.pdf)
[2] [H. Zenati, C. S. Foo, B. Lecouat, G. Manek, and V. R. Chandrasekhar: Efficient gan-based anomaly detection, In International Conference on Learning Representations, (2018).](https://arxiv.org/pdf/1802.06222v2.pdf)
[3] [J. Donahue, P. Krähenbühl, and T. Darrell: Adversarial feature learning. In International Conference on Learning Representations, (2017)](https://arxiv.org/pdf/1605.09782.pdf)
[4] [T. Schlegl, P. Seebock, S. M. Waldstein, G. Langs, and U. Schmidt-Erfurth: f-anogan: Fast unsupervised anomaly detection with generative adversarial networks, Medical image analysis, vol. 54, pp. 30–44, (2019).](https://www.sciencedirect.com/science/article/abs/pii/S1361841518302640?casa_token=Vo4t7ygeVKIAAAAA:9QW2W4TjmqJMKt70773J4YkU8FW5uSIMtj1RCktcyKC-xvjKwP9xrkP_-DuvudLTkAMdp62YlCk)

# 25卒向け！AIエンジニアになるための長期インターンプログラム参加者募集中！
25卒学生向けに、AIの基礎を学びながら就活も一括サポートする無料カリキュラムを提供しています。
修了するとE資格の受験資格も獲得できるプログラムとなっています！

<img width="700" alt="長期インターン" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/bfce4c26-1ebe-c54d-bacb-e804048a7a08.png">

**特長①AIエンジニアやデータサイエンティストの基礎が身に付く**
AIジェネラリスト基礎講座や機械学習のためのPython入門講座など、市場価値向上のための基礎を習得。

**特長②AI・データ分析領域の優良求人を紹介**
非公開求人や選考直結型インターンをご紹介し、早期内定の獲得をサポート。

**特長③長期インターンプログラム専用の学生コミュニティ参加可**
学生同士で就活情報をシェアしたり、学習を進めるうえでアドバイスをしあったりできるコミュニティに参加可能。

＞＞[長期インターン詳細](https://bit.ly/3pXW5JM)

☆☆☆
スキルアップAIのメールマガジンでは会社のお知らせや講座に関するお得な情報を配信しています。
配信を希望される方は[こちら](https://share.hsforms.com/1_XlReV-4Te-zcxCl9lhffA2mtef)

また、SNSでも様々なコンテンツをお届けしています。興味を持った方は是非チェックしてください♪
Twitterは[こちら](https://twitter.com/SkillupAi)
Facebookは[こちら](https://www.facebook.com/skillupai)
LinkedInは[こちら](https://www.linkedin.com/company/skillup-ai)