SlideShare a Scribd company logo
1 of 32
© 2016 IBM Corporation
Pythonをつかってディープ・ラーニングの仕
組みを見ていくよ
Tanaka Y.P
2016-10-18
© 2016 IBM Corporation2
お詫びと言い訳
(仮)Sparkで試してみるディープ・ラーニング
昨今、人工知能関連で最大の話題であるDeep Learningを、Apache
Sparkを使って実装する方法について体験していただくハンズ・オン・セッ
ションです。
Pythonをつかってディープ・ラーニングの仕組みを見ていくよ
昨今、人工知能関連で最大の話題であるDeep Learningを、Numpyを
使って実装する方法について体験していただくハンズ・オン・セッションで
す。
© 2016 IBM Corporation3
自己紹介
田中裕一(yuichi tanaka)
主にアーキテクチャとサーバーサイドプログラムを担当
することが多い。Hadoop/Spark周りをよく触ります。
Node.js、Python、最近はSpark周りの仕事でScalaを書く
ことが多い気がします。
休日はOSS周りで遊んだり。
詳解 Apache Spark
© 2016 IBM Corporation4
DeepLearningとは
• 機会学習の一つであるNNの層を重ね高精度な予測・分類処理を行うための手法
• 色々な関数の層を重ねて精度を向上させる
• 画像識別の分野で精度が高くて有名(ResNet/GoogLeNet等)
例)VGG16
© 2016 IBM Corporation5
さっきのを簡略に書き直すと
Data Convo
lution
Relu Affine Relu Softmax
Out
・・・
max
poolin
g
VGG16の簡略図
© 2016 IBM Corporation6
今日のゴール
• 今日は最終的に下記のNN(fully-connected)を作成します。
• 今日の例では特に層を厚くする意味もないですがせっかくなのでDNNっぽく・・・
Data Affine Relu Affine Relu Softmax
Out・・・ Affine
© 2016 IBM Corporation7
今日の範疇
今日の話の中で説明すること
 背景的な話
 DeepLearningの全体像
 レイヤ
 フォワード
• アフィン変換
 活性化関数について
• ReLU関数
 出力層での正規化関数
• ソフトマックス関数
 バックプロパゲーション
 損失関数
 誤差伝搬について
 ハイパーパラメータ
© 2016 IBM Corporation8
今日の範疇
今日の話の中で説明しないこと
 DeepLearningの種類的な違いとかの細かいこと
 畳み込みニューラルネットワーク:CNN@触れる程度で
 再帰ニューラルネットワーク:RNN
 教師なし学習:GAN
 強化学習:DQN
 数式の話
 『うぇ』ってなるので数式なしで
 内積の話@アフィン変換
 ネイピア数@ところどころ
 各関数の詳細@特にバックプロパゲーションの関数
 Batch Norm@各レイヤの値の分布調整
 Dropoutについて@過学習とか
© 2016 IBM Corporation9
背景
 人間の脳の構造を模してやれば上手く識別できるのは?
