3.9 神经网络的梯度下降法-深度学习-Stanford吴恩达教授
| 3.8 激活函數的導數 | 回到目錄 | 3.10 直觀理解反向傳播 |
神經網絡的梯度下降法 (Gradient Descent for Neural Networks)
在這個視頻中,我會給你實現反向傳播或者說梯度下降算法的方程組,在下一個視頻我們會介紹為什么這幾個特定的方程是針對你的神經網絡實現梯度下降的正確方程。
你的單隱層神經網絡會有 W[1],b[1],W[2],b[2]W^{[1]},b^{[1]},W^{[2]},b^{[2]}W[1],b[1],W[2],b[2] 這些參數,還有 nxn_xnx? 個表示輸入特征的個數, n[1]n^{[1]}n[1] 表示隱藏單元個數, n[2]n^{[2]}n[2] 表示輸出單元個數。
在我們的例子中,我們只介紹過的這種情況,那么參數:
矩陣 W[1]W^{[1]}W[1] 的維度就是( n[1],n[0]n^{[1]},n^{[0]}n[1],n[0] ), b[1]b^{[1]}b[1] 就是 n[1]n^{[1]}n[1] 維向量,可以寫成( n[1],1n^{[1]},1n[1],1 ),就是一個的列向量。 矩陣 W[2]W^{[2]}W[2] 的維度就是( n[2],n[1]n^{[2]},n^{[1]}n[2],n[1] ), b[2]b^{[2]}b[2] 的維度就是( n[2],1n^{[2]},1n[2],1 )維度。
你還有一個神經網絡的成本函數,假設你在做二分類任務,那么你的成本函數等于:
Cost function: 公式: J(W[1],b[1],W[2],b[2])=1m∑i=1mL(y^,y)J(W^{[1]},b^{[1]},W^{[2]},b^{[2]})=\frac1m\sum_{i=1}^mL(\hat{y},y)J(W[1],b[1],W[2],b[2])=m1?∑i=1m?L(y^?,y) loss function和之前做logistic回歸完全一樣。
訓練參數需要做梯度下降,在訓練神經網絡的時候,隨機初始化參數很重要,而不是初始化成全零。當你參數初始化成某些值后,每次梯度下降都會循環計算以下預測值:y^,(i=1,2,...,m)\hat{y},(i=1,2,...,m)y^?,(i=1,2,...,m)
公式3.28: dW[1]=dJdW[1],db[1]=dJdb[1]dW^{[1]}=\frac{dJ}{dW^{[1]}},db^{[1]}=\frac{dJ}{db^{[1]}}dW[1]=dW[1]dJ?,db[1]=db[1]dJ?
公式3.29: dW[2]=dJdW[2],db[2]=dJdb[2]dW^{[2]}=\frac{dJ}{dW^{[2]}},db^{[2]}=\frac{dJ}{db^{[2]}}dW[2]=dW[2]dJ?,db[2]=db[2]dJ?
其中
公式3.30: W[1]?W[1]?αdW[1],b[1]?b[1]?αdb[1]W^{[1]}\Rightarrow W^{[1]}-\alpha dW^{[1]},b^{[1]}\Rightarrow b^{[1]}-\alpha db^{[1]}W[1]?W[1]?αdW[1],b[1]?b[1]?αdb[1]
公式3.31: W[2]?W[2]?αdW[2],b[2]?b[2]?αdb[2]W^{[2]}\Rightarrow W^{[2]}-\alpha dW^{[2]},b^{[2]}\Rightarrow b^{[2]}-\alpha db^{[2]}W[2]?W[2]?αdW[2],b[2]?b[2]?αdb[2]
正向傳播(forward propagation)方程如下:
(1) z[1]=W[1]x+b[1]z^{[1]}=W^{[1]}x+b^{[1]}z[1]=W[1]x+b[1]
(2) a[1]=σ(z[1])a^{[1]}=\sigma(z^{[1]})a[1]=σ(z[1])
(3) z[2]=W[2]a[1]+b[2]z^{[2]}=W^{[2]}a^{[1]}+b^{[2]}z[2]=W[2]a[1]+b[2]
(4) a[2]=g[2](z[2])=σ(z[2])a^{[2]}=g^{[2]}(z^{[2]})=\sigma(z^{[2]})a[2]=g[2](z[2])=σ(z[2])
反向傳播(backward propagation)方程如下:
公式3.32: dz[2]=A[2]?Y,Y=[y[1]y[2]?y[m]]dz^{[2]}=A^{[2]}-Y,Y=\left[\begin{matrix}y^{[1]} & y^{[2]} & \cdots & y^{[m]}\end{matrix}\right]dz[2]=A[2]?Y,Y=[y[1]?y[2]???y[m]?]
公式3.33: dW[2]=1mdz[2]A[1]TdW^{[2]}=\frac1mdz^{[2]}A^{[1]T}dW[2]=m1?dz[2]A[1]T
公式3.34: db[2]=1mnp.sum(dz[2],axis=1,keepdims=True)db^{[2]}=\frac1mnp.sum(dz^{[2]},axis=1,keepdims=True)db[2]=m1?np.sum(dz[2],axis=1,keepdims=True)
公式3.35: dz[1]=W[2]Tdz[2]?(n[1],m)?g[1]′?activationfunctionofhiddenlayer?(z[1])?(n[1],m)dz^{[1]}=\underbrace{W^{[2]T}dz^{[2]}}_{(n^{[1]},m)}*\underbrace{g^{[1]'}}_{activation\ function\ of\ hidden\ layer}*\underbrace{(z^{[1]})}_{(n^{[1]},m)}dz[1]=(n[1],m)W[2]Tdz[2]???activation?function?of?hidden?layerg[1]′???(n[1],m)(z[1])??
公式3.36: dW[1]=1mdz[1]xTdW^{[1]}=\frac1mdz^{[1]}x^TdW[1]=m1?dz[1]xT
公式3.37: db[1]?=1mnp.sum(dz[1],axis=1,keepdims=True)\underbrace{db^{[1]}}=\frac1mnp.sum(dz^{[1]},axis=1,keepdims=True)db[1]?=m1?np.sum(dz[1],axis=1,keepdims=True)
上述是反向傳播的步驟,注:這些都是針對所有樣本進行過向量化, YYY 是 1?m1*m1?m 的矩陣;這里np.sum是python的numpy命令,axis=1表示水平相加求和,keepdims是防止python輸出那些古怪的秩數 (n,)(n,)(n,) ,加上這個確保矩陣 db[2]db^{[2]}db[2] 這個向量輸出的維度為 (n,1)(n,1)(n,1) 這樣標準的形式。
目前為止,我們計算的都和Logistic回歸十分相似,但當你開始計算反向傳播時,你需要計算,是隱藏層函數的導數,輸出在使用sigmoid函數進行二元分類。這里是進行逐個元素乘積,因為 W[2]Tdz[2]W^{[2]T}dz^{[2]}W[2]Tdz[2] 和 (z[1])(z^{[1]})(z[1]) 這兩個都為 (n[1],m)(n^{[1]},m)(n[1],m) 矩陣;
還有一種防止python輸出奇怪的秩數,需要顯式地調用reshape把np.sum輸出結果寫成矩陣形式。
以上就是正向傳播的4個方程和反向傳播的6個方程,這里我是直接給出的,在下個視頻中,我會講如何導出反向傳播的這6個式子的。如果你要實現這些算法,你必須正確執行正向和反向傳播運算,你必須能計算所有需要的導數,用梯度下降來學習神經網絡的參數;你也可以許多成功的深度學習從業者一樣直接實現這個算法,不去了解其中的知識。
課程PPT
| 3.8 激活函數的導數 | 回到目錄 | 3.10 直觀理解反向傳播 |
總結
以上是生活随笔為你收集整理的3.9 神经网络的梯度下降法-深度学习-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3.8 激活函数的导数-深度学习-Sta
- 下一篇: 3.10 直观理解反向传播-深度学习-S