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))