ディープラーニングを使った異常検知

異常検知システムの機械学習(Vol.7)

  • 2018.10.09
  • 株式会社システムインテグレータ
異常検知システムの機械学習(Vol.7)

ディープラーニングを使った異常検知システムは、大きく学習プロセスと判定(推論)プロセスに分かれます。Vol.6でエッジコンピューティングによる判定プロセスを解説しましたが、今回はその前処理となる学習プロセスをクラウドコンピューティングで行う方法を取り上げます。
できるだけ具体的にイメージをつかんでもらうために、当社の異常検知システム「AISI∀ Anomaly Detection」(アイシア 異常検知)の学習で使っているマイクロソフト社のクラウドサービスMicrosoft Azure Machine Learning Servicesをモデルにして説明します。

クラウドで学習、エッジで判定

Azure Machine Learning Service は、マイクロソフトクラウドAzureの提供する機械学習サービスです。機械学習モデルの構築とトレーニングを行う環境が整備されており、学習済モデルをエッジコンピュータに簡単にデプロイする仕組みも持っています。

図1は、”クラウドで学習してエッジで判定”する異常検知モデルの構成例です。ここでは学習環境にマイクロソフトのAzure Machine Learning Service を使っていますが、グーグルならGoogle Cloud Machine LearningやGoogle Colaboratory、IBMならWatson Sutudio、アマゾンはAmazon SageMakerというようにAIベンダ各社からクラウド学習環境が提供されています。

1

図1:クラウドで学習、エッジで判定

lights.pngJupyter NotebookとColaboratory(Colabo)

Jupyter Notebook(ジュピター ノートブック)とは、データ分析や機械学習を行うのに手軽で便利なツールでオープンソースで提供されています。ブラウザで動作し、PythonやRなどのプログラムを対話型で実行することができるほか、プログラム内容やメモ、実行結果をNotebookという形式のファイルにまとめて保存して再利用できます。Notebookはチームメンバーで共有できますので、チームで作業するのにとても重宝します。

Colaboratoryは研究や教育を目的としてGoogleが無料で提供している機械学習用ツールです。Jupyter notebook環境なのでChromeやFirefoxなどのブラウザで動作し、設定作業がなくても簡単に使えます。クラウド上にPython環境が予め用意されており、高性能なGPUを12時間も使用できます(12時間で切断するのですが何回でも使えます)。作成したnotebookはGoogleドライブに保存されチームメンバーと共有することができますので、異常検知の学習でああだこうだやるのには最適なツールです。
ただし、アドホック(暫定的)な研究・教育を目的としてインタラクティブな利用を想定したサービスのため、異常検知の実運用段階に入ってから利用するのはマナー違反という感じでしょうか。なお、日本語でコラボレーションをコラボと略するように、あちらでもColaboratoryはColaboと呼ばれています(ただし、コラボレーションの英語はCollaborationなので、ちょっとスペルが違います)。

一般にこれらのクラウド学習環境では、図2のような機能がマネージド・サービスで利用できます。自分でサーバーやデータベースなどのマシン環境を用意して各種ライブラリやツールをインストールするのに較べると、必要なインフラがすぐに使えるようになっていますので、(請求金額を気にしながらではありますが)はるかに楽に学習できます。

lights.pngマネージド・サービス

マネージド・サービスとは、システムの利用・運用に必要なデータや通信インターフェース、セキュリティ、運用支援などを一体化して一括提供する運用サービスのことです。

2

図2:クラウド学習環境のサービス

(1) ビルド

基本的に開発や機械学習に必要な環境は用意されているので、アカウントを登録して環境を整えるだけですぐに利用可能となります。また、クラウドはデータベースやストレージをスケーラブル(必要に応じて容量を拡大縮小できる)に利用できるため大量データを管理するのに適しており、ローカルで集めた学習データをクラウド上に保持して利用しやすいです。

(2)機械学習

TensorFlowやCognitive Toolkit、KerasなどのAIライブラリ(プラットフォーム)やJupyter Notebookなどのオープンソーステクノロジーがすぐ使えます。また、必要に応じてGPUを利用でき、スケールアップやスケールアウトも簡単に行えます。

(3)チューニング

