CNN 卷积神经网络(中):基本卷积函数的变体

神经网络中的卷积

Posted by Xiaosheng on June 4, 2017

本文内容摘取自 《Deep Learning》,部分内容有修改。

1. 神经网络中的卷积

当我们提到神经网络中的卷积时,通常是指由多个并行卷积组成的运算。因为具有单个核的卷积只能提取一种类型的特征,而我们通常希望网络的每一层能够在多个位置提取多种类型的特征。

另外,输入通常也不仅仅是实值的网格,而是由一系列观测数据的向量构成的网格。例如,一幅彩色图像在每一个像素点都会有红绿蓝三种颜色的亮度。在多层卷积网络中,通常在每个位置包含多个不同卷积的输出。当处理图像时,我们通常把卷积的输入输出都看作是 3 维的张量,其中一个索引用于标明不同的通道(例如红绿蓝),另外两个索引标明在每个通道上的空间坐标。

因为卷积网络通常使用多通道的卷积,所以即使使用了核翻转,也不一定保证网络的线性运算是可交换的。只有当其中的每个运算的输出和输入具有相同的通道数时,这些多通道的运算才是可交换的。

2. 下采样卷积

假定我们有一个 $4$ 维的核张量 $\mathbf{K}$,它的每一个元素是 $K_{i,j,k,l}$,表示输出中处于通道 $i$ 的一个单元和输入中处于通道 $j$ 中的一个单元的连接强度,并且在输出单元和输入单元之间有 $k$ 行 $l$ 列的偏置。假定我们的输入由观测数据 $\mathbf{V}$ 组成,它的每一个元素是 $V_{i,j,k}$,表示处在通道 $i$ 中第 $j$ 行第 $k$ 列的值。假定我们的输出 $\mathbf{Z}$ 和输入 $\mathbf{V}$ 具有相同的形式。如果输出 $\mathbf{Z}$ 是通过对 $\mathbf{K}$ 和 $\mathbf{V}$ 进行卷积而不涉及翻转 $\mathbf{K}$ 得到 的,那么:

这里对所有的 $l$、$m$ 和 $n$ 进行求和是对所有(在求和式中)有效的张量索引的值进行求和。在线性代数中,向量的索引通常从 $1$ 开始,这就是上述公式中 $−1$ 的由来。

我们有时会希望跳过核中的一些位置来降低计算的开销(相应的代价是提取的特征没有先前那么好了)。我们可以把这一过程看作是对全卷积函数输出的下采样(downsampling)。如果我们只想在输出的每个方向上每间隔 $s$ 个像素进行采样,那 么我们可以定义一个下采样卷积函数 $c$ 使得:

我们把 $s$ 称为下采样卷积的步幅(stride)。当然也可以对每个移动方向定义不同的步幅。例如:

1

图中的例子步幅为二,(上)在单个操作中实现的步幅为二的卷积。(下)步幅大于一个像素的卷积在数学上等价于单位步幅的卷积随后下采样。显然,涉及下采样的两步法在计算上是浪费的,因为它计算了许多将被丢弃的值。

3. 对输入边缘的处理

在任何卷积网络的实现中都有一个重要性质,那就是能够隐含地对输入 $\mathbf{V}$ 用零进行填充使得它加宽。如果没有这个性质,表示的宽度在每一层就会缩减,缩减的幅度比核少一个像素。如果没有零填充,我们要么选择网络空间宽度的快速缩减,要么选择一个小型的核——这两种情境都会极大得限制网络的表示能力。

2

例如上图所示的卷积网络,每层有一个宽度为六的核(只考虑卷积操作缩小网络的大小)。(上) 不使用任何隐含的零填充,每层缩小五个像素。可以使用较小的核来减缓收缩速率,但是较小的核表示能力不足,并且在这种结构中一些收缩是不可避免的。(下) 通过向每层添加五个隐含的零来防止表示随深度收缩,这允许我们设计一个任意深的卷积网络。

常见的零填充有三种:

  • 有效(valid)卷积:完全不使用零填充,卷积核只允许访问那些图像中能够完全包含整个核的位置。输出的所有像素都是输入中相同数量像素的函数,这使得输出像素的表示更加规范。但是输出的大小在每一层都会缩减,这限制了网络中能够包含的卷积层的层数。如果输入的图像宽度是 $m$,核的宽度是 $k$,那么输出的宽度就会变成 $m − k + 1$。如果卷积核非常大的话缩减率会非常显著。
  • 相同(same)卷积:只进行足够的零填充来保持输出和输入具有相同的大小。因为卷积运算不改变下一层的结构,所以网络能包含任意多的卷积层。但是输入像素中靠近边界的部分相比于中间部分对于输出像素的影响更小,这可能会导致边界像素存在一定程度的欠表示。
  • 全(full)卷积:进行足够多的零填充使得每个像素在每个方向上恰好被访问了 $k$ 次,最终输出图像的宽度为 $m + k − 1$。因为输出像素中靠近边界的部分相比于中间部分是更少像素的函数,所以很难学得一个在卷积特征映射的所有位置都表现不错的单核。全卷积的分类正确率通常处于 “有效卷积’’ 和 “相同卷积’’ 之间的某个位置。

4. 局部连接

