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.

of

Deep Learning を実装する Slide 1 Deep Learning を実装する Slide 2 Deep Learning を実装する Slide 3 Deep Learning を実装する Slide 4 Deep Learning を実装する Slide 5 Deep Learning を実装する Slide 6 Deep Learning を実装する Slide 7 Deep Learning を実装する Slide 8 Deep Learning を実装する Slide 9 Deep Learning を実装する Slide 10 Deep Learning を実装する Slide 11 Deep Learning を実装する Slide 12 Deep Learning を実装する Slide 13 Deep Learning を実装する Slide 14 Deep Learning を実装する Slide 15 Deep Learning を実装する Slide 16 Deep Learning を実装する Slide 17 Deep Learning を実装する Slide 18 Deep Learning を実装する Slide 19 Deep Learning を実装する Slide 20 Deep Learning を実装する Slide 21 Deep Learning を実装する Slide 22 Deep Learning を実装する Slide 23 Deep Learning を実装する Slide 24 Deep Learning を実装する Slide 25 Deep Learning を実装する Slide 26
Upcoming SlideShare
JSAI's AI Tool Introduction - Deep Learning, Pylearn2 and Torch7
Next
Download to read offline and view in fullscreen.

155 Likes

Share

Download to read offline

Deep Learning を実装する

Download to read offline

Deep Learning 輪講会@東京大学松尾研究室での講義資料

Related Books

Free with a 30 day trial from Scribd

See all

