一、卷积与互相关
卷积的定义是:
其定义是两个函数中一个函数经过反转和位移之后再相乘得到的积的积分。
互相关是两个函数之间的滑动点积,过滤器不经过反转,而是直接滑过函数f。f和g之间的交叉区域即为互相关。
在深度学习中,卷积中的过滤器不经过反转,严格来讲这是互相关。本质上是执行逐元素乘法和加法。但在深度学习中,直接将其称为卷积。
二、3D卷积
3D过滤器的深度小于输入层深度(核大小<通道大小),因此3D过滤器可以在所有三个方向上移动。每个位置,逐元素的乘法和加法都会提供一个数值。因为过滤器是在一个3D空间中滑动,所以输出数值也按3D空间排布。如下图所示。
三、转置卷积
转置卷积,即上采样,例如生成高分辨率图像和将低维特征映射到高维空间中。
实现上采样的方法是使用插值方案或者人工创建规则。举个例子来说明,在22的输入中应用33的卷积核的转置卷积,得到4*4的输出, 如下图所示。
通过应用各种填充和步长,可以将同样的22的输入图像映射到不同的图像尺寸。如下图所示,转置卷积被用在同一张22的输出上,所得到的输出为5*5。
在卷积中,K为卷积核,I为输入,O为输出,则有KI=O。如下图所示,将输入平展成为161的矩阵,并将卷积核转换成一个稀疏矩阵。然后系数矩阵和平展之后的输入使用矩阵乘法之后,再将所有的矩阵转换成2*2的输出。
假设一个矩阵与其转置矩阵的乘法得到一个单位矩阵,那么上式等式两边同乘KT,则有 KT*O=I,如下图所示。
这样执行了从小图像到大图像的上采样。
四、扩张卷积
扩张卷积如下:
如下图所示。
直观而言,扩张卷积就是通过在核元素之间插入空格来使核膨胀,新增的参数I为扩张率,来表示我们希望将核加宽的程度。
在上图中,33的红点表示经过卷积后,输出图像是33像素。尽管所有这三个扩张卷积的输出尺寸都是一样的,但是模型观察到的感受野有很大的不同。l=1时感受野为33,l=2时为77,I=3时15*15。与这些操作相关的参数的数量都是相等的,更大的感受野不会有额外的成本,因此扩张卷积可用于廉价地增大输出单元的感受野,而不会增大其核大小,这在多个扩张卷积彼此堆叠时尤其有效。
五、可分卷积
某些经典的网络用到了可分卷积,例如mobilenet,可分卷积有空间可分核深度可分。
1、空间可分卷积
空间可分卷积操作的是图像的2D空间维度,即高和宽。空间可分卷积是将一个卷积分解成两个单独的运算。如下图所示。
在卷积中,33的卷积核直接与图像卷积。在空间可分卷积中,31核首先与图像卷积,然后在应用1*3的卷积核。这样执行同样的操作只需要6个参数。
此外,使用空间可分卷积时,所需的矩阵乘法更少,55图像与33卷积核卷积,会得到9个位置,每个位置都会有9次逐元素相乘,一共有9*9=81次乘法,如下图所示。
另一方面,对于空间可分卷积,首先在55的图像上应用一个31的过滤器,在水平5个位置和垂直3个位置扫描这样的核,一共有53=15个位置。每个位置有3个乘法运算,一共153=45次乘法。现在得到了35的矩阵。这个矩阵再与一个13的核卷积,即在水平3个位置与垂直3个位置扫描这个矩阵。对于这9个位置中的每个有3次乘法,一共需要9*3=27次乘法。总体上,空间可分卷积需要45+27=72次乘法。如下图所示。
推广,将卷积应用于一张NN的图像上,卷积核为mm,步幅为1,填充为0.传统卷积需要(N-2)(N-2)mm次乘法,空间可分卷积需要N(N-2)m+(N-2)(N-2)m=(2N-2)(N-2)*m次乘法。
尽管空间可分卷积能节省成本,但是深度学习很少用到。一大主要的原因时并非所有的卷积核都能分成更小的核。如果我们用空间可分卷积替代所有的传统卷积,那么我们就限制了自己在训练过程搜索到所有可能的核。
2、深度可分卷积
现在看来深度可分卷积,在深度学习领域用的比较多(mobilenet和Xception)。深度可分卷积包括两个步骤:深度卷积和1*1卷积。
对于传统的2D卷积核,假设输入层的大小为773,而过滤器的大小为333,经过一个过滤器2D卷积后,输出层的大小为551,如下图所示。
一般来说,使用多个滤波器,就会得到多个输出映射图。从而使空间维度变小而深度增大。
而对于深度可分卷积:
1、将深度卷积应用于输入层,但不是使用2D卷积中为333的单个过滤器,而是使用分开的3个核,每个核的大小都是331,每个核与输入层的一个通道卷积。每个这样的卷积都提供大小为551的映射图。
2、将这些映射图堆叠在一起,创建一个553的图像。使用核大小为113的卷积,将553的输入图像与每个113的核卷积,可得到大小为551的映射图,应用了128个这样的卷积之后,得到55128的层。
这整个过程如下图所示:
深度可分卷积的不足:会降低卷积中参数的数目,对于较小的模型来说,如果用深度可分卷积替代2D卷积,模型的能力可能会显著下降。
分组卷积
传统的卷积如下图所示。
在分组卷积中,滤波器会被分成不同的组,每一组负责特定深度的卷积,如下图所示。
上图展示了具有两个过滤器分组的分组卷积。在每个过滤器分组中,每个过滤器的深度只有原,来卷积的一半。他们的深度为Din/2,每个过滤器分组包含Dout/2个过滤器。第一个过滤器分组与输入层的前一半卷积,而第二个过滤器的分组与输入层的后一半卷积。因此,每个过滤器分组都会创建Dout/2个通道。
1、分组卷积与深度卷积
如果过滤器分组的数量与输入层通道的数量相同,则每个过滤器的深度都为Din/Din=1。这样子分组卷积与深度卷积等价。
另一方面,每个过滤器分组都包含Dout/Din个过滤器,输出层的深度为Dout。这不同于深度卷积的情况就是深度卷积并不会改变层的深度。在深度可分卷积中,层的深度之后会同1*1的卷积进行扩展。
分组卷积的优点:
- 高效训练。卷积被分成了多个路径,每个路径都可由不同的GPU分开处理,所以模型可以并行方式在多个GPU上进行训练。
- 模型会更高效。模型的参数会随着分组数的增大而减少。