卷积神经网络(convolutional neural network, CNN)

基本定义

卷积神经网络(convolutional neural network, CNN),是一类包含卷积计算且具有深度结构的前馈神经网络。卷积神经网络是受生物学上感受野(Receptive Field)的机制而提出的。卷积神经网络专门用来处理具有类似网格结构的数据的神经网络。例如,时间序列数据(可以认为是在时间轴上有规律地采样形成的一维网格) 和图像数据(可以看作是二维的像素网格)。
卷积神经网络(convolutional neural network, CNN)_第1张图片

1.卷积层(convolutional layer)

作用:特征提取

卷积层内部包含多个卷积核,组成卷积核的每个元素都对应一个权重系数和一个偏差量。卷积核的所覆盖的区域,被称为“感受野(receptive field)”。

1.1卷积

1.1.1 卷积与互相关

卷积是数学分析中的一种积分变换的方法,在图像处理中采用的是卷积的离散形式。这里需要说明的是,在卷积神经网络中,卷积层的实现方式实际上是数学中定义的互相关 (cross-correlation)运算,与数学分析中的卷积定义有所不同,使用互相关运算作为卷积的定义
互相关(Cross-Correlation)是一个衡量两个序列相关性的函数,通常是用滑动窗口的点积计算来实现。而卷积则需要将滤波器经过反转。以二维为例,给定一个图像: X ∈ R M × N \mathbf X \in \mathbf R^{M\times N} XRM×N,和一个滤波器 : W ∈ R U × V \mathbf W \in \mathbf R^{U\times V} WRU×V
则互相关为: y i j = ∑ u = 1 U ∑ v = 1 V w u v x i + u − 1 , j + v − 1 \displaystyle y_{ij}=\sum^U_{u=1}\sum^V_{v=1}w_{uv}x_{i+u-1,j+v-1} yij=u=1Uv=1Vwuvxi+u1,j+v1

卷积为: y i j = ∑ u = 1 U ∑ v = 1 V w u v x i − u + 1 , j − v + 1 \displaystyle y_{ij}=\sum^U_{u=1}\sum^V_{v=1}w_{uv}x_{i-u+1,j-v+1} yij=u=1Uv=1Vwuvxiu+1,jv+1
卷积神经网络(convolutional neural network, CNN)_第2张图片

1.1.2 一维卷积

一维卷积经常用在信号处理中,用于计算信号的延迟累积。假设一个信号发生器每个时刻 t t t 产生一个信号 x t x_t xt ,其信息的衰减率为 w k w_k wk ,即在 k − 1 k−1 k1 个时间步长后,信息为原来的 w k w_k wk 倍。而在时刻 t t t 收到的信号 y t y_t yt 为当前时刻产生的信息和以前时刻延迟信息的叠加,即:
y t = w 1 × x t + w 2 × x t − 1 + w 3 × x t − 2 = ∑ k = 1 3 w k ⋅ x t − k + 1 \begin{array}{ll} &y_t= w_1\times x_t + w_2\times x_{t-1}+w_3\times x_{t-2}\\ &\\ & = \sum^3_{k=1}w_k\cdot x_{t-k+1} \end{array} yt=w1×xt+w2×xt1+w3×xt2=k=13wkxtk+1

其中, w k w_k wk被称为滤波器(filter)或卷积核(convolution kernel)。
卷积神经网络(convolutional neural network, CNN)_第3张图片

1.2 二维卷积

1.2.1 卷积计算

在图像处理中,图像是以二维矩阵的形式输入到神经网络中。给定一个图像: X ∈ R M × N \mathbf X \in \mathbf R^{M\times N} XRM×N,和一个滤波器 : W ∈ R U × V \mathbf W \in \mathbf R^{U\times V} WRU×V,且有 U < < M , V < < N U<U<<M,V<<N;其卷积为: y i j = ∑ u = 1 U ∑ v = 1 V w u v x i − u + 1 , j − v + 1 \displaystyle y_{ij}=\sum^U_{u=1}\sum^V_{v=1}w_{uv}x_{i-u+1,j-v+1} yij=u=1Uv=1Vwuvxiu+1,jv+1;具体计算过程如下图所示
卷积神经网络(convolutional neural network, CNN)_第4张图片
一个输入信息 X \mathbf X X 和滤波器 W \mathbf W W 的二维卷积定义为: Y = W ∗ X \displaystyle Y=\mathbf W *\mathbf X Y=WX。一个具体案例为如下:
卷积神经网络(convolutional neural network, CNN)_第5张图片