ニューロン情報処理モデル
例)単純パーセプトロン
I
I
I
W
W
W
S O
Input1
Input2
Input3
output
参考)
単純パーセプトロンの基本のき
Weight
© 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
・・・
・
・
・
・
・
・
・
・
・
・
・
・
入力層
隠れ層
出力層
Softmax
© 2016 IBM Corporation13
今日のサンプルNN(色の識別)の用語説明
• こんな形のFully-Connectedを作成していきます。
・・・
・
・
・
・
・
・
・
・
・
・
・
・
0層(入力層) 1層 4層(出力層)2層
計算処理 活性化関数 出力関数
レイヤ
Softmax Out
© 2016 IBM Corporation14
今日のサンプルNN(色の識別)の用語説明
• こんな形のFully-Connectedを作成していきます。
・・・
Forward Backward
・
・
・
・
・
・
・
・
・
・
・
・
計算処理
Affine変換
活性化関数
Relu関数
出力関数
Softmax関数
OutSoftmax
© 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の重み
バイアス
© 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の重み) + バイアス
© 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,・・・
© 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
© 2016 IBM Corporation19
フォワード(Affine -> Relu)
Relu関数はx<=0なら0をx>0ならxを返す。(超簡単)
Relu関数の図
n1
54.1 54.1
phthonコード
return np.maximum(0,x)
© 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%の確率で青と判定!
© 2016 IBM Corporation21
バックプロパゲーション
• 各nodeの重みとバイアスは?
・・・
Backward
・
・
・
・
・
・
・
・
・
・
・
・
OutSoftmax
© 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]
損失関数
誤差修正
交差エントロピー誤差
© 2016 IBM Corporation23
バックプロパゲーション(誤差伝搬)
・・・
・
・
・
・
・
・
・
・
・
・
・
・
Softmax
Backward
本来は勾配という微分計算を全パラメータに対して行う必要があるところ、
誤差逆伝搬法を使うことで出力層側から入力層側に向かって
単純計算だけでパラメータの更新を行います。
© 2016 IBM Corporation24
バックワード(出力レイヤ(Softmax + 交差エントロピー誤差))
Softmax関数 + 交差エントロピー誤差
yk - tk
pythonコード
dx = (self.y - self.t)
Softmax
n1
n2
n3
ここからはバックワードする際のコードと式を紹介だけします。
Softmax
y1 – t1
y2 – t2
y3 – t3
損失関数
© 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変換の重み・バイアス
© 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 Forward Forward Forward
Backward
BackwardBackwardBackwardBackwardBackwardBackward
• Foward -> Backwordを繰り返し処理を行うことで重み・バイアスの更新が可能になります
© 2016 IBM Corporation28
もう一度CNNを見てみよう
Data Convo
lution
Relu Affine Relu Softmax
Out
・・・
max
poolin
g
VGG16の簡略図
© 2016 IBM Corporation29
ハイパーパラメータについて(層の数とNodeの数)
・・・
・
・
・
・
・
・
・
・
・
・
・
・
Softmax
• NNでは各関数の重みやバイアスを自動で調整していく事で精度を上げます
• ではNNではパラメータの調整は全て不要なのでしょうか?
全体で幾つの層を重ねるのか?
1層に幾つのNode
を作るのか?
© 2016 IBM Corporation30
ハイパーパラメータについて(ネットワーク全体の学習率)
Affine変換の重み・バイアス
・・・
・
・
・
・
・
・
・
・
・
・
・
・
Softmax
Affine変換の重み・バイアス Affine変換の重み・バイアス
どのぐらいの強さで重み・バイアスを更新するのか?
学習率学習率学習率
© 2016 IBM Corporation31
今日のサンプルプログラム
・・・
・
・
・
・
・
・
・
・
・
・
・
・
Softmax
Affine変換の重み・バイアス
学習率:0.01
全体4層
50 100 503 3
入力データ数
train: 240
test: 20
© 2016 IBM Corporation32
DataScientistExperienceへ
Notebookはこちらそれではコードに移ります

More Related Content

What's hot

Devsumi 2016 b_4 KafkaとSparkを組み合わせたリアルタイム分析基盤の構築
Devsumi 2016 b_4 KafkaとSparkを組み合わせたリアルタイム分析基盤の構築Devsumi 2016 b_4 KafkaとSparkを組み合わせたリアルタイム分析基盤の構築
Devsumi 2016 b_4 KafkaとSparkを組み合わせたリアルタイム分析基盤の構築Tanaka Yuichi
 
Pysparkで始めるデータ分析
Pysparkで始めるデータ分析Pysparkで始めるデータ分析
Pysparkで始めるデータ分析Tanaka Yuichi
 
HBaseとSparkでセンサーデータを有効活用 #hbasejp
HBaseとSparkでセンサーデータを有効活用 #hbasejpHBaseとSparkでセンサーデータを有効活用 #hbasejp
HBaseとSparkでセンサーデータを有効活用 #hbasejpFwardNetwork
 
Pythonで入門するApache Spark at PyCon2016
Pythonで入門するApache Spark at PyCon2016Pythonで入門するApache Spark at PyCon2016
Pythonで入門するApache Spark at PyCon2016Tatsuya Atsumi
 
Spark GraphX で始めるグラフ解析
Spark GraphX で始めるグラフ解析Spark GraphX で始めるグラフ解析
Spark GraphX で始めるグラフ解析Yosuke Mizutani
 
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
Spark Streamingを活用したシステムの検証結果と設計時のノウハウSpark Streamingを活用したシステムの検証結果と設計時のノウハウ
Spark Streamingを活用したシステムの検証結果と設計時のノウハウFuture Of Data Japan
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)NTT DATA OSS Professional Services
 
