池化是一种下采样操作,用于神经网络中,最突出的是在卷积神经网络(CNN)中。池化层将分散在许多向量中的信息聚合到更少的向量中,减少冗余以及所需的计算量和内存。它还增加了后续层中神经元的感受野,使模型对输入中的微小变化更加鲁棒。池化通常在卷积层之后应用,以逐步降低特征图的空间维度,同时保留最显著的信息。
在二维CNN中,池化层接受输入张量 \(x \in \mathbb{R}^{H \times W \times C}\),其中 \(H\) 是高度,\(W\) 是宽度,\(C\) 是通道数,并输出张量 \(y \in \mathbb{R}^{H' \times W' \times C'}\)。该操作由两个参数控制:滤波器大小(或核大小) \(f\) 和步幅 \(s\)。在某些情况下,水平和垂直方向使用不同的滤波器大小和步幅,分别记为 \(f_H, f_W, s_H, s_W\)。输出条目 \(y_{i,j,c}\) 的感受野是可能影响它的输入条目集合,通常是一个大小为 \(f \times f\) 的窗口,其中心位置由步幅决定。
最大池化
最大池化是最常见的池化变体。它从输入的每个窗口中选择最大值。形式上,对于滤波器大小 \(f\) 和步幅 \(s\),位置 \((i,j,c)\) 处的输出定义为:
\[\mathrm{MaxPool}(x|f,s)_{i,j,c} = \max(x_{is:is+f-1, js:js+f-1, c})\]
其中符号 \(is:is+f-1\) 表示从 \(is\) 到 \(is+f-1\) 的索引范围。如果水平和垂直步幅不同,该公式推广为 \(x_{i s_H : i s_H + f_H - 1, j s_W : j s_W + f_W - 1, c}\)。最大池化能有效保留每个局部区域中最强的激活,这有助于保留边缘或纹理等特征,同时丢弃不太重要的细节。
平均池化
平均池化计算每个窗口中所有值的均值,而不是最大值。它有时用于替代最大池化,特别是在分类输出之前的网络最后几层。平均池化平滑特征图,可以减少过拟合,但可能丢失锐利特征。全局平均池化是一种特殊情况,其中滤波器大小等于整个空间维度,每个通道输出单个值,常用于替代2010年代末架构中的全连接层,如网络设计。
在卷积架构中的作用
池化层是许多经典CNN架构的组成部分。例如,2012年推出的AlexNet模型在其第一、第二和第五个卷积层之后使用了最大池化。2014年开发的VGG网络在每个卷积层块之后采用了滤波器大小为2、步幅为2的最大池化。这些设计有助于将特征图的空间尺寸从224x224等维度减小到分类前的7x7,从而支持更深的网络和更少的参数。
替代方案和现代用法
在现代架构中,池化有时被步幅卷积替代,后者通过使用步幅大于1的卷积进行下采样。这种方法用于生成模型和某些基于Transformer的视觉系统等模型中,允许网络学习下采样操作,而不是使用固定规则。然而,由于其简单性和有效性,池化在许多实际实现中仍然常见。在Transformer架构中,池化不太核心,但全局平均池化仍用于某些视觉Transformer的分类头。
理论性质
池化在有限程度上提供平移不变性:由于它在局部窗口上聚合,如果最大值或平均值保持在窗口内,输入的小幅移动可能产生相同的输出。这一性质对物体识别等任务很有用,其中特征的确切位置不如其存在重要。感受野的增加意味着更深层中的神经元可以响应输入中更大的区域,使网络能够捕获层次模式。池化还通过减少后续层的参数和操作数量来降低计算成本,这对于在GPU和加速器等硬件上训练至关重要。