最近のクラウド学習環境には、学習モデルの各パラメータのチューニングを楽にするハイパーパラメータ機能が用意されています。モデルをトレーニングする際に必要な学習データの適用、ニューラルネットワークの重み、トレーニングプロセス自体の管理、などの各種パラメータを簡単にチューニングして結果を管理できるので、データサイエンス(データ分析)作業が楽になり、学習時間を短縮できます。

(4)デプロイ

デプロイとは、”移植して使える状態にすること”です。学習済モデルを世代管理し、CL/CDツールを使ってエッジコンピュータに簡単にデプロイできます。

lights.pngCL/CDツール

CL/CDとは、Continuous IntegrationとContinuous Deliveryの略で、日本語では「継続的統合」と「継続的デリバリー」です。CIはアジャイル開発のプラクティス(技法)として昔から有名な言葉で、開発途中または保守などで生じたソフトウェアの変更を貯めてからリリースするのではなく、変更の都度ぱっと本番環境にリリース可能にすることです。

通常、開発者は変更したプログラムのビルドを作成し、これをメインブランチ(本番と同じアプリケーション)にマージします。継続的統合は、ビルドをできる限り頻繁にマージできるように、新しいコミット(変更の確定)がメインブランチに統合されるたびに、アプリケーションが壊れないことを確認するためのテストの自動化に重点を置いています。

一方、CD(継続的デリバリー)は、CI(継続的統合)を拡張した概念です。テストを自動化するだけでなく、リリースプロセスも自動化して、ボタンをクリックすることでいつでもアプリケーションをデプロイできます。

最近は、さらに一歩進んだプラクティスとしてもう1つのCDが登場しています。こちらはContinuous Deploymentの略で、日本語だと「継続的配備」でしょうか。このプラクティスでは、プロダクションパイプラインのすべての段階が全自動となり、テストに失敗すると新しい変更が本番環境に適用されなくなります。

オンプレミスのCIツールとしてJenkinsやConcourseなどが有名でしたが、最近はクラウド型のCI/CDが数多く登場してクラウドの標準機能として利用可能になっているのです。

Microsoft Azure Machine Learning Servicesとは

Azure Machine Learning Servicesの各サービスについて説明しましょう。

(1)Azure Portal

Azure Portalは、Azureのサービスを管理する管理コンソールです。これを使ってAzure Machine Learning Serviceのサービスを確認してみましょう。まず、Azureの無料アカウントを作成してからAzure Portalにサインインし、ワークスペース(自分の作業環境)を作成します。次にAzure notebook(Azure用に設定されたJupyter notebook)を開いて、Pythonでプログラミングします。そしてプログラミングされたコードを実行し、その結果をRun tableで確認します。

人工知能(AI)に関するお役立ち資料

最近、MNIST(手書き数字データベース)やscikit-learn(Pythonの機械学習ライブラリ集)を使用して画像分析モデルをトレーニングするチュートリアルも用意されました。チュートリアルは図3のように2部構成となっていて、Jupyter Nootbookとして提供されています。第1部は学習データをリモートに用意してローカルとリモートでそれぞれトレーニングし、学習済モデルをワークスペースに登録する手順、第2部はその学習済モデルをローカルでテストした後、Azure Container Instances(ACI)にデプロイしてリモートでもテストする内容になっています。

この2部構成からなるチュートリアルを通して、学習データをクラウド上に置いた状態で、学習プロセスはローカルでもリモートでもできること、判定プロセスもローカルでもリモートでもできること、学習済モデルはコンテナに詰めてローカルとリモートでやり取りできること、などを体感できます。

3

図3:Azure Machine Learning Service のチュートリアル

(2)コンテナ

コンテナ(Container)といえば、一般に貨物輸送に使われる容器で知られていますが、ITの世界では別のバーチャルな入れ物を意味します。「クラウドで学習、エッジで判定」を実施するのにコンテナは重要な役割を果たしますので、ここで簡単に説明します。

コンテナは仮想化技術の発展系でポータビリティを増しています。仮想化は図4左のようにアプリケーションとゲストOSを仮想環境(Vertual Machine)にパッケージする技術です。仮想環境ごとに異なるOS上でアプリケーションが動作できるのですが、ゲストOSはホストOSの上でハイパーバイザーによりエミュレートされて動作するため、オーバーヘッドが生じてパフォーマンスが低下するのが難点でした。