20160127三木会 RDB経験者のためのspark
20160127三木会 RDB経験者のためのspark20160127三木会 RDB経験者のためのspark
20160127三木会 RDB経験者のためのsparkRyuji Tamagawa
 
本当にあったApache Spark障害の話
本当にあったApache Spark障害の話本当にあったApache Spark障害の話
本当にあったApache Spark障害の話x1 ichi
 
Apache cassandraと apache sparkで作るデータ解析プラットフォーム
Apache cassandraと apache sparkで作るデータ解析プラットフォームApache cassandraと apache sparkで作るデータ解析プラットフォーム
Apache cassandraと apache sparkで作るデータ解析プラットフォームKazutaka Tomita
 
SparkやBigQueryなどを用いた モバイルゲーム分析環境
SparkやBigQueryなどを用いたモバイルゲーム分析環境SparkやBigQueryなどを用いたモバイルゲーム分析環境
SparkやBigQueryなどを用いた モバイルゲーム分析環境yuichi_komatsu
 
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話Yahoo!デベロッパーネットワーク
 
Sparkのクエリ処理系と周辺の話題
Sparkのクエリ処理系と周辺の話題Sparkのクエリ処理系と周辺の話題
Sparkのクエリ処理系と周辺の話題Takeshi Yamamuro
 
Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本Sotaro Kimura
 
ゼロから始めるSparkSQL徹底活用!
ゼロから始めるSparkSQL徹底活用!ゼロから始めるSparkSQL徹底活用!
ゼロから始めるSparkSQL徹底活用!Nagato Kasaki
 
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」Kazuki Taniguchi
 
Apache Sparkについて
Apache SparkについてApache Sparkについて
Apache SparkについてBrainPad Inc.
 
Spark勉強会_ibm_20151014-公開版
Spark勉強会_ibm_20151014-公開版Spark勉強会_ibm_20151014-公開版
Spark勉強会_ibm_20151014-公開版Atsushi Tsuchiya
 

What's hot (20)

Jjug ccc
Jjug cccJjug ccc
Jjug ccc
 
Devsumi 2016 b_4 KafkaとSparkを組み合わせたリアルタイム分析基盤の構築
Devsumi 2016 b_4 KafkaとSparkを組み合わせたリアルタイム分析基盤の構築Devsumi 2016 b_4 KafkaとSparkを組み合わせたリアルタイム分析基盤の構築
Devsumi 2016 b_4 KafkaとSparkを組み合わせたリアルタイム分析基盤の構築
 
Pysparkで始めるデータ分析
Pysparkで始めるデータ分析Pysparkで始めるデータ分析
Pysparkで始めるデータ分析
 
HBaseとSparkでセンサーデータを有効活用 #hbasejp
HBaseとSparkでセンサーデータを有効活用 #hbasejpHBaseとSparkでセンサーデータを有効活用 #hbasejp
HBaseとSparkでセンサーデータを有効活用 #hbasejp
 
Pythonで入門するApache Spark at PyCon2016
Pythonで入門するApache Spark at PyCon2016Pythonで入門するApache Spark at PyCon2016
Pythonで入門するApache Spark at PyCon2016
 
Spark GraphX で始めるグラフ解析
Spark GraphX で始めるグラフ解析Spark GraphX で始めるグラフ解析
Spark GraphX で始めるグラフ解析
 
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
Spark Streamingを活用したシステムの検証結果と設計時のノウハウSpark Streamingを活用したシステムの検証結果と設計時のノウハウ
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
 
Apache Sparkの紹介
Apache Sparkの紹介Apache Sparkの紹介
Apache Sparkの紹介
 
20160127三木会 RDB経験者のためのspark
20160127三木会 RDB経験者のためのspark20160127三木会 RDB経験者のためのspark
20160127三木会 RDB経験者のためのspark
 
本当にあったApache Spark障害の話
本当にあったApache Spark障害の話本当にあったApache Spark障害の話
本当にあったApache Spark障害の話
 
