【自己符号化器による異常検知】異常検知連載シリーズその2

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

[前回の記事](https://qiita.com/skillup_ai/items/a2c2e60df71c7f835371)において、深層学習による異常検知は、大きく3つのアプローチに分けられるという話をしました。第2回となる本記事では、それらアプローチのうちの1つである、自己符号化器 (AutoEncoder; AE)による異常検知に焦点を当て、その派生手法を紹介していきます。自己符号化器による異常検知の基本的な考え方については、[前回の記事](https://qiita.com/skillup_ai/items/a2c2e60df71c7f835371)をご参照ください。

深層学習による異常検知の記事一覧は[こちら](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. SSIM AutoEncoder
3. VAE-M
4. AE-Grad
5. もっと詳しく学びたい方へ
6. 参考文献

#1. 自己符号化器による異常検知の派生手法
近年、自己符号化器を基本とした様々な異常検知手法が提案されています。それら手法のうち代表的なものを図1に示します。
<img width="600" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/04727d53-177b-2cfe-429e-839d0cdb8654.png">
図1. 自己符号化器による異常検知の派生手法

ここからは、図1に掲載した3つの派生手法を解説していきます。

#2. SSIM AutoEncoder
SSIM AutoEncoder[1]は、Bergmannらによって提案された、損失関数に Structural SIMilarity (SSIM)を採用した自己符号化器です。SSIMは、2つの画像の類似度を測る指標です。
通常の自己符号化器には、「復元されたデータが少しぼやける」という課題があります。自己符号化器による異常検知において、「復元されたデータが少しぼやける」と、正常データでも復元誤差が大きくなってしまい、正常と異常を判別しにくくなることがあります。Bergmannらは、復元画像におけるぼやけを少なくすることを目的に、損失関数にSSIMを採用しました。

自己符号化器の損失関数には二乗誤差がよく用いられますが、二乗誤差は、2つの画像のピクセルどうしを単純に比較して算出されるものであり、隣接するピクセル間の関連性は考慮されません。つまり、二乗誤差は、1つ1つのピクセルが正しく復元できているのかを測る指標と言えます。ある1つのピクセルを正しく復元しようとするのは大変難しく、大きく外さないようにしようと思うと、平均的な値を返したくなります。これがぼやける原理です。

SSIMは、2つの画像の類似度を測る指標ですが、二乗誤差とは異なり、画像内の局所的な構造が正しく復元できているかを測ります。SSIM AutoEncoderでは、この SSIMを損失関数として用いることで、画像がもつ構造をうまく捉えられるようになり、ぼやけの少ない画像を復元できるようになりました。また、異常度の算出にも SSIMを用いることで、異常検知性能が向上する場合があります。

図2に、通常の自己符号化器による異常検知とSSIM AutoEncoderによる異常検知の比較図を示します。通常の自己符号化器による復元画像が全体的にぼやけているのに対して、SSIM AutoEncoderによる復元画像は入力画像を鮮明に復元できています。また、Segmentationという可視化結果を見ると、入力画像を鮮明に復元できたことにより、異常箇所をうまく特定できていることがわかります。
<img width="600" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/94739b9f-05db-c7ce-2f29-93f9383e2415.png">
図2. 通常の自己符号化器とSSIM AutoEncoderによる異常検知の比較
(参考文献[1]より引用)

#3. VAE-M
生成モデルである変分自己符号化器(Variational AutoEncoder; VAE)も異常検知に用いられます。

Matsubaraらは、変分自己符号化器の損失関数から、正則化項と正規化定数の対数部分を除いた非正則化異常度[2]を用いて、正常異常の判定を行う手法を提案しました。
本記事では、この手法をVAE-Mと呼ぶことにします。

正則化項と正規化定数の対数部分を除く理由は、次の通りです。正則化項は、画像内の微少な特徴を感知しないため、異常画像内の大部分が正常であると値が小さくなります。よって、微少な異常を含む画像を見逃してしまいます。
また、正規化定数の対数部分に含まれる標準偏差ベクトルは、複雑な正常画像についても大きくなってしまいます。よって、複雑な正常画像を異常画像と誤検知してしまいます。詳しくは原著論文[2]をご参照ください。

図3に、異常度に損失関数をそのまま用いた場合(右上段)と非正則化異常度を用いた場合(右下段)の異常度のヒートマップを示します。異常度に損失関数をそのまま用いた場合は、全体的に異常度が高くなっているのに対して、非正則化異常度を用いた場合は、異常箇所のみが異常度が高くなっていることが分かります。
<img width="500" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/e2f5549d-40a9-b39a-e514-b2809890cbe3.png">

#4. AE-Grad
AE-Grad[3]は、2020年にDehaeneらによって発表された手法です。AE-Gradでは、復元画像を入力画像に近づくように繰り返し更新します。

自己符号化器による異常検知では、「正常データだけで学習した自己符号化器は異常データを復元できない」という考えに基づいて異常検知を行うのが基本でした。異常データを復元できないというのは、異常データ内の異常部分もうまく復元できないし、異常データ内の正常部分もうまく復元できない、ということを意味します。異常データ内の異常部分も復元できないことは問題になりませんし、むしろ望ましいのですが、異常データ内の正常部分を復元できないことは、異常な部位の特定を困難にします。

図4にAE-Gradの模式図を示します。AE-Gradでは、デコーダが出力した復元画像を、入力画像から離れすぎないようにしつつ、正常データに近づけていきます。これによって、異常な入力画像中の正常部分もうまく復元できるようになります。
<img width="600" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/b0338bf8-a7a6-da99-67d7-90c801957780.png">
図4. AE-Gradの模式図

図5に通常の自己符号化器とAE-Gradによる異常検知結果の比較図を示します。AE-Gradでは、通常の自己符号化器に比べて、上手く異常箇所を特定できていることが分かります。
<img width="600" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/ad3d1c3a-237b-96de-bdde-30fdf5118a92.png">
図5. 通常の自己符号化器による異常検知とAE-Gradによる異常検知の比較
(参考文献[3]より引用)

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

第3回は[こちら](https://qiita.com/skillup_ai/items/47bc4c8d9d8c030837b5)
深層学習による異常検知の記事一覧は[こちら](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] [P. Bergmann, S. Lowe, M. Fauser, D. Sattlegger, and C. Steger: Improving Unsupervised Defect Segmentation by Applying Structural Similarity to Autoencoders, 14th International Joint Conference on Computer Vision, Imaging and Computer Graphics Theory and Applications, vol. 5: VISAPP, pp. 372?380 (2019).](https://arxiv.org/pdf/1807.02011.pdf)

[2] [M. Takashi, T. Ryosuke, and U. Kuniaki: Anomaly machine component detection by deep generative model with unregularized score, In 2018 International Joint Conference on Neural Networks, pp. 1–8. (2018).](https://ieeexplore.ieee.org/document/8489169)

[3] [D. Dehaene, O. Frigo, S. Combrexelle, and P. Eline: Iterative energy-based projection on a normal data manifold for anomaly localization, International Conference on Learning Representations, (2020)](https://arxiv.org/pdf/2002.03734.pdf)

# 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)