2020-5-13 吴恩达-NN&DL-w4 深层NN(4.6 前向和反向传播(以3层NN实现为例))

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[l1]+b[l]z^{[l]}=W^{[l]}a^{[l-1]}+b^{[l]}
a[l]=g[l](z[l])a^{[l]}=g^{[l]}(z^{[l]})
输入特征x=a[0]x=a^{[0]}

向量化实现

Z[l]=W[l]A[l1]+b[l]Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}
A[l]=g[l](Z[l])A^{[l]}=g^{[l]}(Z^{[l]})
输入特征集合X=A[0]X=A^{[0]}

反向传播

第l层输入da[l],输出da[l-1],dz[l],dW[l]和db[l]

反向传播的步骤

dz[l]=da[l]g[l](z[l])dz^{[l]}=da^{[l]}\ast g^{[l]'}(z^{[l]})
dW[l]=dz[l]a[l1]dW^{[l]}=dz^{[l]}a^{[l-1]}
db[l]=dz[l]db^{[l]}=dz^{[l]}
da[l1]=W[l]Tdz[l]da^{[l-1]}=W^{[l]T}dz^{[l]}

3.9 神经网络的梯度下降法曾经给出过单隐层NN的dz公式

dz[l]=W[l+1]Tdz[l+1]g[l](z[l])dz^{[l]}=W^{[l+1]T}dz^{[l+1]}∗g^{[l]′}(z^{[l]})

注意,其实2个公式是一致的。

向量化实现

dZ[l]=dA[l]g[l](Z[l])dZ^{[l]}=dA^{[l]}\ast g^{[l]'}(Z^{[l]})
dW[l]=1mdZ[l]A[l1]TdW^{[l]}=\frac 1m dZ^{[l]}A^{[l-1]T}
db[l]=1mnp.sum(dZ[l],axis=1,keepdims=True)db^{[l]}=\frac 1m np.sum(dZ^{[l]},axis=1,keepdims=True)
dA[l1]=W[l]TdZ[l]dA^{[l-1]}=W^{[l]T}dZ^{[l]}

汇总

输入X

  • 第一层使用修正线性单元激活函数Relu
  • 第二层使用另外一个Relu函数
  • 第三层使用sigmoid函数(如果是二分分类)
  • 输出预测值y^\hat y
  • 计算损失L(y^,y)L(\hat y,y)
    在这里插入图片描述

然后开始向后迭代,反向传播求导

  • 使用保存的 z[l]z^{[l]}来计算dW[3]db[3]dW[2]db[2]dW[1]db[1]dW^{[3]},db^{[3]},dW^{[2]},db^{[2]},dW^{[1]},db^{[1]}
  • 依次回传da[3]da[2]da[1]da^{[3]},da^{[2]},da^{[1]}

以上就是一个3层NN的前向和反向传播。

前向传播,我们使用输入数据X来初始化。
对于逻辑回归的反向传播,初始化使用的是
dA[l]=(y(1)a(1)+1y(1)1a(1)......y(m)a(m)+1y(m)1a(m))dA^{[l]}=(-\frac {y^{(1)}}{a^{(1)}}+\frac {1-y^{(1)}}{1-a^{(1)}}......-\frac {y^{(m)}}{a^{(m)}}+\frac {1-y^{(m)}}{1-a^{(m)}})

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