de:code 2017セッションレポート:CNTKでディープラーニングを始めるには

2017年6月15日(木)
高橋 正和

日本マイクロソフトは2017年5月23〜24日に、技術者向けイベント「de:code 2017」を開催した。基調講演でAIが中心テーマとなったほか、ブレークアウトセッションでも「Artificial Intelligence」のカテゴリーが設けられていた。

日本マイクロソフト株式会社の藤本浩介氏(デベロッパー エバンジェリズム統括本部 エバンジェリスト)によるセッション「目指せ、最先端AI技術の実活用! Deep Learningフレームワーク「Microsoft Cognitive Toolkit」へ踏み出す第一歩」では、Microsoft Cognitive Toolkit(CNTK)を使い始めるにあたっての要点について、画像認識を題材に解説と実演がなされた。

日本マイクロソフト株式会社 藤本浩介氏(デベロッパー エバンジェリズム統括本部 エバンジェリスト)
日本マイクロソフト株式会社 藤本浩介氏(デベロッパー エバンジェリズム統括本部 エバンジェリスト)

CNTKは、マイクロソフトが開発しGitHubで公開されているディープラーニングのフレームワークだ。対応言語はPython、C++、BrainScriptで、学習済みモデルはC#で動かすこともできる。OSはLinuxとWindowsに対応している。

藤本氏によるとCNTKの特徴は「分散学習に対応していてパフォーマンスが出る」こと。同種のフレームワークの中で、最初に複数ノードの学習に対応したという。Microsoftの音声認識が2016年にエラー率5.9%を達成したが、CNTK以前は1回の学習に6〜8週間かかっていたのが、1週間に短縮されたという。

CNTKの分散学習性能(2015年7月時点)
CNTKの分散学習性能(2015年7月時点)

ここで、事例が紹介された。中国のShanghai Changzheng Hospitalでは、糖尿病の診断にCNTKによるディープラーニングを導入した。Azure上で分散学習し、いろいろなパラメータやアルゴリズムを試せたのがよかったという。

また、ごみ拾いSNS「ピリカ」を開発運営する日本の株式会社ピリカは、ディープラーニングにより街角の写真からごみを判別して位置を地図にマッピングする技術を開発している。学習データを集めながらトライアル&エラーを繰り返して全自動を目指すとのことで、トライアル&エラーを繰り返すためにCNTKに乗り換えたという。

ピリカの事例
ピリカの事例

ディープラーニングが注目されたきっかけは、画像認識コンテストのImageNetで2012年に、SuperVisionが圧倒的な認識精度を見せたことだった。また、それまで例えばバナナを認識するには、どこに注目する必要があるか人間が与える必要があったが、それが必要なかった。

SuperVisionのAlexNetのディープラーニングは8層のものだったが、2015年のMicrosoftのResNetでは152層にまでなっているという。

基本的な仕組みは、入力から重みづけして出力するパーセプトロンを何層も重ねるものだ。その出力と正解を比較して誤差フィードバックし、重みづけを更新する。行列計算が用いられるため、GPUが有利となる。

ディープラーニングの学習の仕組み
ディープラーニングの学習の仕組み

実演では、サンプルデータの画像を、「airplane」「automobile」「horse」など10種類に分類する例が解説された。サンプルデータは、CIFAR-10データセット。ここから32×32ピクセルの画像を、学習用に5万枚、評価用に1万枚使った。

作業の手順としては、まずデータを準備する。学習用に、画像のパスと分類番号とをタブ区切りで並べたマッピングのファイルを用意した。

続いてモデルの定義。藤本氏は画像認識のアルゴリズムとして、フィルターをずらして掛けあわせていく「Convolution Layer」と、部分の最大値をとる「Pooling Layer」を合わせた「CNN(Convolutional Neural Network)」を解説した。CNTKでは、それぞれ関数が用意されており、AlexNetは3つの関数で書けるという。

その次が学習フェーズとなる。32×32ピクセル×3色で3072とおりの可能性から、10とおりの出力を得る。

画像と分類番号のマッピングのファイル
画像と分類番号のマッピングのファイル
Convolution Layer
Convolution Layer
Pooling Layer
Pooling Layer

作業としてまずすることは、環境構築だ。CPUで処理する場合はPythonのパッケージ管理ツールpipを実行するだけで入る。しかしGPUを使うにはGPUドライバーなどいくつかのソフトをバージョンを気にしながら入れる必要がある。そこで藤本氏は、AzureでGPU環境やCNTKを導入済みのデータサイエンス仮想マシン(Azure Data Science Virtual Machine:DSVM)を紹介した。

その上でコードを実行した。デモでは、ローカルマシン(CPU処理)とAure(GPU処理)を並べ、Webベースの対話型実行環境であるJupyter Notebookで実演した。学習はAzureで高速に実行し、学習結果を保存して、ローカルマシンで判定を試した。

CPU処理の場合とCPU処理の場合の環境構築
CPU処理の場合とCPU処理の場合の環境構築
ローカルマシンとAzureのJupyter Notebookで実演
ローカルマシンとAzureのJupyter Notebookで実演
判定を試す
判定を試す

藤本氏は最後に、CNTKのチュートリアルなどの情報源を紹介して、セッションを終えた。

フリーランスのライター&編集者。IT系の書籍編集、雑誌編集、Web媒体記者などを経てフリーに。現在、「クラウドWatch」などのWeb媒体や雑誌などに幅広く執筆している。なお、同姓同名の方も多いのでご注意。

連載バックナンバー

仮想化/コンテナイベント

KubeCon報告からKubernetes対応版Dockerまで、Docker Meetup Tokyo #20開催

2018/1/30
コンテナーに関する勉強会「Docker Meetup Tokyo #20」が、2017年12月14日に開催された。11月に開催された「Docker Meetup Tokyo #19」に続く回となった。
仮想化/コンテナ

Red Hatが示したOpenShiftの将来とは

2018/1/24
Red Hatが推進するコンテナープラットフォームであるOpenShiftの1dayカンファレンスが開催された。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています