実装ディープラーニング

122,793 views
123,858 views

Published on

はじパタLT資料です。ディープラーニングのライブラリの使い方が知りたい方は15ページからご覧ください。

0 Comments
360 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
122,793
On SlideShare
0
From Embeds
0
Number of Embeds
22,245
Actions
Shares
0
Downloads
1,497
Comments
0
Likes
360
Embeds 0
No embeds

No notes for slide

実装ディープラーニング

  1. 1. #はじパタ  LT 実装  ディープラーニング @0kayu 1
  2. 2. 紹介  岡  右⾥里里恵  (早⼤大理理⼯工M1)      出⾝身、住まい等          横浜  趣味  映画鑑賞,  シンセ  /  kaggle歴  3ヶ⽉月        好きな物  redbullと最近はドクペ  @0kayu 研究    脳画像を⽤用いた診断補助法の開発 2
  3. 3. DEEP LEARNING 1.  Deep  Learning  の  仕組み スライド  がたくさん!   2.  Deep  Learning  パラメータ/学習法  について 3.  実装:  パッケージ調べ  ←  今日はこれ!!!!!!!!!!! ディープラーニングをもっと、もっと手軽に 3
  4. 4. 1. ディープラーニング概要(1) ディープラーニング? 画像認識を例にして.... 従来法 ディープ ラーニング h'p://www.slideshare.net/kazoo04/deep-­‐learning-­‐15097274 4
  5. 5. 1. ディープラーニング概要(1) ディープラーニングの定義(諸説あり) 以下を満足するDeep  Architecture ・多層構造をもつ ・階層的な処理理である ・⾼高位の問題解決を⽬目的とする 5
  6. 6. 1. ディープラーニング概要(2) プレトレーニング  +  ファインチューニング 各層の●,●,●は 入力データ●の特徴量を表す http://www.vision.is.tohoku.ac.jp/files/9313/6601/7876/ CVIM_tutorial_deep_learning.pdf 6
  7. 7. 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
  8. 8. 制約つきボルツマンマシン(RBM) •  ⽣生成モデルの1つ 生成モデルの学習方法 vi,  hj  は{0,1}をとる h/p://www.vision.is.tohoku.ac.jp/files/9313/6601/7876/CVIM_tutorial_deep_learning.pdf 8
  9. 9. RBM + DeepStructure 制約つきボルツマンマシン(RBM) 可視層と隠れ層からなる2層ネット ワーク 判別器 DBN(Deep                      Belief                      Network) RBM(3) RBM(2) DBM(Deep                      Boltzma                    Machine) RBM(1) vi, hj  =  {0,1} 入力データ 9
  10. 10. 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
  11. 11. オートエンコーダー(AE)  AE  (オートエンコーダー) ⼊入⼒力力データを再現するような[表現h,  encoder,  decoder]  を学習する  dAE(denoising  Auto  Encoder) ノイズを加えたデータで学習させる  スパースオートエンコーダー   出⼒力力層がスパースになるように正規化したもの y(=x) h 入力データ x Decoder y = f ´(W´h) スパースオートエンコーダーでは次の 評価関数を最小化する Encoder h = f (Wx) 正規化項 11
  12. 12. AE + DeepStructure Stacked  Auto  Encoder 学習した表現yを、次の層のオートエンコーダーの⼊入⼒力力とする AE(2)の入力データ y(=x) h AE(2)の入力データ 入力データ x レイヤー1(AE1) レイヤー2(AE2) 12
  13. 13. 2. 各層の学習法について 基本    バッチ学習  +  確率率率的勾配法  (SGD)   バッチ学習  :  全データで学習 確率率率的勾配法(SGD)  :  t個⽬目のサンプルだけを⽤用いて重みが更更新可能 →  データをミニバッチに分け、ミニバッチごとに重みを更更新 →  学習の⾼高速化  !   バッチ関連のパラメータ ミニバッチサイズ データを分割する量量。分割したデータ(バッチ)を⽤用いて学習させる。 バッチ毎の学習 バッチを学習させて、バッチごとにパタメータを更更新 モニター数(⇔速度度に影響) すべてのバッチのうち、⼀一部のバッチのみvalidationをしてモデルが学習できているか確認す る max_̲epoch 1つのデータを何回(何epoch)繰り返して学習させるか 13
  14. 14. 2. パラメータについて 1.  機械全体の形  レイヤーの数  教師無し学習器(モデル)の選択  判別器の選択 太字  =  「特に重要なパラメータ」 2.  各層のモデルのパラメータ  隠れ層のユニット数  重みの正規化  ユニットのスパース化  活性化関数の選択 3.  最適化のためのパラメータ  学習⽅方法  学習率率率  (初期値,  減衰)  ミニバッチサイズ  イテレーション回数  Momentum 4.  その他    重みの初期化  (のスケール)  乱数  前処理理 おすすめの参考スライド http://www.slideshare.net/koji_matsuda/practical-recommendationfordeeplearning 14
  15. 15. 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
  16. 16. 1.  pylearn2 市民権争い pylearn2 VS torch7  利利点 -‐‑‒  Benjio先⽣生(先のスライドの原著)  の最新のアルゴリズムが実装されて いる  (Maxout等) -‐‑‒  市⺠民権の獲得に積極的  (kaggleのベンチマーク) -‐‑‒  実装の⾒見見た⽬目は綺麗麗,  評価を下すのにmonitor.py  がなかなか使える -‐‑‒  設定をエディットしやすい  ⽋欠点 -‐‑‒    データ構造が⽞玄⼈人向け、慣れれば快適...?? -‐‑‒    公式HPのチュートリアルやドキュメントが開発途中 -‐‑‒    pylearn2のgoogle  groups等を追う姿勢が⼤大事 16
  17. 17. 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
  18. 18. 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
  19. 19. 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
  20. 20. 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
  21. 21. 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
  22. 22. 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
  23. 23. 2.  その他のpython系パッケージ  特徴 -‐‑‒  Theanoを覚えるのが⼤大変なあなたに -‐‑‒  インストールが簡単, -‐‑‒  SGD/RBM/dA      多値ロジスティック回帰    が使⽤用可能 -‐‑‒  sparse.matrix  に対応していないので、⼤大規模疎⾏行行列列は扱えない -‐‑‒  少量量のデータならばnumpy+scipyのほうがてっとり早い -‐‑‒  速度度はpylearn2と⼤大きく変わらない  (CPU計算の場合) 23
  24. 24. 2.  numpy+scipy numpy+scipy(使用例) 全体の構造を作成 プレトレーニング 24
  25. 25. 3.  nolearn nolearn使い方(1) インストール  は、$  pip  install  nolearn h'p://packages.python.org/nolearn/ 25
  26. 26. 3.  nolearn nolearn使い方(2) 26
  27. 27. 3.  nolearn nolearn使い方(3) 27
  28. 28. ありがとうございました 28
  29. 29. 参考文献等 ディープラーニングチュートリアル 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
  30. 30. パッケージまとめ ◎      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

×