3.2.1 池化层
卷积层之间通常会周期性地存在一个池化层,我们可以将池化层视为对输入进行采样并逐渐降维的一种方式。这有助于防止过拟合,因为需要学习的参数量会变少,而且还有助于降低所需的计算能力。此外,这也有助于保持输入中的平移不变性。
1.步幅
步幅(stride)是每次使用卷积核卷积后移动权重的单元数。步幅必须大于1,其值通常在1~2之间。在我们的任务中,我们知道相邻像素间是高度相关的。因此,步幅太大会导致大量信息丢失。正如我们所说的,卷积的不同之处是在于我们将权重转移到输入上。为此,我们隐式地假定每次将权重移动1个像素,但没有人能保证这是最好的处理办法。这实际上是我们网络的一个参数——步幅。我们通常会为池化层选择一个大小为2的步幅和大小为2×2的核,对于不同的方向可以定义不同的步幅,在矩阵中向左或向下移动。
2.最大池化
最大池化(max pooling)是一个简单的运算,计算过程中使用核并仅保留核覆盖的输入区域的最大值。最大池化是最流行的池化方式,因为实践证明其效果比其他池化形式(如平均池化(average pooling)和L2范数池化(L2-norm pooling))更好。通常将一个2×2的过滤器和大小为2的步幅一起使用,如图3-7所示。
这个运算可以有效实现图像下采样,正如我们所说的,有助于防止过拟合(见图3-8)。
图3-9是一个下采样的很好示例。
图 3-7
图 3-8
图3-9 最大池化有效地完成下采样
3.零填充
使用卷积和池化时会面临的问题之一是会缩小正在处理的信号的大小。而深度网络具有数十层,所以我们不可能使用深度网络。而从实际操作中我们知道,最佳结果往往是通过大量数据和非常深的网络获得的。因此,找到一种在整个网络层中保持信号大小的方法非常重要。
零填充是一种人为增加信号大小的简单运算,它只在信号周围添加零值并且不影响最大池化运算,因为网络中的任何数字都肯定会大于或等于零,但它会增加输出的大小,如图3-10所示。
图3-10 零填充处理示例
填充的大小、核的大小以及步幅,将决定输出的大小。
如果用:
·W和H分别代表输入的宽和高
·Fw和Fh代表过滤器的宽和高
·P代表填充大小
·Sw和Sh代表沿宽度和高度维度的步幅
则下面的方程式可以计算卷积输出的精确大小: