67
Deep Learning 入門 Logistic Regression Multilayer perceptron Convolutional Network @magoroku15 2015/12/18 1

Deep learning入門

Embed Size (px)

Citation preview

Page 1: Deep learning入門

Deep Learning 入門

Logistic Regression Multilayer perceptron

Convolutional Network

@magoroku15

2015/12/18 1

Page 2: Deep learning入門

Deep Learning

• 1990年代に死んだと思われていたNNが2012年以降、Deep Learningとして復活

• 各分野のコンベンションで優勝

– 画像認識

– 音声認識

– 化合物の活性予測

• 主要学会で話題に

– ICML(機械学習)、ACL(自然言語)、CVPR(画像処理)

– 2015はHotChips(アーキテクチャ)でもチュートリアル

2015/12/18 2

Page 3: Deep learning入門

DNNによる音声認識の誤答率

hotchips2015 2015/12/18 3

Page 4: Deep learning入門

ビジネスでも

• MS、Googleが音声認識をDNNで置き換え

• Googleが買った企業 – DNNresearch Inc

• ブームの火付け役トロント大Hinton教授が創立

– DeepMind Technologies: • レトロゲームのルールを学習するDQN(Deep Q-Network)を開発

• BaiduはStanfordのAndrew Ng准教授をリクルート – 顔認識のエラー率:Microsoftは3.67%、Facebookは1.63%、

Googleは0.37%に対してBaiduは0.15%

• クラウド上にPaaS等も登場

2015/12/18 4

Page 5: Deep learning入門

機械学習

ニューラルネット

誤解も

• 機械学習、ニューラルネット、ディープニューラルネット、ディープラーニング違いは?

• 世の中が騒いでいるのは

–ディープニューラルネット =ディープラーニング

–機械学習の他の分野にブレークスルーは無い

ディープニューラルネット =ディープラーニング

2015/12/18 5

Page 6: Deep learning入門

一躍、自動運転の基本技術に

• 同一のアルゴリズム+タグ付けで、多種のモノを認識(学習)

• 認識できない物!は

1. 車から画像を回収して

2. サーバで学習・タグ付して

3. 車の学習データを更新

• 計算量は非対称

2015/12/18 6

Page 7: Deep learning入門

画像認識での成果

• ImageNet large-scale visual recognition challenge (ILSVRC) 2012

– 1000種類の物体画像識別のコンベンション

– トロント大(Hinton教授)が圧勝

– エラー率が一気に10%以上向上

• ILSVRC2014のimage例

http://www.image-net.org/challenges/LSVRC/2014/index#introduction 2015/12/18 7

Page 8: Deep learning入門

DLアルゴリズム入門

• Web,書籍による解析主には次の2種類 – 数学を背景にした原理・アルゴリズムを説明するもの

• 大学教養レベルの数学+αの知識が必要 • 式変形のすべてを理解するのは(数か月では)厳しい

– 利用分野、今後の期待を説明するもの • 表層的に説明に留まり、どの事業ドメインの使えるかわからない 例)音声・画像認識で大きな成果⇒他は?何に使えるの?

• ここでは、DLの入門として以下を試みる – 手書き文字認識(MNIST)を例題に基本アルゴリズムを理解 – 数学的な説明を資料内ですべて完結(できる範囲で) – 最初は、単純な1層のNNを対象 - Logistic Regression – 続いて、2層のNN - Multilayer perceptron – 最後に、物体認識で使われるConvolutio Neural Network

2015/12/18 8

Page 9: Deep learning入門

Deep Learningのレイヤ

caffe

pylearn2

theano

Digits

Chainer

DNN Feedforward Neural Network, Stochastic Gradient Descent,

Backpropagation, Autoencoder, Convolutional Neural Network, Reccurrent Neural Network, Boltzmann machine

数学的背景 大学教養レベルの微積分、行列、ベイズ理論

教科書:“Pattern Recognition and Machine Learning” (パターン認識と機械学習 - ベイズ理論による統計的予測)

Pycaffe

MATLAB

PFI UCB Univ. of Montreal

Nvidia C++

Torch7

Lua

アルゴリズム

フレームワーク

Amazon ML

Azure ML

Google Prediction API

クラウド

EC2 with GPU

Deep Learning非対応

Tensor flow

Google

2015/12/18 9

Page 10: Deep learning入門

Deep Learning Tutorials

• Université de Montréal - Lisa Labが以下で公開

[email protected]:lisa-lab/DeepLearningTutorials.git

http://deeplearning.net/tutorial

• 古典的なNN,DNNからCNNまで各種論理・技法を解説 – Python + theanoで記述

– 各種学習アルゴリズム • 教師あり3種、教師なし4種、その他5種

• 教師あり3種を題材に説明 1. Logistic Regression - using Theano for something

2. Multilayer perceptron - introduction to layers

3. Deep Convolutional Network - a simplified version of LeNet5

2015/12/18 10

Page 11: Deep learning入門

教師付き学習の例題