コンテナも基本構造は同じです。アプリケーションやそれが動作するためのミドルウェアをコンテナイメージと呼ばれるものにパッケージ化し、ハイパーバイザーに相当するコンテナ・エンジンがホストOSとの間を取り持ちます。ただし、こちらはOSのカーネル(コア)部分をホストOSとして共通化し、ゲストOSのライブラリ部分のみコンテナに持つので、ハイパーバイザーに比べてオーバーヘッドを小さくすることができるのです。

2013年にDockerというコンテナ技術がオープンソースとして公開されてから、多くの開発現場でコンテナを使ってデプロイを簡単にする仕組みが使われてきました。そして、異常検知においてもクラウドで学習したモデルをエッジにデプロイしたり、ローカルで研究したモデルをクラウドにアップしたりするのにコンテナが使われるのです。

4

図4:仮想化とコンテナの違い

(3)Azure Container Instances(ACI)

Azure Container Instancesは、AzureクラウドでDockerコンテナを使うためのサービスです。
最近のクラウドは、こうしたコンテナ技術を標準実装していて簡単に利用できます。こちらもチュートリアルがありますので、図5を参照しながらチュートリアルベースで説明しましょう。

チュートリアルは3つのステップで構成されています。ステップ1では、予め用意してあるNode.jsをGitHubから入手し、ローカルにコンテナイメージと呼ばれる”容器”を作って、その中にコピーして動作確認しています。

lights.pngGitHub

GitHubは、さまざまなプログラムソースコードをポータル管理できるホスティングサービスです。開発現場でよく使われるGitというバージョン管理システムの仕組みを利用しており、全世界の人々がソースコードやデザインデータなどを保存、公開できます。

利用者は自分のソースコードをアップしてバージョン管理することができます。そのソースを多くのユーザーと共有することができるので、オープンソースを公開するのにも使われています。運営保守はGitHub社によって行われていますが、2018年6月にマイクロソフトが同社を買収すると発表しました(ちょっとびっくり)。

次のステップでは、Azureクラウド上にAzure Container Registryというインスタンス(物流倉庫)を作成して、そこにローカルで作ったイメージ(容器)をプッシュ(運搬)します。そして、最後にコンテナをAzure Container Instancesにデプロイしてアプリケーションを動作しています。

このチュートリアルを行うことで、ローカルからクラウドにコンテナが運搬されて、ローカルで作ったアプリケーションがクラウド上ですぐに実行可能になる仕組みが理解できると思います。

5

図5:Azure Container Instancesのチュートリアル

Azure IoT HubとAzure Iot Edge

図1の中にあるAzure IoT HubとAzure Iot Edgeは、それぞれクラウド側とローカル側の双方向通信を行いうためのハブです。IoTから発信される情報、IoTに送信される情報は、機密保護および安全面からセキュアでなければなりません。Azure IoT Hubは、IoTデバイスごとの認証を管理し、セキュリティで保護された通信によりAzure Iot Edgeを通じてエッジにつながるすべてのIoTデバイスを監視したり、メッセージを送信したり、学習済モデルをエッジ端末に配布したりできます。

Azure IoT Hub

Azure IoT Hubは、現場で動く数多くのIoTデバイスをクラウドで一括管理するためのマネージドサービスです。アプリや端末からのデータを処理するAzure Event Hubsと同様のメッセージングサービスなのですが、こちらはエッジとIoTデバイスに特化していて、”デバイス to クラウド”と”クラウド to デバイス”の双方向コミュニケーションを行います。

デバイス to クラウドでは、テレメトリーを使ってIoTデバイスの状態を把握し、デバイスに異常が発生した際に他のAzureサービスにメッセージを送信することができます。また、デバイスからのファイルのアップロードも行えます。
クラウド to デバイスでは、クラウドからデバイスにコマンドやメッセージを送信し、デバイスが確実に受信できたかどうかの要求/応答メソッド(処理手続き)を管理します。

lights.pngテレメトリー(Telemetry)

