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.
© 2016 IBM Corporation
Pythonをつかってディープ・ラーニングの仕
組みを見ていくよ
Tanaka Y.P
2016-10-18
© 2016 IBM Corporation2
お詫びと言い訳
(仮)Sparkで試してみるディープ・ラーニング
昨今、人工知能関連で最大の話題であるDeep Learningを、Apache
Sparkを使って実装する方法について体験していた...
© 2016 IBM Corporation3
自己紹介
田中裕一(yuichi tanaka)
主にアーキテクチャとサーバーサイドプログラムを担当
することが多い。Hadoop/Spark周りをよく触ります。
Node.js、Python、最...
© 2016 IBM Corporation4
DeepLearningとは
• 機会学習の一つであるNNの層を重ね高精度な予測・分類処理を行うための手法
• 色々な関数の層を重ねて精度を向上させる
• 画像識別の分野で精度が高くて有名(Res...
© 2016 IBM Corporation5
さっきのを簡略に書き直すと
Data Convo
lution
Relu Affine Relu Softmax
Out
・・・
max
poolin
g
VGG16の簡略図
© 2016 IBM Corporation6
今日のゴール
• 今日は最終的に下記のNN(fully-connected)を作成します。
• 今日の例では特に層を厚くする意味もないですがせっかくなのでDNNっぽく・・・
Data Affine...
© 2016 IBM Corporation7
今日の範疇
今日の話の中で説明すること
 背景的な話
 DeepLearningの全体像
 レイヤ
 フォワード
• アフィン変換
 活性化関数について
• ReLU関数
 出力層での...
© 2016 IBM Corporation8
今日の範疇
今日の話の中で説明しないこと
 DeepLearningの種類的な違いとかの細かいこと
 畳み込みニューラルネットワーク:CNN@触れる程度で
 再帰ニューラルネットワーク:RN...
© 2016 IBM Corporation9
背景
 人間の脳の構造を模してやれば上手く識別できるのは?
ニューロン情報処理モデル
例)単純パーセプトロン
I
I
I
W
W
W
S O
Input1
Input2
Input3
outpu...
© 2016 IBM Corporation10
背景
 層をふやしてやれば上手く識別できるのは?
