JNNS 2015JNNS 2015
「Deep Learningを使ってみよう」
Pylearn2 & Torch7
The University of Tokyo
K. Nakayama
今日の内容今日の内容
ブ• Deep Learningライブラリの現状
P l 2基礎• Pylearn2基礎
• Torch7基礎• Torch7基礎
• GeSdA紹介GeSdA紹介
• GPU環境の構築について
• まとめ
今日の内容今日の内容
ブ• Deep Learningライブラリの現状
P l 2基礎• Pylearn2基礎
• Torch7基礎• Torch7基礎
• GeSdA紹介GeSdA紹介
• GPU環境の構築について
• まとめ
Deep Learning
ライブラリ一覧
ライブラリ 主な特徴 利用方法ライブラリ 主な特徴 利用方法
Caffe
・高速な動作
・モデルや実装を共有する
・Protobufファイルでモデル作成
・Python / Matlab インタフェースCaffe
コミュニティが充実
・画像処理のモデルが充実
・Python / Matlab インタフェース
・C++言語でのモデル作成
高度なパッケ ジ管理機能
Torch7
・高度なパッケージ管理機能
・シンプルかつ強力な
モデル設計機能
・Lua言語でのモデル作成
高いカスタマイズ性
Pylearn2
・高いカスタマイズ性
・モデル作成にTheanoの
自動微分が利用可能
・YAMLファイルでモデル作成
・Pythonでモデル作成
・Theanoベ ス
Keras
・Theanoベース
・LSTM、RNNなどにも対応
・Python
GeSdA
・高速な動作
・ユーティティが充実
・YAMLファイルでモデル作成
・Pythonでモデル作成ユ ティティが充実 Pythonでモデル作成
今日の内容今日の内容
ブ• Deep Learningライブラリの現状
P l 2基礎• Pylearn2基礎
• Torch7基礎• Torch7基礎
• GeSdA紹介GeSdA紹介
• GPU環境の構築について
• まとめ
概要概要
Pylearn2とはPylearn2とは
• Yoshua Bengio先生の研究室
ボ発祥• LISAラボ発祥
Th をベ ス• Theanoをベース
Th の自動微分が秀逸• Theanoの自動微分が秀逸
GPUコ ドの生成も可能• GPUコードの生成も可能
Pylearn2の構造Pylearn2の構造
SdADBN CNN M tSdADBN CNN
P l 2
Maxout ...
Pylearn2
Theano (Python)
Tensor / Gradient / Algebra / Code Gen.
CUDANumpy BlasScipy CUDANumpy BlasScipy
Python C / C++ / Fortran
Theano?Theano?
Pylearn2のすごさPylearn2のすごさ
が秀• SGDの実装とTheanoの自動微分が秀逸
• グラディエント
– W, W’, vb, hb
– FineTune時の各レイヤーのパラメータ
DemoDemo
Pylearn2の構造Pylearn2の構造
SdADBN CNN M tSdADBN CNN
P l 2
Maxout ...
Pylearn2
Theano (Python)
Tensor / Gradient / Algebra / Code Gen.
CUDANumpy BlasScipy CUDANumpy BlasScipy
Python C / C++ / Fortran
環境構築環境構築
Pylearn2の環境構築Pylearn2の環境構築
依存関係• 依存関係
– Theano, PIL, matplotlib
• 手順
– Git cloneでソースを取得Git cloneでソ スを取得
– setup.py
環境変数の設定– 環境変数の設定
• 簡単と思いきや結構面倒な部分も
境変数– Theano,PyYAML,環境変数とか...
• VM配布:Vagrantg
拙作インストーラー
deeplearning.jp/pylearn2-easy-installerp g jp/py y
インストーラが必要?
わりと大変な場合もある
ジが• Theanoは必要なパッケージが多い
– Blas, numpy, scipy, ipython, PyYAML, …, py, py, py , y ,
• バージョンの制限が強いものもある
ど パ ケ ジ管理を使うか• どのパッケージ管理を使うか?
– Tar.gz, configure, makeg , g ,
– APT
PIP / easy installer– PIP / easy_installer
• 環境変数
Pylearn2
基本的な使い方
Pylearn2の
主要なディレクトリ
D t t• Datasets
• Scripts
T t i l– Tutorials
• Deep_trainer
• Stacked autoencoders
利用する人
Stacked_autoencoders
• Grbm_smd
– Papers
• Dropout
• Maxout
• Training_algorithms
• Models 研究する人Models 研究する人
まずは準備運動まずは準備運動
D t t• Datasets
• Scripts
T t i l– Tutorials
• Deep_trainer
• Stacked autoencoders
利用する人
Stacked_autoencoders
• Grbm_smd
– Papers
• Dropout
• Maxout
• Training_algorithms
• Models 研究する人Models 研究する人
Grbm smd?Grbm_smd?
プ• Quick-Start サンプル
• CIFAR10を利用した画像認識
• Usage:
$ cd ~/pylearn2/pylearn2/scripts/tutorials/grbm smd$ cd /pylearn2/pylearn2/scripts/tutorials/grbm_smd
$ python make_dataset.py (実行済み)
$ train py cifar grbm smd yaml (8m+)$ train.py cifar_grbm_smd.yaml (8m+)
$ show_weights.py --out=weights.png
cifar grbm smd.pklcifar_grbm_smd.pkl
$ print_monitor.py cifar_grbm_smd.pkl
CIFAR10CIFAR10
train py?train.py?
• YAMLファイルに記述されいている内容に従
い、学習するためのスクリプト
• 学習結果をpklファイルとして出力
出力の読み方• 出力の読み方
– Epochs seen:学習回数p
– Objective: 目的関数
(エポックに応じて下がることを確認する)( ポックに応じて下がることを確認する)
YAMLの読み方YAMLの読み方
YAMLの読み方YAMLの読み方
Mini-batch SGDMini-batch SGD
SGDBatch-SGD Minibatch
1つだけ利用
Batch SGD
全部 SGD
X
X
y
y
X y X
X
y
y
X
X
y
y
X y
X
X
y
y
X
X
y
y
X y
Mini-batch SGDMini-batch SGD
SGDBatch-SGD Minibatch
1つだけ利用
Batch SGD
全部 SGD
Andrew Ng.資料より
Demo
YAML+Weights
Pylearn2の一般的な使い方Pylearn2の一般的な使い方
• YAMLの作成
• train py実行train.py実行
• 評価・変更
– show_weights.py --out=weights.png
xxx.pkl
– print_monitor.py xxx.pkl | grep
test_y_misclass_y_
「Maxout」「Maxout」
D t t• Datasets
• Scripts
T t i l– Tutorials
• Deep_trainer
• Stacked autoencoders
利用する人
Stacked_autoencoders
• Grbm_smd
– Papers
• Dropout
• Maxout
• Training_algorithms
• Models 研究する人Models 研究する人
Maxout?Maxout?
論 表 容• Maxout Networksの論文で発表した内容
• MNISTを利用した画像認識
• CIFAR用YAMLもある
• Usage:• Usage:
$ cd ~/pylearn2/pylearn2/scripts/papers/maxout
$ train py mnist pi yaml (904m23 683s (15h))$ train.py mnist_pi.yaml (904m23.683s (15h))
(途中で止める)
$ train py mnist pi continue yaml$ train.py mnist_pi_continue.yaml
(実行しない)
MaxoutMaxout
性 数を学 す• 活性化関数を学習する
• Ian J. G., Maxout Networks
• MNIST エラー率 0.94%,CIFAR 11.68%
Maxout
各種凸関数の近似
DropoutDropout
ダ 停• ランダムにニューロンを停止する
• オーバーフィッティングを防ぐことができるオ バ フィッティングを防ぐことができる
• 実装上はマスキングベクトル(1/0)をかける
• シンプルな割にかなり有効
次のステップ次のステップ
GPUを利用しましょうGPUを利用しましょう
GPUGPU
M tの計算時間• Maxoutの計算時間
– on AWS
904m23.683s (15h)
– with GeForce GTX 780 Ti
1482.33s (24m, 36x faster)
• 利用方法
– ~/.theanorc に以下を記述
[global][g ]
device=gpu
floatX = float32
新しいデータへ適用したい新しいデータへ適用したい
新しいデータへの対応方法新しいデータへの対応方法
基本• 基本
– pylearn2/pylearn2/datasetsにクラスを追加
汎用 ぽ ものもある• 汎用っぽいものもある
– Npy dataset
CSVD t t– CSVDataset
– MatlabDataset
Vectorspacesdataset– Vectorspacesdataset
– だいたいが情報不足・動作するか不明
ハック紹介• ハック紹介
– pylearn2/pylearn2/datasets/libsvm.py
学習過程の可視化学習過程の可視化
DemoDemo
Theano / Pylearn2
まとめ
M t D t CNN RBM SdAなど有• Maxout,Dropout,CNN,RBM,SdAなど有
名どころは一通りそろっている
• Theanoの自動微分が秀逸• Theanoの自動微分が秀逸
• GPU / CPUの切り替えが楽
YAMLでネ トワ クを定義• YAMLでネットワークを定義
• 拡張性が高い
おも な 精神が少 欠 る• おもてなしの精神が少し欠けてる
– 定義の冗長性
機能性 汎用性– 機能性,汎用性
– ドキュメント更新してほしい
今日の内容今日の内容
ブ• Deep Learningライブラリの現状
P l 2基礎• Pylearn2基礎
• Torch7基礎• Torch7基礎
• GeSdA紹介GeSdA紹介
• GPU環境の構築について
• まとめ
まずは環境構築まずは環境構築
Torch環境の構築Torch環境の構築
中 も導 が• pylearn2, Torch7, Caffeの中では最も導入がス
ムーズなイメージ
• 基本的な手順
– Git, Curlのインストール,
– Gitからソースをクローン
– インストールスクリプトの実行実行
• VM配布:Docker,AMI
今回配布のAWSのイメ ジにはすでにインスト• 今回配布のAWSのイメージにはすでにインストー
ル済み
概要概要
Torch7Torch7
械 算 が 富• 機械学習向けの数値計算機能が豊富
• Facebookの参入など成長著しいFacebookの参入など成長著しい
• 非常に簡潔にネットワークの定義が可能
• 強力なパッケージ管理機能
• Lua言語 -> Cへのインタフェース• Lua言語 -> Cへのインタフェ ス
• テンソル処理などはCで記述
Torch7Torch7
械 算 が 富• 機械学習向けの数値計算機能が豊富
• Facebookの参入など成長著しいFacebookの参入など成長著しい
• 非常に簡潔にネットワークの定義が可能
• 強力なパッケージ管理機能
• Lua言語 -> Cへのインタフェース• Lua言語 -> Cへのインタフェ ス
• テンソル処理などはCで記述
luarocksluarocks
ジ• パッケージ管理ツール
– pip, cpan, pearみたいなものp p, cpa , pea みた なもの
• 各種のパッケージが公開されている
i i– image, csvigo
• Deep Learning系パッケージp g
– nn, unsup, dp
• Usage• Usage
$ luarocks install [package]
Torch7Torch7
• Facebookの参入など成長著しい
• 強力なパッケージ管理機能強力なパッケ ジ管理機能
• 非常に簡潔にネットワークの定義が可能
• Deep Learningのパッケージが充実
• Lua言語• Lua言語
MLPを作ってみようMLPを作ってみよう
やりたいこと(XOR)やりたいこと(XOR)
普通のXOR 今回のXOR
X1 X2 Y X1 X2 Y
普通のXOR 今回のXOR
0 0 0
0 1 1
1 0 1
‐1 ‐1 ‐1
‐1 1 1
1 1 11 0 1
1 1 0
1 ‐1 1
1 1 ‐1
動かしてみよう動かしてみよう
ず ダ ド• まずはダウンロード
– $ wget$ g
knakayama.com/tmp/exercise/mlp_xor.lua
• 二つの実行方法• 二つの実行方法
– コマンドラインから実行
$ th l l$ th mlp_xor.lua
– インタプリタから実行
$ th
> dofile(‘mlp_xor.lua’)
thで便利なコマンドthで便利なコマンド
補完機能• 補完機能
– 途中まで入力してタブキー
– dofile(‘m… すら補完してくれる!
• 変数名をそのまま入力変数名をそのまま入力
• 上ボタンで前のコマンド
E i• Exercise
– Sequentialの初期状態を見てみよう
– mlp:forward(x)を実行
– mlp:forward(x):size()を実行p ( ) ()
Exercise: nnで遊ぶExercise: nnで遊ぶ
• Tanhの代わりにSigmoid
– nn.Sigmoidを利用するS g o dを利用する
– learningrateは0.1に変更
多層にしてみる• 多層にしてみる
– mlp:add()を追加,精度を比較してみる
Torch7のSequence
直感的な理解
• Sequenceで入れ物を作る
• nn Moduleの組み合わせnn.Moduleの組み合わせ
– Tanh, Linear
S ti lC l ti MM– SpatialConvolutionMM
– ReLU
• nn.Moduleの持つ関数
Forward backward– Forward, backward
Exercise: オンザフライ方式Exercise: オンザフライ方式
便 だ ど• train()は便利だけど...
• もう少し中身を細かくみたい
• backward()を使う方法
• まずはダウンロード• まずはダウンロ ド
$ wget knakayama.com/tmp/exercise/xor_fly.lua
実行• 実行
> dofile(‘xor_fly.lua’)
後• 実行後変数をみてみてる
– mlp, input, output, mlp_outなど
CNNの例CNNの例
Torch7Torch7
• Facebookの参入など成長著しい
• 強力なパッケージ管理機能強力なパッケ ジ管理機能
• 非常に簡潔にネットワークの定義が可能
• Deep Learningのパッケージが充実
• Lua言語• Lua言語
Deep Learning系パッケージDeep Learning系パッケージ
• nn• nn
– 非常に簡潔にMLPが書ける
– ある程度レイヤー,評価関数などがそろっている
CNNまでは非常に簡潔に書ける– CNNまでは非常に簡潔に書ける
• dp
– nnの拡張パックに近いイメージか
Alexnet CNN RNNなど最近のアルゴリズムを中心に– Alexnet,CNN,RNNなど最近のアルゴリズムを中心に,
カスタマイズしやすいネットワークや便利機能を提供
– 言語モデル,顔認識など
• unsupunsup
– Autoencoder系の実装がある
– k-means, PCAなども
• fbcunnfbcunn
– Facebook製のCUDA対応nn
– 高速(らしい)
– インストールが大変だが...イン ル 大変だ
今日の内容今日の内容
ブ• Deep Learningライブラリの現状
P l 2基礎• Pylearn2基礎
• Torch7基礎• Torch7基礎
• GeSdA紹介GeSdA紹介
• GPU環境の構築について
• まとめ
GeSdA?GeSdA?
GPU
enpoweredenpowered
Stacked
denoising
A t dAuto-encoder
GeSdAGeSdA
GPUベ スのSdA• GPUベースのSdA
– Minibatch-SGD
Numpy + Blasの5 16倍程度高速– Numpy + Blasの5~16倍程度高速
– GPU / Numpyの切り替えオプション
• グリッドサーチ機能 パラメータ自動調整(LR)• グリッドサーチ機能、パラメータ自動調整(LR)
• インタラクティブな可視化機能
汎用デ タセットへの対応(LibSVM形式)• 汎用データセットへの対応(LibSVM形式)
• 精度:MNISTで98.7%
B i ’ T t i l 98 5%– Bengio’s Tutorial: 98.5%
– Maxout on Pylearn2: 99% 以上
GPU?GPU?
グ ダ グ• グラフィック(3D等)のレンダリングに利用
• Nvidia Geforce GTX 780 TiNvidia Geforce GTX 780 Ti
– 2,880コア
5 040 GFLOPS– 5,040 GFLOPS
• Intel Xeon E5-4650
– 8コア
172 8 GFLOPS– 172.8 GFLOPS
Source: Source: NvidiaNvidia
Source: Source: NvidiaNvidia
GeSdAの構造GeSdAの構造
GeSdA ユーティリティ
SdADBN Convolutional NN
GeSdA
CUDANumpy BlasPyCUDA
Python C / C++ / FortranPython C / C++ / Fortran
GeSdA - YAMLGeSdA - YAML
GeSdA – YAML
可変長レイヤー数対応グリッドサーチ
GeSdA - グリッドサーチGeSdA - グリッドサーチ
アプリケーションアプリケーション
DeepMotion | GeSdADeepMotion | GeSdA
今日の内容今日の内容
ブ• Deep Learningライブラリの現状
P l 2基礎• Pylearn2基礎
• Torch7基礎• Torch7基礎
• GeSdA紹介GeSdA紹介
• GPU環境の構築について
• まとめ
Deep LearningとGPUDeep LearningとGPU
• ちゃんと解析するにはGPUがほぼ必須
• 数倍~10倍程度の速度に差が出る
場合によ ては非常に困難• 場合によっては非常に困難
• Deep Learning研究の障害
• 何が問題か?• 何が問題か?
– GPU技術は主にWindowsで育ってきた
– Linuxの対応はまだ不十分(Teslaなどは別)
– Ubuntuのサポートが一番厚い
– Ubuntuはディスプレイドライバが“優秀”
すぎてバッティングする場合があるす ッ ィ グす 場合 あ
– サーバ VS クライアント
– 数値計算にGUIはいらないが。。。
悩ましい問題の可視化悩ましい問題の可視化
OS
Linux Windows
数値計算の資
PC
Mother BoardUbuntu
サーバOS デスクトップOS
Ubuntu以外
動作させるの
に骨が折れる
算
産が使えない
場合が多い
Mother Board
GPUCPU
サーバOS
Tesla GeForce
デスクトップOS
画面描画とメモ
リ・帯域共有
に骨が折れる
場合が多い
Onboard GPU
高い
Nouveau
問題
リ・帯域共有
インストール時の問題と対処インストール時の問題と対処
デ プ• デスクトップ版 Ubuntu
– debでインストールdebでインスト ル
– その後に APTでnvidia-prime
サ バ版Ub t• サーバ版Ubuntu
– 「http://deeplearning.jp/deep-learning研究
のためのgpu環境構築/」を参照
– 要約:modprobe.dを変更し、nouveauを無効要約 p を変更 、 を 効
化、GRUBの設定でmodesetを0にする、カーネ
ルソースをインストールし、modprobe適用…、 p
注意点注意点
「• 「インストールされていたと思っていた」問題
• 細かくチェックする細かくチェックする
– Nvidia-smiコマンドが正常に実行できるかで判
断する場合が多い断する場合が多い
– /usr/loca/cuda/samplesの行列積などで検証
今日の内容今日の内容
ブ• Deep Learningライブラリの現状
P l 2基礎• Pylearn2基礎
• Torch7基礎• Torch7基礎
• GeSdA紹介GeSdA紹介
• GPU環境の構築について
• まとめ
今日のポイント
+ いいたいこと
途• Deep Learningはまだ発展途上の技術
• まだまだ拡張・ハックが必要まだまだ拡張 ハックが必要
• Caffe,Pylearn2に続く期待のTorch7も紹介
• GeSdA開発中
• Kerasなど新しいライブラリも続々登場中• Kerasなど新しいライブラリも続々登場中
• まだノウハウの蓄積が必要
Deeplearning.jpp g jp
ご静聴
ありがとうございました

Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)