引言
卷积神经网络一般会借助 TensorFlow 或者 PaddlePaddle 来开发,仅需要开发正向传播,反向传播会自动生成,所以一般不要求掌握。但是技多不压身,今天我们就一起聊一下卷积神经网络的反向传播。
一、卷积神经网络
如图所示,卷积神经网络先由若干个卷积和池化层进行局部特征识别和降维,之后再用若干全连接层去分类。

- 每个卷积层+池化层作为一组,提取局部特征并降低维度
- 经过几组后,图像维度为{W: 1, H: 1, C: n}
- 将图像 n 个渠道作为全连接层的输入,相当于 n 个维度
- 如果有 m 张图像,则全连接层的输入矩阵为 X n ∗ m X_{n*m}Xn∗m
- 之后就和深度学习一样了,经过隐藏层和输出层,计算 y ^ \hat yy^
二、卷积神经网络的反向传播
全连接层的反向传播我们在深度学习中已经讨论过,这里只需要讨论卷积层和池化层的反向传播,最后我们把整个卷积神经网络的反向传播串起来。
2.1 卷积层的反向传播
先回顾一下卷积运算:
A [ l − 1 ] ∗ W [ l ] + b = Z [ l ] A^{[l-1]} * W^{[l]} + b = Z^{[l]}A[l−1]∗W[l]+b=Z[l]
这里 W 表示卷积核, ∗ *∗ 表示卷积运算(对应相乘加和)
看一个例子。
[ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] ∗ [ w 11 w 12 w 21 w 22 ] + b = [ z 11 z 12 z 21 z 22 ] \begin{bmatrix} a_{11}\;a_{12}\;a_{13} \\ a_{21}\;a_{22}\;a_{23} \\ a_{31}\;a_{32}\;a_{33}\end{bmatrix} * \begin{bmatrix}w_{11}\;w_{12}\\ w_{21}\;w_{22}\end{bmatrix} +b = \begin{bmatrix} z_{11}\;z_{12}\\ z_{21}\;z_{22} \end{bmatrix}⎣⎡a11a12a13a21a22a23a31a32a33⎦⎤∗[w11w12w21w22]+b=[z11z12z21z22]
根据卷积运算:
z 11 = a 11 w 11 + a 12 w 12 + a 21 w 21 + a 22 w 22 + b z 12 = a 12 w 11 + a 13 w 12 + a 22 w 21 + a 23 w 22 + b z 21 = a 21 w 11 + a 22 w 12 + a 31 w 21 + a 32 w 22 + b z 22 = a 22 w 11 + a 23 w 12 + a 32 w 21 + a 33 w 22 + b \begin{aligned} &z_{11} = a_{11}w_{11} + a_{12}w_{12} + a_{21}w_{21} + a_{22}w_{22} + b \\ &z_{12} = a_{12}w_{11} + a_{13}w_{12} + a_{22}w_{21} + a_{23}w_{22} + b \\ &z_{21} = a_{21}w_{11} + a_{22}w_{12} + a_{31}w_{21} + a_{32}w_{22} + b \\ &z_{22} = a_{22}w_{11} + a_{23}w_{12} + a_{32}w_{21} + a_{33}w_{22} + b \end{aligned}z11=a11w11+a12w12+a21w21+a22w22+bz12=a12w11+a13w12+a22w21+a23w22+bz21=a21w11+a22w12+a31w21+a32w22+bz22=a22w11+a23w12+a32w21+a33w22+b
计算反向传播时,我们已知 d Z [ l ] dZ^{[l]}dZ[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.1.1 求解 d A [ l − 1 ] dA^{[l-1]}dA[l−1]
求解 dA 时与 b 无关,这里可以省略 b。
- 正向传播

- 反向传播
思路:原路返回,叠加结果。
正向传播时 A 的粉色区域通过卷积核生成了 Z 的粉色区域 19。
反向传播时 dA 初始值为 0。
dZ 的粉色区域 -1 与 filter 相乘得到(2*2)的区域叠加到 dA 的相应粉色区域。

同样 dZ 的灰色区域 -2 与 filter 相乘得到(2*2)的区域叠加到 dA 的相应灰色区域。

注意到粉色和灰色的重叠区域叠加即可。
最终经过循环 dZ 的每个元素,将结果在 dA 上叠加,得到最终的 dA。

2.1.2 求解 d W [ l ] dW^{[l]}dW[l]
dW 为 A 的每个区域和 dZ 对应元素的乘积,然后累加到 filter 上。
粉色区域的累加后

灰色区域累加后

全部累加后的 dW

最终的 dW
考虑到有 m 个样本,所以最终的 dW 还需要在叠加后再除以 m。
2.1.3 求解 d b [ l ] db^{[l]}db[l]
- db 为 dZ 各个元素的累加和,同样需要再除以样本数 m。
对于有 Padding,Stride 和多卷积核的反向传播运算都可以利用这一反向传播的思路求解。
2.2 池化层的反向传播
池化层主要有两种,分别是最大池化和平均池化。
2.2.1 最大池化的反向传播
回顾最大池化的正向传播,每个区域取最大的值。
为了计算反向传播,首先需要记录在正向传播时 max 由哪个位置取得,比如上图粉色区域的 6 由 A 中粉色区域的第 2 行第 2 列取得。

在由 dZ 计算 dA 时,每个 dZ 的元素对应到 dA 的相应区域,在这个区域中,原来取过最大值的位置为 dZ 的元素的值,其他区域为 0。

2.2.2 平均池化的反向传播
回顾平均池化的正向传播,每个区域取平均值。
反向传播时仅需要将 dZ 的每个元素平均分给相应区域即可。

2.3 卷积神经网络的反向传播
我们将卷积神经网络分成两个阶段,卷积池化阶段和全连接阶段。
- 全连接阶段的反向传播按照深度神经网络的反向传播逐层计算。
- 卷积池化阶段的反向传播按照上文卷积和池化的反向传播逐层计。
由于卷积神经网络结构复杂, 收敛缓慢。所以每轮更新参数 W, b 时建议采用 Adam 的优化方法。
后记
深度学习系列暂时就先聊到这里了。
下个系列初步考虑聊统计学,比如数学中表示自然指数的 e 是个什么东西,数学中的各种分布应该怎么理解等等,我们下个系列再会。
欢迎关注本人公众号《大数据茶馆》,用大白话畅聊大数据。
来的都是客,欢迎您常来坐坐~