1. Logistic Regression - using Theano for something

– 1段:単純パーセプトロン、確率的勾配降下法

2. Multilayer perceptron - introduction to layers

– 2段:線形分離問題、誤差逆伝達法

3. Deep Convolutional Network - a simplified version of LeNet5

– 多段:汎化性向上のための畳み込み

• すべて同じ数字認識(MNIST)問題を扱う

• 高速化の各種実装もあわせて理解する – 繰り返し処理を行列積(sgemm)演算で置き換え

• refBLAS,OpenBlas, ATLAS, cuBLAS(NVIDIA)

– CNNの畳み込み演算はストライド転送+演算 • cuDNN(NVIDIA)

2015/12/18 11

Page 12: Deep learning入門

教師付き学習(MNIST )と誤答率

• 入門用向けの例題 1. Logistic Regression - using Theano for something simple 1950年代

2. Multilayer perceptron - introduction to layers 1980年代

3. Deep Convolutional Network - a simplified version of LeNet5 2010年代*

http://d.hatena.ne.jp/uhiaha888/20130803/1375513648

0

2

4

6

8

10

12

14

1

40

79

118

157

196

235

274

313

352

391

430

469

508

547

586

625

664

703

742

781

820

859

898

937

976

Logistic Regression

Multilayer perceptron

Deep Conventional Network

minibatch

誤答率

1.7%

0.91%

7.5%

多層(deep)化で

誤答率が大幅に下がる

*1979年に福島邦彦氏が発表したネオコグニトロンの再発明

Deep Learning Tutorials の例題で実測

2015/12/18 12

Page 13: Deep learning入門

数字認識(MNIST)

• 28x28ピクセル,256諧調の手書き数字

• 60000枚の学習サンプル

• 1000枚のテストサンプル

28 x 28 ピクセル

256諧調

2015/12/18 13

Page 14: Deep learning入門

学習と推定

学習:

大量のトレーニングデータを学習器に入力し、推定用のパラメタを得る

推定:

新規のデータにパラメタを適用して文字の確率を推定

トレーニングデータ

学習器

パラメタ

パラメタ

0.05 ’0’である確率

0.40 ‘1’である確率 0.05 0.05 0.15 0.05 0.05 0.15 0.05 0.05 ’9’である確率

IN

OUT IN OUT

学習 推定

2015/12/18 14

Page 15: Deep learning入門

推定の仕組み

• 画像認識の学習の理解に先立って、推定の仕組みを理解する

• 推定は推定対象画像とパラメタとの演算に帰結するので、深いDNNでも最終段の仕組みは同じ

• 違いは以下

– 学習・推定データの空間を歪めて、分離を良くする

– 学習推定の対象をデータの「部分」とする

– 学習パラメタを「ボカス」

2015/12/18 15

Page 16: Deep learning入門

パラメタW,bを用いた推定

1行784列

2個の「画像」を重ねる 各「点」を掛け算て足すと

Wの明るい点とxの黒い点が重なると加点 Wの暗い点とxの黒い点が重なると減点

𝑊 𝑥 + 𝑏 = 確率

784行1列 10行784列 10行1列 10行1列

0.05 入力画像が’0’である確率

0.40 0.05 0.05 0.15 0.05 0.05 0.15 0.05 0.05 入力画像が’9’である確率

2015/12/18 16

Page 17: Deep learning入門

パラメタの𝑊意味 – 数値

2015/12/18 17

赤を踏んだら減点 黒を踏んだら加点

Page 18: Deep learning入門

2015/12/18 18

Page 19: Deep learning入門

仕組み 784次元 10次元

0.05 ’0’である確率

0.40 0.05 0.05 0.15 0.05 0.05 0.15 0.05 0.05 ’9’である確率

28ピクセル

• 784次元から10次元への写像・次元圧縮 2015/12/18

28枚

19

Page 20: Deep learning入門

写像・次元圧縮 - 行列の積

• N行M列 と M行L列 の積は N行L列

784行1列 10行784列 10行1列

• 784次元から10次元への写像・次元圧縮 2015/12/18 20

Page 21: Deep learning入門

行列の積

• N行M列 と M行L列 の積は N行L列

• 2行2列 と 2行2列 の積は2行2列 𝑎 𝑏𝑐 𝑑

x 𝑒 𝑓𝑔 ℎ

=𝑎𝑒 + 𝑏𝑔 𝑎𝑓 + 𝑏ℎ𝑐𝑒 + 𝑑𝑔 𝑐𝑓 + 𝑑ℎ

• 2行3列 と 3行2列 の積は2行2列

𝑎1 𝑎2 𝑎3𝑏1 𝑏2 𝑏3

x

𝑐1 𝑑1𝑐2 𝑑2𝑐3 𝑑3

=𝑎1𝑐1 + 𝑎2𝑐2 + 𝑎3𝑐3 𝑎1𝑑1 + 𝑎2𝑑2 + 𝑎3𝑑3𝑏1𝑐1 + 𝑏2𝑐2 + 𝑏3𝑐3 𝑏1𝑑1 + 𝑏2𝑑2 + 𝑏3𝑑3

