引言
卷积神经网络一般会借助 TensorFlow 或者 PaddlePaddle 来开发,仅需要开发正向传播,反向传播会自动生成,所以一般不要求掌握。但是技多不压身,今天我们就一起聊一下卷积神经网络的反向传播。
一、卷积神经网络
如图所示,卷积神经网络先由若干个卷积和池化层进行局部特征识别和降维,之后再用若干全连接层去分类。
- 每个卷积层+池化层作为一组,提取局部特征并降低维度
- 经过几组后,图像维度为{W: 1, H: 1, C: n}
- 将图像 n 个渠道作为全连接层的输入,相当于 n 个维度
- 如果有 m 张图像,则全连接层的输入矩阵为 X n ∗ m X_{n*m} Xn∗m
- 之后就和深度学习一样了,经过隐藏层和输出层,计算 y ^ \hat y y^
二、卷积神经网络的反向传播
全连接层的反向传播我们在深度学习中已经讨论过,这里只需要讨论卷积层和池化层的反向传播,最后我们把整个卷积神经网络的反向传播串起来。
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} ⎣⎡a11a12a13a21