Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
2014/10/30 
PyData Tokyo MeetUp #1 
@デンソーアイティーラボラトリ 
Caffeとmafを⽤用いた 
ディープラーニング 
開発・実験⽅方法 
株式会社 Preferred Networks 
⼤大野 健太 ...
⾃自⼰己紹介 
• ⼤大野健太(@delta2323_) 
• 経歴:数理理科学研究科(共形幾何)→2012.3 PFI→2014.10 PFN 
• 所属:研究班(担当領領域:理理論論解析・ライフサイエンス) 
• ブログ:http://de...
株式会社Preferred Networks 
Preferred Infrastructure(PFI、2006年年創業) 
l 検索索・機械学習のソフトウェア研究開発 
Preferred Networks(PFN、2014年年設⽴立立)...
アジェンダ 
• Caffeの紹介 
• ディープラーニング関連⽤用語について 
• ディープラーニング実験の困難さ 
• mafの紹介 
• デモ:Caffeとmafを⽤用いた実験 
注意 
• Caffeは現在進⾏行行形で開発が進んでいます...
Caffe
Caffe概要 
 
git clone git@github.com:BVLC/caffe.git 
• 開発者:Berkeley⼤大学 Yangqing Jia(現Google) 
• メンテナンス:Berkeley Vision and ...
画像分類デモ* 
* デモURL:http://demo.caffe.berkeleyvision.org7
特徴:OSS活動が最も活発なディープラーニングラ 
イブラリの⼀一つ 
• 開発速度度 
• 最新の技術・アルゴリズムが多く実装されている 
• (API・設定ファイル記述⽅方法は結構頻繁に変わる) 
• コミュニティーの活動 
• issue...
Caffeで実現された技術例例(1) 
Deep Q Network*(深層学習で強化学習) 
PongSpace Invader 
藤⽥田康博さん 
「CaffeでDeep Q-Networkを実装して深 
層強化学習してみた」** 
松元叡...
Caffeで実現された技術例例(2):GoogLeNet, VGG 
• ILSVRC2014(画像認識識コンテスト) の上位陣 
• 200種類のカテゴリ分類で候補を5個提⽰示するタスクで、エラー率率率 
6.6%(GoogLeNet)、7....
⽤用語:アーキテクチャ関連 
• Net:Neural Net(NN)のアーキテクチャ全体 
• Blob:Node、Neuron、(ややこしいが)○○層とも 
• Layer:異異なる階層のBlobをつなぐモジュール 
NetBlobLaye...
Layerに関する注意 
• 論論⽂文ではNodeの中で活性化関数を含む事が多いが、実装では活性化関 
数をLayerで実現することが多い 
 
X 
W 
Y=σ(WX) 
X 
W 
WX 
σ 
Y 
12
minibatch j 
⽤用語:訓練関連 
Epoch 1 
Epoch 2 
Epoch i 
Epoch N 
Epoch i 
全訓練データを 
シャッフル 
minibatch 1 
訓練データ 2 
minibatch 2 
min...
Caffeの使⽤用⽅方法:⼤大きく分けて3通り 
• コマンドラインツール(ディレクトリ:build/tools/) 
• prototxt(後述)の記述のみ、“プログラム”の必要なし 
• 既存モジュールを使⽤用するだけなら⼀一番簡単 
• ...
prototxt:いわゆる設定ファイル 
 
