SlideShare a Scribd company logo
#はじパタ  LT

実装  ディープラーニング

@0kayu
1
紹介


岡  右⾥里里恵  (早⼤大理理⼯工M1)    



出⾝身、住まい等          横浜



趣味  映画鑑賞,  シンセ  /  kaggle歴  3ヶ⽉月      



好きな物  redbullと最近はドクペ



@0kayu

研究    脳画像を⽤用いた診断補助法の開発

2
DEEP LEARNING
1.  Deep  Learning  の  仕組み スライド	
  がたくさん!	
  
2.  Deep  Learning  パラメータ/学習法  について
3.  実装:  パッケージ調べ  ←	
  今日はこれ!!!!!!!!!!!

ディープラーニングをもっと、もっと手軽に

3
1. ディープラーニング概要(1)
ディープラーニング?

画像認識を例にして....

従来法

ディープ
ラーニング

h'p://www.slideshare.net/kazoo04/deep-­‐learning-­‐15097274
4
1. ディープラーニング概要(1)
ディープラーニングの定義(諸説あり)
以下を満足するDeep	
  Architecture
・多層構造をもつ
・階層的な処理理である
・⾼高位の問題解決を⽬目的とする

5
1. ディープラーニング概要(2)
プレトレーニング  +  ファインチューニング

各層の●,●,●は
入力データ●の特徴量を表す

http://www.vision.is.tohoku.ac.jp/files/9313/6601/7876/
CVIM_tutorial_deep_learning.pdf

6
1. ディープラーニング概要(2)

判別器

プレトレーニング  +  ファインチューニング

SVM,  LR,  ...  etc

AE(3)
AE(2)
AE(1)

教師無し学習器群
AE:オートエンコーダー
RBM:制限ボルツマンマシン

http://www.vision.is.tohoku.ac.jp/files/9313/6601/7876/
CVIM_tutorial_deep_learning.pdf

DBM,	
  stacking	
  AE

DBN,	
  stacking	
  AE

7
制約つきボルツマンマシン(RBM)
•  ⽣生成モデルの1つ
生成モデルの学習方法

vi,  hj  は{0,1}をとる
h/p://www.vision.is.tohoku.ac.jp/files/9313/6601/7876/CVIM_tutorial_deep_learning.pdf
8
RBM +

DeepStructure

制約つきボルツマンマシン(RBM)

可視層と隠れ層からなる2層ネット
ワーク

判別器

DBN(Deep	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Belief	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Network)

RBM(3)
RBM(2)

DBM(Deep	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Boltzma
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Machine)

RBM(1)
vi, hj	
  =	
  {0,1}

入力データ
9
RBM +

DeepStructure

+

max	
  pooling

ConvDBN	
  (ConvoluFonal	
  Belief	
  Network)	
  
RBMに畳み込みニューラル

ネットで使われるmax	
  pooling
を追加したもの

http://www.vision.is.tohoku.ac.jp/files/9313/6601/7876/CVIM_tutorial_deep_learning.pdf

10
オートエンコーダー(AE)
  AE  (オートエンコーダー)
⼊入⼒力力データを再現するような[表現h,  encoder,  decoder]  を学習する
  dAE(denoising  Auto  Encoder)
ノイズを加えたデータで学習させる
  スパースオートエンコーダー  
出⼒力力層がスパースになるように正規化したもの
y(=x)

h
入力データ
x

Decoder

y = f ´(W´h)

スパースオートエンコーダーでは次の
評価関数を最小化する

Encoder

h = f (Wx)
正規化項
11
AE

+

DeepStructure

Stacked  Auto  Encoder
学習した表現yを、次の層のオートエンコーダーの⼊入⼒力力とする
AE(2)の入力データ

y(=x)

h
AE(2)の入力データ

入力データ
x

レイヤー1(AE1)

レイヤー2(AE2)

12
2. 各層の学習法について
基本    バッチ学習  +  確率率率的勾配法  (SGD)  
バッチ学習  :  全データで学習
確率率率的勾配法(SGD)  :  t個⽬目のサンプルだけを⽤用いて重みが更更新可能
→  データをミニバッチに分け、ミニバッチごとに重みを更更新
→  学習の⾼高速化  !  
バッチ関連のパラメータ
ミニバッチサイズ

データを分割する量量。分割したデータ(バッチ)を⽤用いて学習させる。

バッチ毎の学習

バッチを学習させて、バッチごとにパタメータを更更新

モニター数(⇔速度度に影響)

すべてのバッチのうち、⼀一部のバッチのみvalidationをしてモデルが学習できているか確認す
る

max_̲epoch

1つのデータを何回(何epoch)繰り返して学習させるか
13
2. パラメータについて
1.  機械全体の形
  レイヤーの数
  教師無し学習器(モデル)の選択
  判別器の選択

太字  =  「特に重要なパラメータ」

2.  各層のモデルのパラメータ
  隠れ層のユニット数
  重みの正規化
  ユニットのスパース化
  活性化関数の選択

3.  最適化のためのパラメータ
  学習⽅方法
  学習率率率  (初期値,  減衰)
  ミニバッチサイズ
  イテレーション回数
  Momentum

4.  その他  

  重みの初期化  (のスケール)
  乱数
  前処理理

おすすめの参考スライド http://www.slideshare.net/koji_matsuda/practical-recommendationfordeeplearning
14
3. 実装 : 現状の関連コード比較
pylearn2
python
+theano

元の言語

Torch7

Lua

python
numpy+scipy

nolearn deepnet
python
+ sklearn

△

導入しやすさ(mac)

ディープラーニン RBM, DBN, AE,
MLP, Maxout
グの種類等

ー

python
+ gnumpy
ー

RBM, AE,
DBN

DBN, RBM

RBM, AE, DBM,
DBN, CNN, feedforward NN

ー

GPU計算
とっつきやすさ

入力データの準備
特徴

sugomori
さん

△
△
種類が豊富, 画
像の可視化

ー

ー

ー
matlab
ライク

ー

Java版あり,

オプションが

ー
GPU計算が前提

多いsklearn風
シンプル
pylearn2	
  	
  http://deeplearning.net/software/pylearn2/index.html
DL先→ torch7	
  	
  	
  	
  	
  	
  http://www.torch.ch/manual/install/index
sugomori	
  	
  http://blog.yusugomori.com/post/42424440144/pythondeep-learning-stacked-denoising
nolearn	
  	
  	
  	
  h'ps://github.com/dnouri/nolearn	
  or	
  pip	
  install	
  nolearn
deepnet	
  	
  	
  h'ps://github.com/niQshsrivastava/deepnet

15
1.  pylearn2

市民権争い pylearn2 VS torch7

  利利点
-‐‑‒  Benjio先⽣生(先のスライドの原著)  の最新のアルゴリズムが実装されて
いる  (Maxout等)
-‐‑‒  市⺠民権の獲得に積極的  (kaggleのベンチマーク)
-‐‑‒  実装の⾒見見た⽬目は綺麗麗,  評価を下すのにmonitor.py  がなかなか使える
-‐‑‒  設定をエディットしやすい
  ⽋欠点

-‐‑‒    データ構造が⽞玄⼈人向け、慣れれば快適...??
-‐‑‒    公式HPのチュートリアルやドキュメントが開発途中
-‐‑‒    pylearn2のgoogle  groups等を追う姿勢が⼤大事

16
1.  pylearn2

DL実装の流れ@pylearn2(1)
layer_̲1.yaml

1層⽬目学習
train	
  =	
  yaml_parse.load(layer1_yaml)
train.main_loop() **
dae_l1.pkl

layer_̲2.yaml

2層⽬目学習
train	
  =	
  yaml_parse.load(layer2_yaml)
train.main_loop()
dae_l2.pkl

mlp.yaml

判別器学習
train	
  =	
  yaml_parse.load(mlp_yaml)
train.main_loop()
mlp_best.pkl

簡単3ステップ+α
STEP1:	
  データをpylearn2のデータ形式で登録
(ベンチマーク系は既に登録済み)

STEP2:	
  YAMLファイル形式(テンプレあり)で、
   train{入力データ,学習器,学習法}を指定
STEP3:	
  train.pyに作った	
  *.yamlを放り込む
STEPα:	
  モニター結果から学習できてるか判断

**:	
  $	
  train.py	
  layer_1.yaml	
  でも可

17
1.  pylearn2

DL実装の流れ@pylearn2(1)

前準備
インストール時にあらかじめ{PYLEARN2_DATA_PATH}にdataの保存場所のパスを
通しておく

ベンチマークを用意するには
${PYLEARN2_DATA_PAHT}/mnist/以下にMNISTデータを入れておく.
dataset.pyを作る必要はない

自分のデータを用意するには
例 : kaggleのicml_2013_emotionsをデータとして登録
1. dataset.py を作成
.csvの場合はemotion_dataset.py が参考になる。
2. ${PYLEARN2_DATA_PATH}/icml_2013_emotions
を作成し、中にデータをいれる
18
1.  pylearn2

DL実装の流れ@pylearn2(2)

2層目の学習で、train.pyに与えるYAMLファイルの例
!obj:pylearn2.train.Train {
dataset: &train !obj:pylearn2.datasets.transformer_dataset.TransformerDataset {
raw: !obj:pylearn2.datasets.mnist.MNIST {
1.	
  入力データ:	
  
which_set: 'train',
start: 0,
#データのうち0から50000を学習
TransformerDataset(MNIST)
stop: 50000
},
transformer: !pkl: "./dae_l1.pkl"
},
model: !obj:pylearn2.models.autoencoder.DenoisingAutoencoder {
nvis : 500, #visible layerの次元
2.	
  学習器	
  :	
  Denoising	
  Autoencoder
nhid : 500, #hidden layerの次元
irange : 0.05,
corruptor: !obj:pylearn2.corruption.BinomialCorruptor {
corruption_level: .3, #ノイズの程度
},
act_enc: "tanh",
act_dec: null,
# Linear activation on the decoder side.
},
algorithm: !obj:pylearn2.training_algorithms.sgd.SGD {
learning_rate : 1e-3, #学習率
3.	
  学習法:	
  StochasQcGradient	
  Descent
batch_size : 100,
#バッチサイズ(100データごとに学習)
monitoring_batches : 5,
#モニターするバッチの数
monitoring_dataset : *train,
cost : !obj:pylearn2.costs.autoencoder.MeanSquaredReconstructionError {},
termination_criterion : !obj:pylearn2.termination_criteria.EpochCounter {
max_epochs: 10,
},
},
save_path: "./dae_l2.pkl",
save_freq: 1
}

19
1.  pylearn2

DL実装の流れ@pylearn2(3)

評価例	
  	
  	
  
$	
  print_monitor.py	
  <学習して出力した	
  *.pkl>	
  や	
  summarize_model.py	
  *.pkl
epochs	
  seen:	
  	
  10
Qme	
  trained:	
  	
  141.956558943
learning_rate	
  :	
  0.001
monitor_seconds_per_epoch	
  :	
  11.0
objecQve	
  :	
  11.414127059

$	
  plot_monitor.py	
  	
  <学習して出力した	
  *.pkl	
  >

→	
  デモ

	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  

20
1.  pylearn2

DL実装の流れ@pylearn2(4)

重みの可視化について
○	
  学習器にオートエンコーダーを用いた場合
一層目	
  →	
  show_weights.py
二層目→	
  	
  ×	
  

○	
  学習器にRBMを用いた場合
