66
TensorFlow 深深深深深深深深深 深深深深 By Mark Chang

TensorFlow 深度學習快速上手班--深度學習

Embed Size (px)

Citation preview

Page 1: TensorFlow 深度學習快速上手班--深度學習

TensorFlow 深度學習快速上手班二、深度學習By Mark Chang

Page 2: TensorFlow 深度學習快速上手班--深度學習

• 深度學習的原理• 模型選擇與參數調整• 多層感知器實作

Page 3: TensorFlow 深度學習快速上手班--深度學習

深度學習的原理

Page 4: TensorFlow 深度學習快速上手班--深度學習

機器學習監督式學習

Supervised Learning

非監督式學習Unsupervised Learning

增強式學習Reinforcement Learning

深度學習Deep Learning

Page 5: TensorFlow 深度學習快速上手班--深度學習

深度學習• 一種機器學習的方法• 用電腦模擬人腦神經系統構造• 讓電腦學會人腦可做的事

Page 7: TensorFlow 深度學習快速上手班--深度學習

模擬神經元

nW1

W2

x1

x2

bWb

y

nin

nout

Page 8: TensorFlow 深度學習快速上手班--深度學習

(0,0)

x2

x1

模擬神經元

1

0

Page 9: TensorFlow 深度學習快速上手班--深度學習

二元分類: AND Gate

x1 x2 y0 0 00 1 01 0 01 1 1

(0,0)

(0,1) (1,1)

(1,0)

01

n2020

b-30

yx1x2

Page 10: TensorFlow 深度學習快速上手班--深度學習

XOR Gate ?

(0,0)

(0,1) (1,1)

(1,0)0

01

x1 x2 y0 0 00 1 11 0 11 1 0

Page 11: TensorFlow 深度學習快速上手班--深度學習

二元分類: XOR Gate

n-20

20

b

-10

y

(0,0)

(0,1)

(1,1)

(1,0)

01

(0,0)

(0,1) (1,1)

(1,0)

10

(0,0)

(0,1) (1,1)

(1,0)0

01

n1

2020

b-30

x1x2

n2

2020

b-10

x1x2

x1 x2 n1

n2

y

0 0 0 0 00 1 0 1 11 0 0 1 11 1 1 1 0

Page 12: TensorFlow 深度學習快速上手班--深度學習

類神經網路

x

y

n11

n12

n21

n22W12,y

W12,x

b

W11,y

W11,bW12,b

b

W11,x W21,11

W22,12

W21,12

W22,11

W21,bW22,b

z1

z2

Input Layer

HiddenLayer

OutputLayer

Page 14: TensorFlow 深度學習快速上手班--深度學習

訓練類神經網路• 用隨機值初始化模型參數 w• Forward Propagation– 用目前的模型參數計算出答案

• 計算錯誤量(用 Error Function )• Backward Propagation– 用錯誤量來修正模型

Page 15: TensorFlow 深度學習快速上手班--深度學習

長期記憶

http://www.pnas.org/content/102/49/17846/F7.large.jpg

Page 16: TensorFlow 深度學習快速上手班--深度學習

訓練類神經網路

訓練資料 機器學習模型 輸出值

正確答案

對答案如果答錯了,要修正模型

初始化 Forward Propagation

ErrorFunction

BackwardPropagation

Page 17: TensorFlow 深度學習快速上手班--深度學習

初始化• 將所有的 W 隨機設成 -N ~ N 之間的數

• 每層之間 W 的值都不能相同

x

y

n11

n12

n21

n22W12,y

W12,x

b

W11,y

W11,bW12,b

b

W11,x W21,11

W22,12

W21,12

W22,11

W21,bW22,b

z1

z2

Lk-1 :上一層的大小Lk :該層的大小

Page 18: TensorFlow 深度學習快速上手班--深度學習

Forward Propagation

Page 19: TensorFlow 深度學習快速上手班--深度學習

Forward Propagation

Page 20: TensorFlow 深度學習快速上手班--深度學習

Error Function

n21

n22

z1

z2

Page 21: TensorFlow 深度學習快速上手班--深度學習

w1 w0

Gradient Descent

Page 22: TensorFlow 深度學習快速上手班--深度學習

Backward Propagation

Page 23: TensorFlow 深度學習快速上手班--深度學習

Backward Propagation

Page 24: TensorFlow 深度學習快速上手班--深度學習

Backward Propagation

Page 25: TensorFlow 深度學習快速上手班--深度學習