Apache cassandraと apache sparkで作るデータ解析プラットフォーム
Apache cassandraと apache sparkで作るデータ解析プラットフォームApache cassandraと apache sparkで作るデータ解析プラットフォーム
Apache cassandraと apache sparkで作るデータ解析プラットフォーム
 
SparkやBigQueryなどを用いた モバイルゲーム分析環境
SparkやBigQueryなどを用いたモバイルゲーム分析環境SparkやBigQueryなどを用いたモバイルゲーム分析環境
SparkやBigQueryなどを用いた モバイルゲーム分析環境
 
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話
 
Sparkのクエリ処理系と周辺の話題
Sparkのクエリ処理系と周辺の話題Sparkのクエリ処理系と周辺の話題
Sparkのクエリ処理系と周辺の話題
 
Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本
 
ゼロから始めるSparkSQL徹底活用!
ゼロから始めるSparkSQL徹底活用!ゼロから始めるSparkSQL徹底活用!
ゼロから始めるSparkSQL徹底活用!
 
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
 
Apache Sparkについて
Apache SparkについてApache Sparkについて
Apache Sparkについて
 
Spark勉強会_ibm_20151014-公開版
Spark勉強会_ibm_20151014-公開版Spark勉強会_ibm_20151014-公開版
Spark勉強会_ibm_20151014-公開版
 

Similar to PythonでDeepLearningを始めるよ

Introduction to NumPy & SciPy
Introduction to NumPy & SciPyIntroduction to NumPy & SciPy
Introduction to NumPy & SciPyShiqiao Du
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますinfinite_loop
 
なにわテック20180127
なにわテック20180127なにわテック20180127
なにわテック20180127Natsutani Minoru
 
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説LeapMind Inc
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…Yasumasa Suenaga
 
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようCookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようKoichi Sasada
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016kyoto university
 
Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Masashi Shinbara
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?ogawatti
 
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...Insight Technology, Inc.
 
Ansible handson ood2016
Ansible handson ood2016Ansible handson ood2016
Ansible handson ood2016Hideki Saito
 
Apache Auroraの始めかた
Apache Auroraの始めかたApache Auroraの始めかた
Apache Auroraの始めかたMasahito Zembutsu
 
