CNTKってご存知でしょうか?CNTKは、Microsoftが主導して開発しているオープンソースのDeep Learningライブラリです。正直なところ僕も最近使い始めたのですが、このCNTK、良い意味でMicrosoftらしくなく、なかなかイケているんじゃないかと思っています。今回は、まずCNTKの特徴をざっと紹介し、後半でコード例をJupyter Notebookを使って見ていきます。
"Microsoft"にこだわらない、オープンな開発方針
Open Source
GitHub上で開発が進んでいます。社内版はありません。
Python と C++ API
.Net APIは(まだ)ありません。Brainscriptもサポートされています。
LinuxとWindowsで利用可能
"Both Linux and Windows are first citizens of CNTK" と開発チームは言っていました。多少の時間差は出るかもしれませんが、両プラットフォームで同じ機能がサポートされるようです。Linux向けにはDockerも用意されているので、もしかしたらLinuxの方が利用しやすいかもしれません。
高速&スケール
複数のGPUでスケールする
Therano、 TensorFlow、 Torch 7、 Caffeと性能を比較した図です。Fully connectedな4層ニューラルネットワークを、一秒あたり何フレーム処理できるかが比較したものです(minibatchサイズは8192)。青とオレンジの設定は、それぞれGPU(Nvidia K40)が1つまたは4つのLinuxマシン、緑は2台のLinuxマシン(2 x 4 GPU)のクラスタです。**GPUが1つの場合は各ライブラリでほとんど変わらない速度 (TensorFlowよりはCNTKが速い?)ですが、複数のGPUを効率的に活用できているのはCNTKだけです。**4 GPUの時に、CNTKはほぼ4倍にスケールしていますが、Torch 7とCaffeは2倍程度に収まっています。TensorFlowはほとんど変わりません。
2016年10月: CNTKによって、音声認識精度が人間レベルに到達
2016年10月の実験で、Microsoftのチームが開発した音声認識エンジンがエラー率 (word error rate) 5.9%を記録しました。これは同じ音声ファイルをプロの文字起こしサービスに依頼した場合と同等でした。しかも、今回の文字起こしサービスでは、二段階処理をしており、一人目が1から文字起こしをし、二人目が修正を加えています。
手法の詳しい部分は論文が出ていますが、非常にレイヤー数が多いニューラルネットワークを使っています。ここでもCNTKがパワーを発揮していて、CNTKの高速な処理が不可欠だったと論文でも述べられています。
- Historic Achievement: Microsoft researchers reach human parity in conversational speech recognition
- Microsoft researchers achieve speech recognition milestone
PythonでCNTKを使ってみる
同僚が良いチュートリアルを作っていたので、翻訳させてもらいました。Jupyter Notebookになっているので、環境整備することなくその場でコードを編集・実行できます。順次、追加していく予定です。
-
CNTK 101: Logistic Regression と機械学習への導入
- まずは線形モデルを作って、簡単な2クラス分類問題を解いてみます。モデルの構築、学習から評価まで一通りの流れを紹介しています。コードを追うだけではなく、背後の数理についても簡単に紹介しています。
-
CNTK 103 Part B: MNISTデータをFeed Forward Networkで学習
- 102で作った4層ニューラルネットワークで、Part AでダウンロードしたMNISTデータを学習します。
Jupyter Notebook (Azure Notebook)
Microsoftアカウントでログインすると、ノートをクローンして、編集・実行できるようになります。
その場でコードを変更して実行できるのはとても便利なので、是非チュートリアル上のコードを変更して遊んでみてください。
参考
- ローカルに環境を用意したい場合は公式かこちらの記事が参考になりそうです。
- (まだ試してないですが) Azure上に環境を用意する方が楽そうな気がします。GPUも使えます。