Deep Learning を実装する

  1. 1. Deep Learning を実装する
 http://deeplearning.net/tutorial/ 松尾研 修士1年 飯塚修平" @Deep Learning 輪講会
  2. 2. 目次 •  Deep Learning とは" –  機械学習について" –  従来の NN とのちがい" –  Deep Learning のブレイクスルー" •  dA (Denoising Autoencoders) をうごかす" –  数理モデルの解説" –  Python で実装する前準備" –  コードレビュー" –  実行結果" •  RBM (Restricted Boltzmann Machines) をうごかす" –  数理モデルの解説" –  実行結果" •  まとめ
  3. 3. DEEP LEARNING とは
  4. 4. Deep Learning とは •  入力信号からより抽象的な概念を学ぶ・特徴を抽出する 機械学習の手法の集合です
 " “ニューラルネットとどう違うの?”! •  ニューラルネットを多層にしたんです
 " “従来のニューラルネットワークと何が違うの?”! •  ひとつひとつのレイヤー間でパラメタの調整(すなわち 学習)を行うところが特徴なんです
  5. 5. NN 従来のニューラルネットワーク •  層の数が多いほど表現力が高くなるが、パラメータの更 新が難しくなる (Vanishing Gradient Problem)" •  しかも局所解・過学習に陥りやすい" •  しかも遅い Pythonと Deep  Learningで 手書き文字認識 http://www.slideshare.net/mokemokechicken/pythondeep-learning" 名古屋工業大学岩田彰研究室 ニューラルネット入門 http://www-ailab.elcom.nitech.ac.jp/lecture/neuro/bp4.html
  6. 6. メージ そこで Deep Learning RBM RBM RBM DBM •  入力データから得た隠れ層をまた入力データにして・・・を ricted 繰り返す" Boltzmann Machine (RBM)をたくさん繋げたものが •  一層ずつ確定させていく pDeep Learning http://www.slideshare.net/kazoo04/deep-learning-15097274 Boltzmann Machines (DBM)
  7. 7. Autoencoder •  層に相当するモジュール" y = f (x), z = g(y), ||x z||2 •                    となるように学習" min –  すなわち、入力と出力の誤差が最小になるようパラメタを調整する" –  すると、入力 x を適切な表現 y に写像する autoencoder が得られる" input encode decode output representation 層 x f y g z error
  8. 8. dA をうごかす
 (Denoising Autoencoder)
  9. 9. Denoising Autoencoder •  下記の式で表されるエンコーダ、デコーダ、誤差を使う" •  s はシグモイド関数" •  重み W, W’ とバイアス b, b’ を学習する" •  Tied Weights: W^T = W’ とすることもある" encoder y = s(Wx + b), z = s(W x + b ) y = s(Wx + b), z = s(W x + b ) s(Wx + b), d = s(W x + b ) decoder z d H (x, z) =error LH (x, z) =zk + [xk logxk ) log(1xk ) zk )] [xk log (1 zk + (1 log(1 zk )] k log zk + (1k=1 k ) log(1 k=1 k )] x z input encode decode output representation x f y g z
  10. 10. Python で実装する前準備 •  Theno を入れましょう" –  導関数を解析的に導出してくれる(自動微分という)" •  近似的に微分係数を算出する数値微分とは異なる" •  導関数を導関数として扱える!" –  GPU に計算を行わせることも可能" –  $ sudo pip install Theano"
  11. 11. >>> # Theano のかんたんな使い方 >>> # まず、ふつうの演算 ... >>> import theano >>> import theano.tensor as T >>> x = T.dscalar(“x”) # x という名前のスカラー変数 >>> y = x**2 + 4*x # 式を表現 >>> f = theano.function([x], y) # 関数の生成。[]で囲まれた変数が関数の 引数となる >>> f(0) array(0.0) >>> f(1) array(5.0) >>> >>> # 次に、自動微分をさせてみる ... >>> z = T.grad(y, x) # y を微分した式を z として表現 >>> f_prime = theano.function([x], z) >>> f_prime(0) array(4.0) >>> f_prime(1) array(6.0)
  12. 12. Getting Started Deep Learning" http://deeplearning.net/tutorial/gettingstarted.html サンプルコードがあります" 今回はこれをもとに説明します $ git clone git://github.com/lisa-lab/DeepLearningTutorials.git
  13. 13. 擬似コード class dA (object): def __init__(self, input, n_visible, n_hidden): self.input = input # 入力データ self.n_visible = n_visible # 可視層ノード数 self.n_hidden = n_hidden # 隠れ層ノード数 self.vbias = Array(size=n_visible) # b: 可視層のバイアス self.hbias = Array(size=n_hidden) # b’: 隠れ層のバイアス self.W = Matrix(size=(n_visible, n_hidden)) # 重み行列 W def get_corrupted_input(self, input, corruption_level): # より一般的な特徴を学習させるため、あえてノイズを加える return Randomize(input, corruption_level) def get_hidden_values(self, input): # encode に相当 return T.nnet.sigmoid(T.dot(input, self.W) + self.vbias) def get_reconstructed_input(self, hidden): # decode に相当 return T.nnet.sigmoid(T.dot(hidden, self.W.T) + self.hbias)
  14. 14. def get_cost_updates(self, corruption_level, learning_rate): tilde_x = self.get_corrupted_input(self.x, corruption_level) y = encode(tilde_x) z = decode(y) L = - T.sum(self.x * T.log(z) + (1 - self.x) * T.log(1 - z), axis=1) cost = T.mean(L) update(vbias, hbias, W) #パラメタの更新 return (cost, [vbias, hbias, W]) if __name__ == '__main__': # 損傷率 0%, 30%, 50% の autoencoder for c_rate in [0., 0.3, 0.5]: da = dA(T.matrix(‘x’), 784, 500) cost, updates = da.get_cost_updates(c_rate, 0.1) train_da = theano.function(..., train_dataset, updates, cost) img = PIL.Image.fromarray(da)) img.save(‘hoge’+c_rate+‘.png’)
  15. 15. つまり •  dA" - 入力データ "input " " " "←与える" - ノード数 " "n_visible, n_hidden "←与える(経験と勘と試行錯誤)" - バイアス " "vbias, hbias" " "←パラメタ" - 重み行列 " "W " " " " "←パラメタ" + ノイズ追加 "get_corrupted_input(input, corruption_level)" + エンコード "get_hidden_values(input)" + デコード " "get_reconstructed_input(hidden)" + パラメタ更新 "get_cost_updates(corruption_level, learning_rate)" " 意外と簡単!"
  16. 16. 使用するデータ   MNIST手書き文字認識  
  17. 17. Tutorial からダウンロードしたプログラムを実行" Corruption Rate = [0, 0.3, 0.5] に対応するフィルタ(重み行列 W)の例 o% 3o% 5o%
  18. 18. ちなみに:Corruption の方法にもいろいろある Denoising Auto-Encoders: Benchmarks Larochelle et al., 2009 30
  19. 19. RBM をうごかす
 (Restricted Boltzmann Machines)
  20. 20. RBM •  制約付きボルツマンモデル" –  制約: 可視層ノード同士、隠れ層ノード同士の接続を許さない" →計算の簡略化 •  最尤推定によって学習を行う Restricted  Boltzmann  Machines  (RBM)  –  deeplearning.net  http://deeplearning.net/tutorial/rbm.html   Restricted  Boltzmann  Machine  の導出に至る自分用まとめ  http://dl.dropbox.com/u/2048288/RestrictedBoltzmannMachine.pdf
  21. 21. 可視ノード集合 v( vi 0, 1) と隠れノード集合 h( hi 0, 1) からなる系 がその状態をとる確率 p(v, h) はエネルギー関数 E(v, h) と分散関数を用いて 以下のように定義される(c.f. カノニカル分布)。 E(v,h) e p(v, h) = (1) Z エネルギー関数 : E(x) = bT v cT h vT Wh (2) 分配関数 : Z = e E(v,h) (3) v h v, h, W は可視層のバイアス、隠れ層のバイアス、重み行列と呼ばれるパラ メタである。この系の尤度は、以下のように定義される。 尤度 J log p(v, h) q = log eE(v,h) q log Z (4) h h ただし f (v) q = v f (v)q(v), すなわち q は観測データの確率分布 q(v) の期待値である。 尤度 J を任意のパラメタ について最大化するため、導関数を求める。 J 1 E 1 E
  22. 22. ただし f (v) q = v f (v)q(v), すなわち q は観測データの確率分布 q(v) の期待値である。 尤度 J を任意のパラメタ について最大化するため、導関数を求める。 J 1 E 1 E = E e E q + e E (5) he h Z v h ここで、条件付き確率の定義 p(h|v) = より、 E(v,h) Pe E(v,h) h e J E E = p(h|v)q(v) + p(v, h) (6) v h v h E E = p(h|v)q(v) + p(h,v) (7) また、条件付き確率を計算して下記を得る(ここで厳密解を求められること が「制限付き」の特徴)。 p(h|v) = s(Wv + b ) (8) p(v|h) = s(Wh + b) (9) ただし、s(x) はシグモイド関数である。 以上より、RBM は
  23. 23. p(h|v) = s(Wv + b ) (8) p(v|h) = s(Wh + b) (9) ただし、s(x) はシグモイド関数である。 以上より、RBM は • encoder: 式 (8) • decoder: 式 (9) • error: J(式 (4)) • 更新式: 式 (7) という対応付けを行うことで、Autoencoder の実装のひとつと捉えることが 出来る。しかし、式 (7) の第 2 項を求めることは困難であることが多いため、 Contrastive Divergence という手法を用いる。
  24. 24. Tutorial からダウンロードしたプログラムを実行" 手書き文字データから抽出したフィルタ(重み行列 W)の例
  25. 25. まとめ •  Deep Learning は多層のニューラルネットワーク" –  Autoencoder をつかったものと RBM をつかったものがある" •  深イイはつくれる!" –  特に、Autoencoder の実装はシンプルでわかりやすい"
  26. 26. References •  Yoshua Bengio, Aaron Courville, and Pascal Vincent. Representation Learning: A Review and New Perspectives." •  Yoshua Bengio. Learning Deep Architectures for AI. " •  Pascal Vincent, Hugo Larochelle, Isabelle Lajoie, Yoshua Bengio, Pierre- Antoine Manzagol. Stacked Denoising Autoencoders: Learning Useful Representations in a Deep Network with a Local Denoising Criterion" •  Deeplearning.net http://deeplearning.net/" •  Pythonと Deep Learningで 手書き文字認識
 http://www.slideshare.net/mokemokechicken/pythondeep-learning" •  名古屋工業大学岩田彰研究室 ニューラルネット入門
 http://www-ailab.elcom.nitech.ac.jp/lecture/neuro/bp4.html" •  Deep Learning -株式会社ウサギィ 五木田 和也
 http://www.slideshare.net/kazoo04/deep-learning-15097274" •  Restricted Boltzmann Machineの学習手法についての簡単なまとめ
 http://mglab.blogspot.jp/2012/08/restricted-boltzmann-machine.html
  • HirokiN1

    May. 12, 2021
  • TakahiroOhori1

    Jun. 13, 2019
  • yasuiyuto

    Mar. 8, 2017
  • TakuyaHashimoto3

    Dec. 3, 2016
  • hayatomatsuura5

    Oct. 26, 2016
  • ssuser263131

    Aug. 31, 2016
  • yumios

    Aug. 1, 2016
  • HajimeTodo

    May. 15, 2016
  • 6uclz1

    Mar. 10, 2016
  • kit-masa

    Feb. 11, 2016
  • letusfly85

    Jan. 31, 2016
  • tomoharusato54

    Dec. 9, 2015
  • oigawa

    Dec. 9, 2015
  • YumaMatsuoka

    Oct. 17, 2015
  • ShinichiroMurakami

    Oct. 15, 2015
  • kuniokiyokota

    Jul. 27, 2015
  • satoshoetsu

    Jul. 18, 2015
  • hiromixxsano

    Jul. 15, 2015
  • akihitoohsato

    Jul. 14, 2015
  • shingoinou

    Jun. 24, 2015

Deep Learning 輪講会@東京大学松尾研究室での講義資料

Views

Total views

80,353

On Slideshare

0

From embeds

0

Number of embeds

22,862

Actions

Downloads

910

Shares

0

Comments

0

Likes

155

×