例)FF-NN
I
I
I
Input1
Input2
Input3
output
O
O
© 2016 IBM Corporation11
今日のサンプル(色の識別:3つに分類)
• 何色ですか?
RGB(255,0,0)
RGB(0,255,0)
RGB(0,0,255)
RGB(233,63,127)
赤
緑
青
赤
© 2016 IBM Corporation12
今日のサンプルNN(色の識別)の用語説明
• こんな形のFully-Connectedを作成していきます。
Out
・・・
・
・
・
・
・
・
・
・
・
・
・
・
入力層
隠れ層
出力層...
© 2016 IBM Corporation13
今日のサンプルNN(色の識別)の用語説明
• こんな形のFully-Connectedを作成していきます。
・・・
・
・
・
・
・
・
・
・
・
・
・
・
0層(入力層) 1層 4層(出...
© 2016 IBM Corporation14
今日のサンプルNN(色の識別)の用語説明
• こんな形のFully-Connectedを作成していきます。
・・・
Forward Backward
・
・
・
・
・
・
・
・
・
・
・
...
© 2016 IBM Corporation15
フォワード(入力レイヤ -> Affine)
122
66
94
n1
・
・
・
・
・
・
RGBの値でフォワードとバックプロパゲーションについて見ていきます。
入力値 : RGB(122,...
© 2016 IBM Corporation16
フォワード(入力レイヤ -> Affine)
バイアスと重みを使ってどのくらい発火するか計算します。
入力値 : RGB(122, 66, 94)
n1:バイアス、重み
Rの値 * Rの重み
G...
© 2016 IBM Corporation17
フォワード(入力レイヤ -> Affine)
入力値と重みの内積にバイアスを足したもの
122
66
94
n1
n2
n3
・
・
・
・
・
・
bias
output = Input ・ ...
© 2016 IBM Corporation18
フォワード(Affine -> Relu)
Affineの出力結果を活性化関数Reluを使って活性化させます
・
・
・
・
・
・
・
・
・
s1 = np.array([[122, 66,...
© 2016 IBM Corporation19
フォワード(Affine -> Relu)
Relu関数はx<=0なら0をx>0ならxを返す。(超簡単)
Relu関数の図
n1
54.1 54.1
phthonコード
return np.ma...
© 2016 IBM Corporation20
フォワード(Affine -> 出力レイヤ)
Softmax関数で最終値を扱いやすい形に変換
Softmax関数
pythonコード
e = np.exp(x)
sum_e = e.sum()
...
© 2016 IBM Corporation21
バックプロパゲーション
• 各nodeの重みとバイアスは?
・・・
Backward
・
・
・
・
・
・
・
・
・
・
・
・
OutSoftmax
© 2016 IBM Corporation22
バックプロパゲーション(損失関数)
• 各nodeの重みとバイアスは?
・・・
Backward
・
・
・
・
・
・
OutSoftmax
RGB(122, 66, 94)
教師Label ...
© 2016 IBM Corporation23
バックプロパゲーション(誤差伝搬)
・・・
・
・
・
・
・
・
・
・
・
・
・
・
Softmax
Backward
本来は勾配という微分計算を全パラメータに対して行う必要があるところ、...
© 2016 IBM Corporation24
バックワード(出力レイヤ(Softmax + 交差エントロピー誤差))
Softmax関数 + 交差エントロピー誤差
yk - tk
pythonコード
dx = (self.y - self....
© 2016 IBM Corporation25
バックワード(Affine -> Relu)
pythonコード
dx = dout.dot(self.w.T) #出力
w = dx.T.dot(dout) #重み
b = dout.sum(...
© 2016 IBM Corporation26
バックワード(Relu -> Affine)
pythonコード
dout[self.mask] = 0
Relu関数は値を反転してあげるだけ
・
・
・
・
・
・
© 2016 IBM Corporation27
フォワードとバックワード
Data Affine Relu Affine Relu Softmax
Out・・・ Affine
Forward
Forward Forward Forward F...
© 2016 IBM Corporation28
もう一度CNNを見てみよう
Data Convo
lution
Relu Affine Relu Softmax
Out
・・・
max
poolin
g
VGG16の簡略図
© 2016 IBM Corporation29
ハイパーパラメータについて(層の数とNodeの数)
・・・
・
・
・
・
・
・
・
・
・
・
・
・
Softmax
• NNでは各関数の重みやバイアスを自動で調整していく事で精度を上げま...
© 2016 IBM Corporation30
ハイパーパラメータについて(ネットワーク全体の学習率)
Affine変換の重み・バイアス
・・・
・
・
・
・
・
・
・
・
・
・
・
・
Softmax
Affine変換の重み・バイアス...
© 2016 IBM Corporation31
今日のサンプルプログラム
・・・
・
・
・
・
・
・
・
・
・
・
・
・
Softmax
Affine変換の重み・バイアス
学習率:0.01
全体4層
50 100 503 3
入力デー...
© 2016 IBM Corporation32
DataScientistExperienceへ
Notebookはこちらそれではコードに移ります
Upcoming SlideShare
Loading in …5
×

PythonでDeepLearningを始めるよ

2,996 views

Published on

PythonでDeepLearningの仕組みを見ていきます。

Published in: Technology
  • Be the first to comment

PythonでDeepLearningを始めるよ

  1. 1. © 2016 IBM Corporation Pythonをつかってディープ・ラーニングの仕 組みを見ていくよ Tanaka Y.P 2016-10-18
  2. 2. © 2016 IBM Corporation2 お詫びと言い訳 (仮)Sparkで試してみるディープ・ラーニング 昨今、人工知能関連で最大の話題であるDeep Learningを、Apache Sparkを使って実装する方法について体験していただくハンズ・オン・セッ ションです。 Pythonをつかってディープ・ラーニングの仕組みを見ていくよ 昨今、人工知能関連で最大の話題であるDeep Learningを、Numpyを 使って実装する方法について体験していただくハンズ・オン・セッションで す。
  3. 3. © 2016 IBM Corporation3 自己紹介 田中裕一(yuichi tanaka) 主にアーキテクチャとサーバーサイドプログラムを担当 することが多い。Hadoop/Spark周りをよく触ります。 Node.js、Python、最近はSpark周りの仕事でScalaを書く ことが多い気がします。 休日はOSS周りで遊んだり。 詳解 Apache Spark
  4. 4. © 2016 IBM Corporation4 DeepLearningとは • 機会学習の一つであるNNの層を重ね高精度な予測・分類処理を行うための手法 • 色々な関数の層を重ねて精度を向上させる • 画像識別の分野で精度が高くて有名(ResNet/GoogLeNet等) 例)VGG16
  5. 5. © 2016 IBM Corporation5 さっきのを簡略に書き直すと Data Convo lution Relu Affine Relu Softmax Out ・・・ max poolin g VGG16の簡略図
  6. 6. © 2016 IBM Corporation6 今日のゴール • 今日は最終的に下記のNN(fully-connected)を作成します。 • 今日の例では特に層を厚くする意味もないですがせっかくなのでDNNっぽく・・・ Data Affine Relu Affine Relu Softmax Out・・・ Affine
  7. 7. © 2016 IBM Corporation7 今日の範疇 今日の話の中で説明すること  背景的な話  DeepLearningの全体像  レイヤ  フォワード • アフィン変換  活性化関数について • ReLU関数  出力層での正規化関数 • ソフトマックス関数  バックプロパゲーション  損失関数  誤差伝搬について  ハイパーパラメータ
  8. 8. © 2016 IBM Corporation8 今日の範疇 今日の話の中で説明しないこと  DeepLearningの種類的な違いとかの細かいこと  畳み込みニューラルネットワーク:CNN@触れる程度で  再帰ニューラルネットワーク:RNN  教師なし学習:GAN  強化学習:DQN  数式の話  『うぇ』ってなるので数式なしで  内積の話@アフィン変換  ネイピア数@ところどころ  各関数の詳細@特にバックプロパゲーションの関数  Batch Norm@各レイヤの値の分布調整  Dropoutについて@過学習とか
  9. 9. © 2016 IBM Corporation9 背景  人間の脳の構造を模してやれば上手く識別できるのは? ニューロン情報処理モデル 例)単純パーセプトロン I I I W W W S O Input1 Input2 Input3 output 参考) 単純パーセプトロンの基本のき Weight
  10. 10. © 2016 IBM Corporation10 背景  層をふやしてやれば上手く識別できるのは? 例)FF-NN I I I Input1 Input2 Input3 output O O
  11. 11. © 2016 IBM Corporation11 今日のサンプル(色の識別:3つに分類) • 何色ですか? RGB(255,0,0) RGB(0,255,0) RGB(0,0,255) RGB(233,63,127) 赤 緑 青 赤
  12. 12. © 2016 IBM Corporation12 今日のサンプルNN(色の識別)の用語説明 • こんな形のFully-Connectedを作成していきます。 Out ・・・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 入力層 隠れ層 出力層 Softmax
  13. 13. © 2016 IBM Corporation13 今日のサンプルNN(色の識別)の用語説明 • こんな形のFully-Connectedを作成していきます。 ・・・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 0層(入力層) 1層 4層(出力層)2層 計算処理 活性化関数 出力関数 レイヤ Softmax Out
  14. 14. © 2016 IBM Corporation14 今日のサンプルNN(色の識別)の用語説明 • こんな形のFully-Connectedを作成していきます。 ・・・ Forward Backward ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 計算処理 Affine変換 活性化関数 Relu関数 出力関数 Softmax関数 OutSoftmax
  15. 15. © 2016 IBM Corporation15 フォワード(入力レイヤ -> Affine) 122 66 94 n1 ・ ・ ・ ・ ・ ・ RGBの値でフォワードとバックプロパゲーションについて見ていきます。 入力値 : RGB(122, 66, 94) n1:発火のしやすさ(バイアス)、各重み Rの値 * Rの重み Gの値 * Gの重み Bの値 * Bの重み 122 66 94 n1 Rの重み Gの重み Bの重み バイアス
  16. 16. © 2016 IBM Corporation16 フォワード(入力レイヤ -> Affine) バイアスと重みを使ってどのくらい発火するか計算します。 入力値 : RGB(122, 66, 94) n1:バイアス、重み Rの値 * Rの重み Gの値 * Gの重み Bの値 * Bの重み 122 66 94 n 1 Rの重み Gの重み Bの重み 122 66 94 n 1 Rの重み Gの重み Bの重み bias バイアス バイアス (122 * Rの重み) + (66 * Gの重み) + (94 * Bの重み) + バイアス
  17. 17. © 2016 IBM Corporation17 フォワード(入力レイヤ -> Affine) 入力値と重みの内積にバイアスを足したもの 122 66 94 n1 n2 n3 ・ ・ ・ ・ ・ ・ bias output = Input ・ weight + bias 122,66,94 n1R,n2R,n3R n1G,n2G,n3G n1B,n2B,n3G ・ ・ ・ n1B,n2B,n3B,・・・ pythonコード: out = x.dot(w) + b n1O,n2O,n3O,・・・
  18. 18. © 2016 IBM Corporation18 フォワード(Affine -> Relu) Affineの出力結果を活性化関数Reluを使って活性化させます ・ ・ ・ ・ ・ ・ ・ ・ ・ s1 = np.array([[122, 66, 94]]) w1 = np.array([[0.1], [0.2],[0.3]]) s1.dot(w1) + [0.5] [ 54.1] 例)Affineの重み・バイアスを決め打ちで計算 n1 54.1
  19. 19. © 2016 IBM Corporation19 フォワード(Affine -> Relu) Relu関数はx<=0なら0をx>0ならxを返す。(超簡単) Relu関数の図 n1 54.1 54.1 phthonコード return np.maximum(0,x)
  20. 20. © 2016 IBM Corporation20 フォワード(Affine -> 出力レイヤ) Softmax関数で最終値を扱いやすい形に変換 Softmax関数 pythonコード e = np.exp(x) sum_e = e.sum() return e / sum_e Softmax n1 n2 n3 出力例 [0, 0.1, 5.3] => [ 0.00493969, 0.0054592 , 0.98960111] 98%の確率で青と判定!
  21. 21. © 2016 IBM Corporation21 バックプロパゲーション • 各nodeの重みとバイアスは? ・・・ Backward ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ OutSoftmax
  22. 22. © 2016 IBM Corporation22 バックプロパゲーション(損失関数) • 各nodeの重みとバイアスは? ・・・ Backward ・ ・ ・ ・ ・ ・ OutSoftmax RGB(122, 66, 94) 教師Label [1,0,0] 初期値を当てる Forward 教師Label [1,0,0] 出力 [0.3,0.28,0.32] 損失関数 誤差修正 交差エントロピー誤差
  23. 23. © 2016 IBM Corporation23 バックプロパゲーション(誤差伝搬) ・・・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ Softmax Backward 本来は勾配という微分計算を全パラメータに対して行う必要があるところ、 誤差逆伝搬法を使うことで出力層側から入力層側に向かって 単純計算だけでパラメータの更新を行います。
  24. 24. © 2016 IBM Corporation24 バックワード(出力レイヤ(Softmax + 交差エントロピー誤差)) Softmax関数 + 交差エントロピー誤差 yk - tk pythonコード dx = (self.y - self.t) Softmax n1 n2 n3 ここからはバックワードする際のコードと式を紹介だけします。 Softmax y1 – t1 y2 – t2 y3 – t3 損失関数
  25. 25. © 2016 IBM Corporation25 バックワード(Affine -> Relu) pythonコード dx = dout.dot(self.w.T) #出力 w = dx.T.dot(dout) #重み b = dout.sum(axis=0) #バイアス Affine変換の式は重み・バイアス・入力の3値を計算します ・ ・ ・ ・ ・ ・ Affine変換の重み・バイアス
  26. 26. © 2016 IBM Corporation26 バックワード(Relu -> Affine) pythonコード dout[self.mask] = 0 Relu関数は値を反転してあげるだけ ・ ・ ・ ・ ・ ・
  27. 27. © 2016 IBM Corporation27 フォワードとバックワード Data Affine Relu Affine Relu Softmax Out・・・ Affine Forward Forward Forward Forward Forward Forward Forward Backward BackwardBackwardBackwardBackwardBackwardBackward • Foward -> Backwordを繰り返し処理を行うことで重み・バイアスの更新が可能になります
  28. 28. © 2016 IBM Corporation28 もう一度CNNを見てみよう Data Convo lution Relu Affine Relu Softmax Out ・・・ max poolin g VGG16の簡略図
  29. 29. © 2016 IBM Corporation29 ハイパーパラメータについて(層の数とNodeの数) ・・・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ Softmax • NNでは各関数の重みやバイアスを自動で調整していく事で精度を上げます • ではNNではパラメータの調整は全て不要なのでしょうか? 全体で幾つの層を重ねるのか? 1層に幾つのNode を作るのか?
  30. 30. © 2016 IBM Corporation30 ハイパーパラメータについて(ネットワーク全体の学習率) Affine変換の重み・バイアス ・・・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ Softmax Affine変換の重み・バイアス Affine変換の重み・バイアス どのぐらいの強さで重み・バイアスを更新するのか? 学習率学習率学習率
  31. 31. © 2016 IBM Corporation31 今日のサンプルプログラム ・・・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ Softmax Affine変換の重み・バイアス 学習率:0.01 全体4層 50 100 503 3 入力データ数 train: 240 test: 20
  32. 32. © 2016 IBM Corporation32 DataScientistExperienceへ Notebookはこちらそれではコードに移ります

×