深度学习经典案例解析:基于MATLAB
上QQ阅读APP看书,第一时间看更新

2.2 卷积神经网络的结构及原理

2.2.1卷积神经网络的结构

卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络。典型的卷积神经网络结构(见图2-11)可以分为特征提取(包含卷积层、激活函数、池化层)和全连接层。

图2-11 典型的卷积神经网络的结构

图2-12展示了获得2012年Image Net挑战赛冠军的AlexNet,这个神经网络的主体部分由五个卷积层和三个全连接层组成,该网络的第一层以图像为输入,通过卷积及其他特定形式的运算从图像中提取特征,接下来每一层以前一层提取出的特征作为输入并进行卷积及其他特定形式的运算,便可以得到更高级的特征。经过多层的变换之后,深度学习网络就可以将原始图像转换成高层次的抽象特征。

图2-12 AlexNet网络示意图

2.2.2卷积层的原理

卷积层是卷积神经网络的核心,它是通过卷积核对输入信息进行卷积运算从而提取特征的。

一个卷积神经网络往往有多个卷积层,如图2-12所示的AlexNet就含有五个卷积层。在基于卷积神经网络的数字图像识别过程中,第一个卷积层会直接接收到图像像素级的输入,来提取其与卷积核相匹配的特征,并传递给下一层;接下来每一层都以前一层提取出的特征作为输入,与本层的卷积核进行卷积运算,提取更加抽象的特征。

同一个卷积层中可以有多个不同的卷积核,该卷积层的输入分别和这多个卷积核进行卷积运算,形成新的特征图,由此可见,特征图的个数与该卷积层卷积核的个数相关,该过程如图2-13所示。

图2-13 一个卷积层含有多个卷积核的计算示意图

在卷积神经网络工作的过程中,无论是输入还是中间过程产生的特征图,通常都不是单一的二维图,可能是多个二维图,每一张二维图称之为一个通道(Channel)。比如一幅RGB图像就是由R通道、G通道、B通道三个通道组成的。对于多通道的输入,每个通道采用不同的卷积核作卷积,然后将对应特征矩阵的元素进行累加即可,其过程如图2-14所示。

图2-14 多通道多卷积核的计算过程示意图(注:卷积过程中步长为1)

在图2-14所示的多通道多卷积核的计算过程中,输入为两个通道,卷积层中有三个卷积核,每个卷积核又分为两个子卷积核,其中第一个子卷积核与通道1的输入进行卷积,第二个子卷积核与通道2的输入进行卷积,然后将两个卷积结果的对应元素进行相加。例如,第一个输出特征矩阵中(1,1)元素的计算过程如下:

[0×1+8×0+1×0+2×(-1)] +[2×0+0×(-2) +9×2+2×0] =16

在卷积神经网络中,卷积核中的元素是需要通过训练确定的,称之为参数。在这里,要讲解一个重要的概念——“参数共享”(Parameter Sharing)。所谓“参数共享”指的是对于一幅输入图像或特征图,在进行卷积的过程中,其每个位置都是用同一个卷积核去进行运算的,即每个位置和同一组参数进行相乘,然后相加。

对于卷积神经网络来说,“参数共享”有什么意义呢?可以通过以下这个例子来说明。如果输入一幅像素为1000×1000的灰度图像,其输入为1000000个点,在输入层之后如果是相同大小的一个全连接层,那么将产生1000000×1000000个连接,也就是说这一层就有1000000×1000000个权重参数需要去训练;如果输入层之后连接的是卷积层,该卷积层有6个卷积核,卷积核的尺寸为5×5,那么总共有(5×5+1)×6=156个参数需要去训练。由此可见,与全连接层相比,卷积层需要训练的参数要减少很多,从而降低了网络的复杂度,提高了训练效率,避免了过多连接导致的过拟合现象。

综上所述,卷积层的作用主要体现在两个方面:提取特征和减少需要训练的参数,降低深度网络的复杂度。

2.2.3 非线性激活函数的原理

需要在每个卷积层之后加入非线性激活函数。之所以要加入非线性激活函数,原因如下:卷积运算是一种线性运算,线性运算有一个性质,即若干个线性运算的叠加可以用一个线性运算来表示;如果将多个卷积运算直接堆叠起来,虽然进行了很多层卷积运算,但多层卷积运算可以被合并到一起形成一个卷积运算来代替,这与用多个卷积核设置多个卷积层来提取图像的不同特征并进行高级抽象的初衷是违背的。因此,在每个卷积层后面加一个非线性激活函数,那么每个卷积层的效果就可以得到“保留”。

非线性激活函数有很多种,ReLU函数是卷积神经网络中常用的一种,它的表达式为f(x) =max(0,x),对于输入的特征向量或特征图,它会将小于零的元素变为零,保持其他元素不变。由于ReLU函数的计算非常简单,所以它的计算速度往往比其他非线性函数快,加之其在实际应用中的效果很好,因此在很多深度网络中被广泛地使用。

为了加深对非线性激活函数的理解,可以拿中医中的“针灸”作为类比(见图2-15)。

图2-15 激活函数与针灸类比示意图

当针与皮肤有一段距离时,人不会感到疼痛,针与皮肤的远近和大脑中的“痛感”没有关系;当针接触到皮肤并且扎进皮肤时,人就会感到疼痛,也就是大脑中的“痛感”被激活了,针扎进皮肤的距离与大脑中的“痛感”具有相关性。非线性激活函数就是这个原理,神经网络训练出来的信息,如果没有达到阈值,说明是无用信息;如果超过阈值,特征就会通过非线性激活函数传递下去。

2.2.4 池化层的原理

池化(Pooling)操作实质上是一种对统计信息提取的过程。在卷积神经网络中,池化运算是对特征图上的一个给定区域求出一个能代表这个区域特殊点的值,常见的两种池化方法是最大池化(Max-Pooling)和平均池化(Average-Pooling)。

图2-16是最大池化示意图,将整个矩阵分为多个子区域,取每个子区域的最大值作为新矩阵中的对应元素。

图2-16 最大池化示意图

图2-17是平均池化示意图,与最大池化不同的是,它是取每个子区域的平均值作为新矩阵中的对应元素。

图2-17 平均池化示意图

池化操作也可以按照一定的步长(stride)来进行。图2-16和图2-17中池化操作的步长为2。在实际的卷积网络结构中,池化操作的步长要小于池化区域的边长,这样能使相邻池化区域有一定的重叠,常见的情况是池化步长等于池化区域的边长减1,例如,池化区域为2×2,步长可以设为1。

池化层的主要作用表现在两个方面。

1)减少特征图的尺寸。从上面的分析可知,特征图在经过池化后,尺寸减小了,这对于减少计算量和防止过拟合是非常有利的。

2)引入不变性。最常用的最大池化是选取特征图子区域中最大的那个值,所以这个最大值无论在子区域的哪个位置,通过最大池化运算总会选到它;所以这个最大值在这个子区域内的任何位移对运算结果都不会产生影响,相当于对微小位移的不变性。

2.2.5 全连接层的原理

卷积神经网络中的全连接层(Fully Connected Layers,FC)与深度神经网络的全连接层原理相同,全连接层在整个卷积神经网络中起到“分类器”或“预测器”的作用。