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.
ディープラーニングツール
「Pylearn2」「Torch7」
とその仕組み
The University of Tokyo
K. Nakayama
#AIT8
今日の目次
• Deep Learning基礎
• 環境構築
• Pylearn2 基礎編
• Pylearn2 応用編
• ライブラリ比較
• Torch7
• まとめ
今日の目次
• Deep Learning基礎
• 環境構築
• Pylearn2 基礎編
• Pylearn2 応用編
• ライブラリ比較
• Torch7
• まとめ
ニューラルネットワーク
再訪
ニューラルネットワーク?
x0 x1 xn
y0 y1 yn…
…
Out
In
Hidden
Units
ニューラルネットワーク?
x0 x1 xn
y0 y1 yn…
…
Out
In
Hidden
Units
?
線形分離不能な問題
アプリケーション例
レストラン評価マイニング
入力:単語集合良い
レストラン度
低い クオリティ 値段
},,,{ 値段クオリティ低い高いx
高い
ニューラルネットワークの学習
x0 x1 xn
y0 y1 yn…
…
Out
In
Hidden
Layer
0 1 9
Error
Error
主なビルディングブロック
• 誤差逆伝播法(BP)
• 最急降下法
• 確率的勾配降下法(SGD)
• 活性化関数
–シグモイド関数 / tanh
• コスト関数:
–二乗和誤差
–交差エントロピー誤差
活性化関数
ステップ関数 シグモイド関数








a
a
af
,1
,1
)(
)exp(1
1
)(
a
af


微分可能

ニューラルネットワークの学習
x0 x1 xn
y0 y1 yn…
…
Out
In
Hidden
Layer
0 1 9
Error
Error
いろんな
ニューラルネットワーク
x0 x1 xn
y0 y1 yn…
…
Out
In
Hidden
Layer
前層への出力を持つもの
いろんな
ニューラルネットワーク
ネットワーク形状のもの
ホップフィールドモデルなど
多層パーセプトロン(MLP)
x0 x1 xn
y0 y1 yn…
…
Out
In
Hidden
Layer
身近なNN
• 画像認識
• 文字認識
• ロボット制御
• 天気予報
• 巡回セールスマン問題
• ゲームのアルゴリズム
NNの問題
• 従来のNN
– すぐに局所解に陥る
– オーバーフィッティング
• 多層にすることで表現力は上がるが…
– 下層へ誤差情報が伝播されない
– 収束速度が遅い
Deep Learning
Deep Learning
~研究サイド~
• Hinton 2006
– 1階層ごとに教師無し学習で事前訓練すれば良い結果
が得られることを示した
• 大規模解析をすれば、高次の概念を学習できる?
– Google 猫ニューロン
• 各種コン...
Google 猫ニューロン
Deep Learningの
アルゴリズムたち
- SdA -
Stacked
Denoising
Autoencoder
SdA
x0 x1 xn
y0 y1 yn…
…
Out
In
Hidden
Layer
SdA - dA
x0 x1 xn…In
Hidden
Layer
Encode Decode
入力情報を復元
SdA - dA
x0 x1 xn…In
Hidden
Layer
Encode Decode
…
Hidden
Layer
前の層の情報を復元
SdA - Denoising?
x0 x1 xn…In
Hidden
Layer
Encode Decode
…
Hidden
Layer
ロバスト性を高める
…
Input
Visible
Hidden
Layer
Layer
Layer
Output (Top level layer)
Label
Pre-training
Encode
Decode
Fine-tuning
- DBN -
Deep
Belief
Network
DBN
• RBM: Restricted Boltzmann Machine
Ref. deeplearning.net
RBM
• 生成モデル
• データの分布をモデル
化するアルゴリズム
• CD-k, CD-1
• An Introduction to
Restricted Boltzmann
Machines 参照
0x
1x
2x
3x
Visible ...
Convolutional DBN
Honglak Lee, et al., Convolutional Deep Belief Networks for
Scalable Unsupervised Learning of Hierarchic...
Pylearn2
Pylearn2の構造
Python C / C++ / Fortran
SdADBN Convolutional NN
CUDANumpy
Theano (Python)
Tensor / Gradient / Algebra / Code ...
Pylearn2とは
• Yoshua Bengio先生の研究室
• LISAラボ発祥
• Theanoをベース
• Theanoの自動微分が秀逸
• GPUコードの生成も可能
今日の目次
• Deep Learning基礎
• 環境構築
• Pylearn2 基礎編
• Pylearn2 応用編
• ライブラリ比較
• Torch7
• まとめ
まずはPylearn2
Pylearn2の環境構築
• 依存関係
– Theano, PIL, matplotlib
• 手順
– Git cloneでソースを取得
– setup.py
– 環境変数の設定
• 簡単と思いきや結構面倒な部分も
– Theano,PyY...
Pylearn2_installer
インストーラが必要?
わりと大変な場合もある
• Theanoは必要なパッケージが多い
– Blas, numpy, scipy, ipython, PyYAML, …
• バージョンの制限が強いものもある
• どのパッケージ管理を使うか?
–...
Torchは?
Torch環境の構築
• pylearn2, Torch7, Caffeの中では最も導入がス
ムーズなイメージ
• 基本的な手順
– Git, Curlのインストール
– Gitからソースをクローン
– インストールスクリプトの実行
• VM配...
環境構築が終わっている人
~ Theanoを使ってみよう ~
つまり2 * x
Theano
Sample2
((fill(sigmoid(x), TensorConstant{1.0}) * sigmoid(x)) *
(TensorConstant{1.0} - sigmoid(x)))
fill(a, b):aの形の...
Theano
Sample3
(((fill(sigmoid((x * w)), TensorConstant{1.0}) *
sigmoid((x * w))) * (TensorConstant{1.0} - sigmoid((x *
w)...
Pylearn2のすごさ
• SGDの実装とTheanoの自動微分が秀逸
• グラディエント
– W, W’, vb, hb
– FineTune時の各レイヤーのパラメータ
今日の目次
• Deep Learning基礎
• 環境構築
• Pylearn2 基礎編
• Pylearn2 応用編
• ライブラリ比較
• Torch7
• まとめ
Pylearn2の
主要なディレクトリ
• Datasets
• Scripts
– Tutorials
• Deep_trainer
• Stacked_autoencoders
• Grbm_smd
– Papers
• Dropout
•...
Grbm_smd?
• Quick-Start サンプル
• CIFAR10を利用した画像認識
• Usage:
$ cd ~/pylearn2/pylearn2/scripts/tutorials/grbm_smd
$ python make...
CIFAR10
train.py?
• YAMLファイルに記述されいている内容に従
い、学習するためのスクリプト
• 学習結果をpklファイルとして出力
• 出力の読み方
– Epochs seen:学習回数
– Objective: 目的関数
(エポックに応...
YAMLの読み方
Mini-batch SGD
SGD
1つだけ利用
X
X
X
X
X
X
X
X
y
y
y
y
y
y
y
y
Batch-SGD
全部
X y
Minibatch
SGD
X
X
X
y
y
y
Mini-batch SGD
SGD
1つだけ利用
Batch-SGD
全部
Minibatch
SGD
Andrew Ng.資料より
Pylearn2の一般的な使い方
• YAMLの作成
• train.py実行
• 評価・変更
– show_weights.py --out=weights.png
xxx.pkl
– print_monitor.py xxx.pkl | g...
ちょっと複雑な例「SdA」
• Datasets
• Scripts
– Tutorials
• Deep_trainer
• Stacked_autoencoders
• Grbm_smd
– Papers
• Dropout
• Maxou...
Stacked_autoencoders?
• SdAのサンプル
• MNISTを利用した画像認識
• Usage:
$ cd ~/pylearn2/pylearn2/scripts/datasets
$ python download_mni...
MNIST?
Stacked Autoencoderの構造
• 3つのYAMLファイル
– Dae_l1.yaml (1つ目のdAレイヤー)
– Dae_l2.yaml (2つ目のdAレイヤー)
– Dae_mlp.yaml(全体のMLP)
• Test_d...
さらに複雑な例「Deep Trainer」
• Datasets
• Scripts
– Tutorials
• Deep_trainer
• Stacked_autoencoders
• Grbm_smd
– Papers
• Dropout...
Deep_trainer?
• SdAなどをさらに多層することが可能
• MNIST/CIFARなどに対応
• YAMLを使わない方法
• Usage:
$ cd ~/pylearn2/pylearn2/scripts/tutorials/
d...
今日の目次
• Deep Learning基礎
• 環境構築
• Pylearn2 基礎編
• Pylearn2 応用編
• ライブラリ比較
• Torch7
• まとめ
「Maxout」
• Datasets
• Scripts
– Tutorials
• Deep_trainer
• Stacked_autoencoders
• Grbm_smd
– Papers
• Dropout
• Maxout
• T...
Maxout?
• Maxout Networksの論文で発表した内容
• MNISTを利用した画像認識
• CIFAR用YAMLもある
• Usage:
$ cd ~/pylearn2/pylearn2/scripts/papers/maxo...
Maxout
• 活性化関数を学習する
• Ian J. G., Maxout Networks
• MNIST エラー率 0.94%,CIFAR 11.68%
Maxout
各種凸関数の近似
Ref; Maxout Networks
Dropout
• ランダムにニューロンを停止する
• オーバーフィッティングを防ぐことができる
• 実装上はマスキングベクトル(1/0)をかける
• シンプルな割にかなり有効
次のステップは?
GPUを利用しましょう
GPU
• Maxoutの計算時間
– on AWS
904m23.683s (15h)
– with GeForce GTX 780 Ti
1482.33s (24m, 36x faster)
• 利用方法
– ~/.theanorc に以下...
Pylearn2 / Deep Learning
注意事項
• Pre-trainあるか無いかより、パラメータのほうが大
きな影響を与える
– Learning Rate
– Batch size
– Epoch数
– Hiddenレイヤーのユ...
Pylearn2ハック
Deep Learningハック
• なぜハックするか?
– 論文を読むと分かった気になるが…
• なぜPylearn2はハックする必要があるか?
– ライブラリとしては未完
– カスタマイズが必要
– 汎用データ形式に対応してない
– 学習の...
新しいデータへ適用したい
新しいデータへの対応方法
• 基本
– pylearn2/pylearn2/datasetsにクラスを追加
• 汎用っぽいものもある
– Npy dataset
– CSVDataset
– MatlabDataset
– Vectorspac...
LibSVM形式
行の先頭にクラス 以降、素性と値
そもそもYAML定義や
Pythonコードが面倒
Confusion Matrix
• 正解ベクトルと出力ベクトルの内積を単純に足したもの
• クラス「0」の正解データを利用して推定した結果、「0」に推定される場合
が非常に多く、975.276
• また、次に高い値はクラス「6」の1.842で...
学習過程の可視化
(偽)Handwritingデータ
• Datasets/Handwritingクラスの作成
• WindowsのTTF
• 変形
– 拡大・縮小
– 平行移動
– 回転
認識精度の可視化
構成
Server Side Client Side
jQuery
Backbone.js
Socket.io
Socket.io.js
python
pylearn2
dl_hacks lib
socketio
dl_tester socke...
Pylearn2まとめ
• Pylearn2 / Theano
– Theanoをベースにしているので拡張性が高い
– SdA,DBN,Maxout…
– GPUへの対応が用意
• ライブラリとしては未完
• ハックが必要
– データ読み込み
...
今日の目次
• Deep Learning基礎
• 環境構築
• Pylearn2 基礎編
• Pylearn2 応用編
• ライブラリ比較
• Torch7
• まとめ
Deep Learningに関する
ライブラリ
• 殿堂入り
– Theano / Pylearn2
– Caffe
– Torch7
• Deeplearning.jp
– GeSdA
• ニューフェイス
– Keras
– Chainer ...
Theano / Pylearn2
• Maxout,Dropout,CNN,RBM,SdAなど有
名どころは一通りそろっている
• Theanoの自動微分が秀逸
• GPU / CPUの切り替えが楽
• YAMLでネットワークを定義
• 拡張...
Caffe
• 画像処理では不動の位置を確立
• 高速
• コミュニティが強力
• 精度の高い定義などが数多く公開されている
• 各種のバインディングが充実
• モデルを書くときは結局CかC++
• やっぱりおもてなしの精神が少し欠けてる
– ...
Torch7
• 機械学習向けの数値計算機能が豊富
• Facebookの参入など成長著しい
• 非常に簡潔にネットワークの定義が可能
• 強力なパッケージ管理機能
• Lua言語 -> Cへのインタフェース
• やっぱりおもてなしの精神が少し...
Deep Learningに関する
ライブラリ
• 殿堂入り
– Theano / Pylearn2
– Caffe
– Torch7
• Deeplearning.jp
– GeSdA
• ニューフェイス
– Keras
– Chainer ...
GeSdA?
GPU
enpowered
Stacked
denoising
Auto-encoder
GeSdA
• GPUベースのSdA
– Minibatch-SGD
– Numpy + Blasの5~16倍程度高速
– GPU / Numpyの切り替えオプション
• グリッドサーチ機能、パラメータ自動調整(LR)
• インタラクティブな可...
GPU?
• グラフィック(3D等)のレンダリングに利用
• Nvidia Geforce GTX 780 Ti
– 2,880コア
– 5,040 GFLOPS
• Intel Xeon E5-4650
– 8コア
– 172.8 GFLOP...
Source: Nvidia
Deep Learning
ライブラリの状況
• Pylearn2
– Python, Numpy, Theanoベース
– 依存ライブラリが多すぎる
– 使い勝手が...
• Caffe
– Cがメイン
– Pythonなどのインタフェースは...
GeSdAの構造
Python C / C++ / Fortran
SdADBN Convolutional NN
CUDANumpy BlasPyCUDA
GeSdA
GeSdA ユーティリティ
GeSdA - YAML
GeSdA – YAML
可変長レイヤー数対応グリッドサーチ
GeSdA - グリッドサーチ
アプリケーション
DeepMotion | GeSdA
Torch7
• Facebookの参入など成長著しい
• 強力なパッケージ管理機能
• 非常に簡潔にネットワークの定義が可能
• Deep Learningのパッケージが充実
• 強力なLua言語→C言語バインディング
Torch7
• Facebookの参入など成長著しい
• 強力なパッケージ管理機能
• 非常に簡潔にネットワークの定義が可能
• Deep Learningのパッケージが充実
• 強力なLua言語→C言語バインディング
luarocks
• パッケージ管理ツール
– pip, cpan, pearみたいなもの
• 各種のパッケージが公開されている
– image, csvigo
• Deep Learning系パッケージ
– nn, unsup, dp
• U...
Torch7
• Facebookの参入など成長著しい
• 強力なパッケージ管理機能
• 非常に簡潔にネットワークの定義が可能
• Deep Learningのパッケージが充実
• Lua言語
MLPを作ってみよう
動かしてみよう
• まずはダウンロード
– $ wget
knakayama.com/tmp/exercise/mlp_xor.lua
• 二つの実行方法
– コマンドラインから実行
$ th mlp_xor.lua
– インタプリタから実行
...
Torch7のSequential
直感的な理解
• Sequentialで入れ物を作る
• nn.Moduleの組み合わせ
– Tanh, Linear
– SpatialConvolutionMM
– ReLU
• nn.Moduleの持つ...
CNNの例
Torch7
• Facebookの参入など成長著しい
• 強力なパッケージ管理機能
• 非常に簡潔にネットワークの定義が可能
• Deep Learningのパッケージが充実
• Lua言語
Deep Learning系パッケージ
• nn
– 非常に簡潔にMLPが書ける
– ある程度レイヤー,評価関数などがそろっている
– CNNまでは非常に簡潔に書ける
• dp
– nnの拡張パックに近いイメージか
– Alexnet,CNN,...
今日の目次
• Deep Learning基礎
• 環境構築
• Pylearn2 基礎編
• Pylearn2 応用編
• ライブラリ比較
• Torch7
• まとめ
今日のポイント
+ いいたいこと
• Deep Learningはまだ発展途上の技術
• まだまだ拡張・ハックが必要
• Caffe,Pylearn2に続く期待のTorch7も紹介
• GeSdA開発中
• 新しいライブラリも続々登場中
• ま...
ご静聴
ありがとうございました
JSAI's AI Tool Introduction - Deep Learning, Pylearn2 and Torch7
JSAI's AI Tool Introduction - Deep Learning, Pylearn2 and Torch7
Upcoming SlideShare
Loading in …5
×

JSAI's AI Tool Introduction - Deep Learning, Pylearn2 and Torch7

34,589 views

Published on

JSAI's AI Tool lecture series part 6,7,8. Deep Learning, the glance, Pylearn2 and Torch7

Published in: Science
  • DOWNLOAD FULL BOOKS INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL PDF EBOOK here { https://tinyurl.com/y8nn3gmc } ......................................................................................................................... 1.DOWNLOAD FULL EPUB Ebook here { https://tinyurl.com/y8nn3gmc } ......................................................................................................................... 1.DOWNLOAD FULL doc Ebook here { https://tinyurl.com/y8nn3gmc } ......................................................................................................................... 1.DOWNLOAD FULL PDF EBOOK here { https://tinyurl.com/y8nn3gmc } ......................................................................................................................... 1.DOWNLOAD FULL EPUB Ebook here { https://tinyurl.com/y8nn3gmc } ......................................................................................................................... 1.DOWNLOAD FULL doc Ebook here { https://tinyurl.com/y8nn3gmc } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

JSAI's AI Tool Introduction - Deep Learning, Pylearn2 and Torch7

  1. 1. ディープラーニングツール 「Pylearn2」「Torch7」 とその仕組み The University of Tokyo K. Nakayama #AIT8
  2. 2. 今日の目次 • Deep Learning基礎 • 環境構築 • Pylearn2 基礎編 • Pylearn2 応用編 • ライブラリ比較 • Torch7 • まとめ
  3. 3. 今日の目次 • Deep Learning基礎 • 環境構築 • Pylearn2 基礎編 • Pylearn2 応用編 • ライブラリ比較 • Torch7 • まとめ
  4. 4. ニューラルネットワーク 再訪
  5. 5. ニューラルネットワーク? x0 x1 xn y0 y1 yn… … Out In Hidden Units
  6. 6. ニューラルネットワーク? x0 x1 xn y0 y1 yn… … Out In Hidden Units ?
  7. 7. 線形分離不能な問題
  8. 8. アプリケーション例 レストラン評価マイニング 入力:単語集合良い レストラン度 低い クオリティ 値段 },,,{ 値段クオリティ低い高いx 高い
  9. 9. ニューラルネットワークの学習 x0 x1 xn y0 y1 yn… … Out In Hidden Layer 0 1 9 Error Error
  10. 10. 主なビルディングブロック • 誤差逆伝播法(BP) • 最急降下法 • 確率的勾配降下法(SGD) • 活性化関数 –シグモイド関数 / tanh • コスト関数: –二乗和誤差 –交差エントロピー誤差
  11. 11. 活性化関数 ステップ関数 シグモイド関数         a a af ,1 ,1 )( )exp(1 1 )( a af   微分可能 
  12. 12. ニューラルネットワークの学習 x0 x1 xn y0 y1 yn… … Out In Hidden Layer 0 1 9 Error Error
  13. 13. いろんな ニューラルネットワーク x0 x1 xn y0 y1 yn… … Out In Hidden Layer 前層への出力を持つもの
  14. 14. いろんな ニューラルネットワーク ネットワーク形状のもの ホップフィールドモデルなど
  15. 15. 多層パーセプトロン(MLP) x0 x1 xn y0 y1 yn… … Out In Hidden Layer
  16. 16. 身近なNN • 画像認識 • 文字認識 • ロボット制御 • 天気予報 • 巡回セールスマン問題 • ゲームのアルゴリズム
  17. 17. NNの問題 • 従来のNN – すぐに局所解に陥る – オーバーフィッティング • 多層にすることで表現力は上がるが… – 下層へ誤差情報が伝播されない – 収束速度が遅い
  18. 18. Deep Learning
  19. 19. Deep Learning ~研究サイド~ • Hinton 2006 – 1階層ごとに教師無し学習で事前訓練すれば良い結果 が得られることを示した • 大規模解析をすれば、高次の概念を学習できる? – Google 猫ニューロン • 各種コンペで上位がことごとく Deep Learningが上位を占める • 何が良いのか? – 「特徴表現学習」 – 多層にしても学習ができる。収束する – 汎化性能が高い
  20. 20. Google 猫ニューロン
  21. 21. Deep Learningの アルゴリズムたち
  22. 22. - SdA - Stacked Denoising Autoencoder
  23. 23. SdA x0 x1 xn y0 y1 yn… … Out In Hidden Layer
  24. 24. SdA - dA x0 x1 xn…In Hidden Layer Encode Decode 入力情報を復元
  25. 25. SdA - dA x0 x1 xn…In Hidden Layer Encode Decode … Hidden Layer 前の層の情報を復元
  26. 26. SdA - Denoising? x0 x1 xn…In Hidden Layer Encode Decode … Hidden Layer ロバスト性を高める
  27. 27. … Input Visible Hidden Layer Layer Layer Output (Top level layer) Label Pre-training Encode Decode Fine-tuning
  28. 28. - DBN - Deep Belief Network
  29. 29. DBN • RBM: Restricted Boltzmann Machine Ref. deeplearning.net
  30. 30. RBM • 生成モデル • データの分布をモデル 化するアルゴリズム • CD-k, CD-1 • An Introduction to Restricted Boltzmann Machines 参照 0x 1x 2x 3x Visible Layer Hidden Layer 0h 1h 2h 3h
  31. 31. Convolutional DBN Honglak Lee, et al., Convolutional Deep Belief Networks for Scalable Unsupervised Learning of Hierarchical Representations (ICML 2009)
  32. 32. Pylearn2
  33. 33. Pylearn2の構造 Python C / C++ / Fortran SdADBN Convolutional NN CUDANumpy Theano (Python) Tensor / Gradient / Algebra / Code Gen. BlasScipy Pylearn2
  34. 34. Pylearn2とは • Yoshua Bengio先生の研究室 • LISAラボ発祥 • Theanoをベース • Theanoの自動微分が秀逸 • GPUコードの生成も可能
  35. 35. 今日の目次 • Deep Learning基礎 • 環境構築 • Pylearn2 基礎編 • Pylearn2 応用編 • ライブラリ比較 • Torch7 • まとめ
  36. 36. まずはPylearn2
  37. 37. Pylearn2の環境構築 • 依存関係 – Theano, PIL, matplotlib • 手順 – Git cloneでソースを取得 – setup.py – 環境変数の設定 • 簡単と思いきや結構面倒な部分も – Theano,PyYAML,環境変数とか... • VM配布:Vagrant
  38. 38. Pylearn2_installer
  39. 39. インストーラが必要? わりと大変な場合もある • Theanoは必要なパッケージが多い – Blas, numpy, scipy, ipython, PyYAML, … • バージョンの制限が強いものもある • どのパッケージ管理を使うか? – Tar.gz, configure, make – APT – PIP / easy_installer • 環境変数
  40. 40. Torchは?
  41. 41. Torch環境の構築 • pylearn2, Torch7, Caffeの中では最も導入がス ムーズなイメージ • 基本的な手順 – Git, Curlのインストール – Gitからソースをクローン – インストールスクリプトの実行 • VM配布:Docker,AMI • 今回配布のAWSのイメージにはすでにインストー ル済み
  42. 42. 環境構築が終わっている人 ~ Theanoを使ってみよう ~ つまり2 * x
  43. 43. Theano Sample2 ((fill(sigmoid(x), TensorConstant{1.0}) * sigmoid(x)) * (TensorConstant{1.0} - sigmoid(x))) fill(a, b):aの形の行列をbの値で埋める つまりsigmoid(x) * (1.0 – sigmoid(x))
  44. 44. Theano Sample3 (((fill(sigmoid((x * w)), TensorConstant{1.0}) * sigmoid((x * w))) * (TensorConstant{1.0} - sigmoid((x * w)))) * x) 変数が行列でもOK コスト関数に対する各パラメータの微分も自動で計算
  45. 45. Pylearn2のすごさ • SGDの実装とTheanoの自動微分が秀逸 • グラディエント – W, W’, vb, hb – FineTune時の各レイヤーのパラメータ
  46. 46. 今日の目次 • Deep Learning基礎 • 環境構築 • Pylearn2 基礎編 • Pylearn2 応用編 • ライブラリ比較 • Torch7 • まとめ
  47. 47. Pylearn2の 主要なディレクトリ • Datasets • Scripts – Tutorials • Deep_trainer • Stacked_autoencoders • Grbm_smd – Papers • Dropout • Maxout • Training_algorithms • Models 利用する人 研究する人
  48. 48. Grbm_smd? • Quick-Start サンプル • CIFAR10を利用した画像認識 • Usage: $ cd ~/pylearn2/pylearn2/scripts/tutorials/grbm_smd $ python make_dataset.py (実行済み) $ train.py cifar_grbm_smd.yaml (2m+) $ show_weights.py --out=weights.png cifar_grbm_smd.pkl $ print_monitor.py cifar_grbm_smd.pkl
  49. 49. CIFAR10
  50. 50. train.py? • YAMLファイルに記述されいている内容に従 い、学習するためのスクリプト • 学習結果をpklファイルとして出力 • 出力の読み方 – Epochs seen:学習回数 – Objective: 目的関数 (エポックに応じて下がることを確認する)
  51. 51. YAMLの読み方
  52. 52. Mini-batch SGD SGD 1つだけ利用 X X X X X X X X y y y y y y y y Batch-SGD 全部 X y Minibatch SGD X X X y y y
  53. 53. Mini-batch SGD SGD 1つだけ利用 Batch-SGD 全部 Minibatch SGD Andrew Ng.資料より
  54. 54. Pylearn2の一般的な使い方 • YAMLの作成 • train.py実行 • 評価・変更 – show_weights.py --out=weights.png xxx.pkl – print_monitor.py xxx.pkl | grep test_y_misclass
  55. 55. ちょっと複雑な例「SdA」 • Datasets • Scripts – Tutorials • Deep_trainer • Stacked_autoencoders • Grbm_smd – Papers • Dropout • Maxout • Training_algorithms • Models 利用する人 研究する人
  56. 56. Stacked_autoencoders? • SdAのサンプル • MNISTを利用した画像認識 • Usage: $ cd ~/pylearn2/pylearn2/scripts/datasets $ python download_mnist.py (実行済み) $ cd ~/pylearn2/pylearn2/scripts/tutorials/ stacked_autoencoders/tests $ python test_dae.py
  57. 57. MNIST?
  58. 58. Stacked Autoencoderの構造 • 3つのYAMLファイル – Dae_l1.yaml (1つ目のdAレイヤー) – Dae_l2.yaml (2つ目のdAレイヤー) – Dae_mlp.yaml(全体のMLP) • Test_dae.py – パラメータを設定 – 1st dA のPre-train – 2nd dA のPre-train – 全体のFine-Tune
  59. 59. さらに複雑な例「Deep Trainer」 • Datasets • Scripts – Tutorials • Deep_trainer • Stacked_autoencoders • Grbm_smd – Papers • Dropout • Maxout • Training_algorithms • Models 利用する人 研究する人
  60. 60. Deep_trainer? • SdAなどをさらに多層することが可能 • MNIST/CIFARなどに対応 • YAMLを使わない方法 • Usage: $ cd ~/pylearn2/pylearn2/scripts/tutorials/ deep_trainer $ python run_deep_trainer.py –d mnist (1m+)
  61. 61. 今日の目次 • Deep Learning基礎 • 環境構築 • Pylearn2 基礎編 • Pylearn2 応用編 • ライブラリ比較 • Torch7 • まとめ
  62. 62. 「Maxout」 • Datasets • Scripts – Tutorials • Deep_trainer • Stacked_autoencoders • Grbm_smd – Papers • Dropout • Maxout • Training_algorithms • Models 利用する人 研究する人
  63. 63. Maxout? • Maxout Networksの論文で発表した内容 • MNISTを利用した画像認識 • CIFAR用YAMLもある • Usage: $ cd ~/pylearn2/pylearn2/scripts/papers/maxout $ train.py mnist_pi.yaml (904m23.683s (15h)) (途中で止める) $ train.py mnist_pi_continue.yaml (実行しない)
  64. 64. Maxout • 活性化関数を学習する • Ian J. G., Maxout Networks • MNIST エラー率 0.94%,CIFAR 11.68%
  65. 65. Maxout 各種凸関数の近似 Ref; Maxout Networks
  66. 66. Dropout • ランダムにニューロンを停止する • オーバーフィッティングを防ぐことができる • 実装上はマスキングベクトル(1/0)をかける • シンプルな割にかなり有効
  67. 67. 次のステップは?
  68. 68. GPUを利用しましょう
  69. 69. GPU • Maxoutの計算時間 – on AWS 904m23.683s (15h) – with GeForce GTX 780 Ti 1482.33s (24m, 36x faster) • 利用方法 – ~/.theanorc に以下を記述 [global] device=gpu floatX = float32
  70. 70. Pylearn2 / Deep Learning 注意事項 • Pre-trainあるか無いかより、パラメータのほうが大 きな影響を与える – Learning Rate – Batch size – Epoch数 – Hiddenレイヤーのユニット数 • Pre-trainは最後の寄り切りに近い? – 高次のフィーチャを取得できる可能性もある
  71. 71. Pylearn2ハック
  72. 72. Deep Learningハック • なぜハックするか? – 論文を読むと分かった気になるが… • なぜPylearn2はハックする必要があるか? – ライブラリとしては未完 – カスタマイズが必要 – 汎用データ形式に対応してない – 学習の過程がわかりにくい – 学習と検証は分けたい – YAMLの定義が面倒 – 新しいアルゴリズムを作りたい…
  73. 73. 新しいデータへ適用したい
  74. 74. 新しいデータへの対応方法 • 基本 – pylearn2/pylearn2/datasetsにクラスを追加 • 汎用っぽいものもある – Npy dataset – CSVDataset – MatlabDataset – Vectorspacesdataset – だいたいが情報不足・動作するか不明 • ハック – pylearn2/pylearn2/datasets/libsvm.py
  75. 75. LibSVM形式 行の先頭にクラス 以降、素性と値
  76. 76. そもそもYAML定義や Pythonコードが面倒
  77. 77. Confusion Matrix • 正解ベクトルと出力ベクトルの内積を単純に足したもの • クラス「0」の正解データを利用して推定した結果、「0」に推定される場合 が非常に多く、975.276 • また、次に高い値はクラス「6」の1.842であり、0を6と間違える場合が多 い • 5は3,6、 8、0と間違えやすい 0 1 2 3 4 5 6 7 8 9 0 975.276 0.028 0.780 0.008 0.805 0.101 1.842 0.997 0.120 0.043 1 0.043 1132.765 0.629 0.915 0.003 0.012 0.361 0.107 0.165 0.000 2 4.347 0.413 1018.481 1.295 0.594 0.000 0.200 3.574 3.068 0.028 3 0.086 0.005 0.042 999.280 0.001 2.165 0.000 2.536 3.172 2.714 4 0.850 0.085 1.659 0.002 963.359 0.008 4.337 0.975 0.061 10.664 5 1.989 0.046 0.000 7.363 0.112 878.174 2.081 0.514 1.093 0.629 6 2.976 2.145 0.034 0.030 1.111 1.547 948.634 0.000 1.519 0.003 7 0.161 2.472 5.211 0.101 0.117 0.088 0.020 1014.079 2.260 3.493 8 1.488 0.162 1.436 1.994 0.287 0.760 0.332 3.108 959.650 4.784 9 0.464 2.996 0.005 1.987 6.322 2.243 0.012 2.926 1.182 990.864
  78. 78. 学習過程の可視化
  79. 79. (偽)Handwritingデータ • Datasets/Handwritingクラスの作成 • WindowsのTTF • 変形 – 拡大・縮小 – 平行移動 – 回転
  80. 80. 認識精度の可視化
  81. 81. 構成 Server Side Client Side jQuery Backbone.js Socket.io Socket.io.js python pylearn2 dl_hacks lib socketio dl_tester socketio
  82. 82. Pylearn2まとめ • Pylearn2 / Theano – Theanoをベースにしているので拡張性が高い – SdA,DBN,Maxout… – GPUへの対応が用意 • ライブラリとしては未完 • ハックが必要 – データ読み込み – パラメータ調整 – 可視化
  83. 83. 今日の目次 • Deep Learning基礎 • 環境構築 • Pylearn2 基礎編 • Pylearn2 応用編 • ライブラリ比較 • Torch7 • まとめ
  84. 84. Deep Learningに関する ライブラリ • 殿堂入り – Theano / Pylearn2 – Caffe – Torch7 • Deeplearning.jp – GeSdA • ニューフェイス – Keras – Chainer (PFI)
  85. 85. Theano / Pylearn2 • Maxout,Dropout,CNN,RBM,SdAなど有 名どころは一通りそろっている • Theanoの自動微分が秀逸 • GPU / CPUの切り替えが楽 • YAMLでネットワークを定義 • 拡張性が高い • おもてなしの精神が少し欠けてる – 定義の冗長性 – 機能性,汎用性 – ドキュメント更新してほしい
  86. 86. Caffe • 画像処理では不動の位置を確立 • 高速 • コミュニティが強力 • 精度の高い定義などが数多く公開されている • 各種のバインディングが充実 • モデルを書くときは結局CかC++ • やっぱりおもてなしの精神が少し欠けてる – すんごい長いPrototext – 機能性,汎用性
  87. 87. Torch7 • 機械学習向けの数値計算機能が豊富 • Facebookの参入など成長著しい • 非常に簡潔にネットワークの定義が可能 • 強力なパッケージ管理機能 • Lua言語 -> Cへのインタフェース • やっぱりおもてなしの精神が少し欠けてる – 機能面
  88. 88. Deep Learningに関する ライブラリ • 殿堂入り – Theano / Pylearn2 – Caffe – Torch7 • Deeplearning.jp – GeSdA • ニューフェイス – Keras – Chainer (PFI)
  89. 89. GeSdA? GPU enpowered Stacked denoising Auto-encoder
  90. 90. GeSdA • GPUベースのSdA – Minibatch-SGD – Numpy + Blasの5~16倍程度高速 – GPU / Numpyの切り替えオプション • グリッドサーチ機能、パラメータ自動調整(LR) • インタラクティブな可視化機能 • 汎用データセットへの対応(LibSVM形式) • 精度:MNISTで98.7% – Bengio’s Tutorial: 98.5% – Maxout on Pylearn2: 99% 以上
  91. 91. GPU? • グラフィック(3D等)のレンダリングに利用 • Nvidia Geforce GTX 780 Ti – 2,880コア – 5,040 GFLOPS • Intel Xeon E5-4650 – 8コア – 172.8 GFLOPS Source: Nvidia
  92. 92. Source: Nvidia
  93. 93. Deep Learning ライブラリの状況 • Pylearn2 – Python, Numpy, Theanoベース – 依存ライブラリが多すぎる – 使い勝手が... • Caffe – Cがメイン – Pythonなどのインタフェースはあるが – Pylearn2に負けずと依存関係が大変 – Include,ライブラリのリンクが面倒... • Torch7 – Lua言語
  94. 94. GeSdAの構造 Python C / C++ / Fortran SdADBN Convolutional NN CUDANumpy BlasPyCUDA GeSdA GeSdA ユーティリティ
  95. 95. GeSdA - YAML
  96. 96. GeSdA – YAML 可変長レイヤー数対応グリッドサーチ
  97. 97. GeSdA - グリッドサーチ
  98. 98. アプリケーション
  99. 99. DeepMotion | GeSdA
  100. 100. Torch7 • Facebookの参入など成長著しい • 強力なパッケージ管理機能 • 非常に簡潔にネットワークの定義が可能 • Deep Learningのパッケージが充実 • 強力なLua言語→C言語バインディング
  101. 101. Torch7 • Facebookの参入など成長著しい • 強力なパッケージ管理機能 • 非常に簡潔にネットワークの定義が可能 • Deep Learningのパッケージが充実 • 強力なLua言語→C言語バインディング
  102. 102. luarocks • パッケージ管理ツール – pip, cpan, pearみたいなもの • 各種のパッケージが公開されている – image, csvigo • Deep Learning系パッケージ – nn, unsup, dp • Usage $ luarocks install [package]
  103. 103. Torch7 • Facebookの参入など成長著しい • 強力なパッケージ管理機能 • 非常に簡潔にネットワークの定義が可能 • Deep Learningのパッケージが充実 • Lua言語
  104. 104. MLPを作ってみよう
  105. 105. 動かしてみよう • まずはダウンロード – $ wget knakayama.com/tmp/exercise/mlp_xor.lua • 二つの実行方法 – コマンドラインから実行 $ th mlp_xor.lua – インタプリタから実行 $ th > dofile(‘mlp_xor.lua’)
  106. 106. Torch7のSequential 直感的な理解 • Sequentialで入れ物を作る • nn.Moduleの組み合わせ – Tanh, Linear – SpatialConvolutionMM – ReLU • nn.Moduleの持つ関数 – Forward, backward
  107. 107. CNNの例
  108. 108. Torch7 • Facebookの参入など成長著しい • 強力なパッケージ管理機能 • 非常に簡潔にネットワークの定義が可能 • Deep Learningのパッケージが充実 • Lua言語
  109. 109. Deep Learning系パッケージ • nn – 非常に簡潔にMLPが書ける – ある程度レイヤー,評価関数などがそろっている – CNNまでは非常に簡潔に書ける • dp – nnの拡張パックに近いイメージか – Alexnet,CNN,RNNなど最近のアルゴリズムを中心に, カスタマイズしやすいネットワークや便利機能を提供 – 言語モデル,顔認識など • unsup – Autoencoder系の実装がある – k-means, PCAなども • fbcunn – Facebook製のCUDA対応nn – 高速(らしい) – インストールが大変だが...
  110. 110. 今日の目次 • Deep Learning基礎 • 環境構築 • Pylearn2 基礎編 • Pylearn2 応用編 • ライブラリ比較 • Torch7 • まとめ
  111. 111. 今日のポイント + いいたいこと • Deep Learningはまだ発展途上の技術 • まだまだ拡張・ハックが必要 • Caffe,Pylearn2に続く期待のTorch7も紹介 • GeSdA開発中 • 新しいライブラリも続々登場中 • まだノウハウの蓄積が必要 Deeplearning.jp
  112. 112. ご静聴 ありがとうございました

×