一層目→	
  show_weights.py

$:	
  show_examples.py	
  	
  データ.yaml

二層目→	
  top_filters.py	
  

○	
  各層の重みの値
layer	
  =	
  parse.load(“モデル名.pkl”)
W	
  =	
  layer.weights()

$:	
  show_weights.py	
  1層目のモデル.pkl	
  -­‐-­‐out=”hoge.png”
21
1.  pylearn2

pylearn2を今からはじめるには

公式のドキュメント  +  script以下のコードのコメントから学ぶ
  ディープラーニングの知識識をコードから学びたい
→  pylearn2の前⾝身の    http://deeplearning.net/tutorial/
→  pylearn2/srcripts/tutorials/*.ipynb      :  数式や⽂文章付きで学べる
  ええい!とにかく試してみたい!かじりたい!
→  pylearn2/scripts/tutorials/stacked_̲autoencoders.ipynb
→  pylearn2/scripts/tutorials/dbm_̲demo/rbm.yaml
  kaggleに殴り込みをしようと思うんだが...  
  ⼿手持ちのデータをさくっとディープラーニングできないかな~∼
→  pylearn2/scripts/icml_̲2013_̲wrepl/emotions/
22
2.  その他のpython系パッケージ

  特徴

-‐‑‒  Theanoを覚えるのが⼤大変なあなたに
-‐‑‒  インストールが簡単,
-‐‑‒  SGD/RBM/dA      多値ロジスティック回帰    が使⽤用可能
-‐‑‒  sparse.matrix  に対応していないので、⼤大規模疎⾏行行列列は扱えない
-‐‑‒  少量量のデータならばnumpy+scipyのほうがてっとり早い
-‐‑‒  速度度はpylearn2と⼤大きく変わらない  (CPU計算の場合)

23
2.  numpy+scipy

numpy+scipy(使用例)
全体の構造を作成

プレトレーニング

24
3.  nolearn

nolearn使い方(1) インストール	
  は、$	
  pip	
  install	
  nolearn

h'p://packages.python.org/nolearn/
25
3.  nolearn

nolearn使い方(2)

26
3.  nolearn

nolearn使い方(3)

27
ありがとうございました

28
参考文献等
ディープラーニングチュートリアル

h$p://www.vision.is.tohoku.ac.jp/files/9313/6601/7876/CVIM_tutorial_deep_learning.pdf

第7章 パーセプトロン型学習規則 #はじパタ
http://www.slideshare.net/Tyee/f5up

自然言語処理まわりのDeep Learningを自分なりにまとめてみた
http://kiyukuta.github.io/2013/09/28/casualdeeplearning4nlp.html

機械学習におけるオンライン確率的最適化の理論
http://www.slideshare.net/trinmu/stochasticoptim2013
Practical recommendations for gradient-based training of deep architectures ~Benjio先生のおすすめレシピ~

http://www.slideshare.net/koji_matsuda/practical-recommendation-fordeeplearning

深層学習
http://sugiyama-www.cs.titech.ac.jp/ sugi/2007/Canon-MachineLearning30-jp.pdf
Pythonとdeep learningで手書き文字認識
http://www.slideshare.net/mokemokechicken/pythondeep-learning

29
パッケージまとめ
◎	
  	
  	
  pylearn2
h$p://deeplearning.net/soHware/pylearn2/

◎	
  	
  	
  deeplearning	
  Tutorial
h$p://deeplearning.net/tutorial/

◎	
  	
  	
  Torch7
h$p://torch.ch

◎	
  	
  	
  nolearn
h$ps://github.com/dnouri/nolearn

◎	
  	
  	
  deepnet
h'ps://github.com/niQshsrivastava/deepnet
◎	
  	
  	
  sugomiriさん

http://blog.yusugomori.com/post/42424440144/python-deep-learning-stacked-denoising

30

More Related Content

実装ディープラーニング