[Oracle big data jam session #1] Apache Spark ことはじめ
[Oracle big data jam session #1] Apache Spark ことはじめ[Oracle big data jam session #1] Apache Spark ことはじめ
[Oracle big data jam session #1] Apache Spark ことはじめKenichi Sonoda
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているpocketberserker
 

Similar to PythonでDeepLearningを始めるよ (20)

Introduction to NumPy & SciPy
Introduction to NumPy & SciPyIntroduction to NumPy & SciPy
Introduction to NumPy & SciPy
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
なにわテック20180127
なにわテック20180127なにわテック20180127
なにわテック20180127
 
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
Fpgax20180217
Fpgax20180217Fpgax20180217
Fpgax20180217
 
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…
 
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようCookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016
 
Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?
 
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
 
Ansible handson ood2016
Ansible handson ood2016Ansible handson ood2016
Ansible handson ood2016
 
Apache Auroraの始めかた
Apache Auroraの始めかたApache Auroraの始めかた
Apache Auroraの始めかた
 
Reactive programming
Reactive programming Reactive programming
Reactive programming
 
[Oracle big data jam session #1] Apache Spark ことはじめ
[Oracle big data jam session #1] Apache Spark ことはじめ[Oracle big data jam session #1] Apache Spark ことはじめ
[Oracle big data jam session #1] Apache Spark ことはじめ
 
Django_Fukuoka
Django_FukuokaDjango_Fukuoka
Django_Fukuoka
 
Django_fukuoka
Django_fukuokaDjango_fukuoka
Django_fukuoka
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 

Recently uploaded

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 

Recently uploaded (9)

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 

PythonでDeepLearningを始めるよ

  • 1. © 2016 IBM Corporation Pythonをつかってディープ・ラーニングの仕 組みを見ていくよ Tanaka Y.P 2016-10-18
  • 2. © 2016 IBM Corporation2 お詫びと言い訳 (仮)Sparkで試してみるディープ・ラーニング 昨今、人工知能関連で最大の話題であるDeep Learningを、Apache Sparkを使って実装する方法について体験していただくハンズ・オン・セッ ションです。 Pythonをつかってディープ・ラーニングの仕組みを見ていくよ 昨今、人工知能関連で最大の話題であるDeep Learningを、Numpyを 使って実装する方法について体験していただくハンズ・オン・セッションで す。
  • 3. © 2016 IBM Corporation3 自己紹介 田中裕一(yuichi tanaka) 主にアーキテクチャとサーバーサイドプログラムを担当 することが多い。Hadoop/Spark周りをよく触ります。 Node.js、Python、最近はSpark周りの仕事でScalaを書く ことが多い気がします。 休日はOSS周りで遊んだり。 詳解 Apache Spark
  • 4. © 2016 IBM Corporation4 DeepLearningとは • 機会学習の一つであるNNの層を重ね高精度な予測・分類処理を行うための手法 • 色々な関数の層を重ねて精度を向上させる • 画像識別の分野で精度が高くて有名(ResNet/GoogLeNet等) 例)VGG16
  • 5. © 2016 IBM Corporation5 さっきのを簡略に書き直すと Data Convo lution Relu Affine Relu Softmax Out ・・・ max poolin g VGG16の簡略図
  • 6. © 2016 IBM Corporation6 今日のゴール • 今日は最終的に下記のNN(fully-connected)を作成します。 • 今日の例では特に層を厚くする意味もないですがせっかくなのでDNNっぽく・・・ Data Affine Relu Affine Relu Softmax Out・・・ Affine
  • 7. © 2016 IBM Corporation7 今日の範疇 今日の話の中で説明すること  背景的な話  DeepLearningの全体像  レイヤ  フォワード • アフィン変換  活性化関数について • ReLU関数  出力層での正規化関数 • ソフトマックス関数  バックプロパゲーション  損失関数  誤差伝搬について  ハイパーパラメータ
  • 8. © 2016 IBM Corporation8 今日の範疇 今日の話の中で説明しないこと  DeepLearningの種類的な違いとかの細かいこと  畳み込みニューラルネットワーク:CNN@触れる程度で  再帰ニューラルネットワーク:RNN  教師なし学習:GAN  強化学習:DQN  数式の話  『うぇ』ってなるので数式なしで  内積の話@アフィン変換  ネイピア数@ところどころ  各関数の詳細@特にバックプロパゲーションの関数  Batch Norm@各レイヤの値の分布調整  Dropoutについて@過学習とか
  • 9. © 2016 IBM Corporation9 背景  人間の脳の構造を模してやれば上手く識別できるのは? ニューロン情報処理モデル 例)単純パーセプトロン I I I W W W S O Input1 Input2 Input3 output 参考) 単純パーセプトロンの基本のき Weight
  • 10. © 2016 IBM Corporation10 背景  層をふやしてやれば上手く識別できるのは? 例)FF-NN I I I Input1 Input2 Input3 output O O
  • 11. © 2016 IBM Corporation11 今日のサンプル(色の識別:3つに分類) • 何色ですか? RGB(255,0,0) RGB(0,255,0) RGB(0,0,255) RGB(233,63,127) 赤 緑 青 赤
  • 12. © 2016 IBM Corporation12 今日のサンプルNN(色の識別)の用語説明 • こんな形のFully-Connectedを作成していきます。 Out ・・・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 入力層 隠れ層 出力層 Softmax
  • 13. © 2016 IBM Corporation13 今日のサンプルNN(色の識別)の用語説明 • こんな形のFully-Connectedを作成していきます。 ・・・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 0層(入力層) 1層 4層(出力層)2層 計算処理 活性化関数 出力関数 レイヤ Softmax Out
  • 14. © 2016 IBM Corporation14 今日のサンプルNN(色の識別)の用語説明 • こんな形のFully-Connectedを作成していきます。 ・・・ Forward Backward ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 計算処理 Affine変換 活性化関数 Relu関数 出力関数 Softmax関数 OutSoftmax
  • 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. © 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. © 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. © 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. © 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. © 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. © 2016 IBM Corporation21 バックプロパゲーション • 各nodeの重みとバイアスは? ・・・ Backward ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ OutSoftmax
  • 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. © 2016 IBM Corporation23 バックプロパゲーション(誤差伝搬) ・・・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ Softmax Backward 本来は勾配という微分計算を全パラメータに対して行う必要があるところ、 誤差逆伝搬法を使うことで出力層側から入力層側に向かって 単純計算だけでパラメータの更新を行います。
  • 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. © 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. © 2016 IBM Corporation26 バックワード(Relu -> Affine) pythonコード dout[self.mask] = 0 Relu関数は値を反転してあげるだけ ・ ・ ・ ・ ・ ・
  • 27. © 2016 IBM Corporation27 フォワードとバックワード Data Affine Relu Affine Relu Softmax Out・・・ Affine Forward Forward Forward Forward Forward Forward Forward Backward BackwardBackwardBackwardBackwardBackwardBackward • Foward -> Backwordを繰り返し処理を行うことで重み・バイアスの更新が可能になります
  • 28. © 2016 IBM Corporation28 もう一度CNNを見てみよう Data Convo lution Relu Affine Relu Softmax Out ・・・ max poolin g VGG16の簡略図
  • 29. © 2016 IBM Corporation29 ハイパーパラメータについて(層の数とNodeの数) ・・・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ Softmax • NNでは各関数の重みやバイアスを自動で調整していく事で精度を上げます • ではNNではパラメータの調整は全て不要なのでしょうか? 全体で幾つの層を重ねるのか? 1層に幾つのNode を作るのか?
  • 30. © 2016 IBM Corporation30 ハイパーパラメータについて(ネットワーク全体の学習率) Affine変換の重み・バイアス ・・・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ Softmax Affine変換の重み・バイアス Affine変換の重み・バイアス どのぐらいの強さで重み・バイアスを更新するのか? 学習率学習率学習率
  • 31. © 2016 IBM Corporation31 今日のサンプルプログラム ・・・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ Softmax Affine変換の重み・バイアス 学習率:0.01 全体4層 50 100 503 3 入力データ数 train: 240 test: 20
  • 32. © 2016 IBM Corporation32 DataScientistExperienceへ Notebookはこちらそれではコードに移ります

Editor's Notes

  1. 1
  2. 会社ではSparkとHadoopのスペシャリストやってます。
  3. DeepLearningとは
  4. 今日は画像処理などややこしいことを行わず、純粋にAffine変換とRelu関数、最後のSoftmax関数のみを使ってNNを作成します。 ただ、せっかくなのでAffine+Reluを4層にしてDNNっぽく作ります。 今日のサンプルソースコードでは色(RGB)の分類を扱います。 #ちなみに色の分類行うのにわざわざDNNを作ったりはしません。説明用。
  5. Rectified linear unit
  6. 元々NN系の機会学習は人間の脳の構造を模せば、識別処理が上手くいくのではというところから始まってます。
  7. で、単純パーセプトロンは、非線形の分析ができないということで、FF-NN(多層パーセプトロン)に進化していきます。
  8. 今日はこのあたりからやってきます。
  9. まず入力レイヤから見ていきます。
  10. 余談ですが、このNNに画像を入れる場合 30*30の画像で入力層が900になります。多いですね。
  11. また余談です。今回簡素化のため正規化かけてませんが、入力値の正規化は重要です。 今日のサンプルはこのAffine変換と活性化関数Reluを3層重ねてます。
  12. この層で結果[1,0,0] ここでForwardの処理は終わりです。ね簡単でしょ?ここまでなら・・・
  13. この時の問題として 例えば50のnodeを作ると、今回のケースでいきなり150個の重みと50個のバイアスを適切な値 これ無理ですよね? 出力結果をもとに重みやバイアスを調整するのを誤差伝搬
  14. 実際のコードはSoftmax関数内で損失関数の計算もやってる 初期値はガウス分布
  15. 確率勾配を用いて パラメータの微分は独立なものではなく、 レイヤのパラメータに関する誤差関数の微分は、 一つ前の層のレイヤのパラメータの微分が求まっていると、 微分計算をしなくても自動的に単純計算で決まる、つまり微分やらなくても良いので高速
  16. 次はAffine変換
  17. Input(教師データ)だけ用意すればNNを通して各パラメータを自動的に算出してくれます。 これがend-to-endの機会学習と言われる所以ですね。 例えばTensorFlowやchainerやcaffe
  18. このDNNをCNNにしたい場合はいくつかの層を Convolutionとmax poolingの関数を作って入れ替えてあげればCNNの完成です。
  19. 今日はこんな感じのパラメータで作ります。