在一些情况下,我们并不是真的想使用卷积,而是想用一些局部连接的网络层。在这种情况下,我们的多层感知机对应的邻接矩阵是相同的, 但每一个连接都有它自己的权重,用一个 $6$ 维的张量 $\mathbf{W}$ 来表示。$\mathbf{W}$ 的索引分别是: 输出的通道 $i$,输出的行 $j$ 和列 $k$,输入的通道 $l$,输入的行偏置 $m$ 和列偏置 $n$。局部连接层的线性部分可以表示为:

这有时也被称为非共享卷积(unshared convolution),因为它和具有一个小核的离散卷积运算很像,但并不横跨位置来共享参数。

下图展示了局部连接、卷积和全连接的区别。

3

(上)局部连接:每一接受域有两个像素的局部连接层,每条边都有自身的权重参数。(中)卷积:核宽度为两个像素的卷积层,模型与局部连接层具有完全相同的连接,但是参数是共享的,卷积层在整个输入上重复使用相同的两个权重。(下)全连接:全连接层类似于局部连接层,它的每条边都有其自身的参数,但是它不具有局部连接层的连接受限的特征。

当每一个特征都是一小块空间的函数并且相同的特征不会出现在所有的空间上时,局部连接层是很有用的。例如想要辨别一张图片是否是人脸图像时,只需要去寻找嘴是否在图像下半部分即可。

使用那些连接被更进一步限制的卷积或者局部连接层也是有用的。例如限制每一个输出的通道 $i$ 仅仅是输入通道 $l$ 的一部分的函数时,实现这种情况的一种通用方法是使输出的前 $m$ 个通道仅仅连接到输入的前 $n$ 个通道,输出的接下来的 $m$ 个通道仅仅连接到输入的接下来的 $n$ 个通道, 以此类推。下图给出了一个例子,卷积网络的前两个输出通道只和前两个输入通道相连,随后的两个输出通道只和随后的两个输入通道相连:

4

对少量通道间的连接进行建模允许网络使用更少的参数,这降低了存储的消耗以及提高了统计效率,并且减少了前向和反向传播所需要的计算量,而且这些目标的实现并没有减少隐藏单元的数目。

5. 平铺卷积

平铺卷积(tiled convolution)对卷积层和局部连接层进行了折衷。这里并不是对每一个空间位置的权重集合进行学习, 我们学习一组核使得当我们在空间移动时它们可以循环利用。这意味着在近邻的位置上拥有不同的过滤器,就像局部连接层一样,但是对于这些参数的存储需求仅仅会增长常数倍,这个常数就是核的集合的大小,而不是整个输出的特征映射的大小。 下图对局部连接、平铺卷积和标准卷积进行了比较:

5

当使用相同大小的核时(上图核宽度为两个像素),这三种方法在单元之间具有相同的连接,它们的区别在于如何共享参数。(上)局部连接根本没有共享参数。(中)平铺卷积有 $t$ 个不同的核,这里 $t = 2$。一个核具有标记为 $a$ 和 $b$ 的边,而另一个具有标记为 $c$ 和 $d$ 的边。每当在输出中右移一个像素后,就使用一个不同的核。这意味着,与局部连接层类似,输出中的相邻单元具有不同的参数。与局部连接层不同的是,在遍历所有可用的 $t$ 个核之后,又循环回到了第一个核。如果两个输出单元间隔 $t$ 个步长的倍数,则它们共享参数。(下) 传统卷积等效于 $t = 1$ 的平铺卷积。

用代数的方法定义平铺卷积,令 $\mathbf{K}$ 是一个 $6$ 维的张量,其中的两维对应着输出映射中的不同位置。$\mathbf{K}$ 在这里并没有对输出映射中的每一个位置使用单独的索引,输出的位置在每个方向上在 $t$ 个不同的核组成的集合中进行循环。如果 $t$ 等于输出的宽度,这就是局部连接层了。

这里百分号是取模运算。在每一维上使 用不同的 $t$ 可以很容易对这个方程进行扩展。

局部连接层与平铺卷积层都和最大池化有一些有趣的关联:这些层的探测单元都是由不同的过滤器驱动的。如果这些过滤器能够学会探测相同隐含特征的不同变换形式,那么最大池化的单元对于学得的变换就具有不变性。卷积 层对于平移具有内置的不变性。

6. 偏置项

卷积是一种线性运算,所以可以表示成矩阵乘法的形式(如果把输入张量变形为一个扁平的向量)。其中包含的矩阵是关于卷积核的函数,这个矩阵是稀疏的并且核的每个元素都复制给矩阵的多个元素。

一般来说,在卷积层从输入到输出的变换中不仅仅只用线性运算。我们一般也会在进行非线性运算前,对每个输出加入一些偏置项。这样就产生了如何在偏置项中共享参数的问题:

  • 对于局部连接层,很自然地对每个单元都给定它特有的偏置。
  • 对于平铺卷积,也很自然地用与核一样的平铺模式来共享参数。
  • 对于卷积层来说,通常的做法是在输出的每一个通道上都设置一个偏置,这个偏置在每个卷积映射的所有位置上共享。

如果输入是已知的固定大小,也可以在输出映射的每个位置学习一个单独的偏置。分离这些偏置可能会稍稍降低模型的统计效率,但同时也允许模型来校正图像中不同位置的统计差异。例如,当使用隐含的零填充时,图像边缘的探测单元接收到较少的输入,因此需要较大的偏置。

本文内容摘取自 《Deep Learning》,部分内容有修改。