假设卷积核的高和宽分别为 k h k_h kh k w k_w kw,则将称为 k h × k w k_h \times k_w kh×kw 卷积,比如 3 × 5 3\times 5 3×5 卷积,就是指卷积核的高为3, 宽为5。在卷积神经网络中,一个卷积算子除了上面描述的卷积过程之外,还包括加上偏置项的操作。

经过一次卷积之后,图片尺寸变小。卷积输出特征图的尺寸计算方法为: { H o u t = H − k h + 1 , W o u t = W − k w + 1 , \displaystyle \left\{ \begin{aligned} H_{out}=H-k_h+1, \\ W_{out}=W-k_w+1, \\ \end{aligned} \right. {Hout=Hkh+1,Wout=Wkw+1,

1.2.2 填充(padding)

当卷积核尺寸大于 1 时,输出特征图的尺寸会小于输入图片尺寸。如果经过多次卷积,输出图片尺寸会不断减小。为了避免卷积之后图片尺寸变小,通常会在图片的外围进行填充(padding),如下图所示。
卷积神经网络(convolutional neural network, CNN)_第6张图片
如果在图片高度方向,在第一行之前填充 p h 1 p_{h1} ph1​ 行,在最后一行之后填充 p h 2 p_{h2} ph2 行;在图片的宽度方向,在第1列之前填充 p w 1 p_{w1} pw1 列,在最后1列之后填充 p w 2 p_{w2} pw2 ​列;则填充之后的图片经过大小为 k h × k w k_h \times k_w kh×kw 的卷积核操作之后,输出图片的尺寸为: { H o u t = H + p h 1 + p h 2 − k h + 1 , W o u t = W + p w 1 + p w 2 − k w + 1 , \displaystyle \left\{ \begin{aligned} H_{out}=H+p_{h1}+p_{h2}-k_h+1, \\ W_{out}=W+p_{w1}+p_{w2}-k_w+1, \\ \end{aligned} \right. {Hout=H+ph1+ph2kh+1,Wout=W+pw1+pw2kw+1,

在卷积计算过程中,通常会在高度或者宽度的两侧采取等量填充,即 p h 1 = p h 2 = p h , p w 1 = p w 2 = p w p_{h1}=p_{h2}=p_{h},p_{w1}=p_{w2}=p_{w} ph1=ph2=phpw1=pw2=pw​​ ,则变换后的尺寸变为 { H o u t = H + 2 p h − k h + 1 , W o u t = W + 2 p w − k w + 1 , \displaystyle \left\{ \begin{aligned} H_{out}=H+2p_{h}-k_h+1, \\ W_{out}=W+2p_{w}-k_w+1, \\ \end{aligned} \right. {Hout=H+2phkh+1,Wout=W+2pwkw+1,

卷积核大小通常使用1,3,5,7这样的奇数,如果使用的填充大小为 p h = ( k h − 1 ) 2 , p w = ( k w − 1 ) 2 \displaystyle p_h=\frac{(k_h−1)}{2} ,p_w=\frac{(k_w-1)}{2} ph=2(kh1)pw=2(kw1),则卷积之后图像尺寸不变。例如当卷积核大小为5时,padding大小为2,卷积之后图像尺寸不变。

1.2.3 步幅(stride)

步幅为卷积核每次滑动的像素点个数。下图是步幅为2的卷积过程,卷积核在图片上移动时,每次移动大小为2个像素点。
卷积神经网络(convolutional neural network, CNN)_第7张图片
当宽和高方向的步幅分别为 s h s_h sh s w s_w sw 时,输出特征图尺寸为 { H o u t = H + 2 p h − k h s h + 1 , W o u t = W + 2 p w − k w s w + 1 , \displaystyle \left\{ \begin{aligned} H_{out}=\frac{H+2p_{h}-k_h}{s_h}+1, \\ W_{out}=\frac{W+2p_{w}-k_w}{s_w}+1, \\ \end{aligned} \right. Hout=shH+2phkh+1,Wout=swW+2pwkw+1,

1.2.4 感受野

输出特征图上每个点的数值,是由输入图片上大小为 k h × k w k_h\times k_w kh×kw ​的区域的元素与卷积核每个元素相乘再相加得到的,所以输入图像上 k h × k w k_h\times k_w kh×kw 区域内每个元素数值的改变,都会影响输出点的像素值。我们将这个区域叫做输出特征图上对应点的感受野。感受野内每个元素数值的变动,都会影响输出点的数值变化。比如 3 × 3 3\times3 3×3 卷积对应的感受野大小就是 3 × 3 3\times3 3×3
卷积神经网络(convolutional neural network, CNN)_第8张图片
而当通过两层 3 × 3 3\times3 3×3 的卷积之后,感受野的大小将会增加到 5 × 5 5\times5 5×5。当增加卷积网络深度的同时,感受野将会增大,输出特征图中的一个像素点将会包含更多的图像语义信息。
卷积神经网络(convolutional neural network, CNN)_第9张图片

1.2.5 多输入通道场景

实际上一张图片往往含有RGB三个通道,要计算卷积的输出结果,卷积核的形式也会发生变化。假设输入图片的通道数为 C i n C_{in} Cin ,输入数据的形状是 C i n × H i n × W i n C_{in}\times{H_{in}}\times{W_{in}} Cin×Hin×Win​,计算过程如下:
卷积神经网络(convolutional neural network, CNN)_第10张图片
(1)对每个通道分别设计一个2维数组作为卷积核,卷积核数组的形状是 C i n × k h × k w C_{in}\times{k_h}\times{k_w} Cin×kh×kw

(2)对任一通道 C i n ∈ [ 0 , C i n ) C_{in} \in [0, C_{in}) Cin[0,Cin),分别用大小为 k h × k w k_h\times{k_w} kh×kw ​的卷积核在大小为 H i n × W i n H_{in}\times{W_{in}} Hin×Win 的二维数组上做卷积;

(3)将这 C i n C_{in} Cin 个通道的计算结果相加,得到的是一个形状为 H o u t × W o u t H_{out}\times{W_{out}} Hout×Wout 的二维数组。

1.2.6 多输出通道场景

一般来说,卷积操作的输出特征图也会具有多个通道 C o u t C_{out} Cout​,这时需要设计 C o u t C_{out} Cout ​个维度为 C i n × k h × k w C_{in}\times{k_h}\times{k_w} Cin×kh×kw ​的卷积核,卷积核数组的维度是 C o u t × C i n × k h × k w C_{out}\times C_{in}\times{k_h}\times{k_w} Cout×Cin×kh×kw​,如下图所示。卷积核的输出通道数也被叫做卷积核的个数。
卷积神经网络(convolutional neural network, CNN)_第11张图片

1.2.7 批量操作

在卷积神经网络的计算中,通常将多个样本放在一起形成一个mini-batch进行批量操作,即输入数据的维度是 N × C i n × H i n × W i n N\times{C_{in}}\times{H_{in}}\times{W_{in}} N×Cin×Hin×Win。由于会对每张图片使用同样的卷积核进行卷积操作,卷积核的维度与上面多输出通道的情况一样,仍然是 C o u t × C i n × k h × k w C_{out}\times C_{in}\times{k_h}\times{k_w} Cout×Cin×kh×kw,输出特征图的维度是 N × C o u t × H o u t × W o u t N\times{C_{out}}\times{H_{out}}\times{W_{out}} N×Cout×Hout×Wout,如下图所示。
卷积神经网络(convolutional neural network, CNN)_第12张图片

1.3 性质

在图像处理中 ,卷积经常作为特征提取的有效方法。卷积滤波器的参数需要学习

1.3.1 局部连接

在卷积层(假设是第层)中的每一个神经元都只和下一层(第 − 1 −1 l1 层)中某个局部窗口内的神经元相连,构成一个局部连接网络。使用卷积层代替全连接层,可以使得层和层之间的连接数大大减少,由原来的 M l × M l M_l\times M_l Ml×Ml 个连接变为 M l × K M_l\times K Ml×K 个连接, K K K为滤波器大小。
如,一维全连接层和卷积层:
卷积神经网络(convolutional neural network, CNN)_第13张图片
二维全连接层和卷积层:
卷积神经网络(convolutional neural network, CNN)_第14张图片

1.3.2 权重共享

作为参数的滤波器 w ( l ) w(l) w(l) 对于第 l l l 层的所有的神经元都是相同的。如上图卷积层中,只有一个滤波器完成特征图抽取。权重共享可以理解为一个滤波器只捕捉输入数据中的一种特定的局部特征。因此,如果要提取多种特征就需要使用多个不同的滤波器

2.池化层(pooling layer)

作用:特征选择和信息过滤

池化层,也称汇聚层、子采样层,其主用作用是进行特征选择,降低特征数量,从而减少参数数量。池化相当于在空间范围内做了维度约减,分别作用于每个输入的特征并减小其大小。

池化层包含预设定的池化函数,其功能是将特征图中单个点的结果替换为其相邻区域的特征图统计量。使用某一位置的相邻输出的总体统计特征代替网络在该位置的输出,其好处是当输入数据做出少量平移时,经过池化函数后的大多数输出还能保持不变。

2.1 池化操作

池化通常有两种:平均池化和最大池化。
卷积神经网络(convolutional neural network, CNN)_第15张图片
与卷积核类似,池化窗口(用 k h × k w k_h\times k_w kh×kw 表示池化窗口)在图片上滑动时,每次移动的步长称为步幅,当宽和高方向的移动大小不一样时,分别用 s w s_w sw s h s_h sh ​表示。也可以对需要进行池化的图片进行填充,填充方式与卷积类似,假设在第一行之前填充 p h 1 p_{h1} ph1 ​行,在最后一行后面填充 p h 2 p_{h2} ph2 ​行。在第一列之前填充 p w 1 p_{w1} pw1 ​列,在最后一列之后填充 p w 2 p_{w2} pw2 列,则池化层的输出特征图大小为: { H o u t = H + p h 1 + p h 2 − k h s h + 1 , W o u t = W + p w 1 + p w 2 − k w s w + 1 , \displaystyle \left\{ \begin{aligned} H_{out}=\frac{H+p_{h1}+p_{h2}-k_h}{s_h}+1, \\ W_{out}=\frac{W+p_{w1}+p_{w2}-k_w}{s_w}+1, \\ \end{aligned} \right. Hout=shH+ph1+ph2kh+1,Wout=swW+pw1+pw2kw+1,

通常使用 2 × 2 2\times2 2×2 大小的池化窗口,步幅也使用2,填充为0;通过这种方式的池化,输出特征图的高和宽都减半,但通道数不会改变。

2.2 池化层的作用

池化层(汇聚层)不但可以有效地减少神经元的数量,还可以使得网络对一些小的局部形态改变保持不变性,并拥有更大的感受野。如下图所示:
卷积神经网络(convolutional neural network, CNN)_第16张图片

3. 全连接层(fully-connected layer)

作用:对提取的特征进行非线性组合以得到输出。
全连接层本身不具有特征提取能力,而是使得目标特征图失去空间拓扑结构,被展开为向量。

4. 其他的卷积方法

4.1 转置卷积

卷积操作实现高维特征到低维特征的转换,但若需要将低维特征映射到高维特征,并且依然希望通过卷积操作来实现,这种卷积被称为转置卷积(Transposed Convolution)。如,通过填充 2 ∗ 2 2*2 22 的零元素,将 2 ∗ 2 2*2 22 的输入上采样为 4 ∗ 4 4*4 44
卷积神经网络(convolutional neural network, CNN)_第17张图片

具体解释操作如下:
卷积神经网络(convolutional neural network, CNN)_第18张图片

4.2 微步卷积

可以通过增加卷积操作的步长 > 1 >1 S>1 来实现对输入特征的下采样操作,大幅降低特征维数;

也可以通过减少转置卷积的步长 < 1 <1 S<1 来实现上采样操作,大幅提高特征维数。步长 < 1 <1 S<1 的转置卷积称为微步卷积(Fractionally-Strided Convolution)。为了实现微步卷积,我们可以在输入特征之间插入0来间接地使得步长变小。
卷积神经网络(convolutional neural network, CNN)_第19张图片

4.3 空洞卷积

空洞卷积(Atrous Convolution)是一种不增加参数数量,同时增加输出
单元感受野的一种方法,也称为膨胀卷积(Dilated Convolution)。空洞卷积通过给卷积核插入空洞来增加其大小。如果在卷积核的每两个元
素之间插入 D − 1 D-1 D1 个空洞,卷积核的有效大小为: K ′ = K + ( K − 1 ) × ( D − 1 ) \displaystyle K^{'}=K+(K-1)\times (D-1) K=K+(K1)×(D1)。其中 D 称为膨胀率(Dilation Rate)。D=1时卷积核为普通的卷积核。
卷积神经网络(convolutional neural network, CNN)_第20张图片

你可能感兴趣的