ディープラーニングを使って異常検知を実装するレシピの紹介(2022年8月更新)

# はじめに
※本記事は2022年8月に新着レシピを記事に追加して更新いたしました。
AxrossRecipeを運営している藤原です。

**[AxrossRecipe](https://axross-recipe.com/recipes)** とは、エンジニアの"教育"と"実務"のギャップに着目し、「学んだが活用できない人を減らしたい」という想いのもと、ソフトバンクの社内起業制度にて立ち上げたサービスです。

現役エンジニアによる実践ノウハウが"レシピ"として教材化されており、動くものをつくりながら、具体的な目的やテーマをもってプログラミングを学ぶことができます。

AxrossRecipe：https://axross-recipe.com
今回は、ディープラーニングを使って異常検知タスクを行うAxrossレシピをご紹介します。


# 異常検知について
異常検知とは、「異常を検知するタスク」のことです。古くから工場の生産ラインなどでは、出荷する前に製品の品質(長さや厚さなど)が設計されたものから大きくズレていないかを検査していました。

この分野は大きく品質管理や統計的工程管理といった呼び方で呼ばれ、平均からのズレを検知するX-bar管理図などが有名です。この管理図や多くの異常検知の背景には、「誤差が正規分布に従う」という確率分布を仮定した考えがあります。
たとえば、標準正規分布の確率密度関数では正負の方向に1.96だけの範囲を合計すると全体面積の95%になることが知られています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/2cc48a2e-a405-817f-6616-b156794d05ca.png)
（出典：[Wikipedia 正規分布より](https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E5%88%86%E5%B8%83)）

この性質を利用して、「製品の誤差も正規分布に従うならば、2x分散の範囲に95%が収まるはずだ」というのは自然に考えられることかと思います。故に、その値を超えたものは「めったに起こらないことが起こった」ととらえて「異常」とみなします。

異常の範囲を95%にするのか、99%にするのか、についてはその製品の性質や求められる品質の高さにより変化するものであり、人間の知見が必要になってきます。

つまり、異常度とは数式的にどれだけ他の値と異なるかを表す必要があり、どこからを異常とするかは人間が決める必要があるのです。人間が決める以上、ヒューマンエラーもつきものでした。

統計的学習(機械学習)の発展により、分布は必ずしも正規分布でなくとも近似できるようになったり、時系列の変化を予測値とのズレから評価したりできるようになりました。

さらに、ディープラーニング（深層学習）の登場は、異常検知の実現可能性と応用の幅を広げました。ディープラーニングは、数値的に表現することが困難な「画像」が分析可能となり、大多数のデータと比較して異なるデータ（外れ値・異常値）を検出しやすくなりました。

旧来までは複数のフィルターを使いこなし、細かいアノテーションやチューニングをその分野の職人（経験者）が長年かけて行ってきましたが、現在ではディープラーニングを扱う機能のあるソフトウェアや、オープンソースパッケージによって誰でも扱いやすく、瞬時に異常を検知できるようになったのです。


# 異常検知の活用例
ディープラーニングを使った異常検知は様々な分野に応用できます。
いくつか事例を挙げたいと思います。

画像
・医薬品カプセルが歪み検知
・布地や床材に付着している染み・汚れの検知
・並んでいる食品に傷がないか検知
・製造生産ラインにおける不良品の検出
・画像中の印刷物の異常検知
・画像中の人の不審な行動の検知

音声
・センサーデータから異常検知
・音響の検知
・心臓の心拍波形における異常検知

数値
・クレジットカードの不正利用検知
・サイバー攻撃（マルウェア）のふるまい検知
・マシンや設備の故障予知
・システムのエラー検知
・危険運転の検知
・異常気象や災害の予測

# ディープラーニングを使った異常検知レシピの紹介
今回5つレシピをご紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/e8d15e99-593e-c6fc-0355-a6b1acb48940.png)


## 画像データの異常検知
### [生産ラインを想定した画像異常検知の実践レシピ](https://axross-recipe.com/recipes/75)
投稿者：[@apple](https://axross-recipe.com/users/373) さん

TensorFlow, Kerasを用いて**オートエンコーダ**、畳み込みオートエンコーダ、サーポートベクトルマシン（SVM）を構築し、一様なパターンを持つ画像の異常を検知し、画像に映る異常部分をマーキングします。画像データの前処理からモデル構築、評価まで機械学習の画像処理タスクの一連の流れを体験することができます。

実務では、工場の生産ラインなどで画像をもとに正常の範囲を逸脱するもの（不良品や不純物等）の検出を自動化するときに活用されています。

https://axross-recipe.com/recipes/75

### [Pytorchを使ってGANによる異常検知を行うレシピ](https://axross-recipe.com/recipes/113)
投稿者：[@WIReg](https://twitter.com/WlReg)さん

動画や画像生成で有名な深層学習モデル**敵対的生成ネットワーク（GAN：Generative Adversarial Networks）**を、画像の異常検知の領域に応用した「**AnoGAN**」と「**EGBAD**」の手法をPyTorchを使って自ら実装していきます。GANの仕組みに対する理解を深め、GANの異常検知における実務活用例を学ぶことができます。

GANによる画像の異常検知は、工場での外観検査、農作物の品質検査、医療画像からの疾患検査、などが挙げられ、活用分野は非常に広いです。

https://axross-recipe.com/recipes/113

## 時系列データの異常検知
### [TensorFlow Kerasで時系列データの異常検知を行うレシピ](https://axross-recipe.com/recipes/273)
投稿者：[@KzhtTkhs](https://axross-recipe.com/users/802)さん

**TensorFlow Keras**を用いて再構成畳み込み**オートエンコーダモデル**を構築し、心電図の時系列データに対する波形の異常検知と、**Optuna**を用いたモデル構造探索の手法について学ぶことができます。

実運用では、センサーから取得した時系列データを取得・分析し、その特徴を観察することで、モーターの故障を未然に防ぐための異常振動検知など、製造業を中心とした機械のメンテナンス業務に応用可能です。

https://axross-recipe.com/recipes/273


### [時系列データから異常検知するレシピ](https://axross-recipe.com/recipes/510)
投稿者：[@12kaz](https://axross-recipe.com/users/7011)さん

PythonライブラリのMerlionを用いて、IsolationForest・LSTM、アンサンブル学習などを駆使し、時系列データの単変量異常検知・多変量異常検知を行う方法を学びます。

運用するサーバーのCPU利用率などのデータから異常を検知することによる予兆保全に応用可能です。

https://axross-recipe.com/recipes/510

### [Isolation Forestを用いた異常検知を実装するレシピ](https://axross-recipe.com/recipes/506)
投稿者：[@Kay Hosoda](https://axross-recipe.com/users/1532)さん

Isolation Forestという異常検知アルゴリズムを実際にプログラム動かしながら学ぶことができます。

ネットアクセスログから不正パケットを検出、クレジットカードの不正使用検知に活用することができます。

https://axross-recipe.com/recipes/506


# 最後に

今回は、AxrossRecioeで学べる**ディープラーニングを使った異常検知レシピ** を紹介しました。

AIを活用できる人材になるためのポイントは、
● 常に最新AI技術（モデルやライブラリ）やトレンド、ユースケースを**キャッチアップ**すること
● AIを使って何かアウトプットを出す**疑似体験**を繰り返すこと
● 様々なAI技術を動かしてみて**手触り感**を把握すること
だと思います。

ぜひAxrossRecipeのレシピを通して、プログラムの意味を考えながら写経（コードを実際に書き写す行為）し、実際に動くものをつくりながら学ぶことで、AIを活用できる人材が少しでも多く増やすことができたらと思います。
![Twitter広告1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/dd71a574-1d60-5f82-5470-593c9acd86fb.png)