4.6 前向和反向传播-深度学习-Stanford吴恩达教授
| 4.5 搭建深層神經網絡快 | 回到目錄 | 4.7 參數 vs. 超參數 |
前向和反向傳播 (Forward and Backward Propagation)
之前我們學習了構成深度神經網絡的基本模塊,比如每一層都有前向傳播步驟以及一個相反的反向傳播步驟,這次視頻我們講講如何實現這些步驟。
先講前向傳播,輸入 a[l?1]a^{[l-1]}a[l?1] ,輸出是 a[l]a^{[l]}a[l] ,緩存為 z[l]z^{[l]}z[l] ;從實現的角度來說我們可以緩存下 w[l]w^{[l]}w[l] 和 b[l]b^{[l]}b[l] ,這樣更容易在不同的環節中調用函數。
所以前向傳播的步驟可以寫成: z[l]=W[l]?a[l?1]+b[l]a[l]=g[l](z[l])z^{[l]}=W^{[l]}\cdot a^{[l-1]} + b^{[l]}\quad a^{[l]}=g^{[l]}(z^{[l]})z[l]=W[l]?a[l?1]+b[l]a[l]=g[l](z[l])
?
向量化實現過程可以寫成: Z[l]=W[l]?A[l?1]+b[l]A[l]=g[l](Z[l])Z^{[l]}=W^{[l]}\cdot A^{[l-1]} + b^{[l]}\quad A^{[l]}=g^{[l]}(Z^{[l]})Z[l]=W[l]?A[l?1]+b[l]A[l]=g[l](Z[l])
?
前向傳播需要喂入 A[0]A^{[0]}A[0] 也就是 XXX ,來初始化;初始化的是第一層的輸入值。 a[0]a^{[0]}a[0] 對應于一個訓練樣本的輸入特征,而 A[0]A^{[0]}A[0] 對應于一整 (m)(m)(m) 個訓練樣本的輸入特征,所以這就是這條鏈的第一個前向函數的輸入,重復這個步驟就可以從左到右計算前向傳播。
下面講反向傳播的步驟:
輸入為 da[l]da^{[l]}da[l] ,輸出為 da[l?1]da^{[l-1]}da[l?1] , dw[l]dw^{[l]}dw[l] , db[l]db^{[l]}db[l]
所以反向傳播的步驟可以寫成:
(1)dz[l]=da[l]cot?g[l]′(z[l])dz^{[l]}=da^{[l]}\cot g^{[l]^{\prime}}(z^{[l]})dz[l]=da[l]cotg[l]′(z[l])
(2)dw[l]=dz[l]?a[l?1]dw^{[l]}=dz^{[l]}\cdot a^{[l-1]}dw[l]=dz[l]?a[l?1]
(3)db[l]=dz[l]db^{[l]}=dz^{[l]}db[l]=dz[l]
(4)da[l?1]=w[l]T?dz[l]da^{[l-1]}=w^{[l]T}\cdot dz^{[l]}da[l?1]=w[l]T?dz[l]
(5)dz[l]=w[l+1]Tdz[l+1]?g[l](z[l])dz^{[l]}=w^{[l+1]T}dz^{[l+1]}\cdot g^{[l]}(z^{[l]})dz[l]=w[l+1]Tdz[l+1]?g[l](z[l])
式子(5)由式子(4)帶入式子(1)得到,前四個式子就可實現反向函數。
向量化實現過程可以寫成:
(6)dZ[l]=dA[l]?g[l]′(Z[l])dZ^{[l]}=dA^{[l]}\cdot g^{[l]^{\prime}}(Z^{[l]})dZ[l]=dA[l]?g[l]′(Z[l])
(7)dW[l]=1mdZ[l]?A[l?1]TdW^{[l]}=\frac1mdZ^{[l]}\cdot A^{[l-1]T}dW[l]=m1?dZ[l]?A[l?1]T
(8)db[l]=1mnp.sum(dz[l],axis=1,keepdims=True)db^{[l]}=\frac1mnp.sum(dz^{[l]}, axis=1, keepdims=True)db[l]=m1?np.sum(dz[l],axis=1,keepdims=True)
(9)dA[l?1]=W[l]T?dZ[l]dA^{[l-1]}=W^{[l]T}*dZ^{[l]}dA[l?1]=W[l]T?dZ[l]
總結一下:
第一層你可能有一個ReLU激活函數,第二層為另一個ReLU激活函數,第三層可能是sigmoid函數(如果你做二分類的話),輸出值為,用來計算損失;這樣你就可以向后迭代進行反向傳播求導來求 dw[3],db[3],dw[2],db[2],dw[1],db[1]dw^{[3]} ,db^{[3]} ,dw^{[2]} ,db^{[2]} ,dw^{[1]} ,db^{[1]}dw[3],db[3],dw[2],db[2],dw[1],db[1] 。在計算的時候,緩存會把 z[1]z[2]z[3]z^{[1]}\ z^{[2]}\ z^{[3]}z[1]?z[2]?z[3] 傳遞過來,然后回傳 da[2],da[1]da^{[2]},da^{[1]}da[2],da[1] ,可以用來計算 da[0]da^{[0]}da[0] ,但我們不會使用它,這里講述了一個三層網絡的前向和反向傳播,還有一個細節沒講就是前向遞歸——用輸入數據來初始化,那么反向遞歸(使用Logistic回歸做二分類)——對 A[l]A^{[l]}A[l] 求導。
忠告:補補微積分和線性代數,多推導,多實踐。
課程PPT
| 4.5 搭建深層神經網絡快 | 回到目錄 | 4.7 參數 vs. 超參數 |
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的4.6 前向和反向传播-深度学习-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4.5 搭建深层神经网络块-深度学习-S
- 下一篇: 4.7 参数 vs 超参数-深度学习-S