2020-5-9 吳恩達-NN&DL-w3 淺層NN(3.8 激活函數的導數,3.9 神經網絡的梯度下降法)

1.視頻網站:mooc慕課https://mooc.study.163.com/university/deeplearning_ai#/c
2.詳細筆記網站(中文):http://www.ai-start.com/dl2017/
3.github課件+作業+答案:https://github.com/stormstone/deeplearning.ai

3.8 激活函數的導數 Derivatives of activation functions

在神經網絡中使用反向傳播的時候,就需要計算激活函數的斜率或者導數。本節會介紹如何計算激活函數的斜率。

1。sigmod函數
在這裏插入圖片描述

g(x)函數在z處的斜率,求導過程如下:

ddzg(z)=11+ez(111+ez)=g(z)(1g(z))\frac {d}{dz}g(z)=\frac 1{1+e^{-z}}(1 - \frac1{1+e^{-z}})=g(z)(1-g(z))

我們代入z值,來看看這個結果是否合理。

  • 如果z比較大,例如z=10,g(z)1g(z) \approx 1,所以斜率ddzg(z)0\frac {d}{dz}g(z) \approx 0
  • 同理如果z比較小,例如z=-10,g(z)0g(z) \approx 0,所以斜率ddzg(z)0\frac {d}{dz}g(z) \approx 0
  • 如果z=0,那麼g(z)=12g(z)=\frac 12,所以斜率ddzg(z)=14\frac {d}{dz}g(z) = \frac 14

從曲線圖中可以得知,上面的結果是正確的。

符號約定
導數用g(z)g'(z)表示,所以g(z)=ddzg(z)g'(z)=\frac {d}{dz}g(z)

結論,sigmod函數的導數公式爲:
在NN中,a=g(z)a=g(z)g(z)=a(1a)g'(z)=a(1-a)

這個公式的優點是,如果你已經計算出a,那你就能很快計算出導數(斜率)g(z)g'(z)

2。tanh函數
在這裏插入圖片描述

tanh函數導數爲

g(z)=ddzg(z)=1(tanh(z))2g'(z)=\frac {d}{dz}g(z)=1-(tanh(z))^2

證明

  • z比較大,如z=10,tanh(z)1tanh(z) \approx 1,所以斜率g(z)0g'(z)\approx0
  • z比較小,如z=-10,tanh(z)1tanh(z) \approx -1,所以斜率g(z)0g'(z)\approx0
  • z=0,tanh(z)=0tanh(z) =0,所以斜率g(z)=1g'(z)=1

與tanh函數曲線圖相符合。

結論,tanh函數的導數公式爲:
a=g(z)a=g(z)g(z)=1a2g'(z)=1-a^2

3。Relu函數
在這裏插入圖片描述

Relu函數導數爲
在這裏插入圖片描述

顯然,公式也是與圖像中的斜率相符合的。

在軟件中實現Relu算法,如果z正好爲0,可以令其導數爲1或者爲0,對於下降算法而言,這無關緊要。

4。帶泄漏的Relu函數Leaky Relu
在這裏插入圖片描述

Leaky Relu函數的導數爲
在這裏插入圖片描述

在軟件中實現Relu算法,如果z正好爲0,可以令其導數爲1或者爲0.01。

掌握好以上的公式,你就可以計算出這些激活函數的斜率(導數)。

3.9 神經網絡的梯度下降法 Gradient descent for neural networks

本節將介紹NN梯度下降法或者說反向傳播的具體實現。

對於單隱藏層的NN4個 正向計算公式 如下

Z[1]=W[1]A[0]+b[1]Z^{[1]}=W^{[1]}A^{[0]}+b^{[1]}
A[1]=g[1](Z[1])A^{[1]}=g^{[1]}(Z^{[1]})
Z[2]=W[2]A[1]+b[2]Z^{[2]}=W^{[2]}A^{[1]}+b^{[2]}
A[2]=g[2](Z[2])A^{[2]}=g^{[2]}(Z^{[2]})

g[1]g^{[1]}選用tanh函數,g[2]g^{[2]}選用σ\sigma函數。

公式中包含了W[1]W^{[1]}W[2]W^{[2]}b[1]b^{[1]}b[2]b^{[2]}這些參數。
我們用n[0]表示輸入特徵個數,n[1]表示隱藏層單元個數,n[2]表示輸出層單元個數,而本例中n[2]=1。

