三、基本卷积的变体
3.1 局部连接
局部连接与卷积很类似:局部连接也是连接受限的,但是每个连接都有自己的权重。
即:局部连接实现了稀疏交互,但是没有实现参数共享。
假设局部连接的权重矩阵为一个 6 维的张量 ,其元素为 , 其中: 为输出的通道; 为输出通道中的位置; 为输入的通道; 为输入通道中的位置。
则局部连接可以表示为:
当权重共享时, ,此时局部连接操作退化到卷积操作。
局部连接也称作非共享卷积,因为它并不横跨位置来共享参数。
与基本卷积相比,权重参数由 。
这说明 中,不同位置的输出的计算过程中,采用了不同的权重。这意味着局部连接不满足输入的等变表示。
与全连接相比,局部连接实现了稀疏交互。
如果知道特征是一小部分区域的函数,而不是整个区域的函数时,局部连接层很有用。此时只需要处理部分输入即可。如:如果需要辨别一张图片是否人脸图像,则只需要在图像的下部中央部分寻找即可。
卷积也可以处理局部特征,但是对于不满足平移不变性的特征,卷积层无能为力。此时需要使用局部连接层。
在图片中识别是否存在人脸,这满足平移不变性,因此也可以使用卷积来处理。
有时候,可以进一步限制卷积层或者局部连接层。如:限制输出的通道 仅仅利用了一部分输入通道(而不是全部输入通道) 的数据。
这种方案减少了通道之间的连接,使得模型的参数更少,降低了存储消耗,减少了计算量。
3.2 拼接卷积
拼接卷积
tiled convolution
对卷积和局部连接进行了折中:学习一组核,使得当核在空间移动时,它们可以循环利用。- 拼接卷积在相邻的位置上拥有不同的过滤器,就像局部连接层一样。
- 拼接卷积每隔一定的位置,使用相同的过滤器,就像卷积层一样。
- 拼接卷积的参数仅仅会增长常数倍,常数就是过滤器集合的大小。
假设拼接卷积的权重矩阵为一个 6 维的张量 ,其元素为 , 其中: 为输出的通道; 为输出通道中的位置; 为输入的通道; 为输入通道中的位置。
则拼接卷积可以表示为:
这里百分号是取摸运算, 为不同的核的数量(它也就是核的轮换周期)。
- 如果 等于输入的尺寸,则拼接卷积退化成局部连接。
- 如果 等于 1 ,则拼接卷积退化成卷积。
通常在卷积层会引入非线性运算,而在非线性运算中,需要加入偏置项。
对于局部连接,每个输入单元都有各自的偏置。
对于拼接卷积,偏置项通过与核一样的拼接模式来共享。
对于常规卷积,通常在输入通道级别上共享偏置。即:同一个通道使用一个偏置项。
如果输入是固定大小的,也可以在每个输入位置上学习一个单独的偏置。其好处是:允许模型校正输入图像中不同位置的差异。
3.3 分组卷积
分组卷积
Group convolution
:将多个卷积核拆分为分组,每个分组单独执行一系列运算之后,最终在全连接层再拼接在一起。通常每个分组会在单独的
GPU
中训练,从而利用多GPU
来训练。分组卷积的重点不在于
卷积
,而在于分组
:在执行卷积之后,将输出的feature map
执行分组。然后在每个组的数据会在各个GPU
上单独训练。对卷积的输出
feature map
分组,等价于在卷积过程中对卷积核进行分组。
分组卷积在网络的全连接层才进行融合,这使得每个
GPU
中只能看到部分通道的数据,这降低了模型的泛化能力。如果每次分组卷积之后,立即融合卷积的结果则可以解决这个问题。
分组卷积降低了模型的参数数量以及计算量。
假设输入
feature map
具有 的输入通道、宽/高分别为 ,假设卷积核的宽/高分别为 ,有 个卷积核。则:- 参数数量:
- 计算量(以一次
乘-加
计算为单位):。 其中 分别为输出feature map
的宽/高
假设采用分组卷积,将输入通道分成了 组,则分组之后:
- 参数数量:
- 计算量(以一次
乘-加
计算为单位):
因此分组卷积的参数数量、计算量均为标准卷积计算的 。
考虑到全连接层的参数数量在网络中占据主导地位,因此即使采取分组卷积,网络最终的参数数量的减小幅度不会很大。
因此分组卷积主要降低的是计算量。
分组卷积最早在
AlexNet
中出现。由于当时的硬件资源的限制,训练AlexNet
时卷积操作无法全部放在同一个GPU
中处理。因此,通过分组来在多个GPU
上分别处理,然后将多个GPU
的处理结果融合。
3.4 小卷积核替代
在
AlexNet
中用到了一些非常大的卷积核,如11x11、5x5
等尺寸的卷积核。卷积核的尺寸越大,则看到的图片信息越多,因此获得的特征会越好。
但是卷积核的尺寸越大,模型的参数数量会爆涨,不利于模型的深度的增加,计算量和存储量也大幅上升。
卷积核的尺寸越小,模型的参数数量越少,模型可以越深。
但是卷积核的尺寸太小,则只能看到图片的一个非常小的局部区域,获得的特征越差。
一种解决方案是:用多个小卷积层的堆叠来代替较大的卷积核。
假设大卷积核的宽度是 ,则每经过一层,输出的宽度减少了 。假设希望通过 个宽度为 的小卷积核来代替,则为了保持输出的大小一致,需要满足:
当 时,即用尺寸为 3 的卷积核代替尺寸为 的卷积核时,有:
如:用 2 个
3x3
的卷积核来代替1个5x5
的卷积核。假设输入通道数为 ,输出通道数为 ,则
5x5
卷积核的参数数量为 ;而 2个
3x3
卷积核的参数数量为 ,是前者的 72% 。如果用 5 个
3x3
的卷积核来代替1个11x11
的卷积核,则替代后的卷积核的参数数量是替代前的 37% 。
用多个小卷积层的堆叠代替一个大卷积层的优点:
可以实现与大卷积层相同的感受野。
具有更大的非线性,网络表达能力更强。
虽然卷积是线性的,但是卷积层之后往往跟随一个
ReLU
激活函数。这使得多个小卷积层的堆叠注入了更大的非线性。具有更少的参数数量。
小卷积层堆叠的缺点是:加深了网络的深度,容易引发梯度消失等问题,从而使得网络的训练难度加大。
用多个小卷积层的堆叠代替一个大卷积层可以看作是一种正则化:要求大卷积核通过多个小卷积核进行分解(同时在小卷积层之间注入非线性)。
感受野:一个特定的
CNN
输出单元在输入空间所受影响的区域。上图中,染色的区域为某个输出单元的感受野。- 一个感受野可以用中心位置和大小来表示。
- 用多个小卷积核来代替大卷积核时,输出单元的感受野不会受到影响。
通常选择使用
3x3
卷积核的堆叠:1x1
的卷积核:它无法提升感受野,因此多个1x1
卷基层的堆叠无法实现大卷积层的感受野。2x2
的卷积核:如果希望输入的feature map
尺寸和输出的feature map
尺寸不变,则需要对输入执行非对称的padding
。此时有四种padding
方式,填充方式的选择又成了一个问题。3x3
的卷积核:可以提升感受野,对称性填充(不需要考虑填充方式),且尺寸足够小。
3.5 非对称卷积核
在卷积核分解过程中,还有一种分解方式:非对称卷积核分解,将
nxn
卷积替换为1xn
卷积和nx1
卷积。非对称卷积核的分解有以下优点:
感受野保持不变。
节省计算成本,尤其是当
n
较大时。假设输入通道数和输出通道数都为 ,原始卷积
nxn
的参数数量为: 。假设非对称卷积的
1xn
的输出通道数也是 ,则非对称分解时参数数量为: 。它是原始卷积的参数数量的 。
在
Inception v2
论文中作者指出:对于较大的特征图 ,这种分解不能很好的工作;但是对于中等大小的特征图(尺寸在12~20
之间),这种分解效果非常好。因此非对称卷积分解通常用在较高的网络层。
3.6 多尺寸卷积核
图像中目标对象的大小可能差别很大。如下图所示,每张图像中狗占据区域都是不同的。
由于信息区域的巨大差异,为卷积操作选择合适的卷积核尺寸就非常困难。
- 信息分布更具有全局性的图像中,更倾向于使用较大的卷积核。如最最侧的图片所示。
- 信息分布更具有局部性的图像中,更倾向于使用较小的卷积核。如最右侧的图片所示。
一个解决方案是:分别使用多个不同尺寸的卷积核从而获得不同尺度的特征。然后将这些特征拼接起来。
在
Inception
系列的网络中,大量使用这种思想。在最初版本的
Inception
结构中,一个输入图片会分别同时经过1x1,3x3,5x5
的卷积核的处理;得到的特征再组合起来。通过多种尺度的卷积核,无论感兴趣的信息区域尺寸多大,总有一种尺度的卷积核与之匹配。这样总可以提取到合适的特征。
多尺寸卷积核存在一个严重的问题:参数数量比单尺寸卷积核要多很多,这就使得计算量和存储量都大幅增长。
3.7 1x1 卷积核
1x1
卷积并不是复制输入,它会进行跨通道的卷积。它有三个作用:实现跨通道的信息整合。
进行通道数的升维和降维。
在不损失分辨率的前提下(即:
feature map
尺寸不变),大幅增加非线性。事实上
1x1
卷积本身是通道的线性组合,但是通常会在1x1
卷积之后跟随一个ReLU
激活函数。
假设输入张量为 ,即: 个通道、宽度为 、高度为 。
如果图片直接通过一个宽度为 ,高度为 、输出通道为 的卷积层,则参数数量为:
如果图片先通过一个
1x1
、输出通道为 的卷积层,再经过一个 、输出通道为 的卷积层;最后经过一个1x1
、输出通道为 的卷积层。这里中间卷积层的输出通道不一定为 ,但是一定是一个比 小的数。其作用是起到了信息压缩的作用(类似于
PCA
降维)。则参数数量为:
当 时(输入通道数与输出通道数接近), ,以及 。
则二者参数的数量比例为: 。因此后者的参数数量远远小于前者。
1x1
卷积层通常会形成瓶颈层bottleneck layer
。瓶颈层指的是网络中信息被压缩的层。输入
feature map
中每个元素值代表某个特征,将所有图片在该feature map
上的取值扩成为矩阵:其中 为样本的数量, 。即:行索引代表样本,列索引代表特征。所有特征由
feature map
展平成一维得到。通常 ,则输入矩阵 的秩 。假设输入矩阵 的秩为 。
不考虑
1x1
卷积的非线性层,则1x1
卷积是输入特征的线性组合。输出featuremap
以矩阵描述为:其中 。
信息膨胀过程:当 时, 的容量要大于 的信息,因此所有的有效信息都可以得到保留。
信息压缩过程:当 时, 的容量要小于 的信息,这时需要参考 的有效信息。
的有效信息由矩阵 的秩 决定。
当矩阵 是满秩时,即: ,此时对 的任何压缩都会丢失有效信息。
当矩阵 不是满秩时:
- 当 非常小时, 的容量要小于 的有效信息,此时会导致有效信息丢失。
- 当 较大时, 的容量要大于等于 的有效信息,此时不会丢失有效信息。这是
1x1
卷积相当于线性降维。
在前文提到的例子(示意图如下所示)中,输入
feature map
先经过1x1
卷积的压缩,这会导致该段信息容量的下降;然后经过常规卷积,此段信息容量不变;最后经过1x1
卷积的膨胀,恢复了信息容量。整体而言模型的信息容量很像一个
bottleneck
,因此1x1
卷积层也被称作瓶颈层。
事实上,不仅
1x1
卷积层会形成bottleneck
,任何会降低模型信息容量的层都会形成瓶颈。因此在卷积神经网络中,通常每经过一个卷积层,输出尺寸减半、输出通道数翻倍。
瓶颈层中的信息膨胀阶段不是必须存在,通常信息膨胀过程是为了保持整个瓶颈层的输入尺寸、输出尺寸满足某些约束。如:输出尺寸等于输入尺寸。
3.8 DepthWise 卷积
标准的卷积会考虑所有的输入通道,而
DepthWise
卷积会针对每一个输入通道进行卷积操作,然后接一个1x1
的跨通道卷积操作。DepthWise
卷积与分组卷积的区别在于:分组卷积是一种通道分组的方式,它改变的是对输入的
feature map
处理的方式。Depthwise
卷积是一种卷积的方式,它改变的是卷积的形式。Depthwise
分组卷积结合了两者:首先沿着通道进行分组,然后每个分组执行DepthWise
卷积。
假设输入张量为 ,即: 个通道、宽度为 、高度为 。
假设使用标准卷积,输入通道的数量为 ,输出通道的数量为 ,卷积核的尺寸为 。则需要的参数数量为 。
使用
Depthwise
卷积时,图像的每个通道先通过一个 的deptpwise
卷积层,再经过一个1x1
、输出通道为 的卷积层。参数数量为:
其参数数量是标准卷积的 。因此
depthwise
卷积的参数数量远远小于标准卷积。
DepthWise
卷积有几种变形的形式:- 只有对每个输入通道执行单通道卷积,没有后续的
1x1
的跨通道卷积。 - 对输入通道执行单通道卷积的结果执行
BN
和ReLU
,再后接1x1
的跨通道卷积。这会引入更多的非线性。
- 只有对每个输入通道执行单通道卷积,没有后续的
3.9 通道混洗分组卷积
在分组卷积中,特征的通道被平均分配到不同的分组中。如果融合的时刻非常靠后,则对模型的泛化性相当不利,因为如果能在早期知道其它通道的一些信息,则很可能得到更有效的特征。
通道混洗分组卷积在每一次分组卷积之后执行一次通道混洗,被混洗过的通道被分配到不同的分组中。
经过通道混洗之后,每个分组输出的特征能够考虑到更多的通道,因此输出特征的表达能力更强。
在
ShuffleNet
中,大量运用了这种通道混洗分组卷积。在
AlexNet
的分组卷积中,执行的是标准卷积操作。在
ShuffleNet
中,分组卷积执行的是deptiwise
卷积,从而使得参数更少。
3.10 通道加权卷积
在常规卷积中,各通道产生的特征都是不分权重直接结合的。通道加权卷积中,不同的通道具有不同的权重,各通道产生的特征经过加权之后再结合。
所用到的权重是输入的函数。
注意:因为卷积是线性过程,因此卷积计算的通道加权等价于对输入的
feature map
的通道加权。SEnet
(Squeeze-and-Excitation Networks
)网络大量使用通道加权卷积。在SEnet
中存在三个关键的操作:Squeeze
操作:沿着空间维度压缩特征,将每个二维的feature map
通道压缩成一个实数。该实数具有全局的感受野,表征了在该
feature map
通道上响应的全局分布。Excitation
操作:通过一个类似循环神经网络中的门机制,用一个sigmoid
激活函数的全连接层获取每个feature map
通道的权重。实际上,
Excitation
操作使用了两个全连接层来获取通道权重。Reweight
操作:将特征通道的权重通过乘法逐通道的加权到先前的feature map
上。
3.11 空洞卷积
在图像分割任务,图像输入到传统卷积层,然后再输入到池化层。由于图像分割是逐像素的输出,因此需要将池化层的输出(一个较小的尺寸)升采样(一般使用反卷积操作)到原始的图像尺寸来进行预测。
但是这里有几个问题:
- 升采样(如:线性插值) 是确定性的映射,无法学习(也没有参数要学习)。
- 在这个图像的先减少尺寸、再增大尺寸过程中,有一些信息损失。
- 小物体信息无法重建。假设有 4个池化层,每个池化层的尺寸为2、步长为2,理论上任何小于 个像素的物体信息将无法被重建。
解决方案是空洞卷积。
空洞卷积:对于空洞数为 的空洞卷积,卷积结果为:
它实际上等价于一个卷积核为 的新的卷积核,其中 为当前卷积核的大小。新的卷积核的特点是:每隔 个位置,权重非零;否则权重为零。另外首行、首列、尾行、尾列权重均为零。
称作膨胀比
dilation rate
。空洞卷积的优点:在不做池化损失信息的情况下,加大感受野,让每个卷积的输出都包含较大范围的信息。
在图像需要全局信息,或者语音、文本需要较长序列信息的问题中,空洞卷积都能很好的应用。
空洞卷积的缺点:
网格效应(
Gridding Effect
)。如果仅仅多次叠加多个dilation rate=2
的3x3
的卷积核时,会发现:并不是所有的输入像素都得到计算,也就是卷积核不连续。这对于逐像素的预测任务来说,是致命的问题。
长距离信息可能与任务无关。采用空洞卷积可能对大物体的分割有效果,但是对于小物体的分割可能没有好处。
如何同时处理不同大小的物体,则是设计好空洞卷积网络的关键。
为了解决空洞卷积的缺点,人们提出了一种混合空洞卷积的结构(
Hybrid Dilated Convolution:HDC
) 。该结构有三个特性:
叠加的空洞卷积的
dilation rate
不能有大于1的公约数。这是为了对抗网格效应。如:
[2,4,6]
不是一个好的三层空洞卷积,因为会出现网格效应。将
dilation rate
设计成锯齿状结构。这是为了同时满足小物体、大物体的分割要求。如
[1,2,5,1,2,5]
的循环结构。最后一层的空洞卷积的
dilation rate
最大,且dilation rate
小于等于卷积核的大小。这也是为了对抗网格效应。
下面是一组
dilation rate
分别为[1,2,5]
的卷积核,卷积核的尺寸为3x3