SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
PythonによるDeep Learningの実装 
Akiba Shinya
Title 
Name 
Date 
OUTLINE 
○About me 
○今⽇日の話 
○Neural Networkのおさらい 
○Deep Learningやってみよう 
-‐‑‒ Auto Encoder 
-‐‑‒ Dropout 
○おわりに
Title 
About me 
Akiba Shinya 
早稲⽥田⼤大学 -‐‑‒ 機械科学専攻 M2 
Name 
-‐‑‒ 分析のアルバイト 
-‐‑‒ 機械学習、物理理シミュレーション 
@aki_̲n1wa Date
Title 
Name 
Date 
今⽇日の話 
○数年年前から話題のつきないDeep Learning(DL)の話をします。 
最近はslideshare等にも、DL関連の資料料が増えてきました。 
DLの概説やライブラリ紹介などが多く、実際にコードで書くときに 
参考にできる資料料があまりなかったことが、発表の動機です。 
(爆速ライブラリ書いたぜーとかいう話ではありません 
! 
○実際にコード書いてみると理理解が深まる 
○pylearn2はライブラリというより、バッチ処理理ツールという感じ
Title 
Name 
Date 
Neural Networkのおさらい 
入力データに対して、何かしらの出力データが得られる装置。 
他の神経細胞からの入力 
ある閾値を超えると発火して、 
他の神経細胞へ入力を与える 
http://thinkit.co.jp/article/30/3/ 
入力: 
重み: 
閾値: 
出力: 
モデル化 
閾値を超えたら1 
! 
超えなかったら0 
「パーセプトロン」
Title 
Name 
Date 
Neural Networkのおさらい 
簡単な分類問題 
入力データの特徴量が1個 
0 1 
入力データの特徴量が2個 
1 
一次元空間での線形分類二次元空間での線形分類 
0
Title 
Name 
Date 
Neural Networkのおさらい 
⼊入⼒力力データが画像(数値)のときは、 
どんなNNを設計しよう… 
28×28ピクセルのデータ 
= 特徴量量784個 
from MNIST database 
(Mixed National Institute of Standards and Technology database) 
http://yann.lecun.com/exdb/mnist/
Title 
Name 
Date 
Neural Networkのおさらい 
3層のNeuralNetwork 
… 
… 784個 
196個 
… 
10個 
入力層:x 画像データ 
隠れ層:h 
出力層:y 
重み:Wx, Wh 
バイアス項:b, c 
シグモイド関数: 
注)MNISTの画像データに対するNNは 
784-800-800-10とかで設計されますが、 
計算大変なので、小さめのNNとなっております。 
(ラップトップでNNつらい)
Title 
Name 
Date 
Neural Networkのおさらい 
3層のNeuralNetwork 
… 
… 784個 
196個 
出力 
… 1 
10個 
0 
0 
0 
0 
0 
0 
0 
0 
0 
正解 
0 
0 
0 
0 
0 
0 
0 
1 
0 
0 
出力が計算できたら、 
誤差を求めて、パラメー 
タを修正する。 
修正するパラメータで 
誤差関数を偏微分する。 
ηは学習係数
Title 
Name 
Date 
Neural Networkのおさらい 
NNの学習過程まとめ 
1. 入力データに対して、何かしらの出力データを得る。 
2. 出力データと教師データを比べて、 
間違っていたら、誤差関数を微分してパラメータを修正する。
Title 
Name 
Date 
Neural Networkのおさらい 
NNの学習過程まとめ 
1. 入力データに対して、何かしらの出力データを得る。 
2. 出力データと教師データを比べて、 
間違っていたら、誤差関数を微分してパラメータを修正する。 
ここが面倒くさい。 
3層NNだと, Wx, b, Wh, c, それぞれについて 
偏微分の式を計算して、コードに書き下さなきゃなんない。 
→Theanoを使うよ
Title 
Name 
Date 
Neural Networkのおさらい 
【Theano】 
Pythonライブラリ 
微分演算が楽 
再帰的な処理はちょっと弱い 
GPUでの実行 
http://deeplearning.net/software/theano/
Title 
Name 
Date 
Neural Networkのおさらい 
import theano 
import theano.tensor as T 
from sklearn.datasets import fetch_mldata 
from sklearn import preprocessing 
! 
# sklearnのデータセットから画像取得 
mnist = fetch_mldata('MNIST original', data_home=".") 
X_digits, _, _, t_digits = mnist.values() 
data_size = 1000 
index = np.arange(70000) 
index = shuffle(index)[0:70000] 
x_digits = X_digits[index[0:data_size]] 
t_digits = t_digits[index[0:data_size]] 
! 
data_x = [] 
# 学習用入力データ前処理 
for A in x_digits: 
data_x.append(np.array([1 if x > 100 else 0 for x in A])) 
! 
# 学習用教師データ前処理 
lb = preprocessing.LabelBinarizer() 
lb.fit([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
data_t = lb.transform(Y_digits)
Title 
Name 
Date 
Neural Networkのおさらい 
# 使用する変数を定義 
b, c = T.dvectors("b", "c") 
wx, wh = T.dmatrices("wx", "wh") 
t, y, x, h = T.dvectors('t', 'y', 'x', 'h') 
! 
# パラメータは共有変数として値をもつ 
_wx = theano.shared(np.random.randn(196, 784), name="_wx") 
_wh = theano.shared(np.random.randn(10,196), name="_wh") 
_b = theano.shared(np.random.randn(196), name="_b") 
_c = theano.shared(np.random.randn(10), name=“_c”) 
! 
def sigmoid(x): 
return 1./(1+T.exp(-x)) 
! 
h = sigmoid(T.dot(wx, x) + b) 
y = sigmoid(T.dot(wh, h) + c) 
! 
# 学習係数 
eta = 0.01 
# 誤差関数 
cost_func = T.sum((t - y)**2)
Title 
Name 
Date 
Neural Networkのおさらい 
# 誤差関数と偏微分するパラメータを指定 
grad_cost = T.grad(cost=cost_func, wrt=[wx, b, wh, c]) 
! 
# 計算に必要な全ての変数をinputsに、更新するパラメータをupdatesに指定 
grad_cost_func = theano.function(inputs=[t, wh, bh, wx, bx, x], 
outputs=[], 
updates={_wx: _wx - eta * grad_cost[0], 
_b: _b - eta * grad_cost[1], 
_wh: _wh - eta * grad_cost[2], 
_c: _c - eta * grad_cost[3]}) 
! 
train_count = 1000 
# 指定した回数学習させる 
for n in range(train_count): 
for x, t in zip(data_x, data_t): 
input = [t, 
_wh.get_value(), 
_bh.get_value(), 
_wx.get_value(), 
_bx.get_value(), 
x] 
grad_cost_func(input)
Title 
Name 
Date 
Neural Networkのおさらい 
ここまでで作ったNNを実行すると… 
手法学習データ検証データ 
NN 100.0% 75.6% 
NNの問題点 
○パラメータの初期値 
○過学習
Title 
Name 
Date 
Neural Networkのおさらい 
ここまでで作ったNNを実行すると… 
手法学習データ検証データ 
NN 100.0% 75.6% 
NNの問題点 
○パラメータの初期値 
→ Auto Encoderを使おう 
○過学習 
→ Dropoutを使おう
Title 
Name 
Date 
Auto Encoder 
Auto Encoderとは、BackpropagationでNN全体の学習(パラメータの更更新)を 
⾏行行う前に、事前に⾏行行う学習。 
! 
⼊入⼒力力データを再現するような重みの学習を各層ごとに⾏行行う教師無し学習である。 
! 
ランダムに初期パラメータを決めるのではなく、Auto Encoderを⾏行行った後で、 
NN全体の学習を⾏行行うと精度度が上がると⾔言われている。
Title 
Name 
Date 
Auto Encoder 
… 
… 
’ 
’ 
’ 
… 
196個 
784個784個 
仮想的な出⼒力力xʼ’を教師データとして 
xとの誤差関数を定義し、 
Wx, b, Wxʼ’, bʼ’のパラメータを更更新する。 
(Wxʼ’, bʼ’はNN全体の学習には使わない)
Title 
Name 
Date 
Auto Encoder 
… 
… 
’ 
’ 
… 
196個 
784個784個 
… 
… 
’ 
’ 
… 
’ 
196個10個’196個 
全てのパラメータに 
ついて、事前学習を⾏行行う
Title 
Name 
Date 
Auto Encoder 
# decode用の変数を定義 
de_x = T.dvector(“de_x") 
de_b = T.dvector(“de_b") 
de_wx = T.dmatrix(“de_wx”) 
! 
# decode用の共有変数を定義 
de_wx = theano.shared(np.random.randn(784, 196), name=“_de_wx") 
de_b = theano.shared(np.random.randn(784), name=“_de_b”) 
! 
de_x = sigmoid(T.dot(de_wx, h) + de_b) 
pre1_cost_func = T.sum((de_x - x)**2) 
! 
# 誤差関数と偏微分するパラメータを指定 
pre1_grad_cost = T.grad(cost=pre1_cost_func, wrt=[wx, b, de_wx, de_b]) 
! 
# 計算に必要な全ての変数をinputsに、更新するパラメータをupdatesに指定 
pre1_grad_cost_func = theano.function(inputs=[de_x, de_wx, de_b, wx, bx, x], 
outputs=[], 
updates={_wx: _wx - eta * pre1_grad_cost[0], 
_b: _b - eta * pre1_grad_cost[1], 
_de_wx: _wh - eta * pre1_grad_cost[2], 
_de_b: _c - eta * pre1_grad_cost[3]})
Title 
Name 
Date 
Auto Encoder 
Auto Encoderの実装 
手法学習データ検証データ 
NN 100.0% 75.6% 
AE 99.7% 82.1%
Title 
Name 
Date 
Dropout 
Dropoutとは、NNに汎化性能をもたせる⼿手法。 
! 
NNは層同⼠士がフルに繋がっているため、過学習に陥りやすいと⾔言われている。 
Dropoutによって、アンサンブル学習のような効果が得られる。 
! 
学習時にいくつかの特徴量量を0にする。 
推定時にはすべての特徴量量を使⽤用するが、出⼒力力をある割合で⼩小さくする。
Title 
Name 
Date 
… 
… 
784個 
196個 
… 
10個 
各層の⼊入⼒力力データをランダムに0にする。 
⼊入⼒力力データは20%を0に、 
隠れ層のデータは50%を0にすると 
うまく学習できると⾔言われている。 
(NNの構造によるかも) 
! 
学習ごとに異異なるNNの構造が得られるため、 
汎化性能が向上する。(計算時間は増える) 
! 
学習ごとに結構学習精度度が暴暴れるので、 
L2正則化などと組み合わせることが多い。 
20%削減 
50%削減 
Dropout
Title 
Name 
Date 
Dropout 
# 0 or 1の配列 [0, 1, 0, 1, 1, 1, 0, 1, …, 1] 
bino_x = np.random.binomial(1, 0.8, 784) 
bino_h = np.random.binomial(1, 0.5, 196) 
! 
h = sigmoid(T.dot(wx, bino_x * x) + b) 
y = sigmoid(T.dot(wh, bion_h * h) + c)
Title 
Name 
Date 
Dropout 
Auto Encoder + Dropoutの精度 
手法学習データ検証データ 
NN 100.0% 75.6% 
AE 99.7% 82.1% 
AE+Dropout 96.4% 84.2%
Title 
Name 
Date 
おわりに 
MNISTのデータセットは、学習データに60,000枚、 
検証データに10,000枚使い、4層以上のNNで学習を行う論文が多いです。 
今回のコードはスペースの都合上ミニバッチ処理を省略しています。 
! 
DLの一手法であるAuto EncoderとDropoutに関する発表でしたが、他にもDL 
と呼ばれる手法はたくさんあります。 
! 
特に、畳み込みNNは、プレトレーニングやDropoutのような手法無しでも、 
汎化性能が高く、計算量もそんなに多くないのでおすすめです。 
(今回発表してないけど…
Title 
Name 
Date 
G. E. Hinton, N. Srivastava, A. Krizhevsky, I. Sutskever and R. R. Salakhutdinov, 
University of Toronto 
2012, Improving neural networks by preventing co-adaptation of feature detectors 
http://arxiv.org/pdf/1207.0580.pdf 
! 
Marc’Aurelio Ranzato, Y-Lan Boureau, Yann LeCun 
New York University 
Sparse Feature Learning for Deep Belief Networks 
http://yann.lecun.com/exdb/publis/pdf/ranzato-nips-07.pdf

Mais conteúdo relacionado

Mais procurados

Cvim saisentan-6-4-tomoaki
Cvim saisentan-6-4-tomoakiCvim saisentan-6-4-tomoaki
Cvim saisentan-6-4-tomoakitomoaki0705
 
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会Shotaro Sano
 
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装Ryosuke Okuta
 
Deep Learningと画像認識   ~歴史・理論・実践~
Deep Learningと画像認識 ~歴史・理論・実践~Deep Learningと画像認識 ~歴史・理論・実践~
Deep Learningと画像認識   ~歴史・理論・実践~nlab_utokyo
 
深層学習 第4章 大規模深層学習の実現技術
深層学習 第4章 大規模深層学習の実現技術深層学習 第4章 大規模深層学習の実現技術
深層学習 第4章 大規模深層学習の実現技術孝昌 田中
 
LSTM (Long short-term memory) 概要
LSTM (Long short-term memory) 概要LSTM (Long short-term memory) 概要
LSTM (Long short-term memory) 概要Kenji Urai
 
2013.07.15 はじパタlt scikit-learnで始める機械学習
2013.07.15 はじパタlt scikit-learnで始める機械学習2013.07.15 はじパタlt scikit-learnで始める機械学習
2013.07.15 はじパタlt scikit-learnで始める機械学習Motoya Wakiyama
 
Pythonで体験する深層学習 5章
Pythonで体験する深層学習 5章Pythonで体験する深層学習 5章
Pythonで体験する深層学習 5章孝好 飯塚
 
深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開Seiya Tokui
 
Pythonによる機械学習入門 ~Deep Learningに挑戦~
Pythonによる機械学習入門 ~Deep Learningに挑戦~Pythonによる機械学習入門 ~Deep Learningに挑戦~
Pythonによる機械学習入門 ~Deep Learningに挑戦~Yasutomo Kawanishi
 
17ゼロから作るディープラーニング2章パーセプトロン
17ゼロから作るディープラーニング2章パーセプトロン17ゼロから作るディープラーニング2章パーセプトロン
17ゼロから作るディープラーニング2章パーセプトロンKeiichirou Miyamoto
 
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~Yasutomo Kawanishi
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Kenta Oono
 
画像認識のための深層学習
画像認識のための深層学習画像認識のための深層学習
画像認識のための深層学習Saya Katafuchi
 
ディープニューラルネット入門
ディープニューラルネット入門ディープニューラルネット入門
ディープニューラルネット入門TanUkkii
 

Mais procurados (20)

Cvim saisentan-6-4-tomoaki
Cvim saisentan-6-4-tomoakiCvim saisentan-6-4-tomoaki
Cvim saisentan-6-4-tomoaki
 
深層学習入門
深層学習入門深層学習入門
深層学習入門
 
MIRU2014 tutorial deeplearning
MIRU2014 tutorial deeplearningMIRU2014 tutorial deeplearning
MIRU2014 tutorial deeplearning
 
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
 
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装
 
DeepLearningTutorial
DeepLearningTutorialDeepLearningTutorial
DeepLearningTutorial
 
Deep Learningと画像認識   ~歴史・理論・実践~
Deep Learningと画像認識 ~歴史・理論・実践~Deep Learningと画像認識 ~歴史・理論・実践~
Deep Learningと画像認識   ~歴史・理論・実践~
 
深層学習 第4章 大規模深層学習の実現技術
深層学習 第4章 大規模深層学習の実現技術深層学習 第4章 大規模深層学習の実現技術
深層学習 第4章 大規模深層学習の実現技術
 
LSTM (Long short-term memory) 概要
LSTM (Long short-term memory) 概要LSTM (Long short-term memory) 概要
LSTM (Long short-term memory) 概要
 
2013.07.15 はじパタlt scikit-learnで始める機械学習
2013.07.15 はじパタlt scikit-learnで始める機械学習2013.07.15 はじパタlt scikit-learnで始める機械学習
2013.07.15 はじパタlt scikit-learnで始める機械学習
 
Pythonで体験する深層学習 5章
Pythonで体験する深層学習 5章Pythonで体験する深層学習 5章
Pythonで体験する深層学習 5章
 
深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開
 
Pythonによる機械学習入門 ~Deep Learningに挑戦~
Pythonによる機械学習入門 ~Deep Learningに挑戦~Pythonによる機械学習入門 ~Deep Learningに挑戦~
Pythonによる機械学習入門 ~Deep Learningに挑戦~
 
bigdata2012ml okanohara
bigdata2012ml okanoharabigdata2012ml okanohara
bigdata2012ml okanohara
 
20160329.dnn講演
20160329.dnn講演20160329.dnn講演
20160329.dnn講演
 
17ゼロから作るディープラーニング2章パーセプトロン
17ゼロから作るディープラーニング2章パーセプトロン17ゼロから作るディープラーニング2章パーセプトロン
17ゼロから作るディープラーニング2章パーセプトロン
 
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)
 
画像認識のための深層学習
画像認識のための深層学習画像認識のための深層学習
画像認識のための深層学習
 
ディープニューラルネット入門
ディープニューラルネット入門ディープニューラルネット入門
ディープニューラルネット入門
 

Destaque

MNIST and machine learning - presentation
MNIST and machine learning - presentationMNIST and machine learning - presentation
MNIST and machine learning - presentationSteve Dias da Cruz
 
深層学習フレームワーク概要とChainerの事例紹介
深層学習フレームワーク概要とChainerの事例紹介深層学習フレームワーク概要とChainerの事例紹介
深層学習フレームワーク概要とChainerの事例紹介Kenta Oono
 
Tech-Circle Pepperで機械学習体験ハンズオン勉強会inアトリエ秋葉原
Tech-Circle Pepperで機械学習体験ハンズオン勉強会inアトリエ秋葉原Tech-Circle Pepperで機械学習体験ハンズオン勉強会inアトリエ秋葉原
Tech-Circle Pepperで機械学習体験ハンズオン勉強会inアトリエ秋葉原Koji Shiraishi
 
Py datameetup1
Py datameetup1Py datameetup1
Py datameetup1shiroyagi
 
研究発表のためのプレゼンテーション技術
研究発表のためのプレゼンテーション技術研究発表のためのプレゼンテーション技術
研究発表のためのプレゼンテーション技術Shinnosuke Takamichi
 
NIPS2015読み会: Ladder Networks
NIPS2015読み会: Ladder NetworksNIPS2015読み会: Ladder Networks
NIPS2015読み会: Ladder NetworksEiichi Matsumoto
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Seiya Tokui
 
深層学習フレームワークChainerの特徴
深層学習フレームワークChainerの特徴深層学習フレームワークChainerの特徴
深層学習フレームワークChainerの特徴Yuya Unno
 
TensorFlowによるCNNアーキテクチャ構築
TensorFlowによるCNNアーキテクチャ構築TensorFlowによるCNNアーキテクチャ構築
TensorFlowによるCNNアーキテクチャ構築Hirokatsu Kataoka
 
Introduction to Chainer
Introduction to ChainerIntroduction to Chainer
Introduction to ChainerShunta Saito
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual TalksYuya Unno
 

Destaque (12)

MNIST and machine learning - presentation
MNIST and machine learning - presentationMNIST and machine learning - presentation
MNIST and machine learning - presentation
 
深層学習フレームワーク概要とChainerの事例紹介
深層学習フレームワーク概要とChainerの事例紹介深層学習フレームワーク概要とChainerの事例紹介
深層学習フレームワーク概要とChainerの事例紹介
 
Tech-Circle Pepperで機械学習体験ハンズオン勉強会inアトリエ秋葉原
Tech-Circle Pepperで機械学習体験ハンズオン勉強会inアトリエ秋葉原Tech-Circle Pepperで機械学習体験ハンズオン勉強会inアトリエ秋葉原
Tech-Circle Pepperで機械学習体験ハンズオン勉強会inアトリエ秋葉原
 
Py datameetup1
Py datameetup1Py datameetup1
Py datameetup1
 
Chainerで流体計算
Chainerで流体計算Chainerで流体計算
Chainerで流体計算
 
研究発表のためのプレゼンテーション技術
研究発表のためのプレゼンテーション技術研究発表のためのプレゼンテーション技術
研究発表のためのプレゼンテーション技術
 
NIPS2015読み会: Ladder Networks
NIPS2015読み会: Ladder NetworksNIPS2015読み会: Ladder Networks
NIPS2015読み会: Ladder Networks
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
 
深層学習フレームワークChainerの特徴
深層学習フレームワークChainerの特徴深層学習フレームワークChainerの特徴
深層学習フレームワークChainerの特徴
 
TensorFlowによるCNNアーキテクチャ構築
TensorFlowによるCNNアーキテクチャ構築TensorFlowによるCNNアーキテクチャ構築
TensorFlowによるCNNアーキテクチャ構築
 
Introduction to Chainer
Introduction to ChainerIntroduction to Chainer
Introduction to Chainer
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks
 

Semelhante a PythonによるDeep Learningの実装

[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用de:code 2017
 
2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest informationSony Network Communications Inc.
 
Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Etsuji Nakai
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門Shiqiao Du
 
Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelereaseShiqiao Du
 
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようC# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようFujio Kojima
 
DTrace for biginners part(2)
DTrace for biginners part(2)DTrace for biginners part(2)
DTrace for biginners part(2)Shoji Haraguchi
 
「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門Hideto Masuoka
 
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...de:code 2017
 
DAシンポジウム2019招待講演「深層学習モデルの高速なTraining/InferenceのためのHW/SW技術」 金子紘也hare
DAシンポジウム2019招待講演「深層学習モデルの高速なTraining/InferenceのためのHW/SW技術」 金子紘也hareDAシンポジウム2019招待講演「深層学習モデルの高速なTraining/InferenceのためのHW/SW技術」 金子紘也hare
DAシンポジウム2019招待講演「深層学習モデルの高速なTraining/InferenceのためのHW/SW技術」 金子紘也harePreferred Networks
 
Lt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwLt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwToshi Harada
 
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
 ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイドEtsuji Nakai
 
[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.
 
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Yasutomo Kawanishi
 
深層学習レポート Day1 (小川成)
深層学習レポート Day1 (小川成)深層学習レポート Day1 (小川成)
深層学習レポート Day1 (小川成)ssuser441cb9
 
月間10億pvを支えるmongo db
月間10億pvを支えるmongo db月間10億pvを支えるmongo db
月間10億pvを支えるmongo dbYuji Isobe
 
Python standard 2022 Spring
Python standard 2022 SpringPython standard 2022 Spring
Python standard 2022 Springanyakichi
 
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門Daiyu Hatakeyama
 

Semelhante a PythonによるDeep Learningの実装 (20)

[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
 
2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information
 
Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
 
Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelerease
 
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようC# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
 
Fpgax20180217
Fpgax20180217Fpgax20180217
Fpgax20180217
 
DTrace for biginners part(2)
DTrace for biginners part(2)DTrace for biginners part(2)
DTrace for biginners part(2)
 
「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門
 
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
 
DAシンポジウム2019招待講演「深層学習モデルの高速なTraining/InferenceのためのHW/SW技術」 金子紘也hare
DAシンポジウム2019招待講演「深層学習モデルの高速なTraining/InferenceのためのHW/SW技術」 金子紘也hareDAシンポジウム2019招待講演「深層学習モデルの高速なTraining/InferenceのためのHW/SW技術」 金子紘也hare
DAシンポジウム2019招待講演「深層学習モデルの高速なTraining/InferenceのためのHW/SW技術」 金子紘也hare
 
Lt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwLt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdw
 
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
 ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
 
[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ソリューションズ ...
 
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
深層学習レポート Day1 (小川成)
深層学習レポート Day1 (小川成)深層学習レポート Day1 (小川成)
深層学習レポート Day1 (小川成)
 
月間10億pvを支えるmongo db
月間10億pvを支えるmongo db月間10億pvを支えるmongo db
月間10億pvを支えるmongo db
 
Python standard 2022 Spring
Python standard 2022 SpringPython standard 2022 Spring
Python standard 2022 Spring
 
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
 

PythonによるDeep Learningの実装

  • 2. Title Name Date OUTLINE ○About me ○今⽇日の話 ○Neural Networkのおさらい ○Deep Learningやってみよう -‐‑‒ Auto Encoder -‐‑‒ Dropout ○おわりに
  • 3. Title About me Akiba Shinya 早稲⽥田⼤大学 -‐‑‒ 機械科学専攻 M2 Name -‐‑‒ 分析のアルバイト -‐‑‒ 機械学習、物理理シミュレーション @aki_̲n1wa Date
  • 4. Title Name Date 今⽇日の話 ○数年年前から話題のつきないDeep Learning(DL)の話をします。 最近はslideshare等にも、DL関連の資料料が増えてきました。 DLの概説やライブラリ紹介などが多く、実際にコードで書くときに 参考にできる資料料があまりなかったことが、発表の動機です。 (爆速ライブラリ書いたぜーとかいう話ではありません ! ○実際にコード書いてみると理理解が深まる ○pylearn2はライブラリというより、バッチ処理理ツールという感じ
  • 5. Title Name Date Neural Networkのおさらい 入力データに対して、何かしらの出力データが得られる装置。 他の神経細胞からの入力 ある閾値を超えると発火して、 他の神経細胞へ入力を与える http://thinkit.co.jp/article/30/3/ 入力: 重み: 閾値: 出力: モデル化 閾値を超えたら1 ! 超えなかったら0 「パーセプトロン」
  • 6. Title Name Date Neural Networkのおさらい 簡単な分類問題 入力データの特徴量が1個 0 1 入力データの特徴量が2個 1 一次元空間での線形分類二次元空間での線形分類 0
  • 7. Title Name Date Neural Networkのおさらい ⼊入⼒力力データが画像(数値)のときは、 どんなNNを設計しよう… 28×28ピクセルのデータ = 特徴量量784個 from MNIST database (Mixed National Institute of Standards and Technology database) http://yann.lecun.com/exdb/mnist/
  • 8. Title Name Date Neural Networkのおさらい 3層のNeuralNetwork … … 784個 196個 … 10個 入力層:x 画像データ 隠れ層:h 出力層:y 重み:Wx, Wh バイアス項:b, c シグモイド関数: 注)MNISTの画像データに対するNNは 784-800-800-10とかで設計されますが、 計算大変なので、小さめのNNとなっております。 (ラップトップでNNつらい)
  • 9. Title Name Date Neural Networkのおさらい 3層のNeuralNetwork … … 784個 196個 出力 … 1 10個 0 0 0 0 0 0 0 0 0 正解 0 0 0 0 0 0 0 1 0 0 出力が計算できたら、 誤差を求めて、パラメー タを修正する。 修正するパラメータで 誤差関数を偏微分する。 ηは学習係数
  • 10. Title Name Date Neural Networkのおさらい NNの学習過程まとめ 1. 入力データに対して、何かしらの出力データを得る。 2. 出力データと教師データを比べて、 間違っていたら、誤差関数を微分してパラメータを修正する。
  • 11. Title Name Date Neural Networkのおさらい NNの学習過程まとめ 1. 入力データに対して、何かしらの出力データを得る。 2. 出力データと教師データを比べて、 間違っていたら、誤差関数を微分してパラメータを修正する。 ここが面倒くさい。 3層NNだと, Wx, b, Wh, c, それぞれについて 偏微分の式を計算して、コードに書き下さなきゃなんない。 →Theanoを使うよ
  • 12. Title Name Date Neural Networkのおさらい 【Theano】 Pythonライブラリ 微分演算が楽 再帰的な処理はちょっと弱い GPUでの実行 http://deeplearning.net/software/theano/
  • 13. Title Name Date Neural Networkのおさらい import theano import theano.tensor as T from sklearn.datasets import fetch_mldata from sklearn import preprocessing ! # sklearnのデータセットから画像取得 mnist = fetch_mldata('MNIST original', data_home=".") X_digits, _, _, t_digits = mnist.values() data_size = 1000 index = np.arange(70000) index = shuffle(index)[0:70000] x_digits = X_digits[index[0:data_size]] t_digits = t_digits[index[0:data_size]] ! data_x = [] # 学習用入力データ前処理 for A in x_digits: data_x.append(np.array([1 if x > 100 else 0 for x in A])) ! # 学習用教師データ前処理 lb = preprocessing.LabelBinarizer() lb.fit([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) data_t = lb.transform(Y_digits)
  • 14. Title Name Date Neural Networkのおさらい # 使用する変数を定義 b, c = T.dvectors("b", "c") wx, wh = T.dmatrices("wx", "wh") t, y, x, h = T.dvectors('t', 'y', 'x', 'h') ! # パラメータは共有変数として値をもつ _wx = theano.shared(np.random.randn(196, 784), name="_wx") _wh = theano.shared(np.random.randn(10,196), name="_wh") _b = theano.shared(np.random.randn(196), name="_b") _c = theano.shared(np.random.randn(10), name=“_c”) ! def sigmoid(x): return 1./(1+T.exp(-x)) ! h = sigmoid(T.dot(wx, x) + b) y = sigmoid(T.dot(wh, h) + c) ! # 学習係数 eta = 0.01 # 誤差関数 cost_func = T.sum((t - y)**2)
  • 15. Title Name Date Neural Networkのおさらい # 誤差関数と偏微分するパラメータを指定 grad_cost = T.grad(cost=cost_func, wrt=[wx, b, wh, c]) ! # 計算に必要な全ての変数をinputsに、更新するパラメータをupdatesに指定 grad_cost_func = theano.function(inputs=[t, wh, bh, wx, bx, x], outputs=[], updates={_wx: _wx - eta * grad_cost[0], _b: _b - eta * grad_cost[1], _wh: _wh - eta * grad_cost[2], _c: _c - eta * grad_cost[3]}) ! train_count = 1000 # 指定した回数学習させる for n in range(train_count): for x, t in zip(data_x, data_t): input = [t, _wh.get_value(), _bh.get_value(), _wx.get_value(), _bx.get_value(), x] grad_cost_func(input)
  • 16. Title Name Date Neural Networkのおさらい ここまでで作ったNNを実行すると… 手法学習データ検証データ NN 100.0% 75.6% NNの問題点 ○パラメータの初期値 ○過学習
  • 17. Title Name Date Neural Networkのおさらい ここまでで作ったNNを実行すると… 手法学習データ検証データ NN 100.0% 75.6% NNの問題点 ○パラメータの初期値 → Auto Encoderを使おう ○過学習 → Dropoutを使おう
  • 18. Title Name Date Auto Encoder Auto Encoderとは、BackpropagationでNN全体の学習(パラメータの更更新)を ⾏行行う前に、事前に⾏行行う学習。 ! ⼊入⼒力力データを再現するような重みの学習を各層ごとに⾏行行う教師無し学習である。 ! ランダムに初期パラメータを決めるのではなく、Auto Encoderを⾏行行った後で、 NN全体の学習を⾏行行うと精度度が上がると⾔言われている。
  • 19. Title Name Date Auto Encoder … … ’ ’ ’ … 196個 784個784個 仮想的な出⼒力力xʼ’を教師データとして xとの誤差関数を定義し、 Wx, b, Wxʼ’, bʼ’のパラメータを更更新する。 (Wxʼ’, bʼ’はNN全体の学習には使わない)
  • 20. Title Name Date Auto Encoder … … ’ ’ … 196個 784個784個 … … ’ ’ … ’ 196個10個’196個 全てのパラメータに ついて、事前学習を⾏行行う
  • 21. Title Name Date Auto Encoder # decode用の変数を定義 de_x = T.dvector(“de_x") de_b = T.dvector(“de_b") de_wx = T.dmatrix(“de_wx”) ! # decode用の共有変数を定義 de_wx = theano.shared(np.random.randn(784, 196), name=“_de_wx") de_b = theano.shared(np.random.randn(784), name=“_de_b”) ! de_x = sigmoid(T.dot(de_wx, h) + de_b) pre1_cost_func = T.sum((de_x - x)**2) ! # 誤差関数と偏微分するパラメータを指定 pre1_grad_cost = T.grad(cost=pre1_cost_func, wrt=[wx, b, de_wx, de_b]) ! # 計算に必要な全ての変数をinputsに、更新するパラメータをupdatesに指定 pre1_grad_cost_func = theano.function(inputs=[de_x, de_wx, de_b, wx, bx, x], outputs=[], updates={_wx: _wx - eta * pre1_grad_cost[0], _b: _b - eta * pre1_grad_cost[1], _de_wx: _wh - eta * pre1_grad_cost[2], _de_b: _c - eta * pre1_grad_cost[3]})
  • 22. Title Name Date Auto Encoder Auto Encoderの実装 手法学習データ検証データ NN 100.0% 75.6% AE 99.7% 82.1%
  • 23. Title Name Date Dropout Dropoutとは、NNに汎化性能をもたせる⼿手法。 ! NNは層同⼠士がフルに繋がっているため、過学習に陥りやすいと⾔言われている。 Dropoutによって、アンサンブル学習のような効果が得られる。 ! 学習時にいくつかの特徴量量を0にする。 推定時にはすべての特徴量量を使⽤用するが、出⼒力力をある割合で⼩小さくする。
  • 24. Title Name Date … … 784個 196個 … 10個 各層の⼊入⼒力力データをランダムに0にする。 ⼊入⼒力力データは20%を0に、 隠れ層のデータは50%を0にすると うまく学習できると⾔言われている。 (NNの構造によるかも) ! 学習ごとに異異なるNNの構造が得られるため、 汎化性能が向上する。(計算時間は増える) ! 学習ごとに結構学習精度度が暴暴れるので、 L2正則化などと組み合わせることが多い。 20%削減 50%削減 Dropout
  • 25. Title Name Date Dropout # 0 or 1の配列 [0, 1, 0, 1, 1, 1, 0, 1, …, 1] bino_x = np.random.binomial(1, 0.8, 784) bino_h = np.random.binomial(1, 0.5, 196) ! h = sigmoid(T.dot(wx, bino_x * x) + b) y = sigmoid(T.dot(wh, bion_h * h) + c)
  • 26. Title Name Date Dropout Auto Encoder + Dropoutの精度 手法学習データ検証データ NN 100.0% 75.6% AE 99.7% 82.1% AE+Dropout 96.4% 84.2%
  • 27. Title Name Date おわりに MNISTのデータセットは、学習データに60,000枚、 検証データに10,000枚使い、4層以上のNNで学習を行う論文が多いです。 今回のコードはスペースの都合上ミニバッチ処理を省略しています。 ! DLの一手法であるAuto EncoderとDropoutに関する発表でしたが、他にもDL と呼ばれる手法はたくさんあります。 ! 特に、畳み込みNNは、プレトレーニングやDropoutのような手法無しでも、 汎化性能が高く、計算量もそんなに多くないのでおすすめです。 (今回発表してないけど…
  • 28. Title Name Date G. E. Hinton, N. Srivastava, A. Krizhevsky, I. Sutskever and R. R. Salakhutdinov, University of Toronto 2012, Improving neural networks by preventing co-adaptation of feature detectors http://arxiv.org/pdf/1207.0580.pdf ! Marc’Aurelio Ranzato, Y-Lan Boureau, Yann LeCun New York University Sparse Feature Learning for Deep Belief Networks http://yann.lecun.com/exdb/publis/pdf/ranzato-nips-07.pdf