池化是什么?在一小块区域里取个代表值来缩小特征图
池化(Pooling),也叫汇聚,是卷积神经网络中常用的一种操作:在特征图上划分出一个个小的区域,对每个区域内的数值进行汇总,只保留一个代表性的值,比如最大值或平均值。这样,特征图的尺寸就会缩小,同时保留下最重要的信息。
池化是怎么做的
以最常见的设置为例:用一个 2 乘 2 的窗口,每次移动 2 个位置,在特征图上滑动。窗口每停在一个位置,就对窗口内的 4 个数值进行汇总,得到一个数。这样,一张 100 乘 100 的特征图,经过池化之后就变成了 50 乘 50,面积缩小为原来的四分之一。池化是对每个通道分别独立进行的,不会改变通道的数量。而且池化层通常没有需要学习的参数,计算非常简单。
常见的池化方式
最大池化:取窗口内的最大值,这是最常用的方式。在卷积神经网络中,特征图上的数值大,通常意味着某个特征,比如一条边缘、一个角点,在这个位置被强烈地检测到了。最大池化保留下每个区域中数值最大的那个响应,相当于回答“这个区域里有没有出现这个特征”,而不太关心它具体出现在区域中的哪个位置。平均池化:取窗口内所有数值的平均值,它保留了区域内的整体信息,结果更加平滑。早期的 LeNet 等网络使用过平均池化。全局平均池化:把整张特征图上的所有数值取平均,每个通道只得到一个数。2013 年林敏等人提出的“网络中的网络”使用了全局平均池化来代替网络最后的全连接层,ResNet 等后来的网络也普遍采用了这种做法,它大大减少了参数的数量,降低了过拟合的风险。
池化的作用
降低计算量:缩小特征图的尺寸后,后续各层需要处理的数据量大大减少,计算更快,占用的内存也更少。扩大感受野:经过池化之后,后面的层中的每个神经元对应着原始图像中更大的一块区域,能够“看到”更大范围的内容,有助于识别更大、更抽象的结构。带来一定的平移不变性:当图像中的物体轻微地移动了一点位置时,最大池化的结果可能保持不变,因为窗口内的最大值仍然是那个值。这让网络对物体位置的微小变化不那么敏感,有助于识别。不过,这种不变性只在很小的范围内成立。减少过拟合:通过降低特征的维度、丢弃一些细节,池化在一定程度上起到了正则化的作用。
池化的局限和替代
池化也有缺点:它会丢失信息,尤其是关于特征精确位置的信息。对于图像分类这样只需要知道“有什么”的任务影响不大,但对于需要精确定位的任务,比如图像分割、目标检测中的边界框定位,位置信息的丢失可能会影响效果。杰弗里·辛顿就曾批评过最大池化丢弃了特征之间的空间关系,这也是他提出胶囊网络的动机之一。在现代的网络设计中,很多网络使用步长大于 1 的卷积来代替池化进行下采样:卷积层本身就能缩小特征图的尺寸,同时它的参数是可以学习的,网络可以自己决定如何汇总信息。在视觉 Transformer 等模型中,通常也不使用传统的池化层,而是在最后对所有图像块的表示进行平均,或者使用一个专门的分类标记来汇总信息。在自然语言处理中,也常用最大池化或平均池化,把一个句子中所有词的向量汇总成一个固定长度的句子向量。