• ⽬目的に応じて複数⽤用意 
• Train/Test⽤用:Netの構成・Data Layerの設定・Solverの設定 
• Deploy⽤用:Netの構成・Input Blobの設定 
• 利...
prototxtの記述(1):Train/Test⽤用のNet 
Train/Test 
mnist 
ip 
loss 
label 
Net 
LayerでTop Blob 
とBottom Blobを指定 
Blob 
Layer 
da...
prototxtの記述(2):Deploy⽤用Net 
Net 
ip 
Deploy 
prob 
data 
ip 
Layerに挟まれないBlobは 
4次元テンソルで指定 
Blob 
probLayer 
17
デモ:コマンドラインからの実⾏行行
Python Bindingの特徴* 
• ⽐比較的薄いラッパーでC++/Cudaを隠蔽 
• Boost.Pythonを利利⽤用 
• Pythonだけでも実験を⾏行行える設計 
• Numpy/Scipy/matpotlibとの親和性は⾼高...
Python Bindingクラス関係図 
caffe::Net 
(C++) 
NetLayerBlob 
caffe::Pynet 
(C++) 
caffe.Net 
(Python) 
Utility関数群 
(C++) 
Derive...
mafを⽤用いた深層学習の開発・実験
ディープラーニングの特徴: 
設計の⾃自由度度が⾼高い = チューニングが難しい 
• 設計時の選択肢:NNの設計は回路路設計に近い 
• ネットワーク(トポロジー/Layer数/Node数/活性化関数/損失関数) 
• 学習⽅方法(学習アルゴ...
効率率率的な試⾏行行錯誤は難しい 
• 様々なパラメータを試す時間がない 
• 前処理理/後処理理は実験プログラム実装と同等以上に⼿手間がかかる 
• 様々な実験設定での⼊入出⼒力力の管理理が煩雑 
• 実験ごとに微妙に異異なるデータセット・設...
実験プログラムだけでなく実験環境の管理理が必要 
サーバー 
ライブラリ 
実験⼿手順 実験結果・ログ 
プログラム 
実験プログラム 
データセット 
設定 
ファイル 
出⼒力力 
本体 
⼊入⼒力力 
環境 
24
maf概要:実験ビルドツール 
 
git clone git@github.com:pfi/maf.git 
• 開発者:Preferred Infrastructure / Preferred Networks 
• バージョン:2013年...
mafを⽤用いた実験例例:liblinear 
交差検定⽤用に 
データ分割 
訓練 
テスト 
集計 
プロット 
パラメータの作成 
パラメータの作成 
パラメータの集約 
パラメータの集約 
26
mafデモ:実⾏行行結果例例 
27
デモ:mafを⽤用いた 
ディープラーニングのパラメータチューニング 
• タスク 
• Cifar10データを様々なパラメータを持つNetで分類し結果を可視化 
• ポイント 
• mafで様々な学習パラメータのprototxtを⾃自動⽣生成...
まとめ 
• Caffeは2014年年10⽉月現在最も活発に開発されているディープラーニングラ 
イブラリの⼀一つです 
• Caffeには最近のディープラーニング研究の成果が多数実装されています 
• ディープラーニングを含む機械学習の効果的...
2014/11/6追記 
質問への回答 
30
⾼高次元な⼊入⼒力力データを扱う⽅方法について 
Q. ⾼高次元で疎な⼊入⼒力力を、効率率率的に学習を⾏行行う⽅方法はないか? 
A. Sparse Blobの実装はありますが、マージはされていません 
疎データを⼊入⼒力力するためのInput...
mafを⽤用いたCaffeの並列列実⾏行行について 
Q. デモでmafを⽤用いたCaffeを実⾏行行した際、1並列列での実⾏行行を指定する-j1オプ 
ションを付けたのはなぜか? 
A. Data Layerに⽤用いたleveldbファイルを...
Mac OS 10.9でのCaffeのインストール (1/2) 
Q. Mac OS 10.9上でCaffeを簡単にインストールする⽅方法はないか? 
A. GPUを使わないならば10.8とほぼ同等の⽅方法でできます 
公式サイトのインストール...
Mac OS 10.9でのCaffeのインストール (2/2) 
回避策は⼤大きく分けて2通りあります。 
1. ⼀一つ⽬目はClang++のコンパイラをlibc++からlibstdc++に変更更する⽅方法(本家サイトで 
紹介されている⽅方法...
Upcoming SlideShare
Loading in …5
×

Development and Experiment of Deep Learning with Caffe and maf

68,588 views

Published on

2014/10/30 PyData Tokyo Meetup #1

Published in: Technology

Development and Experiment of Deep Learning with Caffe and maf

  1. 1. 2014/10/30 PyData Tokyo MeetUp #1 @デンソーアイティーラボラトリ Caffeとmafを⽤用いた ディープラーニング 開発・実験⽅方法 株式会社 Preferred Networks ⼤大野 健太 oono@preferred.jp
  2. 2. ⾃自⼰己紹介 • ⼤大野健太(@delta2323_) • 経歴:数理理科学研究科(共形幾何)→2012.3 PFI→2014.10 PFN • 所属:研究班(担当領領域:理理論論解析・ライフサイエンス) • ブログ:http://delta2323.github.io • 謝辞 • mafは得居誠也さん(PFN・@beam2d)・能地宏さん(総研⼤大/NII・ @nozyh)が中⼼心となり開発されています • Caffe・mafデモは得居さんの助⾔言を元に作成しています 2
  3. 3. 株式会社Preferred Networks Preferred Infrastructure(PFI、2006年年創業) l 検索索・機械学習のソフトウェア研究開発 Preferred Networks(PFN、2014年年設⽴立立) l IoTにフォーカスするためスピンオフ l ディープラーニング等最新技術を開発 l 様々な業界向けソリューションを加速 l 製造業、交通、セキュリティ、⼩小売… 代表取締役 ⻄西川徹 取締役副社⻑⾧長 岡野原⼤大輔 ディープラーニング 機械学習 (深層学習) 検索索エンジン / 分析ソフト 3
  4. 4. アジェンダ • Caffeの紹介 • ディープラーニング関連⽤用語について • ディープラーニング実験の困難さ • mafの紹介 • デモ:Caffeとmafを⽤用いた実験 注意 • Caffeは現在進⾏行行形で開発が進んでいます、本資料料は資料料作成時の masterブランチ(c18d22e)またはdevブランチ(30651a2)を参考 に作成しています 4
  5. 5. Caffe
  6. 6. Caffe概要 git clone git@github.com:BVLC/caffe.git • 開発者:Berkeley⼤大学 Yangqing Jia(現Google) • メンテナンス:Berkeley Vision and Learning Center (BVLC) • ライセンス:BSD 2 clause • バージョン:厳格にはつけられていない? • 動作確認済OS:Ubuntu 14.04, 12.04, Mac OS X 10.9, 10.8 • Mac OS 10.9へのインストールは⼿手間がかかる(libc++関連) • Windowsも対応版がある(⾮非公式*) • ⾔言語:C++, CUDA、バインディング:Python, Matlab • 前バージョンのDecafはPython、⾼高速化の為C++, CUDAで再実装 6 * fork レポジトリ:https://github.com/niuzhiheng/caffe
  7. 7. 画像分類デモ* * デモURL:http://demo.caffe.berkeleyvision.org7
  8. 8. 特徴:OSS活動が最も活発なディープラーニングラ イブラリの⼀一つ • 開発速度度 • 最新の技術・アルゴリズムが多く実装されている • (API・設定ファイル記述⽅方法は結構頻繁に変わる) • コミュニティーの活動 • issue/Pull Requestベースの開発 • チュートリアル・実例例・開発者⽤用ドキュメントが整備済 • CUDA対応 • CPU, GPUのシームレスな切切り替え可能 • CuDNN対応済(NVIDIA製GPU対応DNNライブラリ) 開発チームが考えるCaffeの売り: https://docs.google.com/presentation/d/ 1UeKXVgRvvxg9OUdh_UiC5G71UMscNPlvArsWER41PsU/ edit#slide=id.g39888e8c1_0398
  9. 9. Caffeで実現された技術例例(1) Deep Q Network*(深層学習で強化学習) PongSpace Invader 藤⽥田康博さん 「CaffeでDeep Q-Networkを実装して深 層強化学習してみた」** 松元叡⼀一さん PFIインターン2014 最終発表*** * Playing Atari with Deep Reinforcement Learning, Volodymyr Mnih, Koray Kavukcuoglu, David Silver, Alex Graves, Ioannis Antonoglou, Daan Wierstra, Martin Riedmiller NIPS Deep Learning Workshop, 2013 ** http://d.hatena.ne.jp/muupan/20141021/1413850461 9 *** http://www.ustream.tv/recorded/53153399
  10. 10. Caffeで実現された技術例例(2):GoogLeNet, VGG • ILSVRC2014(画像認識識コンテスト) の上位陣 • 200種類のカテゴリ分類で候補を5個提⽰示するタスクで、エラー率率率 6.6%(GoogLeNet)、7.3%(VGG) 10
  11. 11. ⽤用語:アーキテクチャ関連 • Net:Neural Net(NN)のアーキテクチャ全体 • Blob:Node、Neuron、(ややこしいが)○○層とも • Layer:異異なる階層のBlobをつなぐモジュール NetBlobLayer x 1 x N h 1 h H k 1 k M y 1 y M t 1 t M Forward Backward 11
  12. 12. Layerに関する注意 • 論論⽂文ではNodeの中で活性化関数を含む事が多いが、実装では活性化関 数をLayerで実現することが多い X W Y=σ(WX) X W WX σ Y 12
  13. 13. minibatch j ⽤用語:訓練関連 Epoch 1 Epoch 2 Epoch i Epoch N Epoch i 全訓練データを シャッフル minibatch 1 訓練データ 2 minibatch 2 minibatch j minibatch M 訓練データ 1 訓練データ B パラメータ更更新 時刻 • Epoch (Iteration):全訓練データを1巡する事 → 各訓練データはNetにN回与える • Solver:Netを訓練するモジュール • minibatch:少数の訓練データをまとめてNNに 与えた後にパラメータ更更新 13
  14. 14. Caffeの使⽤用⽅方法:⼤大きく分けて3通り • コマンドラインツール(ディレクトリ:build/tools/) • prototxt(後述)の記述のみ、“プログラム”の必要なし • 既存モジュールを使⽤用するだけなら⼀一番簡単 • C++ライブラリを利利⽤用(ディレクトリ:build/include, build/lib) • ⾃自由度度の⾼高い設計が可能 • オリジナルのLayerを実装可能 • Python / Matlabのバインディングを利利⽤用(ディレクトリ:python/) • タスク特化のクラスが実装済(Classifier/Detector) • インタープリタ上での試⾏行行錯誤が可能 14
  15. 15. prototxt:いわゆる設定ファイル • ⽬目的に応じて複数⽤用意 • Train/Test⽤用:Netの構成・Data Layerの設定・Solverの設定 • Deploy⽤用:Netの構成・Input Blobの設定 • 利利⽤用可能なパラメータをProtocol Buffersを⽤用いて実現 * GoogLeNetのprototxt 2000⾏行行以上ある→ https://github.com/BVLC/caffe/pull/1367/files * src/caffe/proto/caffe.proto 15
  16. 16. prototxtの記述(1):Train/Test⽤用のNet Train/Test mnist ip loss label Net LayerでTop Blob とBottom Blobを指定 Blob Layer data ip データはData Layer として抽象化 損失関数はLoss Layer として抽象化 16
  17. 17. prototxtの記述(2):Deploy⽤用Net Net ip Deploy prob data ip Layerに挟まれないBlobは 4次元テンソルで指定 Blob probLayer 17
  18. 18. デモ:コマンドラインからの実⾏行行
  19. 19. Python Bindingの特徴* • ⽐比較的薄いラッパーでC++/Cudaを隠蔽 • Boost.Pythonを利利⽤用 • Pythonだけでも実験を⾏行行える設計 • Numpy/Scipy/matpotlibとの親和性は⾼高い • 多次元配列列操作にはNumpy.ndarrayを利利⽤用 • ipython Notebookでの実例例が充実** • Python Bindingを利利⽤用した試⾏行行錯誤の⽅方法論論が学べる * レポジトリ:python/ ** レポジトリ:examples/*.ipynb チュートリアル:http://caffe.berkeleyvision.org/tuto1r9ial/interfaces.html
  20. 20. Python Bindingクラス関係図 caffe::Net (C++) NetLayerBlob caffe::Pynet (C++) caffe.Net (Python) Utility関数群 (C++) DerivesDerives caffe::Classifier (Python) has Boost.Python caffe::Detector (Python) has caffe::Layer (C++) caffe::PyLayer (C++) caffe.Layer (Python) caffe::Blob (C++) caffe::PyBlob (C++) caffe.Blob (Python) タスク特化型 クラス 20
  21. 21. mafを⽤用いた深層学習の開発・実験
  22. 22. ディープラーニングの特徴: 設計の⾃自由度度が⾼高い = チューニングが難しい • 設計時の選択肢:NNの設計は回路路設計に近い • ネットワーク(トポロジー/Layer数/Node数/活性化関数/損失関数) • 学習⽅方法(学習アルゴリズム/Iteration数/学習率率率関連) • チューニングパラメータが精度度に⼤大きく影響を与える • ReLUで少し学習率率率を変えただけで損失がInfになる • アルゴリズムの改善よりもパラメータ探索索が重要になることも → 効率率率的なトライアル エラーがディープラーニングでの開発・実験の鍵 (様々なチューニングノウハウが知られている * ** ***) * A Practical Guide to Training Restricted Boltzmann Machines, Geoffrey Hinton, https://www.cs.toronto.edu/~hinton/absps/guideTR.pdf ** Practical Recommendations for Gradient-Based Training 22 of Deep Architectures, Yoshua Bengio, arXiv:1206.5533v2 *** Random Search for Hyper-Parameter Optimization, James Bergstra and Yoshua Bengio, JMLR 13 (2012) 281-305
  23. 23. 効率率率的な試⾏行行錯誤は難しい • 様々なパラメータを試す時間がない • 前処理理/後処理理は実験プログラム実装と同等以上に⼿手間がかかる • 様々な実験設定での⼊入出⼒力力の管理理が煩雑 • 実験ごとに微妙に異異なるデータセット・設定ファイル • 実験ごとに得られる実験結果・ログ • 結果の再現性を担保できていない • 「この時の実験ログの実験を再現したいのだけれど、設定ファイル どれだろう?」 • 設定ファイルはあるけれど、書かれているディレクトリにデータが ない・データの形式が違いプログラムが動かない 23
  24. 24. 実験プログラムだけでなく実験環境の管理理が必要 サーバー ライブラリ 実験⼿手順 実験結果・ログ プログラム 実験プログラム データセット 設定 ファイル 出⼒力力 本体 ⼊入⼒力力 環境 24
  25. 25. maf概要:実験ビルドツール git clone git@github.com:pfi/maf.git • 開発者:Preferred Infrastructure / Preferred Networks • バージョン:2013年年12⽉月公開、現在 ver. 0.2 • ⾔言語:Python • waf (Pythonベースのビルドツール) のラッパーとして実現 • ⽬目的:機械学習の典型的(だが煩雑)な操作の簡易易化 • 前処理理/データセットの分割/クロスバリデーション • 複数の(ハイパー)パラメータセットの⼀一括実⾏行行/中間⽣生成物の管理理 25
  26. 26. mafを⽤用いた実験例例:liblinear 交差検定⽤用に データ分割 訓練 テスト 集計 プロット パラメータの作成 パラメータの作成 パラメータの集約 パラメータの集約 26
  27. 27. mafデモ:実⾏行行結果例例 27
  28. 28. デモ:mafを⽤用いた ディープラーニングのパラメータチューニング • タスク • Cifar10データを様々なパラメータを持つNetで分類し結果を可視化 • ポイント • mafで様々な学習パラメータのprototxtを⾃自動⽣生成 • イテレーション事のエラー推移をプロット • モデル・結果・ログをmafで管理理 • フィルター可視化にCaffeのClassifierモジュールを利利⽤用 28
  29. 29. まとめ • Caffeは2014年年10⽉月現在最も活発に開発されているディープラーニングラ イブラリの⼀一つです • Caffeには最近のディープラーニング研究の成果が多数実装されています • ディープラーニングを含む機械学習の効果的な開発・実験には様々な実験 設定での⼊入出⼒力力データの管理理が課題となります • mafは機械学習・データ解析で現れる典型タスクを簡略略化する為の実験ビ ルドツールです • Caffeでの実験にmafを組み合わせて効果的なディープラーニングの開発・ 実験する⽅方法を提案しました 29
  30. 30. 2014/11/6追記 質問への回答 30
  31. 31. ⾼高次元な⼊入⼒力力データを扱う⽅方法について Q. ⾼高次元で疎な⼊入⼒力力を、効率率率的に学習を⾏行行う⽅方法はないか? A. Sparse Blobの実装はありますが、マージはされていません 疎データを⼊入⼒力力するためのInput Blobは、Sparse Blobとして既に実装され、Pull Requestが提案されています*。しかしまだマージされていないため、もし利利⽤用する場合、 ⾃自⼰己責任で利利⽤用する必要がありそうです。 「Torch7と混同しているかもしれない」と話しましたが、疎データを⼊入⼒力力し内積計算す るLayerはSparse Linear LayerとしてTorch7に存在していました (masterブランチ、コ ミット=704684)** *** * Sparse Data Support #937(https://github.com/BVLC/caffe/pull/937) ** https://github.com/torch/nn/blob/master/SparseLinear.lua *** https://github.com/torch/nn/blob/master/doc/simple.md#nn.SparseLinear 31
  32. 32. mafを⽤用いたCaffeの並列列実⾏行行について Q. デモでmafを⽤用いたCaffeを実⾏行行した際、1並列列での実⾏行行を指定する-j1オプ ションを付けたのはなぜか? A. Data Layerに⽤用いたleveldbファイルを同時アクセス出来ないためです Data Layerを⽤用いて訓練データを与える場合、⼊入⼒力力ファイルを予め適切切なファイル形式に変 換しなければなりません(変換コマンドはCaffe側で⽤用意されています)。 その形式の1つのleveldb形式では、同じファイルに複数のプロセスから同時にデータにアク セスすることができません (下記issue参照*)。 今回のデモでは、様々なprototxtを⽣生成しましたが、⼊入⼒力力ファイルは共通していました。複 数のタスクが並列列に⾛走って競合が発⽣生するのを防ぐため1並列列で実⾏行行しました。 issueによるとleveldb形式ではなくLMDB形式を⽤用いれば並列列実⾏行行でも問題ないようです。 * Parallel access to Leveldb #695(https://github.com/BVLC/caffe/issues/695) 32
  33. 33. Mac OS 10.9でのCaffeのインストール (1/2) Q. Mac OS 10.9上でCaffeを簡単にインストールする⽅方法はないか? A. GPUを使わないならば10.8とほぼ同等の⽅方法でできます 公式サイトのインストール⼿手順にある通り、Mac OS 10.9でのインストール⽅方法は10.8 以前とは異異なります。 その原因の⼀一つがデフォルトで使⽤用するC++ライブラリです。Mac OS 10.9ではデフォ ルトC++コンパイラであるClang++はlibc++をデフォルトで⽤用いています。しかし、 NVIDIAのCUDAはlibstdc++でコンパイルしたライブラリとしかリンクできません。 33
  34. 34. Mac OS 10.9でのCaffeのインストール (2/2) 回避策は⼤大きく分けて2通りあります。 1. ⼀一つ⽬目はClang++のコンパイラをlibc++からlibstdc++に変更更する⽅方法(本家サイトで 紹介されている⽅方法)。 2. (GPUを使⽤用しない場合) 10.8以前の⽅方法にいくつか⼿手順を加える⽅方法。make allを⾏行行 う前にMakefile.configを2箇所修正します( (1)--libstdc++の削除(2)コメントアウトされ たCPU_ONLY:=1の有効化) 。NVIDIAのライブラリを使わないのでデフォルトのライブ ラリがlibc++でも問題なくCaffeをビルドできます。 ※ GPU未使⽤用のインストール⼿手順は@mooopanさんに指摘していただきました 34

×