NO.51.tip: 卷积过滤器

背景

引入卷积神经网络的一个动机是,图像数据是卷积神经网络处理的模态,由于其高维特性,标准的全连接架构将需要大量的参数。要了解这一点,考虑具有 像素的彩色图像,每个像素都有三个值分别对应于红色、绿色和蓝色的强度。如果网络的第一个隐藏层(简称第一层)有 1000 个隐藏单元,那么我们在第一层就已经有 个权重。此外,这样的网络必须通过示例来学习任何不变性和等变性,这将需要一些庞大的数据集。通过设计一个包含图像结构归纳偏置的架构,我们可以大大降低对数据集的要求,并提升模型关于图像空间对称性的泛化能力。

为了利用图像数据的二维结构来创建归纳偏置,我们可以使用 4 个相互关联的概念:层次性、局部性、等变性和不变性。在检测图像中人脸的任务中,存在一个自然的层次结构。因为一个图像可能包含几张人脸,每张人脸都包含眼睛等元素,而每只眼睛都有虹膜等结构,虹膜本身则具有边缘等结构。在层次结构的最低级别,神经网络中的节点可以使用图像小区域的局部信息来检测特征(例如边缘)的存在,因此只需要看到图像像素的一少部分即可。更复杂的结构可以通过组合在前层发现的多个特征来检测。然而,一个关键点是,尽管我们希望在模型中构建层次结构的一般概念,但我们希望包括在每个级别提取的特征类型在内的层次结构细节,都是从数据中学习的,而不是手动编码的。分层模型可以很自然地与深度学习框架结合,其已经能够通过一系列(可能非常多的)处理“层”从原始数据中提取非常复杂的概念。整个系统是端到端训练的。

源与流

特征检测器

为简单起见,我们最初将重点聚焦在灰度图像(即具有单个通道的图像)上。卷积神经网络第一层中的单个单元,该单元仅将图像中的一个小矩形区域或小块称为该单元的感受野(receptive field),它体现了局部性的概念。我们希望与此单元相关的权重值(简称权值)能够学习检测一些有用的低级特征。该单元的输出以函数的形式给出。该函数首先对输入值进行加权线性组合,然后使用非线性激活函数进行变换:

其中 是感受野的像素值向量,我们假设使用了 ReLU 激活函数。由于每个输入像素都有一个权重相关联,因此权重本身会形成一个小的称为滤波器(filter)的二维网格,有时也称核(kernel)。

假设式 (1) 中的 和 是固定的,我们想知道对于哪一个输入图像小块 ,这个隐藏单元将给出最大输出响应。为了回答这个问题,我们需要以某种方式约束 。假设它的范数 是固定的,那么对于某个系数 ,使 最大化并因此最大化隐藏单元响应的 的解的形式为 。也就是说,当检测到一个在整体缩放情况下像核图像的图像小块时,就会产生来自这个隐藏单元的最大输出响应。注意,只有当 超过 的阈值时,ReLU 才会生成非零输出。因此该隐藏单元充当了特征检测器的角色,它会在找到与其卷积核匹配足够好的图像小块时发出信号。

平移等变性

接下来请注意,如果人脸图像中的小块表示处在该位置的眼睛,则图像不同部分的同一组像素值表示新位置的眼睛。我们的神经网络需要能够将其在一个位置学到的知识泛化到图像中的所有可能位置,而不需要在训练集中在每个可能位置见过对应特征的示例。为了实现这一点,我们可以简单地在图像的多个位置复制相同的隐藏单元权值。

隐藏层的单元形成一个特征图(feature map),其中,所有单元共享相同的权重。因此,如果图像的局部小块在连接到该小块的单元中产生特定响应,则不同位置的同一组像素值将在特征图中的相应变换位置产生相同的响应。这是等变性(equivariance)的一个例子。可以看到这个网络中的连接是稀疏的(sparse),因为大多数连接不存在。此外,权值由所有隐藏单元共享,如连接的颜色所示。这一变换是卷积(convolution)的一个例子。

我们可以将卷积的想法扩展到二维图像(Dumoulin and Visin, 2016)。对于像素强度为 的图像 和像素值为 的滤波器 ,特征图 的激活值由下式给出:

为了清晰起见,我们省略了非线性激活函数。这也是卷积的一个例子,且有时可以写作 。请注意,严格来说,式 (2) 所示的操作应称为互相关(cross-correlation),它与卷积的传统数学定义略有不同,但在这里我们将遵循机器学习文献中的常见实践,并将式 (2) 所示的操作称为卷积。重要的是,当在卷积网络中使用批量归一化时,在归一化单元状态过程中,必须在特征图中的每个空间位置使用相同的均值和方差,以确保特征图的统计量与位置无关。

