32
Deep Learningライブラリ 色々つかってみた感想まとめ @conta_

Deep Learningライブラリ 色々つかってみた感想まとめ

Embed Size (px)

Citation preview

Deep Learningライブラリ 色々つかってみた感想まとめ

@conta_

Self Introduction

緒方 貴紀 (twitter: @conta_)

CTO@ABEJA, Inc.

Computer Visionとか、Machine Learningを使った プロダクト開発をやっています。

Deep Learning Library?

_人人人人人人人人人_ > 多すぎてつらい < ‾Y^Y^Y^Y^Y^Y^Y^Y‾

Dive into Deep Learning

*感じ方には個人差があります

今回紹介するライブラリ

CaffeCaffe: UC Berkleyの人が作ってる。DeepLearning界隈ではかなり老舗なライブラリで、 功績は大きい

言語: ・CoreはC++。Python, MatlabのWrapperがある

特徴: ・基本的にProtocol Bufferでネットワークを記述

■いいところ(個人的感想) ・Model Zooに学習済みモデルがたくさん公開されてる (既にCVPR2016の論文のモデルも公開されてる) ・研究者が割と使ってるので最新の研究成果がCaffeで実装されてたりする ・Multi-GPUに対応したので、設定1つで複数のGPUを利用可能 ・実行速度が割りと早い ・ネットワークのパフォーマンステストができる(caffe testコマンド)

■つらいところ(個人的感想) ・カスタマイズがc++とProtocol Buffer。。。マヂつらぃゎ。。。(*1) =>人がカスタマイズしたものは、もはやわからん。 ・ネットワークをProtocol Bufferで書くのがつらい(*2) =>GoogLeNetは約2000行、ResNetは約7000行。。。 (Protocol Buffer職人芸) ・データセットを作成するのが大変 ・エラーがわかりにくい ・ソースコードを読めないと全機能は使えない、動きがわからない (ドキュメント更新しろ!) ・インストールがつらい (昔に比べると依存関係のOnOffのオプションが付いたため、 だいぶマシ) ・RNNを扱うことはできない(魔改造されたCaffeベースのものはあるけど。。。)

■余談(*1) ・最近はPython Layerが追加されてPythonだけでもカスタマイズ できるように魔改造工夫している(No Documentation)

■余談(*2) ・PythonでProtocol Bufferを生成 できるようになったため、 ループした記述が割と簡単になった (No Documentation)

■こんなひとにおすすめ ・まず何か動かしたい人 ・とりあえず研究成果を試したい人 ・速度が必要な人 ・C++とProtocol Bufferを勉強したい人 ・根気強く何かと戦いたい人

Tensorflow: G◯◯gle製の分散行列計算ライブラリ。 別にDeepだけじゃないんだからね!

言語: ・CoreはC++。PythonとC++どちらでも動く。

特徴: ・分散処理が簡単にできる ・Googleのプロダクトで何年も利用されていて、安定感がある

■いいところ(個人的感想) ・分散処理がめっちゃ簡単にできる(Distributed Tensorflow) ・GoogleがMLプラットフォームを提供開始 ・最近、Tensorflow使いました論文がよくでてきている ・コアがC++なのでAndroidでも動作する ・Docker Containerが落ちてるので、Docker使えるなら インストールに困らない ・Tensorboardがオシャレ

■つらいところ(個人的感想) ・玄人向けライブラリ =>仕組みがちょっと複雑なので理解しないと使いこなせない =>ネットワークを書くのに一から記述する必要がある、Theano的な立ち位置

・ソースコードが大規模なため改造が大変そう (一応ドキュメントはあるけど)

・Distributed Tensorflowを個人の資源で活用するのは困難なので、Googleのプラットフォームを使わないと恩恵を受けにくい =>分散コンピューティングのIOボトルネック、InfiniBandをいっぱい買えるお金持ちなら恩恵を受けられるかも

■こんなひとにおすすめ ・仕組みの部分からDeep Learningを勉強したい人 ・Deep Learning 中~上級者向けの人 ・大規模機械学習をやってみたい人 ・大規模機械学習基盤を作りたい人 ・Mobileに組み込みたい人

Chainer: PFN製のDeep Learningライブラリ。

言語: ・Python(+Cuda)

特徴: ・Define-by-Runという手法をとっていて、ネットワークを後から解釈 ・すばらしい

■いいところ(個人的感想) ・ネットワークの記述の柔軟性が高い (特にRNN系非常に書きやすい) ・内部の動作がどうなってるか非常にわかりやすい ・デバックしやすい ・ナウいアルゴリズムがいち早く実装されてる ・CupyというCudaが簡単に使える行列演算ライブラリが含まれていて、自前のアルゴリズムを比較的簡単に高速化できる (C++で書いてラッパーとかつくらなくていい) ・中の人がすごい

■つらいところ(個人的感想) ・ネットワーク以外の記述量が多くなってしまう(学習のコードとか) ・実行速度(最近はそこそこ早いっぽい) ・Deep Learning分かってないと多分使いこなせない

■こんなひとにおすすめ ・Deep Learingを一からガッツリ勉強したい人 ・Deep Learning 中~上級者の人 ・研究でTry and Errorを繰り返しながらアルゴリズムを開発したい人 ・複雑なネットワークを記述したい人 (ネットワーク内で条件文書きたい、データによって処理を分けたい等) ・RNNとかNLPとかを書きたい

■MXNet: DMLC(Distributed (Deep) Machine Learning Community)が作ってる。XGBoostの作成元としても有名。 ■言語: ・CoreはC++。Wrapperがたくさんあり、Python、C++、Scala、R、Matlab、Juliaと多言語対応。

■特徴: ・多言語! ・速度がかなり早い(所感) ・mshadow(行列演算)、ps-lite(分散処理)等のライブラリがベース

■いいところ(個人的感想) ・分散処理(1Node, Multi-GPU、Multi-Node、Multi-GPUどちらも)がめっちゃ簡単にできる(Exampleあり) ・S3へモデルデータを保存する機能がある ・早い(ImageNet full datasetをGeForce GTX 980*4で8.5日) ・なぜ早いかがドキュメントで力説されている ・多分最も多言語が進んでいる ・C++で書かれてるので Mobile(iOS, Android)でも動く

■つらいところ(個人的感想) ・エラーがわかりにくい、本当にわかりにくい

・ドキュメントが少ない =>特殊な学習データを作ったりするのは大変 =>難しいことをしようとするとソースを読まなければならない

■こんなひとにおすすめ ・Deep Learning 中~上級者向けの人 ・速度を求めている人 ・Python、C++以外でも利用したい人

■Keras: PythonのDeep Learningライブラリ。 最近v1.0がリリースされた。

■言語: ・Python

■特徴: ・Torchに似た記述方法。 ・行列演算のバックエンドはTheanoとTensorFlowを利用していて、切り替えることができる

■いいところ(個人的感想) ・ネットワーク記述が簡単、柔軟 ベースのAPIがたくさん準備されているため、記述量も少なく済む。簡単なネットワークであればAPI組み合わせでなんとかなる。v1.0.0から functional APIなるものが出来て、 非常に直感的にネットワークを記述できるようになった

・学習が簡単 Scikitのようにfit()関数呼び出せばよろしくやってくれる

・ソースが読みやすい

■つらいところ(個人的感想) ・Multi-GPU非対応 TheanoをBackendとして使ってるとMulti-GPUつらい。 TensorflowのおかげでMulti-GPUが簡単にできるようになった?

・Pythonしか対応していない

■こんなひとにおすすめ ・Deep Learningをやりたい人全般 ・あまり細かいことは気にせずにサクッとネットワークを作りたい人 *個人的には一番おすすめ

まとめ■Caffe ・とりあえずDeep Learing(CNN)やりたい人 ・研究成果を試したい人 ■Tensorflow ・分散コンピューティングやりたい人 ■Chainer ・アルゴリズム開発したい人 ・本気でDeep Learningを勉強したい人 ■MXNet ・速度が必要な人 ・Mobileで動かしたい人 ■Keras ・とりあえずDeep Learing勉強したい人 ・めんどくさいのである程度環境が準備されていて欲しいと思う人

We are hiring!→ https://www.wantedly.com/companies/abeja