1-9 池化层(Pooling layers)
池化层(Pooling layers)
除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性。
假如输入是一个 4×4 矩阵,用到的池化类型是最大池化( max pooling)。执行最大池化的树池是一个 2×2 矩阵。执行过程非常简单,把 4×4 的输入拆分成不同的区域,我把这个区域用不同颜色来标记。对于 2×2的输出,输出的每个元素都是其对应颜色区域中的最大元素值。
为了计算出右侧这 4 个元素值,我们需要对输入矩阵的 2×2 区域做最大值运算。这就像是应用了一个规模为 2 的过滤器,因为我们选用的是 2×2 区域,即$f = 2$,步幅是 2,即$s = 2$,这些就是最大池化的超参数。
最大化操作的功能就是只要在任何一个象限内提取到某个特征,它都会保留在最大化的池化输出里。所以最大化运算的实际作用就是,如果在过滤器中提取到某个特征,那么保留其最大值。如果没有提取到这个特征,可能在右上象限中不存在这个特征,那么其中的最大值也还是很小,这就是最大池化的直观理解。
我们来看一个有若干个超级参数的示例,输入是一个 5×5 的矩阵。我们采用最大池化法,它的过滤器参数为 3×3,即$f = 3$,步幅为 1,即$s = 1$,输出矩阵是 3×3。 之前讲的计算卷积层输出大小的公式同样适用于最大池化,即$\frac{{n + 2p - f}}{s} + 1$。
以上就是一个二维输入的最大池化的演示,如果输入是三维的,那么输出也是三维的。例如,输入是 5×5×2,那么输出是 3×3×2。计算最大池化的方法就是分别对每个通道执行刚刚的计算过程。一般来说,如果输入是:$5 \times 5 \times {n_c}$,输出就是:$3 \times 3 \times {n_c}$。${n_c}$个通道中每个通道都单独执行最大池化计算。
另外还有一种类型的池化,平均池化,它不太常用,这种运算顾名思义,选取的不是每个过滤器的最大值,而是平均值。
目前来说,最大池化比平均池化更常用。但也有例外,就是深度很深的神经网络,你可
以用平均池化来分解规模为 7×7×1000 的网络的表示层,在整个空间内求平均值,得到
1×1×1000。但在神经网络中,最大池化要比平均池化用得更多。
池化的超级参数包括过滤器大小f和步幅s常用的参数值为:
$f = 2$
$s = 2$
应用频率非常高,其效果相当于高度和宽度缩减一半。也有使用:
$f = 3$
$s = 2$
你也可以根据自己意愿增加表示padding 的其他超级参数,虽然很少这么用。最大池化时,往往很少用到超参数 padding,当然也有例外的情况。
最大池化很少用 padding。目前p最常用的值是 0,即:$p = 0$。
最大池化的输入就是:${n_H} \times {n_W} \times {n_c}$。
假设没有 padding,则输出:
$\left\lfloor {\frac{{{n_H} - f}}{s} + 1} \right\rfloor \times \left\lfloor {\frac{{{n_W} - f}}{s} + 1} \right\rfloor \times {n_c}$
输入通道与输出通道个数相同,因为我们对每个通道都做了池化。需要注意的一点是,池化过程中没有需要学习的参数。执行反向传播时,反向传播没有参数适用于最大池化。只有这些设置过的超参数,可能是手动设置的,也可能是通过交叉验证设置的。
最大池化只是计算神经网络某一层的静态属性,没有什么需要学习的,它只是一个静态属性。