作为卷积应用的一个例子,考虑使用固定的、手工制作的卷积滤波器检测图像边缘的问题。直观地,可以认为垂直边缘是我们在图像上水平移动时,因像素之间的强度发生显著的局部变化而产生的。我们可以通过使用以下形式的 滤波器对图像进行卷积来测量这一点:

类似地,我们也可以使用此滤波器的转置来对图像进行卷积,从而检测图像的水平边缘:

通过将这种卷积结构与标准的全连接网络作比较,我们看到了前者的 3 个优点:首先,连接是稀疏的,即使对于较大的图像,权重也要少得多;其次,权值是共享的,大大减少了独立参数的数量,从而减小了学习这些参数所需的训练集大小;最后,相同的网络可以应用于不同大小的图像,而无需重新训练。我们稍后将重新讨论最后一点,但目前,你只需要注意,改变输入图像的大小只会更改特征图的大小,而不会改变模型中的权重数量或独立可学习参数的数量。关于卷积网络的最后一个观察是,通过利用图形处理单元(Graphics Processing Unit, GPU)高计算吞吐量的大规模并行特性,卷积在实现中计算效率非常高。

填充

卷积图比原始图像小。如果原始图像的维度为 ,并且我们用维度为 的核对其进行卷积(滤波器通常是正方形的),则生成的特征图的维度为 。在某些情况下,我们希望特征图具有与原始图像相同的尺寸。这可以通过在原始图像外部填充(padding)额外像素来实现。如果我们用 个像素填充原始图像,则输出的特征图的维度为 。如果没有对原始图像进行填充,即 ,则称为有效(valid)卷积。当选择的 值使得输出数组的大小与输入数组的大小相同时,对应于 ,则称为等大(same)卷积。在计算机视觉中,滤波器的 通常为奇数,因此填充可以在原始图像的所有边上对称进行,并且滤波器具有一个与位置关联的明确定义的中心像素。最后,我们需要为填充像素选择一个合适的强度值。典型的选择是将填充值设置为零(在先从每个图像中减去平均值之后),这样零就是像素强度的平均值。填充也可以应用于特征图,以便由后续卷积层处理。

跨步卷积

在典型的图像处理应用中,图像可以有非常多的像素,并且由于卷积核通常相对较小,因此 ,特征图的大小将与原始图像相似(如果进行等大填充,则大小相同)。有时,我们希望使用比原始图像小得多的特征图,以便在设计卷积网络时更灵活。实现此目的的一种方法是使用跨步卷积(strided convolution),即不再将滤波器一次移动一个像素,而是以较大的步长 移动滤波器。我们称 为步幅(stride)。如果在水平和竖直方向上使用相同的步幅,那么特征图中的元素数量为

其中 表示将 向下取整,得到小于或等于 的最大整数。对于大图像和小尺寸滤波器,特征图将是原始图像大小的 。

多维卷积

到目前为止,我们已经考虑了单个灰度图像上的卷积。彩色图像有三个通道,对应于红色、绿色和蓝色。通过扩展滤波器的维度,我们可以轻松地扩展卷积以支持多个通道。具有 个像素和 个通道的图像可以用维度为 的张量来描述。我们可以引入一个用维度为 的张量来描述的滤波器,该张量对于 个通道中的每一个通道,都有一个独立的 滤波器。假设对原始图像没有进行填充且步幅为 1,则同样可以得到大小为 的特征图。

下面让我们对卷积进一步进行重要扩展。目前,我们已经创建了单一的特征图,并且特征图中的所有点共享同一组可学习参数。对于维度为 的滤波器,无论图像大小如何,都将有 个权重参数。此外,还有一个与该单元相关的偏置参数。这种滤波器类似于全连接网络中的单个隐藏节点,它只能学习检测一种特征,因此作用非常有限。为了构建更灵活的模型,我们需要使用多个这样的滤波器,其中每个滤波器都有互不相关的参数集,从而产生独立的特征图。我们再次将这些独立的特征图称为通道(channel)。滤波器张量现在的维度为 ,其中 是输入通道数, 是输出通道数。每个输出通道都有自己的相关偏置参数,因此参数总数为 。

多维卷积滤波层可以扩展为包括多个独立的滤波通道。

设计卷积网络时的一个有用概念是 卷积(Lin, Chen, and Yan, 2013),它是一个滤波器大小为单个像素的卷积层。滤波器有 个权重(每个输入通道一个权重),外加一个偏置。 卷积通过将输出通道数设置为与输入通道数不同,可以简单地用来改变通道数(通常用来减少通道数),而不改变特征图的大小。因此,它是对跨步卷积或池化的补充,因为它减少了通道的数量而不是通道的维度。