所以

  • 矩陣W[1]W^{[1]}的維度是(n[1],n[0])。
  • 矩陣b[1]b^{[1]}的維度是(n[1],1),它是個列向量。
  • 矩陣W[2]W^{[2]}的維度是(n[2],n[1])。
  • 矩陣b[2]b^{[2]}的維度是(n[2],1)。

二分類NN網絡的 成本函數公式 如下,它是損失函數的平均值

J(W[1],b[1],W[2],b[2])=1mi=1mL(y^,y)J(W^{[1]},b^{[1]},W^{[2]},b^{[2]})=\frac 1m \sum_{i=1}^mL(\hat y,y)

這裏的損失函數和之前邏輯迴歸完全一樣。

如果要訓練參數,你的算法需要梯度下降。在訓練NN時候,初始化參數不是爲零,而是隨機初始化參數很重要。


當你參數初始化成某些值後,每次梯度下降循環都會計算預測值y^(i)\hat y^{(i)},i=1…m。

然後再計算成本函數對參數的導數dW[1]=dJdW[1]dW^{[1]}=\frac{dJ}{dW^{[1]}}db[1]=dJdb[1]db^{[1]}=\frac{dJ}{db^{[1]}}dW[2]=dJdW[2]dW^{[2]}=\frac{dJ}{dW^{[2]}}db[2]=dJdb[2]db^{[2]}=\frac{dJ}{db^{[2]}}

最後,參數會更新爲

W[1]=W[1]αdW[1]W^{[1]}=W^{[1]}-\alpha dW^{[1]}
b[1]=b[1]αdb[1]b^{[1]}=b^{[1]}-\alpha db^{[1]}
W[2]=W[2]αdW[2]W^{[2]}=W^{[2]}-\alpha dW^{[2]}
b[2]=b[2]αdb[2]b^{[2]}=b^{[2]}-\alpha db^{[2]}

α\alpha是學習率。


以上就是梯度下降算法的一次迭代計算過程。你會重複很多次這樣的過程,直到參數看上去在收斂。

前面幾節已經詳細介紹過如何通過向量化計算預測值y^\hat y。現在來看看如何計算偏導dW[1]dW^{[1]},db[1]db^{[1]},dW[2]dW^{[2]},db[2]db^{[2]}

按照反向傳播過程,6個計算公式如下

(1)dZ[2]=A[2]YdZ^{[2]}=A^{[2]}-Y
(2)dW[2]=1mdZ[2]A[1]TdW^{[2]}=\frac 1mdZ^{[2]}A^{[1]T}
(3)db[2]=1mnp.sum(dZ[2],axis=1,keepdims=True)db^{[2]}=\frac 1mnp.sum(dZ^{[2]},axis=1,keepdims=True),這是對矩陣的一個維度求和。axis=1表示水平求和;keepdims=True防止輸入秩爲1的數組,確保輸出維度是(n[2],1),其實本例中這裏是一個實數,因爲n[2]=1,二分類輸出預測值只可能是1個,非0即1。
(4)dZ[1]=W[2]TdZ[2]g[1](Z[1])dZ^{[1]}=W^{[2]T}dZ^{[2]}*g^{[1]'}(Z^{[1]})g[1]g^{[1]'}是隱藏層激活函數的導數;符號*表示逐個元素乘積。W[2]TdZ[2]W^{[2]T}dZ^{[2]}是n[1] x m矩陣;逐個元素導數g[1](Z[1])g^{[1]'}(Z^{[1]})也是n[1] x m矩陣。
(5)dW[1]=1mdZ[1]A[0]TdW^{[1]}=\frac 1mdZ^{[1]}A^{[0]T}
(6)db[1]=1mnp.sum(dZ[1],axis=1,keepdims=True)db^{[1]}=\frac 1mnp.sum(dZ^{[1]},axis=1,keepdims=True),這裏輸出的是(n[1],1)維度的向量。

矩陣Y是1 x m維度,所有樣本標籤值橫向堆疊起來。Y=[y(1)y(2)......y(m)]Y=[y^{(1)}y^{(2)}......y^{(m)}]
我們也可以用reshape替代keepdims=True,這個在前面已經介紹過。

這裏只是直接給出了反向傳播的公式,在下一節中會介紹如何推導出這6個公式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章