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.

ニューラルネットワーク勉強会2

1,308 views

Published on

研究グループ内で行っている勉強会の資料です

Published in: Technology
  • Be the first to comment

ニューラルネットワーク勉強会2

  1. 1. ニューラルネットワーク 勉強会 第2回 柳本 豪一
  2. 2. 本日の予定 3層ニューラルネットワークでXOR問題を解きます。 • ニューラルネットワークの基礎を知る • Chainerによるネットワークの実装を知る
  3. 3. 本日の予定 • 3層ニューラルネットワークによるXOR問題を解き ます。 • ニューラルネットワークの基礎を知る • Chainerによるネットワークの実装を知る 簡単なニューラルネットワークを Chainer上で実装できるようになる!
  4. 4. フィードフォワード ニューラルネットワーク 複数のニューロンを層状に配置した構造
  5. 5. フィードフォワード ニューラルネットワーク 複数のニューロンを層状に配置した構造 入力層
  6. 6. フィードフォワード ニューラルネットワーク 複数のニューロンを層状に配置した構造 隠れ層
  7. 7. フィードフォワード ニューラルネットワーク 複数のニューロンを層状に配置した構造 出力層
  8. 8. フィードフォワード ニューラルネットワーク 複数のニューロンを層状に配置した構造 結合荷重 (可調整パラメータ)
  9. 9. バックプロパゲーション フィードフォワードニューラルネットワークの出力を 用いて誤差を定義し、その誤差を用いて結合荷重を調 整する y 1 2 3 k k+1 N-1 N
  10. 10. バックプロパゲーション 出力誤差:f(y, t) y 1 2 3 k k+1 N-1 N
  11. 11. バックプロパゲーション 出力誤差:f(y, t) y 1 2 3 k k+1 N-1 N df(y, t) dy
  12. 12. バックプロパゲーション 出力誤差:     活性化関数:f(y, t) y 1 2 3 k k+1 N-1 N df(y, t) dy g1 N (x1 N ) g2 N (x2 N ) g3 N (x3 N ) WN 1 WN = E gk(xk)
  13. 13. 出力誤差:     活性化関数: バックプロパゲーション f(y, t) y 1 2 3 k k+1 N-1 N df(y, t) dy g1 N (x1 N ) g2 N (x2 N ) g3 N (x3 N ) WN 1 WN = E df(y, t) dxN df(y, t) dWN 1 = yT N 1 ⇢ WT N ✓ df(y, t) dxF ⌦ dgN (xN ) dxN ◆ df(y, t) dxFgk(xk)
  14. 14. gk(xk)出力誤差:     活性化関数: バックプロパゲーション f(y, t) y 1 2 3 k k+1 N-1 N df(y, t) dy g1 N (x1 N ) g2 N (x2 N ) g3 N (x3 N ) WN 1 WN = E df(y, t) dxN df(y, t) dWN 1 = yT N 1 ⇢ WT N ✓ df(y, t) dxF ⌦ dgN (xN ) dxN ◆ df(y, t) dxF 一般的には誤差を逆向きに伝搬していると言われているが、 勾配を逆向きに伝搬しているとも言える!
  15. 15. バックプロパゲーション 一般的には誤差を逆向きに伝搬していると言われているが、 勾配を逆向きに伝搬しているとも言える!
  16. 16. バックプロパゲーション なので、 Chainerでは勾配を意識している 一般的には誤差を逆向きに伝搬していると言われているが、 勾配を逆向きに伝搬しているとも言える!
  17. 17. バックプロパゲーション なので、 Chainerでは勾配を意識している のかも? 一般的には誤差を逆向きに伝搬していると言われているが、 勾配を逆向きに伝搬しているとも言える!
  18. 18. バックプロパゲーション なので、 Chainerでは勾配を意識している のかも? あと、 2乗誤差で評価するなら誤差だけど、 クロスエントロピーだと誤差なのかな。。。 一般的には誤差を逆向きに伝搬していると言われているが、 勾配を逆向きに伝搬しているとも言える!
  19. 19. 中間まとめ ニューラルネットワークは • ニューロン間の結合で構造を定義 結合荷重のみが可調整パラメータ 活性化関数に可調整パラメータなし • 勾配を出力層から入力層へ伝搬 伝搬すべき勾配 活性化関数の微分 順伝搬時の結合荷重 を考慮すれば学習が可能
  20. 20. XOR問題 • 3層ニューラルネットワークでXOR回路を作る 入力1 入力2 出力 0 0 0 0 1 1 1 0 1 1 1 0 真理値表
  21. 21. XOR問題 • 3層ニューラルネットワークでXOR回路を作る 入力1 入力2 出力 0 0 0 0 1 1 1 0 1 1 1 0 真理値表 左の3層ニューラルネットワークで XOR回路を実現する
  22. 22. 中間まとめ(簡略版) • ニューロン間の結合で構造を定義 結合荷重のみが可調整パラメータ 活性化関数に可調整パラメータなし • 勾配を出力層から入力層へ伝搬 伝搬すべき勾配 活性化関数の微分 順伝搬時の結合荷重
  23. 23. 中間まとめ(簡略版) • ニューロン間の結合で構造を定義 結合荷重のみが可調整パラメータ 活性化関数に可調整パラメータなし • 勾配を出力層から入力層へ伝搬 伝搬すべき勾配 活性化関数の微分 順伝搬時の結合荷重
  24. 24. 中間まとめ(簡略版) • ニューロン間の結合で構造を定義 結合荷重のみが可調整パラメータ 活性化関数に可調整パラメータなし ニューラルネットワークの構造定義 + 可調整パラメータの切り分け • 勾配を出力層から入力層へ伝搬 伝搬すべき勾配 活性化関数の微分 順伝搬時の結合荷重 勾配を意識した学習の定義
  25. 25. 中間まとめ(簡略版) • ニューロン間の結合で構造を定義 結合荷重のみが可調整パラメータ 活性化関数に可調整パラメータなし ニューラルネットワークの構造定義 + 可調整パラメータの切り分け • 勾配を出力層から入力層へ伝搬 伝搬すべき勾配 活性化関数の微分 順伝搬時の結合荷重 勾配を意識した学習の定義 FunctionSetの利用 勾配の初期化
  26. 26. Chainerを使うために 先頭で以下の文を必ず書いてください import numpy as np import chainer from cuda, Function, FunctionSet, gradient_check, Variable, optimizers, utils import chainer.functions as F
  27. 27. ニューラルネットワークの定義 FunctionSetを使ってニューロン間の接続を定義 model = FunctionSet( l1 = F.Linear(2, 2), #入力層-隠れ層間の結合 l2 = F.Linear(2, 1), #隠れ層-出力層間の結合 )
  28. 28. 順伝搬 FunctionSetで定義した結合荷重とchainer.functions で定義された活性化関数を用いて定義 h = F.sigmoid(model.l1(x)) y = F.sog,pod(model.l2(h))
  29. 29. 損失 順伝搬の結果と教師信号を用いてchainer.functions で定義された損失関数から計算 loss = F.mean_squared_error(y, t)
  30. 30. 逆伝搬 optimizersで定義された最適化手法を用いて、lossを 最小化するように可調整パラメータを修正 #最適化手法とニューラルネットワークの設定 optimizer = optimizers.Adam() optimizer.setup(model) #パラメータ更新 optimizer.zero_grads() optimizer.update()
  31. 31. Chainerによる実験手順 データ読み込み 前処理 学習 後処理
  32. 32. Chainerによる実験手順 データ読み込み 前処理 学習 後処理 Python NumPy Chainer NumPy + Python
  33. 33. Chainerによる実験手順 Python list NumPy numpy.ndarray Chainer Variables NumPy numpy.ndarray + Python list データ読み込み 前処理 学習 後処理 Chainerによる実験手順
  34. 34. Chainerによる実験手順 Python list NumPy numpy.ndarray Chainer Variables NumPy numpy.ndarray + Python list データ読み込み 前処理 学習 後処理 Chainerによる実験手順
  35. 35. Chainerによる実験手順 Python list NumPy numpy.ndarray Chainer Variable NumPy numpy.ndarray + Python list データ読み込み 前処理 学習 後処理 Chainerによる実験手順 データをVariableに変換 Variableから値を取り出す
  36. 36. トレーニングデータ 入力データはリストで管理 Numpyを使うのでデータは行列をイメージ train = [[0, 0], [0, 1], [1, 0], [1,1]] label = [[0], [1], [1], [0]]
  37. 37. numpy.ndarrayへの変換 Chainerを使うためにnumpy.ndarrayに変換 ここでは、ランダムにデータを選ぶバッチ学習 Chainerではnp.float32を基本的に利用 #実装例 x = np.array(train, dtype=np.float32) y = np.array(label, dtype=np.float32) indexes = np.random.permutation(len(train)) for i in range(0, len(train), batchsize): x_batch = np.asarray(x[indexes[i:i+batchsize]]) y_batch = np.asarray(y[indexes[i:i+batchsize]])
  38. 38. Variableへの変換 numpy.ndarrayからVariableに変換 Chainerが用意した関数はVariableのみを受付 np.ndarrayをラッピングしているイメージ x = Variable(x_batch) t = Variable(y_batch)
  39. 39. Variableからnumpy.ndarrayへの変換 Variable.dataでデータを取得 誤差やパープレキシティの計算で利用
  40. 40. XOR問題の実装
  41. 41. https://github.com/KDA-lab

×