• 57
    いいね
  • 0
    コメント

DeepLearning Advent Calendar 2016 4 日目です。
3 日目は @tereka114 さんの「グレーの画像に色をつけるネットワークについて発表しました。」でした。

最近 AWS が公式にサポートを表明した深層学習フレームワーク MXNet に、彼らの記事や各種チュートリアルを通して入門してみようと思います。

MXNet とは

概要

mxnet.jpg

MXNet はワシントン大学とカーネギーメロン大学によって、CNN と LSTM をサポートするために開発されはじめました。効率的で柔軟な深層学習フレームワークとなるよう設計されています。

特徴

AWS が MXNet を支援すると決めた理由に、以下の 3 つをあげています。

  • スケーラビリティ
  • 豊富な対応言語
  • 軽量かつ高い可搬性

その他にも MXNet には以下のような特徴があります。

  • 命令的 / 宣言的プログラムの混合
  • 豊富な深層学習モデルのサポート

余談ですが、re:Invent2016 のセッション中、AWS のとある AI エンジニア曰く
「多くの部分で TensorFlow より秀でている1。ドキュメントは負けてるけどね!笑」

スケーラビリティ

MXNet はコンピュートリソースを追加すればするほど処理能力が向上します。
つまりリソースを追加する だけ で、より精度の高いモデルを、より速い時間で学習できる可能性があるということです。

以下は Inception v3 を AWS の P2 インスタンス で動作させた検証結果だそうです。スケーリングの実行効率はおおよそ 85% とのこと。
mxnet-result.png

TensorFlow などもマルチ GPU 対応による同様の能力はあるものの、検証した結果、現在 MXNet がもっとも理想に近い処理能力向上がみられるとのこと。TensorFlow については GCP なら TPU で最適化されているようですし、個人的にはいつか GCP で同様の検証をしてみたいところです。

豊富な対応言語

languages.png

学習には PythonC++RScala/JavaJulia が使え、
推論にはそれらに加え MatlabJavaScript 向けの API も用意されています。

AWS のエンジニアによると、AWS の各種サービスそのものを始め、社内では様々な言語が使われている背景からも MXNet が魅力的だったとのことです。

軽量かつ高い可搬性

portable.png

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) を含む最先端の深層学習モデルをサポートしていました。しかし今では RCNNDQN と言った手法での利用例も公開しています。

適応範囲も画像認識だけでなく、自然言語処理からレコメンド生成まで幅広く使われています。

使い方

インストール

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

 


  1. お祭りの中での一言です。TensorFlow ガチ勢な各位におかれましては、暖かい心で読んでいただけばと。 

  2. FPGA については TensorFlow 同様現在未対応ですが、コミッタの一人は「ロードマップにはあるよ」と言っていました。ここ にはなさそうですが。笑 

この投稿は DeepLearning Advent Calendar 20164日目の記事です。