DeepLearning Advent Calendar 2016 4 日目です。
3 日目は @tereka114 さんの「グレーの画像に色をつけるネットワークについて発表しました。」でした。
最近 AWS が公式にサポートを表明した深層学習フレームワーク MXNet に、彼らの記事や各種チュートリアルを通して入門してみようと思います。
MXNet とは
概要
MXNet はワシントン大学とカーネギーメロン大学によって、CNN と LSTM をサポートするために開発されはじめました。効率的で柔軟な深層学習フレームワークとなるよう設計されています。
特徴
AWS が MXNet を支援すると決めた理由に、以下の 3 つをあげています。
- スケーラビリティ
- 豊富な対応言語
- 軽量かつ高い可搬性
その他にも MXNet には以下のような特徴があります。
- 命令的 / 宣言的プログラムの混合
- 豊富な深層学習モデルのサポート
余談ですが、re:Invent2016 のセッション中、AWS のとある AI エンジニア曰く
「多くの部分で TensorFlow より秀でている1。ドキュメントは負けてるけどね!笑」
スケーラビリティ
MXNet はコンピュートリソースを追加すればするほど処理能力が向上します。
つまりリソースを追加する だけ で、より精度の高いモデルを、より速い時間で学習できる可能性があるということです。
以下は Inception v3 を AWS の P2 インスタンス で動作させた検証結果だそうです。スケーリングの実行効率はおおよそ 85% とのこと。
TensorFlow などもマルチ GPU 対応による同様の能力はあるものの、検証した結果、現在 MXNet がもっとも理想に近い処理能力向上がみられるとのこと。TensorFlow については GCP なら TPU で最適化されているようですし、個人的にはいつか GCP で同様の検証をしてみたいところです。
豊富な対応言語
学習には Python・C++・R・Scala/Java・Julia が使え、
推論にはそれらに加え Matlab・JavaScript 向けの API も用意されています。
AWS のエンジニアによると、AWS の各種サービスそのものを始め、社内では様々な言語が使われている背景からも MXNet が魅力的だったとのことです。
軽量かつ高い可搬性
MXNet は RunAnywhere、様々なデバイスやプラットフォームに対応2しています。
またメモリ効率にも優れており、1,000 層もの深いネットワークでもわずか 4GB のメモリしか消費しません。Android や iOS、ブラウザ側で推論を行う際にこの特徴はとても際立ちます。
命令的 / 宣言的プログラムの混合
効率性・生産性を高めるために、命令的 / 宣言的なプログラムを 併用する ことができます。
論文 によれば、これは主要な深層学習フレームワークの中では MXNet だけが持っている特徴であり、MXNet という名前の由来になってもいるようです。(Mix => MX)
具体的にどういうことかというと、それぞれ以下のようなプログラムのことを指し
import numpy as np
a = np.ones(10)
b = np.ones(10) * 2
c = b * a
d = c + 1
A = Variable('A')
B = Variable('B')
C = B * A
D = C + Constant(1)
# compiles the function
f = compile(D)
d = f(A=np.ones(10), B=np.ones(10)*2)
それぞれ
- 命令的:
どのように計算するか
を指示する書き方 - 宣言的:
どうなるべきか
を定義する書き方
であり、汎用性や最適化可能性などにおいて一長一短あります。
ディープダイブしたい方は こちら に公式ドキュメントがあります。
豊富な深層学習モデルのサポート
もともと、畳み込みニューラルネットワーク (CNN) や Long Short-Term Memory ネットワーク (LSTM) を含む最先端の深層学習モデルをサポートしていました。しかし今では RCNN や DQN と言った手法での利用例も公開しています。
適応範囲も画像認識だけでなく、自然言語処理からレコメンド生成まで幅広く使われています。
使い方
インストール
Python の依存性解決によるインストールは こちら。Docker なら こちら。
AmazonLinux の場合は、後述の AMI を利用するのがオススメです。
チュートリアル
適用分野やプログラミング言語で分類された、公式ドキュメントはこちら
http://mxnet.io/tutorials/index.html
GitHub で公開されている全ての参考ソースはこちら
https://github.com/dmlc/mxnet/tree/master/example
簡単にそれらを始めるためには
http://qiita.com/pottava/items/0d40747287ff31b8db77