Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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++に変更更する⽅方法(本家サイトで 
紹介されている⽅方法...
Nächste SlideShare
Wird geladen in …5
×

Development and Experiment of Deep Learning with Caffe and maf

68.890 Aufrufe

Veröffentlicht am

2014/10/30 PyData Tokyo Meetup #1

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

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

×