テレメトリーとは、テレメータ(遠隔センサー)を使って遠隔地の計測データをコントロールセンターに送信する自動計測手法です。従来から電力計やガスメーター、自販機などのデータをコントロールセンターに送信するなどの使い方で実用化されていた技術ですが、IoTの普及により、より広範囲のセンサー情報がクラウドなどに集積するのに応用されつつあります。

Azure IoT Edge

IoT Edgeは、クラウドから受け取ったワークロード(学習済分類器や分析、アプリケーションなど)をコンテナ化して各エッジデバイスに配布するローカル側の”物流センター”です。Azure Cognitive Services、Azure Machine Learning Service、Stream Analytics、Functionsなどのクラウドのワークロードをパッケージ化したコンテナを受け取り、これをリアルタイムにエッジ端末に配布(デプロイ)します。

AIを使った異常検知のケースで説明すると、Azure Machine Learning Serviceを使って正常・異常を判定できるように機械学習された分類器(AIモデル)は、Dockerコンテナにパッケージ化された上でAzure IoT HubからAzure IoT Edgeに送られ、Azure to Edgeランタイムという配布機能を使ってIoTハブやエッジ端末に配備(デプロイ)されます。(注: Azure Machine Learning Servicesは、執筆時点でまだプレビュー公開のため、HUBとして配布することがうまく行かないことがありました)。

ローカルからクラウドへのインターネット回線が不安定な場合のロバスト性も高まります。ネットがダメになってもエッジ端末を安全に動作させることができ、再度接続された時点で最新のデバイス状態がクラウドに同期されます。クイックスタートのために、AI Toolkit for Azure IoT Edgeというチュートリアルが用意されていますが、これは、エッジ端末上でAIを動作させるためのスクリプト、サンプルコード、チュートリアルのセットです。

(5) Azure Files

Azureクラウドには標準のリレーショナルデータベースとしてSQL ServerベースのAzure SQL Databaseが用意され、noSQLとしてはAzure Cosmos DBがあります。もちろん、MYSQLやMongoDBなど他のデータベースも利用可能です。

このほかにストレージサービスとして、Azure BLOB、Azure Files、Azure Queue、Azure Tableという4つのデータサービスが用意されています。Amazonクラウドが得意な人は、AWS Lambdaのようなものと思っていただければいいでしょう。機械学習に使う学習データ(画像ファイル)は、バイナリデータを格納できるBLOBに入れることもできますが、当社ではAzure Filesにアップロードしてファイル共有する方法を採択しています。

Azure Filesは、サーバーメッセージブロック(SMB)という標準ネットワークファイル共有プロトコルを使ってローカルおよびクラウドの仮想環境からファイル共有できます。また、よりセキュアな接続にしたい場合は、ファイルサービスのRESTインターフェースを介して共有されたファイルにアクセスすることができます。

lights.pngRESTとRESTful

RESTとはRepresentational State Transferの略で、Roy Fieldeing氏が2000年に提唱した複数のソフトウェアを連携させるのに適した設計原則です。この原則に則って作られたHTTPやXMLを使ったWebベースのインターフェースがRESTful APIです。RESTfulなインターフェースを持つWebサービスに対しては、外部からHTTPメソッドでアクセスして簡単にデータの送受信を行うことができます。

(6) Azure Function

Azure Functionは、小規模なプログラミングコードをクラウドで実行できるサービスです。クラウド上にサーバーを構築しなくとも、クラウド上でパパっとプログラムコードを実行でき、実行に要した時間だけ課金されるサーバーレスコンピューティングになっています。例えば、学習データがアップされたときに、自動的にサイズをリサイズして統一したり、不適切な画像をはじいたりする処理をプログラミングして置いておくような使い方に便利です。

執筆時は、C#やJavaScriptなどの言語は正式サポートされていましたが、JavaはPreview(正式サポート前の公開)、Pythonは試験段階(取りやめる可能性あり)でした。

【麻里ちゃんのAI奮闘記】クラウドで学習するってどんな感じ?

img

