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

引言

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

一、卷积神经网络

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

深度学习系列6:卷积神经网络的反向传播_第1张图片

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

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

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

2.1 卷积层的反向传播

先回顾一下卷积运算:
A [ l − 1 ] ∗ W [ l ] + b = Z [ l ] A^{[l-1]} * W^{[l]} + b = Z^{[l]} A[l1]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[l1], 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[l1]

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

  • 正向传播

深度学习系列6:卷积神经网络的反向传播_第2张图片

  • 反向传播

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

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

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

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

深度学习系列6:卷积神经网络的反向传播_第3张图片

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

深度学习系列6:卷积神经网络的反向传播_第4张图片

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

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

深度学习系列6:卷积神经网络的反向传播_第5张图片

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

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

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

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

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

  • 最终的 dW

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

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

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

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

2.2 池化层的反向传播

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

2.2.1 最大池化的反向传播

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

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

深度学习系列6:卷积神经网络的反向传播_第10张图片

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

深度学习系列6:卷积神经网络的反向传播_第11张图片

2.2.2 平均池化的反向传播

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

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

深度学习系列6:卷积神经网络的反向传播_第13张图片

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

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

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

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

后记

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

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

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

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

在这里插入图片描述

你可能感兴趣的:(机器学习,深度学习,机器学习,深度学习)