日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

4.6 前向和反向传播-深度学习-Stanford吴恩达教授

發布時間:2025/4/5 pytorch 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。