はじめまして、開発担当 ろこもこ です。
私の記事ではエンジニアとして勉強したことや仕事を通して得た知識をアウトプットしていくつもりです。
よろしくお願いします。

ところでみなさん機械学習やってますか?

機械学習というと「線形代数」「統計」といった言葉がちらつきますが、近頃はGoogle産TensorFlowや国産のChainerをはじめライブラリが群雄割拠の様相を呈しています。
これらのライブラリを使えば、難解な数式と向き合わなくとも簡単に機械学習の入り口に足を踏み入れることが可能です。
今回はその中でもMicrosoft産の機械学習ライブラリ、CNTKの環境構築~簡単な学習サンプルの作成までを3回に分けて解説して行きたいと思います。

  • やる予定のこと
    • CNTKおよびVSCodeのセットアップ方法
    • CNTKの基本的な使い方
    • MLP(多層パーセプトロン)とCNN(畳み込みニューラルネットワーク)のモデル実装~使用まで
  • やらないこと
    • Pythonの構文解説
    • 機械学習の基礎や応用

「やらないこと」については素晴らしい書籍や記事が存在しますので、そちらを参照してください。
機械学習について私はオライリーから発刊されている ゼロから作るDeepLearning で勉強しましたが、数学が苦手な人も理解できるように丁寧に解説してくれている良書でした。

CNTKの概要

CNTKとは「The Microsoft Cognitive Toolkit」の略だそうです。元々は違う名称だったようですが現在は改められています。
MITライセンスでGitHub上に公開されており、誰でも無償で利用できます。
(ただし、1bit-SGDと呼ばれるGPUコンピューティング関連の高速化機能を利用する際はライセンス形態が異なるため注意が必要です)

機械学習でMicrosoftと聞くと意外に思われる方もいるかもしれませんが、ImageNet Large Scale Visual Recognition Challenge(ILSVRC)という毎年開催されている画像認識コンペティションにおいて、Microsoftの研究チームが開発したResNetは2015年度1位を獲得しています。
また2017年1月現在もResNetの派生型が多くの成果を残しており、話題になったLINEの女子高生AI「りんな」もMicrosoft製であるなどMicrosoftと機械学習の親和性は高いと言えます。

現在の機械学習ライブラリというとPythonかC++のものが多くCNTKも例に漏れないのですが、今後.NET対応も視野に入っていることが個人的にCNTKを選択する動機として大きいです。

より詳細に知りたい方は下記の記事などを参照してください。

Microsoftが公開したDeep LearningフレームワークCNTKの3つの特徴

CNTKのインストール

それでは開発環境を構築していきましょう。
はじめに断っておくと現段階でCNTKのインストールは少し面倒です。この辺りChainerはシンプルで素晴らしいのでCNTKも改善されていくと嬉しいですね。
今回環境を作成したOSはWindows10 64bit + CNTK v 2.0 Beta 7 ですが、Windows8.1 64bit以降なら可能と思います。

(注) CNTKをインストールするとPython3(を内包するAnaconda)の環境も合わせてインストールが行われます。すでにPython3がインストールされている場合、混乱を避けるため一旦アンインストールを行うことを奨めます。

なおこの内容はほぼ公式のセットアップページからの抜粋です。可能ならそちらを読んだほうが良いでしょう。
Setup Windows Binary Script

CNTKのGitHubページ からインストーラーをダウンロードします。記事を書いている時点では以下のURLよりダウンロード可能です。

https://github.com/Microsoft/CNTK/releases

  • CNTK for Windows v.2.0 Beta 7 CPU only
  • CNTK for Windows v.2.0 Beta 7 GPU
  • CNTK for Windows v.2.0 Beta 7 GPU with 1bit-SGD

順番に

  • CPUのみ使用
  • CPU+GPU
  • CPU+GPU(1bit-SGD)

です。
最後の1bit-SGD対応版はライセンス形態に制限があるため、使用の際は原文をよく読んでください。
ちなみに1bit-SGDとは勾配の量子化を行うことによりGPUとのデータ通信量を削減する技術なのだそうです。凄そうですね。(よくわかってない)
GPU版を動かすには別途対応ライブラリのインストールと対応GPUが必要ですが今回は解説しません。
よくわからなければ一番上のCPU onlyを選びましょう。

CNTKのダウンロードページ

選択すると画像のようなページが表示されるので、「I accept」を押すとダウンロードが始まります。
CPU版で150MBほどの容量があります。

ダウンロードが完了したらCNTKをインストールしたいフォルダへzipを展開します。頻繁に参照することになるので、UACが介入するProgram Filesなどは避けたほうが無難でしょう。

ここでは C:\local\CNTK-2-0-beta7-0-Windows-64bit-CPU へ展開した想定で進めていきます。

環境変数

Windows環境変数に”MYCNTKPATH”を作成し、CNTKを展開したフォルダを指定します。コマンドプロンプトなら以下のように書きます。

set MYCNTKPATH=C:\local\CNTK-2-0-beta7-0-Windows-64bit-CPU

インストールスクリプトの実行

スクリプトの実行権限を与えるため、コマンドプロンプトからPowerShellを起動します。以下のコマンドを実行してください。

start powershell -executionpolicy remotesigned

PowerShellが起動したら、以下のコマンドを実行します。