• 2行3列 と 3行1列 の積は2行1列

𝑎1 𝑎2 𝑎3𝑏1 𝑏2 𝑏3

x

𝑐1𝑐2𝑐3=𝑎1𝑐1 + 𝑎2𝑐2 + 𝑎3𝑐3𝑏1𝑐1 + 𝑏2𝑐2 + 𝑏3𝑐3

2015/12/18 21

忘れてしまったあなたのために追加

Page 22: Deep learning入門

パラメタの𝑊意味

Wの明るい点とxの黒い点が重なり、かつ、 Wの暗い点とxの黒い点が重ならない

⇒大きな値 ⇒’1’の可能性が高い

W x

Wの明るい点とxの黒い点が重なりが少な ⇒小さな値

⇒’9’の可能性は低い

Wに含まれる‘1’の学習データとxを掛け算

Wに含まれる‘1’の学習データとxを掛け算

2015/12/18 22

Page 23: Deep learning入門

LOGISTIC REGRESSION 単純パーセプトロン

2015/12/18 23

Page 24: Deep learning入門

Logistic Regression

• 入門用向けの例題 1. Logistic Regression - using Theano for something simple 1950年代

2. Multilayer perceptron - introduction to layers 1980年代

3. Deep Convolutional Network - a simplified version of LeNet5 2010年代*

http://d.hatena.ne.jp/uhiaha888/20130803/1375513648

0

2

4

6

8

10

12

14

1

40

79

118

157

196

235

274

313

352

391

430

469

508

547

586

625

664

703

742

781

820

859

898

937

976

Logistic Regression

Multilayer perceptron

Deep Conventional Network

minibatch

誤答率

1.7% 0.91%

7.5%

*1979年に福島邦彦氏が発表したネオコグニトロンの再発明

2015/12/18 24

最初はこれ 1960年代

Page 25: Deep learning入門

単純パーセプトロン

• 1層のネットワーク、単純パーセプトロンをLogistic Regressionで解く過程を追う

• 以下の順で説明する

–モデル Model

–損失関数 Loss Function

–アルゴリズム

• 確率的勾配降下法 DGD:Stochastic Gradient Descent

2015/12/18 25

Page 26: Deep learning入門

モデル

𝑊は重み付けの行列、𝑏はバイアスのベクトル

𝑥は入力ベクトル(トレーニングデータ)

𝑖, 𝑗はクラス(‘0’~’9’の10種を表す)

𝑃 𝑦 = 𝑖 𝑥,𝑊, 𝑏 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥𝑖 𝑊𝑥 + 𝑏 =𝑒𝑊𝑖𝑥+𝑏𝑖

𝑒𝑊𝑗𝑥+𝑏𝑗𝑗

入力したベクトル𝑥がクラス𝑖になる確率が

最大となるようなW,bを求める

𝑦𝑝𝑟𝑒𝑑 = 𝑎𝑟𝑔𝑚𝑎𝑥𝑖𝑃(𝑌 = 𝑖|𝑥,𝑊, 𝑏)

2015/12/18 26

Page 27: Deep learning入門

モデル-確率の表現

𝑊は重み付けの行列(2次元配列)

𝑏はバイアスのベクトル(配列)

𝑃 𝑦 = 𝑖 𝑥,𝑊, 𝑏 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥𝑖 𝑊𝑥 + 𝑏 =𝑒𝑊𝑖𝑥+𝑏𝑖

𝑒𝑊𝑗𝑥+𝑏𝑗𝑗

入力したベクトル𝑥がクラス𝑖に含まれる確率が最大となるW,bを求める

𝑦𝑝𝑟𝑒𝑑 = 𝑎𝑟𝑔𝑚𝑎𝑥𝑖𝑃(𝑌 = 𝑖|𝑥,𝑊, 𝑏)

ベイズの定理での表記𝑃(𝑌│𝑋)は、 事象Xが起きた前提で事象Yが起こる確率の事 ⇒ベクトル𝑥、重み付けW、バイアスbの時に

クラスiがyとなる確率

2015/12/18 27

Page 28: Deep learning入門

モデル-softmax

𝑊は重み付けの行列(2次元配列)

𝑏はバイアスのベクトル(配列)

𝑃 𝑦 = 𝑖 𝑥,𝑊, 𝑏 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥𝑖 𝑊𝑥 + 𝑏 =𝑒𝑊𝑖𝑥+𝑏𝑖

𝑒𝑊𝑗𝑥+𝑏𝑗𝑗

入力したベクトル𝑥がクラス𝑖に含まれる確率が最大となるW,bを求める

𝑦𝑝𝑟𝑒𝑑 = 𝑎𝑟𝑔𝑚𝑎𝑥𝑖𝑃(𝑌 = 𝑖|𝑥,𝑊, 𝑏)

softmax関数は、sigmoid関数の多変量版