Backward Propagation

Page 26: TensorFlow 深度學習快速上手班--深度學習

Backward Propagation

Page 27: TensorFlow 深度學習快速上手班--深度學習

Backward Propagation

Page 28: TensorFlow 深度學習快速上手班--深度學習

Backward Propagation

Page 30: TensorFlow 深度學習快速上手班--深度學習

模型選擇與參數調整

Page 31: TensorFlow 深度學習快速上手班--深度學習

模型種類• 非線性轉換

Sigmoid:

nW1

W2

x1x2

b Wb

tanh:

ReLU:

Page 32: TensorFlow 深度學習快速上手班--深度學習

模型種類• Hidden Layer

較小的 Hidden Layer

較大的 Hidden Layer

多層 Hidden Layer單層 Hidden Layer

Page 33: TensorFlow 深度學習快速上手班--深度學習

模型複雜度• 模型中的參數個數( weight 和 bias 的個數)

模型複雜度低 高

Page 34: TensorFlow 深度學習快速上手班--深度學習

訓練不足與過度訓練Tensorflow Playground

http://playground.tensorflow.org/

資料分佈

訓練適度 訓練不足 訓練過度

Page 35: TensorFlow 深度學習快速上手班--深度學習

訓練不足( Underfitting )• 原因:– Learning Rate 太大或太小– 訓練時間太短– 模型複雜度不夠

t

Page 36: TensorFlow 深度學習快速上手班--深度學習

過度訓練( Overfitting )• 原因:– 雜訊太多– 訓練資料太少– 訓練時間太長– 模型複雜度太高

t

Page 37: TensorFlow 深度學習快速上手班--深度學習

驗證資料( Validation Data )

訓練資料模型 1

測試資料 最後結果

資料集

驗證資料 模型選擇參數選擇時間控制

模型 2

……

Page 38: TensorFlow 深度學習快速上手班--深度學習

交叉驗證( Cross Validation )訓練資料驗證資料

訓練資料

訓練資料

驗證資料

驗證資料

第一回

第二回

第 N回

……

Page 39: TensorFlow 深度學習快速上手班--深度學習

解決方式• 訓練不足– 調整 Learning Rate– 增加訓練時間– 增加模型複雜度

• 訓練過度– 增加訓練資料– 減少雜訊– 減少訓練時間– 減少模型複雜度

Page 40: TensorFlow 深度學習快速上手班--深度學習

調整 Learning Rate• 調整 Learning Rate 數值

Learning Rate適中

Learning Rate過小

Learning Rate過大

Page 41: TensorFlow 深度學習快速上手班--深度學習

調整 Learning Rate• 動態調整 Learning Rate :– AdagradOptimizer– RMSPropOptimizer–……

Page 42: TensorFlow 深度學習快速上手班--深度學習

調整訓練時間• Early Stop

Validation LossTraining Loss

停止訓練t

Page 43: TensorFlow 深度學習快速上手班--深度學習

調整模型複雜度• 調整 Hidden Layer 的寬度或層數• Regularization• Dropout

Page 44: TensorFlow 深度學習快速上手班--深度學習

Hidden Layer 寬度

0 1 2 3 4 5 6 7 8 90

0.050.1

0.150.2

0.250.3

0.350.4

0.450.5

Validation LossTraining Loss

最適寬度

模型複雜度低 高

Loss

寬度

Page 45: TensorFlow 深度學習快速上手班--深度學習

Regularization• 將 weights 的平方和加到 cost function 中• 可使 weights 的絕對值不要變得太大• 可降低模型複雜度

Cost Function:

λ 越大,則模型複雜度越低

Page 46: TensorFlow 深度學習快速上手班--深度學習

Regularization最適 λ 值

模型複雜度 低高0.01 0.1 1 100

0.05

0.1

0.15

0.2

0.25

0.3

0.35

Validation LossTraining LossLo

ss

λ

Page 47: TensorFlow 深度學習快速上手班--深度學習

Dropout• 訓練時,隨機將 Hidden Layer 的神經元拿掉• 可降低模型複雜度• ex: 25% 的 Dropout Rate

Page 48: TensorFlow 深度學習快速上手班--深度學習

Dropout• 測試時,用所有的神經元來測試。– 將所有的 weight 乘上 (1 – dropout_rate)

Page 49: TensorFlow 深度學習快速上手班--深度學習

Dropout

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

0.050.1

0.150.2

0.250.3

0.350.4

0.450.5

