序言
在深度学习的广阔领域中,卷积神经网络( CNN \text{CNN} CNN)以其卓越的特征提取能力,在图像识别、视频处理及自然语言处理等多个领域展现出非凡的潜力。而池化( Pooling \text{Pooling} Pooling)作为CNN中的关键组件之一,扮演着不可或缺的角色。池化层位于连续的卷积层之间,其主要目的是通过降低特征图的维度(即减少数据的空间大小),来减少网络中的参数数量和计算量,同时保留重要特征,有效防止过拟合,并增强模型的空间不变性。简而言之,池化是CNN实现高效学习与泛化能力的重要策略之一。
池化
- 卷积神经网络的卷积层通常包含三级(如图例1所示)。
- 在第一级中,卷积层并行地进行多个卷积运算来产生一组线性激活函数。
- 在第二级中,非线性的激活函数如整流线性单元函数等作用在第一级中的每一个线性输出上。这一级有时也被称为探测级 ( detector stage \text{detector stage} detector stage)。
- 在第三级中,我们使用池化函数 ( pooling function \text{pooling function} pooling function) 来更进一步地调整卷积层的输出。
- 池化函数使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出。
- 例如,最大池化 ( max pooling \text{max pooling} max pooling) 函数 ( Zhou and Chellappa, 1988 ‾ \underline{\text{Zhou and Chellappa, 1988}} Zhou and Chellappa, 1988) 给出相邻矩形区域内的最大值。
- 其他常用的池化函数包括相邻矩形区域内的平均值、 L 2 L^2 L2范数以及依靠据中心像素距离的加权平均函数。
- 不管采用什么样的池化函数,当输入作出少量平移时,池化能帮助我们的表示近似不变 (
invariant
\text{invariant}
invariant)。
- 对于平移的不变性是说当我们把输入平移一微小的量,大多数通过池化函数的输出值并不会发生改变。
- 图例2用了一个例子来说明这是如何实现的。
- 局部平移不变性是一个很重要的性质,尤其是当我们关心某个特征是否出现而不关心它出现的具体位置时。
- 例如,当判定一张图像中是否包含人脸时,我们并不需要知道眼睛的具体像素位置,我们只需要知道有一只眼睛在脸的左边,有一只在右边就行了。
- 但在一些其他领域,保存特征的具体位置却很重要。例如当我们想要寻找一个由两条边相交而成的拐角时,我们就需要很好地保存边的位置来判定它们是否相交。
- 使用池化可以看作是增加了一个无限强的先验:卷积层学得的函数必须具有对少量平移的不变性。当这个假设成立时, 池化可以极大地提高网络的统计效率。
- 池化对于空间区域具有平移不变性,但当我们对于分离参数的卷积输出进行池化时,特征能够学得应该对于哪种变换具有不变性(如图例3所示)。
- 因为池化综合了全部邻居的反馈,这使得池化单元少于探测单元成为可能,我们可以通过综合池化区域的
k
k
k个像素的统计特征而不是单个像素来实现。
- 图例4给出了一个例子。
- 这种方法提高了网络的计算效率,因为下一层少了约 k k k倍的输入。
- 当下一层的参数数目是其输入大小的函数时(例如当下一层是全连接的依赖矩阵乘法的网络层时),这种对于输入规模的减小也可以提高统计效率并且减少对于参数的存储需求。
- 在很多任务中,池化对于处理不同大小的输入具有重要作用。
- 例如我们想对不同大小的图像进行分类时,分类层的输入必须是固定的大小,而这通常通过调整池化区域的偏置大小来实现,这样分类层总是能接收到相同数量的统计特征而不管最初的输入大小了。
- 例如,最终的池化层可能会输出四组综合统计特征,每组对应着图像的一个象限,而与图像的大小无关。
- 一些理论工作对于在不同情况下应当使用哪种池化函数给出了一些指导(
Boureau et al., 2010
\text{Boureau et al., 2010}
Boureau et al., 2010)。
- 动态地把特征池化在一起也是可行的,例如,通过针对特定属性的位置运行聚类算法 ( Boureau et al., 2011 \text{Boureau et al., 2011} Boureau et al., 2011)。
- 这种方法对于每幅图像产生一个不同的池化区域集合。
- 另一种方法是先学习一个单独的池化结构,再应用到全部的图像中 ( Jia et al., 2012 \text{Jia et al., 2012} Jia et al., 2012)。
- 池化可能会使得一些利用自顶向下信息的神经网络结构变得复杂,例如玻尔兹曼机和自编码器。
- 这些问题将在后续篇章:深度学习研究中当我们遇到这些类型的网络时进一步讨论。
- 卷积玻尔兹曼机中的池化出现在篇章:深度生成模型 - 卷积玻尔兹曼机。
- 一些可微网络中需要的在池化单元中进行的类逆运算将在篇章:深度生成模型 - 有向生成网络之卷积生成网络中讨论。
- 图例5给出了一些使用卷积和池化操作的用于分类的卷积神经网络的完整结构的例子。
-
图例1:典型卷积神经网络层的组件。
-
典型卷积神经网络层的组件
-
说明:
- 有两组常用的术语用于描述这些层。
- (左图) 在这组术语中,卷积网络被视为少量相对复杂的层,每层具有许多“级”。在这组术语中,核张量与网络层之间存在一一对应关系。在本书中,我们通常使用这组术语。
- (右图) 在这组术语中,卷积网络被视为更大数量的简单层;每一个处理步骤都被认为是一个独立的层。这意味着不是每个“层”都有参数。
-
-
图例2:最大池化引入不变性。
-
最大池化引入不变性
-
说明:
- (上图) 卷积层中间输出的视图。下面一行显示非线性的输出。上面一行显示最大池化的输出,每个池的宽度为三个像素并且池化区域的步幅为一个像素。
- (下图) 相同网络的视图,不过对输入右移了一个像素。下面一行的所有值都发生了改变,但上面一行只有一半的值发生了改变,这是因为最大池化单元只对周围的最大值比较敏感,而不是对精确的位置。
-
-
图例3:学习不变性的示例。
-
学习不变性的示例
-
说明:
- 使用分离的参数学得多个特征,再使用池化单元进行池化,可以学得对输入的某些变换的不变性。
- 这里我们展示了用三个学得的过滤器和一个最大池化单元可以学得对旋转变换的不变性。
- 这三个过滤器都旨在检测手写的数字 5 5 5。
- 每个过滤器尝试匹配稍微不同方向的 5 5 5。
- 当输入中出现 5 5 5时,相应的过滤器会匹配它并且在探测单元中引起大的激活。
- 然后,无论哪个探测单元被激活,最大池化单元都具有大的激活。
- 我们在这里展示网络如何处理两个不同的输入,导致两个不同的探测单元被激活。
- 然而对池化单元的影响大致相同。这个原则在 maxout \text{maxout} maxout网络 ( Goodfellow et al., 2013b \text{Goodfellow et al., 2013b} Goodfellow et al., 2013b) 和其他卷积网络中使用。
- 空间位置上的最大池化对于平移是天然不变的;这种多通道方法只在学习其他变换时是必要的。
-
-
图例4:带有下采样的池化。
-
带有下采样的池化
-
说明:
- 这里我们使用最大池化,池的宽度为三并且池之间的步幅为二。
- 这使得表示的大小减少了一半,减轻了下一层的计算和统计负担。
- 注意到最右边的池化区域尺寸较小,但如果我们不想忽略一些探测单元的话就必须包含这个区域。
-
-
图例5:卷积网络用语分类的架构示例。
-
卷积网络用语分类的架构示例
-
说明:
- 本图中使用的具体步幅和深度并不适合实际使用;它们被设计得非常浅以适合页面。实际的卷积网络也常常涉及大量的分支,不同于这里为简单起见所使用的链式结构。
- (左图) 处理固定大小的图像的卷积网络。在卷积层和池化层几层交替之后,卷积特征映射的张量被重新整形以展平空间维度。网络的其余部分是一个普通的前馈网络分类器,如篇章:深度前馈网络系列所述。
- (中图) 处理大小可变的图像的卷积网络,但仍保持全连接的部分。该网络使用具有可变大小但是数量固定的池的池化操作,以便向网络的全连接部分提供 576 576 576个单位的固定大小的向量。
- (右图) 没有任何全连接权重层的卷积网络。相反,最后的卷积层为每个类输出一个特征映射。该模型可能学习每个类在每个空间位置出现的可能性的映射。将特征映射进行平均得到的单个值,提供了顶部 softmax \text{softmax} softmax分类器的变量。
-
总结
池化操作以其独特的下采样机制,在卷积神经网络中发挥着压缩数据和提取关键特征的重要作用。通过池化层, CNN \text{CNN} CNN能够在保持数据重要信息的同时,显著降低数据维度,提高处理速度,并增强模型对于图像平移、旋转等变换的鲁棒性。常见的池化方法包括最大池化( Max Pooling \text{Max Pooling} Max Pooling)和平均池化( Average Pooling \text{Average Pooling} Average Pooling),它们各自在保留特征和减少计算量方面展现出不同的优势。综上所述,池化作为 CNN \text{CNN} CNN架构中的精髓之一,不仅优化了网络性能,还极大地推动了深度学习技术在图像及视频处理领域的进步与发展。