多変量ロジスティック回帰や多クラスのフィードフォアワード型のニューラルネットの活性化関数として利用される.

2015/12/18 28

Page 29: Deep learning入門

モデル-sigmoid

𝑊は重み付けの行列(2次元配列)

𝑏はバイアスのベクトル(縦配列)

𝑃 𝑦 = 𝑖 𝑥,𝑊, 𝑏 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥𝑖 𝑊𝑥 + 𝑏 =𝑒𝑊𝑖𝑥+𝑏𝑖

𝑒𝑊𝑗𝑥+𝑏𝑗𝑗

入力したベクトル𝑥がクラス𝑖に含まれる確率が最大となるW,bを求める

𝑦𝑝𝑟𝑒𝑑 = 𝑎𝑟𝑔𝑚𝑎𝑥𝑖𝑃(𝑌 = 𝑖|𝑥,𝑊, 𝑏)

シグモイド関数の多変量版

多変量ロジスティック回帰や多クラスのフィードフォアワード型のニューラルネットの活性化関数として利用される.

シグモイド関数は生物の神経細胞が持つ性質をモデル化したもの 1

1 + 𝑒−𝑥

0か1かの2分割判別につかうモデル 今回は多値(0-9)なのでsoftmaxを使う

2015/12/18 29

Page 30: Deep learning入門

モデル-softmax

𝑊は重み付けの行列(2次元配列)

𝑏はバイアスのベクトル(配列)

𝑃 𝑦 = 𝑖 𝑥,𝑊, 𝑏 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥𝑖 𝑊𝑥 + 𝑏 =𝑒𝑊𝑖𝑥+𝑏𝑖

𝑒𝑊𝑗𝑥+𝑏𝑗𝑗

入力したベクトル𝑥がクラス𝑖に含まれる確率が最大となるW,bを求める

𝑦𝑝𝑟𝑒𝑑 = 𝑎𝑟𝑔𝑚𝑎𝑥𝑖𝑃(𝑌 = 𝑖|𝑥,𝑊, 𝑏)

eは自然対数の底 eを底とする指数関数はその導関数と等しくなる

𝑑

𝑑𝑥 𝑒𝑥 = 𝑒𝑥

⇒微分が簡単! 2015/12/18 30

Page 31: Deep learning入門

モデル – softmax - Σ

𝑊は重み付けの行列(2次元配列)

𝑏はバイアスのベクトル(配列)

𝑃 𝑦 = 𝑖 𝑥,𝑊, 𝑏 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥𝑖 𝑊𝑥 + 𝑏 =𝑒𝑊𝑖𝑥+𝑏𝑖

𝑒𝑊𝑗𝑥+𝑏𝑗𝑗

入力したベクトル𝑥がクラス𝑖に含まれる確率が最大となるW,bを求める

𝑦𝑝𝑟𝑒𝑑 = 𝑎𝑟𝑔𝑚𝑎𝑥𝑖𝑃(𝑌 = 𝑖|𝑥,𝑊, 𝑏)

すべての事象の内,特定の事象の割合(確率)を求める 𝑓 𝑖 = 𝑒𝑊𝑖𝑥+𝑏𝑖 のとき iを1~4を与える場合

𝑓 1 +𝑓 2 +𝑓 3 +𝑓(4)

𝑓 1 +𝑓 2 +𝑓 3 +𝑓(4)=1 、すべての事象の発生確率の合計は1

i=1の発生確率は 、𝑓 1

𝑓 1 +𝑓 2 +𝑓 3 +𝑓(4)

0.05 入力画像が’0’である確率

0.40 0.05 0.05 0.15 0.05 0.05 0.15 0.05 0.05 入力画像が’9’である確率 -------------------------------------------- 1.00 合計

2015/12/18 31

Page 32: Deep learning入門

モデル – softmax 理想値

• パラメタ算出時は理想値を置く

1行784列

W x + b = 確率

784行1列 10行784列 10行1列 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 --------- 1.00

10行1列 入力が’1’の場合の理想値

2015/12/18 32

Page 33: Deep learning入門

モデル

𝑊は重み付けの行列(2次元配列)

𝑏はバイアスのベクトル(配列)

𝑃 𝑦 = 𝑖 𝑥,𝑊, 𝑏 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥𝑖 𝑊𝑥 + 𝑏 =𝑒𝑊𝑖𝑥+𝑏𝑖

𝑒𝑊𝑗𝑥+𝑏𝑗𝑗

入力したベクトル𝑥がクラス𝑖に含まれる確率が最大となるW,bを求める

𝑦𝑝𝑟𝑒𝑑 = 𝑎𝑟𝑔𝑚𝑎𝑥𝑖𝑃(𝑌 = 𝑖|𝑥,𝑊, 𝑏)

𝑎𝑟𝑔𝑚𝑎𝑥 𝑓(𝑥): 𝑓(𝑥) を最大にする𝑥の集合

クラスiの発生確率を最大にする𝑥,𝑊, 𝑏を求めろ