Validation ErrorTraining Error

最適 dropout rate

1- dropout rate

Erro

r

模型複雜度低 高

Page 50: TensorFlow 深度學習快速上手班--深度學習

模型選擇與參數調整實作• Tensorflow Playground– http://playground.tensorflow.org/

Page 51: TensorFlow 深度學習快速上手班--深度學習

模型選擇與參數調整實作• 訓練不足( UnderFitting )

Page 52: TensorFlow 深度學習快速上手班--深度學習

模型選擇與參數調整實作• 過度訓練( OverFitting )

Page 53: TensorFlow 深度學習快速上手班--深度學習

多層感知器實作

Page 55: TensorFlow 深度學習快速上手班--深度學習

MNIST• 數字識別• 多元分類: 0~9

https://www.tensorflow.org/versions/r0.7/images/MNIST.png

Page 56: TensorFlow 深度學習快速上手班--深度學習

模型• 多層感知器

Input LayerSize:784

Hidden Layer

Size:200

Output Layer

Size:10

Page 57: TensorFlow 深度學習快速上手班--深度學習

Computational Graphx_ = tf.placeholder(tf.float32, [None, 784], name="x_")y_ = tf.placeholder(tf.float32, [None, 10], name="y_")

# input -> HiddenW1 = tf.Variable(tf.truncated_normal([784,200], stddev=0.1), name="W1")b1 = tf.Variable(tf.zeros([200]), name="b1")h1 = tf.nn.sigmoid(tf.matmul(x_, W1) + b1)# Hidden -> OutputW2 = tf.Variable(tf.truncated_normal([200,10], stddev=0.1), name="W2")b2 = tf.Variable(tf.zeros([10]), name="b2")y = tf.nn.softmax(tf.matmul(h1, W2) + b2)

cross_entropy = -tf.reduce_sum(y_ * tf.log(y))optimizer = tf.train.GradientDescentOptimizer(0.01)trainer = optimizer.minimize(cross_entropy)init = tf.initialize_all_variables()

Page 58: TensorFlow 深度學習快速上手班--深度學習

Layer 1W1 = tf.Variable(tf.truncated_normal([784,200], stddev=0.1), name="W1”)

0

1000

2000

3000

4000

5000

6000

7000

-0.2 0.20

Page 59: TensorFlow 深度學習快速上手班--深度學習

Layer 1W1 = tf.Variable(tf.truncated_normal([784,200], stddev=0.1), name="W1")b1 = tf.Variable(tf.zeros([200]), name="b1")h1 = tf.nn.sigmoid(tf.matmul(x_, W1) + b1)

W1x

b1

h1n

784

n

200

200

200

784× + =

Page 60: TensorFlow 深度學習快速上手班--深度學習

Layer 2

wb

h1n 1010

200

200× + =

y

10

n

W2 = tf.Variable(tf.truncated_normal([200,10], stddev=0.1), name="W2")b2 = tf.Variable(tf.zeros([10]), name="b2")y = tf.nn.softmax(tf.matmul(h1, W2) + b2)

Page 61: TensorFlow 深度學習快速上手班--深度學習

Regularizationlambda_ = tf.placeholder(tf.float32, name="lambda")regularizer = tf.reduce_sum(tf.square(W1))+tf.reduce_sum(tf.square(W2))cost = cross_entropy + lambda_*regularizer

Cost Function:

Page 63: TensorFlow 深度學習快速上手班--深度學習

dropoutkeep_prob = tf.placeholder(tf.float32, name="keep_prob")h1_drop = tf.nn.dropout(h1, keep_prob)y = tf.nn.softmax(tf.matmul(h1_drop, W2) + b2)

1

0

1

0Dropout

Mask

Page 65: TensorFlow 深度學習快速上手班--深度學習

模型儲存與載入• 儲存模型參數

• 載入模型參數saver = tf.train.Saver(max_to_keep=10)saver.save(sess, "model.ckpt")

saver = tf.train.Saver()saver.restore(sess, "model.ckpt")

Page 66: TensorFlow 深度學習快速上手班--深度學習

66

講師資訊• Email: ckmarkoh at gmail dot com• Blog: http://cpmarkchang.logdown.com• Github: https://github.com/ckmarkoh

Mark Chang

• Facebook: https://www.facebook.com/ckmarkoh.chang

• Slideshare: http://www.slideshare.net/ckmarkohchang• Linkedin:

https://www.linkedin.com/pub/mark-chang/85/25b/847