深度学习系列6:卷积神经网络的反向传播

引言

卷积神经网络一般会借助 TensorFlow 或者 PaddlePaddle 来开发,仅需要开发正向传播,反向传播会自动生成,所以一般不要求掌握。但是技多不压身,今天我们就一起聊一下卷积神经网络的反向传播。

一、卷积神经网络

如图所示,卷积神经网络先由若干个卷积和池化层进行局部特征识别和降维,之后再用若干全连接层去分类。

深度学习系列6:卷积神经网络的反向传播

  1. 每个卷积层+池化层作为一组,提取局部特征并降低维度
  2. 经过几组后,图像维度为{W: 1, H: 1, C: n}
  3. 将图像 n 个渠道作为全连接层的输入,相当于 n 个维度
  4. 如果有 m 张图像,则全连接层的输入矩阵为 XnmX_{n*m}
  5. 之后就和深度学习一样了,经过隐藏层和输出层,计算 y^\hat y

二、卷积神经网络的反向传播

全连接层的反向传播我们在深度学习中已经讨论过,这里只需要讨论卷积层和池化层的反向传播,最后我们把整个卷积神经网络的反向传播串起来。

2.1 卷积层的反向传播

先回顾一下卷积运算:
A[l1]W[l]+b=Z[l] A^{[l-1]} * W^{[l]} + b = Z^{[l]}

这里 W 表示卷积核, * 表示卷积运算(对应相乘加和)

看一个例子。
[a11  a12  a13a21  a22  a23a31  a32  a33][w11  w12w21  w22]+b=[z11  z12z21  z22] \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}

根据卷积运算:

z11=a11w11+a12w12+a21w21+a22w22+bz12=a12w11+a13w12+a22w21+a23w22+bz21=a21w11+a22w12+a31w21+a32w22+bz22=a22w11+a23w12+a32w21+a33w22+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}

计算反向传播时,我们已知 dZ[l]dZ^{[l]},分别求 dA[l1]dA^{[l-1]}, dW[l]dW^{[l]}db[l]db^{[l]}

2.1.1 求解 dA[l1]dA^{[l-1]}

求解 dA 时与 b 无关,这里可以省略 b。

  • 正向传播

深度学习系列6:卷积神经网络的反向传播

  • 反向传播

思路:原路返回,叠加结果。

正向传播时 A 的粉色区域通过卷积核生成了 Z 的粉色区域 19。

反向传播时 dA 初始值为 0。

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

深度学习系列6:卷积神经网络的反向传播

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

深度学习系列6:卷积神经网络的反向传播

注意到粉色和灰色的重叠区域叠加即可。

最终经过循环 dZ 的每个元素,将结果在 dA 上叠加,得到最终的 dA。

深度学习系列6:卷积神经网络的反向传播

2.1.2 求解 dW[l]dW^{[l]}

dW 为 A 的每个区域和 dZ 对应元素的乘积,然后累加到 filter 上。

  • 粉色区域的累加后
    深度学习系列6:卷积神经网络的反向传播

  • 灰色区域累加后
    深度学习系列6:卷积神经网络的反向传播

  • 全部累加后的 dW
    深度学习系列6:卷积神经网络的反向传播

  • 最终的 dW

考虑到有 m 个样本,所以最终的 dW 还需要在叠加后再除以 m。

2.1.3 求解 db[l]db^{[l]}

  • db 为 dZ 各个元素的累加和,同样需要再除以样本数 m。

对于有 Padding,Stride 和多卷积核的反向传播运算都可以利用这一反向传播的思路求解。

2.2 池化层的反向传播

池化层主要有两种,分别是最大池化和平均池化。

2.2.1 最大池化的反向传播

回顾最大池化的正向传播,每个区域取最大的值。
深度学习系列6:卷积神经网络的反向传播

为了计算反向传播,首先需要记录在正向传播时 max 由哪个位置取得,比如上图粉色区域的 6 由 A 中粉色区域的第 2 行第 2 列取得。

深度学习系列6:卷积神经网络的反向传播

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

深度学习系列6:卷积神经网络的反向传播

2.2.2 平均池化的反向传播

回顾平均池化的正向传播,每个区域取平均值。
深度学习系列6:卷积神经网络的反向传播

反向传播时仅需要将 dZ 的每个元素平均分给相应区域即可。

深度学习系列6:卷积神经网络的反向传播

2.3 卷积神经网络的反向传播

我们将卷积神经网络分成两个阶段,卷积池化阶段和全连接阶段。

  • 全连接阶段的反向传播按照深度神经网络的反向传播逐层计算。
  • 卷积池化阶段的反向传播按照上文卷积和池化的反向传播逐层计。

由于卷积神经网络结构复杂, 收敛缓慢。所以每轮更新参数 W, b 时建议采用 Adam 的优化方法。

后记

深度学习系列暂时就先聊到这里了。

下个系列初步考虑聊统计学,比如数学中表示自然指数的 e 是个什么东西,数学中的各种分布应该怎么理解等等,我们下个系列再会。

欢迎关注本人公众号《大数据茶馆》,用大白话畅聊大数据。

来的都是客,欢迎您常来坐坐~

深度学习系列6:卷积神经网络的反向传播