2015/12/18 33

Page 34: Deep learning入門

negative log-likelihood

• Likelihood – 尤度関数(ゆうどかんすう)とは統計学において、ある前提条件に従って結果が出現する場合に、逆に観察結果からみて前提条件が「何々であった」と推測する尤もらしさ(もっともらしさ)を表す数値を、「何々」を変数とする関数として捉えたものである。また単に尤度ともいう。

wikipedia

2015/12/18 34

Page 35: Deep learning入門

単純パーセプトロン

• 1層のネットワーク、単純パーセプトロンをLogistic Regressionで解く過程を追う

• 以下の順で説明する

–モデル Model

–損失関数 Loss Function

–アルゴリズム

• 確率的勾配降下法 DGD:Stochastic Gradient Descent

2015/12/18 35

Page 36: Deep learning入門

損失関数

学習の結果は損失関数を用いて最適化する

多値分類のロジステック回帰では

負の対数尤度関数を用いることが多い

𝐿 𝜃 = 𝑊, 𝑏 , 𝐷 = log (𝑃 𝑌 = 𝑦 𝑖 𝑥 𝑖 ,𝑊, 𝑏))|𝐷|𝑖=0

最小化問題にしたいから対数尤度関数に-1をかけて最小化する事を考える。

𝑙 𝜃 = 𝑊, 𝑏 , 𝐷 = −𝐿(𝜃 = 𝑊, 𝑏 , 𝐷)

2015/12/18 36

Page 37: Deep learning入門

損失関数

学習の結果は損失関数を用いて最適化する

多値分類のロジステック回帰では

負の対数尤度関数を用いることが多い

𝐿 𝜃 = 𝑊, 𝑏 , 𝐷 = log (𝑃 𝑌 = 𝑦 𝑖 𝑥 𝑖 ,𝑊, 𝑏))|𝐷|𝑖=0

最小化問題にしたいから対数尤度関数に-1をかけて最小化する事を考える。

𝑙 𝜃 = 𝑊, 𝑏 , 𝐷 = −𝐿(𝜃 = 𝑊, 𝑏 , 𝐷)

𝐷は学習データの集合 カードの束 シャッフルしてカードを1枚引く

引いたカードの𝑖𝑛𝑑𝑒𝑥が𝑖(0,1,2… ) W, b が与えられたとき、カードの束Dのそれぞれのカードが

が正しく推定される確率

2015/12/18 37

Page 38: Deep learning入門

損失関数

学習の結果は損失関数を用いて最適化する

多値分類のロジステック回帰では

負の対数尤度関数を用いることが多い

𝐿 𝜃 = 𝑊, 𝑏 , 𝐷 = log (𝑃 𝑌 = 𝑦 𝑖 𝑥 𝑖 ,𝑊, 𝑏))|𝐷|𝑖=0

最小化問題にしたいから対数尤度関数に-1をかけて最小化する事を考える。

𝑙 𝜃 = 𝑊, 𝑏 , 𝐷 = −𝐿(𝜃 = 𝑊, 𝑏 , 𝐷)

𝐷 カードの束 のそれぞれをW, b で推定した確からしさを 𝑙𝑜𝑔(確からしさ)として値を加算する 𝑙𝑜𝑔の加算なので、乗算を意味 確からしさの乗算なので同時確率

2015/12/18 38

Page 39: Deep learning入門

損失関数 log (𝑃𝑖)|𝐷|𝑖=0

• 各カードの正解確率をlogして加算 – log(0.40) + log(0.40) + log(0.40) ・・・・ log(0.30) – Logを取ると乗算と同じ意味

• 正解確率の乗算結果は、同時確率の意味 • 乗算は扱いにくいので対数にして、加算

i=0

0.05 0.40 0.05 0.05 0.15 0.05 0.05 0.15 0.05 0.05

i=1 0.05 0.15 0.05 0.05 0.15 0.05 0.05 0.40 0.05 0.05

i=2 0.05 0.15 0.05 0.05 0.15 0.05 0.05 0.40 0.05 0.05

i=j 0.30 0.15 0.05 0.05 0.15 0.05 0.05 0.15 0.05 0.05

….. 0.40 x 0.40 x 0.40 ・・・・・ 0.30

データを増やすと…やっかい

2015/12/18 39

Page 40: Deep learning入門

損失関数

学習の結果は損失関数を用いて最適化する

多値分類のロジステック回帰では

負の対数尤度関数を用いることが多い

𝐿 𝜃 = 𝑊, 𝑏 , 𝐷 = log (𝑃 𝑌 = 𝑦 𝑖 𝑥 𝑖 ,𝑊, 𝑏))|𝐷|𝑖=0

最小化問題にしたいから対数尤度関数に-1をかけて最小化する事を考える。

𝑙 𝜃 = 𝑊, 𝑏 , 𝐷 = −𝐿(𝜃 = 𝑊, 𝑏 , 𝐷)

2015/12/18 40