cd $env:MYCNTKPATH\cntk\Scripts\install\windows
.\install.ps1 -Execute

対話型で実行されるので適宜応答していきます。
成功するとPython3(Anaconda*)がインストールされると共に、CNTK実行環境への切り替え用のWindowsバッチファイルが用意されます。

C:\local\CNTK-2-0-beta7-0-Windows-64bit-CPU\cntk\scripts\cntkpy34.bat

CNTKのインストールはここまでで完了です。

(*) Anaconda はPythonと学術計算に便利なライブラリやツールをAll-In-Oneで提供しています。現状、WindowsでPython+機械学習の環境を作成する場合、バイナリの互換性などの問題から使用を推奨します。

サンプルの実行

インストールが成功しているか、動作確認を行っておきましょう。
インストールスクリプトで作成されたバッチファイルをコマンドプロンプトで実行します。なおこのバッチファイルは初回に限らずCNTK実行前に必ず実行する必要があります。(*)

%MYCNTKPATH%\cntk\scripts\cntkpy34.bat

(*) Pythonを使い慣れている人ならvirtualenv activate相当の処理が行われていると思えば良いです。

簡単な機械学習サンプルのPythonスクリプトを実行します。

cd %MYCNTKPATH%\cntk\Tutorials\NumpyInterop
python FeedForwardNet.py

コンソール上に以下のような出力が行われれば、確認完了です。

Minibatch[ 1- 128]: loss = 0.564038 * 3200
Minibatch[ 129- 256]: loss = 0.308571 * 3200
Minibatch[ 257- 384]: loss = 0.295577 * 3200
Minibatch[ 385- 512]: loss = 0.270765 * 3200
Minibatch[ 513- 640]: loss = 0.252143 * 3200
Minibatch[ 641- 768]: loss = 0.234520 * 3200
Minibatch[ 769- 896]: loss = 0.231275 * 3200
Minibatch[ 897-1024]: loss = 0.215522 * 3200
Finished Epoch [1]: loss = 0.296552 * 25600
error rate on an unseen minibatch 0.040000

Visual Studio Code のインストールおよび設定

Visual Studio Code(以下VSCodeと呼称) はプログラミング用途を目的としてMicrosoftが開発している無償・オープンソースのエディタです。
本家VisualStudioのようなIDEほど重量・高機能ではなく、メモ帳などの軽量テキストエディタほど高速ではないですが、ほどほどの機能・軽量さを両立しているクロスプラットフォームなエディタとして人気を集めています。

VSCodeはCNTK公式でも使用を推奨されているので開発エディタとして採用しましょう。

インストール

VSCode の公式ページからWindows用インストーラをダウンロードします。

ダウンロード後、インストーラを実行し流れに沿ってインストールしましょう。
(特に難しいことは無いので割愛します)

インストールが完了したら、VSCodeを起動します。

Pythonの使用設定

VSCodeは各言語への対応を拡張機能で実現しており、標準ではPython用の拡張が組み込まれていません。
下の画像のようにウインドウ左部のメニューから拡張機能のアイコンをクリックし、「python」と入力します。

python 拡張のインストール1

おそらく一番上に「Python」というそのままの名前の拡張機能が表示されるので、「インストール」ボタンを押してインストールします。
インストール後は「再度読み込む」ボタンを押してVSCodeを再起動します。

python拡張のインストール2

次に、Pythonの実行環境を指定します。明示的に書かないとCNTKの存在しない環境のPythonを実行してしまうので必ず指定します。
メニューから「ファイル」>「基本設定」>「ユーザー設定」を選択すると、画像のような表示になります。

pythonのパス指定

分割されたウインドウのうち、左側はデフォルトの設定内容です。これは変更することができず、またするべきでありません。
右側のウインドウがユーザー設定となっており、こちらを編集することでデフォルト設定を上書きすることができます。
ここで以下の設定を加え、保存します。

"python.pythonPath": "C:\\local\\Anaconda3-4.1.1-Windows-x86_64\\envs\\cntk-py34\\python"

(*) 実際の設定内容は、各々の環境でCNTK用のPython環境になるように適宜変更してください。勘の良い方なら気付くかもしれませんがここで指定するPython環境と、コマンドプロンプトで「cntkpy34.bat」実行後のPython環境はほぼ同一です。

最後に、VSCode上から直接スクリプトを実行できるように環境変数PATHに値を追加します。コマンドプロンプトでは以下のように書きます。

set PATH=%MYCNTKPATH%\cntk\cntk;%PATH%

これでVSCodeのセットアップは完了です。

【補足】linterについて

VSCodeのPython拡張にはファイル保存時にlintを実行する機能も含まれているため、VSCode上でPythonソースファイルを保存するとlinterのインストールを行うように要求されるかもしれません。
本題から逸れるためここではその設定内容は割愛しますが、Python標準に従ったコードを書きたいなら導入したほうが良いでしょう(*)。

(*) Pythonのlintツールは幾つかあり、チェックの内容が異なります。VSCodeのデフォルトで指定されているpylintは標準でかなり厳しめのチェックが行われるので肌に合わなければflake8pep8なども検討してください。

おわり

今回はCNTKとVisual Studio Codeをインストールし、Windowsで機械学習の開発を行う環境を作りました。
次回は実際にCNTKを使用して基本的な画像認識の実装を行っていきます。