麻里:Azure Machine Learning Serviceのいろいろな機能はだいたいわかったわ。で、これらがどう異常検知とつながるかをもう一度おさらいさせて。
先輩:OK。じゃあ、図6の学習プロセスを見ながら説明しよう。まず、カメラで撮影した動画が静止画の集まりとしてAzure Filesに格納されるのはいいかな。
麻里:はい、動画はパラパラ漫画で、カメラのシャッター速度が5fpsなら1秒に5フレームの静止画が撮影されているってことでしたね。
先輩:うん。図6ではカメラから直接Azure Filesにアップしているように描かれているだろう。その方法も可能だけど、うちではローカルのサーバーにいったん貯めて、SMBで共有してバッチ送信しているんだ。
麻里:ほうほう。
先輩:Azure Filesはクラウドとローカルでセキュアにファイル共有できるから、ローカルマシンのアノテーションツールから直接、パラパラ漫画にラベル付けすることもできる。
麻里:正常品と異常品を学習するケースだと、アノテーションが必要になるってことね。そして自動でリサイズしたり、クレンジング(不適切な画像の除去)する場合は、Azure Functionにそういう処理コードを書くわけね。
先輩:お、分かってきたね。で、ラベル付けや不適切な画像の除去ができたら、いよいよAzure Machine Learning Serviceを使って機械学習をする。Azure Machine Learning ServiceはTensorFlowやCognitive toolkit、Kerasなどメジャーなライブラリが用意されているので、お好きなのを選んでくださいね。
麻里水増し転移学習正則化ドロップアウトK分割交差検証ミニバッチ学習法などのテクを使って、過学習にならないようにトレーニングするわけね。
先輩:ほう、よく勉強してるね。最近のライブラリはこうした機能をパラメータ指定だけで簡単に使えるようになっているから便利だよ。
麻里:さらにAzure Machine Learning Serviceには、学習済モデルのパラメータを自動チューニングような機能もあるってわけね。
先輩:ほうよ。まあ、こうしたチューニング機能はAzureだけでなくGoogleクラウドでもAmazonクラウドでもあるけどね。Googleなんか、Cloud AutoML Visionというサービスで画像分析の機械学習自体の自動化もやっている。まだ、ベータ版だけどね。
麻里:そしてトレーニングした分類器はホールドアウト法で評価テストされ、基準以上の再現率が得られたら”合格”ってなるわけね。
先輩:ほうよ、ほうよ。で、学習済の分類器(AI)は、コンテナ化されてAzure IoT HubからAzure IoT Edgeに転送され、Azure IoT Edgeランタイム機能により各エッジ端末にデプロイされるって仕組みさ。
麻里:ほうね、ほうね。こうしてみると、やっぱり学習はクラウドの方が断然便利な気がするわ。
先輩:まあ、学習データをパブリックなクラウドに上げたくないってポリシーの企業やクラウド料金払うの嫌だって企業も多いけどね。
麻里:学習塾も英会話スクールもお料理教室も、すべからく学習ってお金かかるのね。やっぱり先輩に聞くのがタダだから一番いいわ。夕ご飯もおごってもらえるし・・・。
先輩:おいおい、学習っちゅうもんはな、お金かけないと身につかないもんなんだよ。ということで、今日の夜メシは麻里ちゃんのおごりで佐野ラーメン食べにいこう!
麻里:えっ、そ、それはないでしょう〜!変なこと言うんじゃなかったぁ・・・。
先輩:餃子とビールもお願いね。

6

図6:Azure Machine Learning Serviceによる学習

まとめ

一口にクラウドで学習って言っても、実際にどんなふうにやるのか分かっていない人が多いです。そこで、今回はAzure Machine Learning Serviceをモデルとして異常検知の学習方法を理解しました。当社で開発したディープラーニングを使った異常検知システム「AISIA Anomaly Detection」もAzure Machine Learning Serviceで学習、Edgeで判定というスタイルになっています。

AIの記事は巷に溢れていますが、異常検知についての情報はあまりないなぁって思ったので「AISIA Anomaly Detection」の技術エッセンスを取りまとめてお伝えしてきました。これまでの内容でだいたいのイメージは理解できたと思いますので、このブログも今回でおしまいにします。機会と気概(やる気)がふつふつと燃えて来ましたら「AI技術をぱっと理解する」「ディープラーニングを使った異常検知」に続く第3弾のブログを書きたいとも思っていますので、また、その時にお会いしましょう。

梅田弘之 株式会社システムインテグレータ :Twitter @umedano

AIをビジネスに活用するための基礎知識

新規CTA