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.5 搭建深层神经网络块 Building blocks of deep neural networks
我们已经了解了正向反向传播的基础组成部分,它们也是深度NN的重要组成部分,本节将介绍用它们建一个深度NN。
观察上图,这是一个层数较少的NN。
在第l层
- 参数是 W [ l ] W^{[l]} W[l]和 b [ l ] b^{[l]} b[l]。
- 正向传播的输入是 a [ l − 1 ] a^{[l-1]} a[l−1],即前一层的输出。
- 正向传播的输出是 a [ l ] a^{[l]} a[l]
所以l层每个节点的2步计算过程如下
z
[
l
]
=
W
[
l
]
a
[
l
−
1
]
+
b
[
l
]
z^{[l]}=W^{[l]}a^{[l-1]}+b^{[l]}
z[l]=W[l]a[l−1]+b[l]
a
[
l
]
=
g
[
l
]
(
z
[
l
]
)
a^{[l]}=g^{[l]}(z^{[l]})
a[l]=g[l](z[l])
我们可以把 z [ l ] z^{[l]} z[l]保存下来,因为它对于正向反向传播的步骤都非常有用。
接着看反向传播,同样在第l层
- 输入是 d a [ l ] da^{[l]} da[l],即后(右边)一层的输出。
- 输出是 d a [ l − 1 ] da^{[l-1]} da[l−1], d W [ l ] dW^{[l]} dW[l]和 d b [ l ] db^{[l]} db[l]
概念
正向函数
forward function:用作正向传播步骤的函数。
它在第l层的输入是
a
[
l
−
1
]
a^{[l-1]}
a[l−1],输出是
a
[
l
]
a^{[l]}
a[l],参数是
W
[
l
]
W^{[l]}
W[l]和
b
[
l
]
b^{[l]}
b[l]。同时,它还需要保存
z
[
l
]
z^{[l]}
z[l]。
反向函数
backward function:用作反向传播步骤的函数。
它在第l层的输入是激活函数的导数
d
a
[
l
]
da^{[l]}
da[l],输出是
d
a
[
l
−
1
]
da^{[l-1]}
da[l−1]。这里还会计算出
d
z
[
l
]
dz^{[l]}
dz[l],
d
W
[
l
]
dW^{[l]}
dW[l]和
d
b
[
l
]
db^{[l]}
db[l]。
实现了正向函数和反向函数后,NN的计算过程如下
正向传播步骤
- 把特征 a [ 0 ] a^{[0]} a[0]放入第一层,计算激活函数,输出 a [ 1 ] a^{[1]} a[1],保存 z [ 1 ] z^{[1]} z[1]
- 计算第二层激活函数,输出 a [ 2 ] a^{[2]} a[2],保存 z [ 2 ] z^{[2]} z[2]
- 后面几层依次类推
- 最后计算出第l层,也就是输出层的预测值 a [ l ] = y ^ a^{[l]}=\hat y a[l]=y^
反向传播步骤,包含一系列的反向迭代来计算反向梯度
- 在第l层输入 d a [ l ] da^{[l]} da[l],输出 d a [ l − 1 ] da^{[l-1]} da[l−1]和 d W [ l ] dW^{[l]} dW[l], d b [ l ] db^{[l]} db[l]
- 依次类推,直至第2层,输入 d a [ 2 ] da^{[2]} da[2],输出 d a [ 1 ] da^{[1]} da[1]和 d W [ 2 ] dW^{[2]} dW[2]和 d b [ 2 ] db^{[2]} db[2]
- 对于第1层,没有必要计算 d a [ 1 ] da^{[1]} da[1]。因为这是输入特征x的导数,对于训练监督学习的权重W没有必要
完成上述步骤,即最终完成了一次训练过程,现在我们得到了导数项dW和db,可以进行权重更新( α \alpha α是学习率)
W
[
l
]
=
W
[
l
]
−
α
d
W
[
l
]
W^{[l]}=W^{[l]}-\alpha dW^{[l]}
W[l]=W[l]−αdW[l]
b
[
l
]
=
b
[
l
]
−
α
d
b
[
l
]
b^{[l]}=b^{[l]}-\alpha db^{[l]}
b[l]=b[l]−αdb[l]
到这里为止,就实现了深度NN的一个梯度下降循环。
补充一点,编程时候注意事项:请把z,W和b的值保存下来,方便正向和反向计算。