池化

卷积层编码了平移等变性(equivariance),如果将一小块像素(代表隐藏单元的感受野)移动到图像中的不同位置,则特征图的关联输出将移动到特征图中的相应位置。这对于在图像中找到目标的位置等应用很有价值。对于其他应用,例如图像分类,我们希望在输入平移时,输出保持不变。然而,在所有情况下,我们都希望网络能够学习分层结构,其中特定级别的复杂特征是由前一级的简单特征构建而成的。在许多情况下,这些简单特征之间的空间关系非常重要。例如,眼睛、鼻子和嘴巴的相对位置有助于确定面部的存在,而非仅仅表明这些特征在图像中存在。但是,相对位置的微小变化不会影响分类,我们希望对单个特征的这种小平移保持输出不变。这可以通过在卷积层输出之后,应用池化(pooling)来实现。

池化与卷积有相似之处,因为单元阵列排列在网格中,且其中的每个单元都从前一个特征图的感受野中获取输入。此外,池化同样需要选择滤波器大小和步幅。然而,池化与卷积的不同之处在于,池化单元的输出是其输入的简单、固定的函数,因此池化中没有可学习参数。池化的一个常见示例是最大池化(max-pooling)(Zhou and Chellappa, 1988),其中每个单元仅输出对于输入值的“取最大值”函数。图 10.8 所示的简单示例说明了这一过程。这里的步幅等于滤波器的宽度,因此感受野没有重叠。

除了构建一些局部平移不变性外,池化通过对特征图下采样,还可用于降低表示的维度。注意,在卷积层中使用大于 1 的步幅也可以实现对特征图下采样的效果。

我们可以将特征图中单元的激活解释为检测相应特征强度的度量,因此最大池化保留了有关特征是否存在以及特征强度的信息,但丢弃了一些位置信息。池化还有许多其他选择,例如平均池化(average pooling),其中池化函数计算特征图中相应感受野值的平均值。这些都引入了一定程度的局部平移不变性。

池化通常独立地应用于特征图的每个通道。例如,如果我们有一个 8 通道的特征图,每个通道的维度为 ,应用感受野大小为 且步幅为 2 的最大池化,则池化运算的输出将是一个维度为 的张量。

我们还可以在特征图的多个通道中应用池化,这将使网络有潜力学习简单平移不变性之外的其他不变性。例如,如果卷积层中的多个通道学习检测不同方向上的相同特征,则这些特征图的最大池化将对于旋转变换(几乎)保持不变。

池化还允许卷积网络处理不同大小的图像。归根结底,卷积网络的输出,以及通常的一些中间层,必须具有固定尺寸。根据图像大小改变池化的步幅大小,可以使卷积网络适应可变大小的输入,以确保池化输出的数量保持不变。

多层卷积

到目前为止我们描述的卷积网络结构类似于标准全连接神经网络中的单层网络结构。为了允许网络发现和表示数据中的分层结构,现在我们通过使用多个上述类型的层来扩展架构。每个卷积层由维度为 的滤波器张量表示,其中独立权重和偏置参数的数量为 。每个这样的卷积层都允许我们选择在后续加上一个池化层。现在,我们可以连续应用多个这样的卷积层和池化层,其中某个层的输出通道 (类似于输入图像的 RGB 通道)形成下一层的输入通道。注意,特征图中的通道数有时称为特征图的“深度”,但我们更愿意用“深度”来表示多层网络中的层数。

卷积框架的一个关键性质是局部性,特征图中的给定单元仅从前一层的一小块(即感受野)中获取信息。当我们构建一个每一层都是卷积层的深度神经网络时,后面层中单元的有效感受野会比前面层中单元的有效感受野大得多。

在许多应用中,网络的输出单元需要预测图像整体的信息。例如在图像分类任务中,网络需要组合来自整个输入图像的信息。这通常是通过在网络的最后阶段引入一个或两个标准的全连接层来实现的,其中每个单元都连接到前一层中的每个单元。这种架构中的参数数量是可控的,因为中间池化层的存在,最终卷积层的维度通常比输入层的维度少得多。然而,即使网络中(共享的)连接数量比卷积层中的多,最终全连接层也可能包含网络中大多数独立自由度。

因此,一个完整的 CNN 包括多层卷积,这些卷积穿插着池化操作,并且通常在网络的最后阶段有传统的全连接层。在设计这样的架构时,需要做出许多选择,包括层数、每层中的通道数、滤波器尺寸、步幅大小以及多个其他此类超参数。在实践中,训练每个候选配置的计算成本很高,很难使用留出法对超参数的值进行系统的比较,研究人员为此探索了各种不同的架构。