Page 41: Deep learning入門

単純パーセプトロン

• 1層のネットワーク、単純パーセプトロンをLogistic Regressionで解く過程を追う

• 以下の順で説明する

–モデル Model

–損失関数 Loss Function

–アルゴリズム

• 確率的勾配降下法 SGD:Stochastic Gradient Descent

2015/12/18 41

Page 42: Deep learning入門

確率的勾配降下法 (SGD:Stochastic Gradient Descent)

• ランダムに学習データを1つ選んで誤差関数を計算し,その勾配方向にパラメータを修正する操作を反復する

• モデル

𝑃 𝑦 = 𝑖 𝑥,𝑊, 𝑏 =𝑒𝑊𝑖𝑥+𝑏𝑖

𝑒𝑊𝑗𝑥+𝑏𝑗𝑗

• 誤差関数

𝑁𝐿𝐿 𝜃 = 𝑊, 𝑏 , 𝐷 = − log (𝑃 𝑌 = 𝑦 𝑖 𝑥 𝑖 ,𝑊, 𝑏))

|𝐷|

𝑖=0

集合𝐷の同時発生確率を最大にする

2015/12/18 42

Page 43: Deep learning入門

最急降下法と確率的勾配降下法

• 𝜃を引数とする𝑓 𝜃 の値を最小化したい

• 最急降下法

𝜃𝑖+1 = 𝜃𝑖 − 𝜂 𝜕

𝜕𝜃𝑓(𝜃𝑖)

• 確率的勾配降下法

𝜃𝑖+1 = 𝜃𝑖 − 𝜂 𝜕

𝜕𝜃𝑓𝜃𝑖 (𝑥𝑛)

–収束させるにはη を適切に設定する

–局所的な参照のためメモリ効率が良い

2015/12/18 43

Page 44: Deep learning入門

Theanoでの解法

• 同時発生確率を誤差関数costとして定義 – 加算の代わりに平均meanを使用

• costを𝑊, 𝑏で偏微分T.grad, 𝜕

𝜕𝜃相当

• 学習率learnig_rateで減衰させながら更新

2015/12/18

def negative_log_likelihood(self, y): return -T.mean(T.log(self.p_y_given_x)[T.arange(y.shape[0]), y]) cost = classifier.negative_log_likelihood(y) g_W = T.grad(cost=cost, wrt=classifier.W) g_b = T.grad(cost=cost, wrt=classifier.b) updates = [(classifier.W, classifier.W - learning_rate * g_W), (classifier.b, classifier.b - learning_rate * g_b)]

44

Page 45: Deep learning入門

エラー率が7.5%で打ち切り

73世代 600x83x73=

3635400画像(延数)

Batchあたり600画像x83バッチ

動かしてみる

• ドキュメント

– http://deeplearning.net/tutorial/logreg.html#logreg

• ソースコード

– https://github.com/lisa-lab/DeepLearningTutorials

$ python logistic_sgd.py ... loading data ... building the model ... training the model epoch 1, minibatch 83/83, validation error 12.458333 % epoch 1, minibatch 83/83, test error of best model 12.375000 % : epoch 73, minibatch 83/83, validation error 7.500000 % epoch 73, minibatch 83/83, test error of best model 7.489583 %

1世代

73世代

2015/12/18 45

Page 46: Deep learning入門

MULTILAYER PERCEPTRON 多層化

2015/12/18 46

Page 47: Deep learning入門

Multilayer perceptron

• 入門用向けの例題 1. Logistic Regression - using Theano for something simple 1950年代

2. Multilayer perceptron - introduction to layers 1980年代

3. Deep Convolutional Network - a simplified version of LeNet5 2010年代*

http://d.hatena.ne.jp/uhiaha888/20130803/1375513648

0

2

4

6

8

10

12

14

1

40

79

118

157

196

235

274

313

352

391

430

469

508

547

586

625

664

703

742

781

820

859

898

937

976

Logistic Regression

Multilayer perceptron

Deep Conventional Network

minibatch

誤答率

1.7% 0.91%

7.5%

*1979年に福島邦彦氏が発表したネオコグニトロンの再発明

Theanoの例題で実測

2015/12/18 47

次はこれ 1990年代

Page 48: Deep learning入門

Multilayer perceptron

• 1層モデルと同じくMNISTを例題にして、多層(2層以上)のNNの原理と効果について説明

• モデル

–線形分離問題

–誤差逆伝達法

• その他テクニックは簡単な紹介のみ

–パラメタの初期

–正則化

2015/12/18 48

Page 49: Deep learning入門

モデル

• 𝑓 𝑥 = 𝐺 𝑏 2 +𝑊 2 𝑠 𝑏 1 +𝑊 1 𝑥

• ロジステック回帰の前段に一層追加した場合を例に説明

• Layerの追加で誤答率が7%から1.69%へ大きく改善

0.05 0.40 0.05 0.05 0.15 0.05 0.05 0.15 0.05 0.05

𝑊1 𝑏1 𝑊2 𝑏2

