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
4.6 前向和反向傳播 Forward and backward propagation
上一節瞭解了構成深度NN的基本模塊,每一層都有前向傳播步驟以及一個相反的反向傳播步驟,本節將介紹如何實現這些步驟。
前向傳播
第l層輸入a[l-1],輸出a[l],保存z[l],W[l]和b[l]。
前向傳播的步驟
z[l]=W[l]a[l−1]+b[l]
a[l]=g[l](z[l])
輸入特徵x=a[0]
向量化實現
Z[l]=W[l]A[l−1]+b[l]
A[l]=g[l](Z[l])
輸入特徵集合X=A[0]
反向傳播
第l層輸入da[l],輸出da[l-1],dz[l],dW[l]和db[l]。
反向傳播的步驟
dz[l]=da[l]∗g[l]′(z[l])
dW[l]=dz[l]a[l−1]
db[l]=dz[l]
da[l−1]=W[l]Tdz[l]
在3.9 神經網絡的梯度下降法曾經給出過單隱層NN的dz公式
dz[l]=W[l+1]Tdz[l+1]∗g[l]′(z[l])
注意,其實2個公式是一致的。
向量化實現
dZ[l]=dA[l]∗g[l]′(Z[l])
dW[l]=m1dZ[l]A[l−1]T
db[l]=m1np.sum(dZ[l],axis=1,keepdims=True)
dA[l−1]=W[l]TdZ[l]
彙總
輸入X
- 第一層使用修正線性單元激活函數Relu
- 第二層使用另外一個Relu函數
- 第三層使用sigmoid函數(如果是二分分類)
- 輸出預測值y^
- 計算損失L(y^,y)
然後開始向後迭代,反向傳播求導
- 使用保存的 z[l]來計算dW[3],db[3],dW[2],db[2],dW[1],db[1]
- 依次回傳da[3],da[2],da[1]
以上就是一個3層NN的前向和反向傳播。
前向傳播,我們使用輸入數據X來初始化。
對於邏輯迴歸的反向傳播,初始化使用的是
dA[l]=(−a(1)y(1)+1−a(1)1−y(1)......−a(m)y(m)+1−a(m)1−y(m))