LoginSignup
127
105

More than 5 years have passed since last update.

MXNet 入門

Last updated at Posted at 2016-12-04

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 同様現在未対応ですが、コミッタの一人は「ロードマップにはあるよ」と言っていました。ここ にはなさそうですが。笑 

127
105
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
127
105