‘1’

ロジステック回帰の例題 今回追加

2015/12/18 49

Page 50: Deep learning入門

隠れ層の役割

𝑓 𝑥 = 𝐺 𝑏 2 +𝑊 2 𝑠 𝑏 1 +𝑊 1 𝑥

• 隠れ層:𝑠 𝑏 1 +𝑊 1 𝑥

• 線形分離不可問題に効果がある – 空間を曲げる、次元変換

– 空間を行列演算で曲げ、平面で分離する

• どうやって?

http://sinhrks.hatenablog.com/entry/2014/11/30/192940

2015/12/18 50

Page 51: Deep learning入門

Back propagation - 誤差逆伝播法

• 出力層から入力層側への学習

• 2層分のパラメタをまとめて学習

𝜃 = 𝑊 2 , 𝑏 2 ,𝑊 1 , 𝑏 1 .

– SGDと同様に𝑊 2 , 𝑏 2 誤差最小の値を計算

–誤差が𝑊 1 , 𝑏 1 から生じたとして𝑊 1 , 𝑏 1 を更新

• フレームワークが処理してくれるので意味と目的が理解できればよい

2015/12/18 51

Page 52: Deep learning入門

Theanoでの2層分の偏微分

• 損失関数 cost を、パラメータ HiddenLayer.W, HiddenLayer.b, LogisticRegression.W, LogisticRegression.bそれぞれで偏微分した偏導関数を求めておく

• パラメータごとに勾配計算 / 更新

𝜃 = 𝑊 2 , 𝑏 2 ,𝑊 1 , 𝑏 1 を𝜕𝑙

𝜕𝜃

class HiddenLayer self.params = [self.W, self.b] class LogisticRegression self.params = [self.W, self.b] self.params = self.hiddenLayer.params + self.logRegressionLayer.params gparams = [T.grad(cost, param) for param in classifier.params]

2015/12/18 52

Page 53: Deep learning入門

隠れ層の可視化

Epoc:0 Epoc:828

http://sinhrks.hatenablog.com/entry/2014/11/30/085119 •隠れ層からの出力データ 500 次元に主成分分析をかけて 2次元に写像 •ランダムサンプリングした 300 レコードを描画

2015/12/18 53

Page 54: Deep learning入門

‘8’と’6’の分離

Epoc:0 Epoc:828

http://sinhrks.hatenablog.com/entry/2014/11/30/085119 2015/12/18 54

Page 55: Deep learning入門

DEEP CONVOLUTIONAL NETWORK

2015/12/18 55

Page 56: Deep learning入門

Convolutional Network

• 3つの入門用向け例題 1. Logistic Regression - using Theano for something simple

2. Multilayer perceptron - introduction to layers

3. Deep Convolutional Network - a simplified version of LeNet5

0

2

4

6

8

10

12

14

1

40

79

118

157

196

235

274

313

352

391

430

469

508

547

586

625

664

703

742

781

820

859

898

937

976

Logistic Regression

Multilayer perceptron

Deep Conventional Network

minibatch

誤答率

1.7% 0.91%

7.5%

56

最後はこれ 2012年

Page 57: Deep learning入門

Multi Layer Perceptronを拡張

𝑓 𝑥 = 𝐺 𝑏 2 +𝑊 2 𝑠 𝑏 1 +𝑊 1 𝑥

s

s

s

s

s

G

G

G

s 0.05 0.40 0.05 0.05 0.15 0.05 0.05 0.15 0.05 0.05

𝑊1 𝑏1 𝑊2 𝑏2

‘1’

𝑤1 入力層 - 隠れ層の間で適用される係数行列 𝑏1 入力層 - 隠れ層の間で適用される重みベクトル 𝑠 隠れ層の活性化関数 𝑤2 隠れ層 - 出力層の間で適用される係数行列 = ロジスティック回帰の係数行列 𝑏2 隠れ層 - 出力層の間で適用される重みベクトル = ロジスティック回帰の重みベクトル 𝐺 出力層の活性化関数。多クラスの場合はソフトマックス関数

入力層 隠れ層 出力層

Convolutional と maxpooling を

追加

57

Page 58: Deep learning入門

convolutional_mlp.pyのモデル • convolution 濃淡構造をフィルタで抽出 • maxpooling 位置感度を低下させる

layer0 = LeNetConvPoolLayer( rng, input=layer0_input, image_shape=(batch_size, 1, 28, 28), filter_shape=(20, 1, 5, 5), poolsize=(2, 2) )

layer1 = LeNetConvPoolLayer( rng, input=layer0.output, image_shape=(batch_size, nkerns[0], 12, 12), filter_shape=(50, 20, 5, 5), poolsize=(2, 2) )

layer2 = HiddenLayer( rng, input=layer2_input, n_in=50 * 4 * 4, n_out=500, activation=T.tanh )

layer3 = LogisticRegression( input=layer2.output, n_in=500, n_out=10 )

28

28

24

24 1枚

20枚

