乐读窝

深度学习

乐读窝 > 文学理论 > 深度学习

9.3 池化

书籍名:《深度学习》    作者:伊恩.古德费洛



卷积网络中一个典型层包含三级(见图9.7)。在第一级中,这一层并行地计算多个卷积产生一组线性激活响应。在第二级中,每一个线性激活响应将会通过一个非线性的激活函数,例如整流线性激活函数。这一级有时也被称为探测级(detector  stage)。在第三级中,我们使用池化函数(pooling  funciton)来进一步调整这一层的输出。

图9.7 一个典型卷积神经网络层的组件。有两组常用的术语用于描述这些层。(左)在这组术语中,卷积网络被视为少量相对复杂的层,每层具有许多“级”。在这组术语中,核张量与网络层之间存在一一对应关系。在本书中,我们通常使用这组术语。(右)在这组术语中,卷积网络被视为更多数量的简单层;每一个处理步骤都被认为是一个独立的层。这意味着不是每一“层”都有参数

池化函数使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出。例如,最大池化(max  pooling)函数(Zhou  and  Chellappa,1988)给出相邻矩形区域内的最大值。其他常用的池化函数包括相邻矩形区域内的平均值、L2范数以及基于距中心像素距离的加权平均函数。

不管采用什么样的池化函数,当输入做出少量平移时,池化能够帮助输入的表示近似不变(invariant)。平移的不变性是指当我们对输入进行少量平移时,经过池化函数后的大多数输出并不会发生改变。图9.8用了一个例子来说明这是如何实现的。局部平移不变性是一个很有用的性质,尤其是当我们关心某个特征是否出现而不关心它出现的具体位置时。例如,当判定一张图像中是否包含人脸时,我们并不需要知道眼睛的精确像素位置,我们只需要知道有一只眼睛在脸的左边,有一只在右边就行了。但在一些其他领域,保存特征的具体位置却很重要。例如当我们想要寻找一个由两条边相交而成的拐角时,就需要很好地保存边的位置来判定它们是否相交。

图9.8 最大池化引入了不变性。(上)卷积层中间输出的视图。下面一行显示非线性的输出。上面一行显示最大池化的输出,每个池的宽度为三个像素并且池化区域的步幅为一个像素。(下)相同网络的视图,不过对输入右移了一个像素。下面一行的所有值都发生了改变,但上面一行只有一半的值发生了改变,这是因为最大池化单元只对周围的最大值比较敏感,而不是对精确的位置

使用池化可以看作增加了一个无限强的先验:这一层学得的函数必须具有对少量平移的不变性。当这个假设成立时,池化可以极大地提高网络的统计效率。

对空间区域进行池化产生了平移不变性,但当我们对分离参数的卷积的输出进行池化时,特征能够学得应该对于哪种变换具有不变性(见图9.9)。

图9.9 学习不变性的示例。使用分离的参数学得多个特征,再使用池化单元进行池化,可以学得对输入的某些变换的不变性。这里我们展示了用三个学得的过滤器和一个最大池化单元可以学得对旋转变换的不变性。这三个过滤器都旨在检测手写的数字5。每个过滤器尝试匹配稍微不同方向的5。当输入中出现5时,相应的过滤器会匹配它并且在探测单元中引起大的激活。然后,无论哪个探测单元被激活,最大池化单元都具有大的激活。我们在这里演示了网络如何处理两个不同的输入,这导致两个不同的探测单元被激活,然而对池化单元的影响大致相同。这个原则在maxout网络(Goodfellow  et  al.,2013b)和其他卷积网络中更有影响。空间位置上的最大池化对于平移是天然不变的。这种多通道方法只在学习其他变换时是必要的

因为池化综合了全部邻居的反馈,这使得池化单元少于探测单元成为可能,我们可以通过综合池化区域的k个像素的统计特征而不是单个像素来实现。图9.10给出了一个例子。这种方法提高了网络的计算效率,因为下一层少了约k倍的输入。当下一层的参数数目是关于那一层输入大小的函数时(例如当下一层是全连接的基于矩阵乘法的网络层时),这种对于输入规模的减小也可以提高统计效率并且减少对于参数的存储需求。

图9.10 带有降采样的池化。这里我们使用最大池化,池的宽度为三并且池之间的步幅为二。这使得表示的大小减少了一半,减轻了下一层的计算和统计负担。注意到最右边的池化区域尺寸较小,但如果我们不想忽略一些探测单元,就必须包含这个区域

在很多任务中,池化对于处理不同大小的输入具有重要作用。例如我们想对不同大小的图像进行分类时,分类层的输入必须是固定的大小,而这通常通过调整池化区域的偏置大小来实现,这样分类层总是能接收到相同数量的统计特征而不管最初的输入大小了。例如,最终的池化层可能会输出4组综合统计特征,每组对应着图像的一个象限,而与图像的大小无关。

一些理论工作对于在不同情况下应当使用哪种池化函数给出了一些指导(Boureau  et  al.,2010)。将特征一起动态地池化也是可行的,例如,对于感兴趣特征的位置运行聚类算法(Boureau  et  al.,2011)。这种方法对于每幅图像产生一个不同的池化区域集合。另一种方法是先学习一个单独的池化结构,再应用到全部的图像中(Jia  et  al.,2012)。

池化可能会使得一些利用自顶向下信息的神经网络结构变得复杂,例如玻尔兹曼机和自编码器。这些问题将在本书第3部分当我们遇到这些类型的网络时进一步讨论。卷积玻尔兹曼机中的池化出现在第20.6节。一些可微网络中需要的在池化单元上进行的类逆运算将在第20.10.6节中讨论。

图9.11给出了一些使用卷积和池化操作的用于分类的完整卷积网络结构的例子。

图9.11 卷积网络用于分类的结构示例。本图中使用的具体步幅和深度并不建议实际使用,因为它们被设计得非常浅以适合页面。实际的卷积网络还常常涉及大量的分支,不同于这里为简单起见所使用的链式结构。(左)处理固定大小的图像的卷积网络。在卷积层和池化层几层交替之后,卷积特征映射的张量被重新变形以展平空间维度。网络的其余部分是一个普通的前馈网络分类器,如第6章所述。(中)处理大小可变的图像的卷积网络,但仍保持全连接的部分。该网络使用具有可变大小但是数量固定的池的池化操作,以便向网络的全连接部分提供固定576个单位大小的向量。(右)没有任何全连接权重层的卷积网络。相对的,最后的卷积层为每个类输出一个特征映射。该模型可能会用来学习每个类出现在每个空间位置的可能性的映射。将特征映射进行平均得到的单个值,提供了顶部softmax分类器的变量