深度学习系列6:卷积神经网络的反向传播
引言
卷积神经网络一般会借助 TensorFlow 或者 PaddlePaddle 来开发,仅需要开发正向传播,反向传播会自动生成,所以一般不要求掌握。但是技多不压身,今天我们就一起聊一下卷积神经网络的反向传播。
一、卷积神经网络
如图所示,卷积神经网络先由若干个卷积和池化层进行局部特征识别和降维,之后再用若干全连接层去分类。
- 每个卷积层+池化层作为一组,提取局部特征并降低维度
- 经过几组后,图像维度为{W: 1, H: 1, C: n}
- 将图像 n 个渠道作为全连接层的输入,相当于 n 个维度
- 如果有 m 张图像,则全连接层的输入矩阵为
- 之后就和深度学习一样了,经过隐藏层和输出层,计算
二、卷积神经网络的反向传播
全连接层的反向传播我们在深度学习中已经讨论过,这里只需要讨论卷积层和池化层的反向传播,最后我们把整个卷积神经网络的反向传播串起来。
2.1 卷积层的反向传播
先回顾一下卷积运算:
这里 W 表示卷积核, 表示卷积运算(对应相乘加和)
看一个例子。
根据卷积运算:
计算反向传播时,我们已知 ,分别求 , 和 。
2.1.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 求解
dW 为 A 的每个区域和 dZ 对应元素的乘积,然后累加到 filter 上。
-
粉色区域的累加后
-
灰色区域累加后
-
全部累加后的 dW
-
最终的 dW
考虑到有 m 个样本,所以最终的 dW 还需要在叠加后再除以 m。
2.1.3 求解
- 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 是个什么东西,数学中的各种分布应该怎么理解等等,我们下个系列再会。
欢迎关注本人公众号《大数据茶馆》,用大白话畅聊大数据。
来的都是客,欢迎您常来坐坐~