layer0 LeNetConvPoolLayer

convolution maxpooling

layer2 HiddenLayer

layer3 LogisticRegression

800

500

10

4x4x50

1.Logistic Regression

2.Multilayer perceptron

3.Deep Convolutional Network

W[20, 1, 5, 5] 5x5画素1chを20個

学習するフィルタ

20枚

12

12

layer1 LeNetConvPoolLayer

8

8

50枚

4

4

50枚

convolution maxpooling

W[50,20, 5, 5] 5x5画素20chを50個

学習するフィルタ

W W

58

Page 59: Deep learning入門

Layer0 - Convolutionの演算 • 5x5画素1chのフィルタを20個を学習する

• 元データに畳み込む – ずらしながら演算

– 入力画像W×W

– フィルタがH×H

– 出力サイズW−2⌊H/2⌋×W−2⌊H/2⌋

layer0 = LeNetConvPoolLayer( rng, input=layer0_input, image_shape=(batch_size, 1, 28, 28), filter_shape=(20, 1, 5, 5), poolsize=(2, 2) )

28

28

24

24 1枚 20枚 20枚

12

12

layer0 LeNetConvPoolLayer

convolution maxpooling

20個

5

5

20個、1CH、5x5

28

24

59

Page 60: Deep learning入門

Layer0 - maxpoolingの演算 • 2x2の画素の最大値をとる

• 画素数は縦横半分に

layer0 = LeNetConvPoolLayer( rng, input=layer0_input, image_shape=(batch_size, 1, 28, 28), filter_shape=(20, 1, 5, 5), poolsize=(2, 2) )

28

28

24

24 1枚 20枚 20枚

12

12

layer0 LeNetConvPoolLayer

convolution maxpooling 24

24

12

12

2x2 60

Page 61: Deep learning入門

Layer1 - Convolutionの演算 • 5x5画素20chのフィルタを50個を学習する

50個、20CH、5x5

20枚

12

12

layer1 LeNetConvPoolLayer

8

8

50枚

4

4

50枚

convolution maxpooling

layer1 = LeNetConvPoolLayer( rng, input=layer0.output, image_shape=(batch_size, nkerns[0], 12, 12), filter_shape=(50, 20, 5, 5), poolsize=(2, 2) )

50個

5

5 20CH

20枚

12

12

8

8 1/50枚

12

12

8

8 5

5

20枚

12

12

8

8

50枚 convolution

X20回

X50回

61

Page 62: Deep learning入門

convolutional_mlp.pyの4層モデル

28

28

24

24

1枚 20枚

convolution maxpooling

800 500 10

4x4x50

20枚

12

12

8

8

50枚

4

4

50枚

convolution maxpooling

W W

updates = [ (param_i, param_i - learning_rate * grad_i) for param_i, grad_i in zip(params, grads) ] train_model = theano.function( [index], cost, updates=updates, givens={ x: train_set_x[index * batch_size: (index + 1) * batch_size], y: train_set_y[index * batch_size: (index + 1) * batch_size] } )

test_model = theano.function( [index], layer3.errors(y), givens={ x: test_set_x[index * batch_size: (index + 1) * batch_size], y: test_set_y[index * batch_size: (index + 1) * batch_size] } ) validate_model = theano.function( [index], layer3.errors(y), givens={ x: valid_set_x[index * batch_size: (index + 1) * batch_size], y: valid_set_y[index * batch_size: (index + 1) * batch_size] } )

Forwardのみ Forward & Backward

Backward

5x5画素

20個

5x5画素20枚

50個

5x5画素1chを20個を学習 5x5画素20chを50個を学習

Forward

layer0 layer1 layer2 layer3

flatten

62

Page 63: Deep learning入門

THEANOのTIPS

2015/12/18 63

Page 64: Deep learning入門

Forward(推定)の構文木

layer0

layer1

layer2

layer3

64

Page 65: Deep learning入門

Forward(推定)とBackward(学習)の構文木

Forward

layer0

layer1

layer2

layer3

65

Page 66: Deep learning入門

Forward(推定)とBackward(学習)の構文木

66

Page 67: Deep learning入門

構文木を出力 • Theanoのプログラム中に構文木の出力を指示

theano.printing.pydotprint(test_model, outfile="./c_graph_test_model.png",var_with_name_simple=True) theano.printing.pydotprint(validate_model, outfile="./c_graph_validate_model.png", var_with_name_simple=True) theano.printing.pydotprint(train_model, outfile="./c_graph_train_model.png", var_with_name_simple=True)

• 環境変数を設定 export THEANO_FLAGS=mode=FAST_RUN,profile=True,device=gpu,floatX=float32

• 変数 – シアン: 共用変数 – 緑:入力変数 – 青:出力変数 – 灰:未使用の変数

• Default apply node code:: – 赤: gpu転送 – 黄:scan node – 茶:shape node – マジェンタ:IfElse node – ピンク:elemwise node – 紫:subtensor – オレンジ:alloc node

67