1、原理
1.1、基本结构
卷积神经网络(Convolutional Neural Networks,CNN)是深度学习中的一种网络,它和其他神经网络最大的区别在于其独特的卷积层。通常情况下它是由多层网络组合而成,每层又包含由特征图组成的多个平面,而这些平面都是由多个独立神经元组成。
通常情况下,因为包含卷积操作,C层被称为特征提取层。上一层的局部感受野(即与滤波器进行卷积操作的像素范围)连接着特征提取层的每个神经元输入,和滤波器进行卷积后的值作为该局部特征。提取到该局部特征后,它与其他局部特征间的相对位置关系也就确定了。因为只涉及对特征提取层的局部运算,所以S层被称为特征映射层,S层的每个计算层都包含了多个特征映射,一个平面即为一个特征映射。因此采用Sigmoid函数作为特征映射的激活函数,使得特征映射具有位移不变性。
以上图为例介绍常用的二维卷积,输入图像经过3个滤波器的卷积运算后,再和偏置量进行累加,得到3个特征映射层组成的C1层。C1层之后通常会紧接着池化操作,以最大池化来说明,C1中的3个特征映射图内分别取N*N像素内的最大值作为最终值(即最大池化)形成3个池化后的特征映射图S2。如果后续仍有卷积操作,那么再和滤波器进行卷积形成新的C3层,再经过池化操作生成池化层S4。后续如果没有卷积操作的话,这个池化层内的所有值会经过摊平操作形成一个一维向量。这个向量再作为传统神经网络的输入层,通过权重和激活函数的计算后最终输出。
另外,卷积神经网络对输入样本具有较高的畸变容忍能力。通常情况下,二维卷积神经网络中的特征提取层(C层)都紧跟着一个用来求局部最大或局部平均的池化层(S层),这样就进行了两次特征操作,好处在于对样本有较高的容错率。
1.2、卷积层
介绍完基本结构和网络的运行过程后,接着介绍每个层的功能,首先是卷积层。
卷积是卷积神经网络的核心,用一个K*K大小的卷积核(Filter),对大小为I*I的图像(Input)进行卷积操作时,假设每次卷积操作的步长(Stride)为S,如果卷积操作超出了图像边界,填充(Padding)像素数为P。那么经过此类卷积后输出(Output)的特征图大小计算公式为:
以上为卷积的基本概念。
对一幅图像的一个完整的卷积计算过程为:卷积核以一定间隔滑动,并对所覆盖的区域进行卷积运算得到值,直至遍历完整幅图像,如下图所示:
1.3、BN层
批量标准化(Batch Normalization,BN)层与卷积层,以及下文将要提到的池化层同属网络的一层。通常情况下,为了更好地训练深度学习神经网络,防止像Sigmoid类似的非线性激活函数过早饱和,我们会对输入的数据进行标准化、规范化,使其数据分布类似于正态分布。但在网络的训练过程中,因为每一层都必须学会适应每一个训练步骤的新分布,导致隐含层间的分布是不断变化的,因此会减慢训练过程,这被称为内部协变量转移问题。这也是深层网络通常更耗时的一个原因。
BN层就是规范化网络各层权重分布、解决内部协变转移问题的一种方法,强迫每一层的输入在每一个训练步骤中有大致相同的分布。使用BN层带来的效果是减少超参数,如参数初始化方式、学习率初始值、权重衰减系数、正则方式、Dropout率等的调优时间。因为超参数的设置会严重影响训练结果,不使用BN的网络通常在超参数的调优上回浪费很多时间。另外,使用BN会快速收敛,并且会提高网络泛化能力。BN算法的大致步骤如下:
- 计算各层输入的均值和方差;
- 使用先前计算的批次统计数据对图层输入进行归一化;
- 缩放并移动以获得图层的输出。
1.4、池化层
通过卷积运算获得特征图(Features Map)之后,后续网络如何利用这些特征图是需要解释的,本节的重点则是特征图后的下一层——池化层。
理论上可以用卷积层提取到的所有特征图去训练分类器,但是这样做会明显在网络中形成巨大的计算量。另外如果使用了所有的特征图,会使网络对输入数据的拟合效果非常好,而缺乏对未知数据的拟合能力,也就是常说的过拟合(Over-Fitting)现象。
针对计算量大和过拟合的问题,可以对不同位置的特征先进行聚类,例如一块区域内的平均值,这样可以在得到较低维度的特征时不丢失图像的位置信息。这种得到较低维度特征以及改善过拟合现象的聚类操作就叫做池化(Pooling)。
使用最多的是最大池化,但是除了最大值池化(Max Pooling)外,还有平均值池化(Average Pooling)。前者取出目标区域内的最大值,后者则是计算目标区域内的平均值。下图给出了Max池化的运算过程,Average池化以此类推:
池化有4个重要特性:
- 不同于卷积,池化没有需要学习的参数;
- 池化后图像的大小被压缩,但通道数不变;
- 降低了数据特征,扩大了卷积核的感受野;
- 对于微小的位置变化具有鲁棒性,在输入数据发生微小偏差时,池化仍会返回相同的结果。这一点如下图所示,输入数据在宽度方向上只偏离1个元素时,输出仍未为相同的结果(根据数据不同,有时结果也不相同)。
1.5、激活函数
激活函数是非线性神经网络的关键之一。如果不使用激活函数,那么每层节点的输入和上层节点的输出都将会是线性关系。这种网络结构就是原始感知机(Perceptron),其网络的拟合逼近能力十分有限。因此,神经网络特别是深度神经网络只有具有非线性能力才会具有强大的拟合表达能力。而要使网络具有非线性能力,只需要在网络层之间使用非线性函数就可以实现。这就是激活函数的作用和能力。
理论上完美的激活函数应该具有以下特征:
- 非线性。网络上下层间只有线性变换无法使网络具有无限拟合逼近的能力。
- 连续可微。这是使用梯度下降法的前提。
- 在原点处近似线性。这样当权值初始化为接近0的随机值时,网络可以学习的较快,不用可以调节网络的初始值。
- 范围最好不饱和。当有饱和的区间段时,如果网络权重优化进入到该区间内,梯度近似为0,网络的学习就会停止。
- 单调性。具有单调性的激活哈数会使单层网络的误差是凸函数,能够使用其他算法优化。
虽然当前激活函数比较多,但是目前还没有可以同时满足以上这些性质的激活函数。本文从实际角度出发,在输出层,分类问题我们需要考虑两个问题:
- 每个输出信号值在0~1之间;
- 所有输出信号的和为1。
1.5.1、输出层的激活函数
基于这两个要求,本文的模型输出分类中,输出层的激活函数用Softmax函数:
其中是输出层中的第k个输入信号,分母表示输出层共有n个输出信号(神经元)
,计算所有输出层中的输入信号的指数和。 则是第k个神经元的输出。
1.5.2、卷积层的激活函数
本文在卷积层使用的激活函数为修正线性单元(Rectified Linear Unit,ReLU),其函数解析式为:
ReLU函数图像如下:
这个函数其实就是一个取最大值函数,注意到该函数并不是全区间可导,但是我们可以取sub-gradient。ReLU虽然简单,但却是近几年的重要成果,具有以下优点:
- 解决了梯度消失的问题(在正区间);
- 计算速度快,只需要判断输入是否大于0;
- 收敛速度远快于Sigmoid和Tanh。
1.6、全连接层与输出层
在池化层得到特征映射图之后,需要使用传统网络结构进行分类输出。在传统网络结构中,上一层的所有节点与下一层的所有节点全部连接起来,形成交叉计算权重的网络称为全连接层(Fully Connected Layers,FC)。在整个卷积神经网络中全连接的作用在于分类。前文所提到的卷积层、BN层、池化层、激活函数等操作都是将输入数据提取特征并映射到隐层特征空间,而全连接层则利用交叉计算的分布式特征表示能力将隐层特征空间映射到样本标记空间。
输出层是网络中的最后一层。根据具体问题可以在分类问题中输出类别或者在回归问题中输出某个数值。通常,在分类问题的输出层之前会有Softmax激活函数将概率转化为类别。
2、卷积神经网络的主要特点
由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相较于全连接神经网络的一大优势。
2.1、权值共享
也可以理解为平移不变性,卷积神经网络在图像的某一区域学到某个模式之后,就可以在图像的任何地方识别这个模式。
如果使用某一个特征过滤器(检测器)提取手写“3”的特征,因为内容可能出现在图片任何一个有N*N形成的区域,所以每个特征检测器都可以在图片的不同N*N的像素区域中使用同样的参数,都有可能提取到“3”的特征。而对于全连接神经网络,则必须重新学习“3”出现在新的位置的特征。因此权值共享使得卷积神经网络可以高效利用不同位置出现的同种特征来减少网络参数,只需要很少的训练样本就能学到具有泛化能力的数据表示。
2.2、分层提取
卷积神经网络可以学到模式的空间层次结构(Spatial Hierarchies of Patterns)。
- 第一个卷积层可以只学习图像较小的局部特征(比如棱角、边缘);
- 第二个卷积层将学习由第一层卷积后形成的特征图组成的更大的特征;
- 第三个卷积层再学习第二层卷积后形成的特征图组成的更大的特征;
- ...
层数越高,学到的特征就越全局化。因为视觉世界从根本上具有空间层次结构,所以说卷积神经网络可以有效地学习复杂、抽象的视觉概念。
2.3、局部感知
通常而言,人类是从局部到全局渐近认识外部的世界。在网络学习中,神经元之间不需要对全局图像进行感知,只需要对局部图像进行感知,然后在更高层网络中将局部的特征进行综合便可以得到全局特征。因为图像具有空间相关性——距离较近的局部像素关系在空间位置中同样较为紧密,距离越远的像素之间相关性越弱。事实上,视觉皮层的神经元就是局部接受信息的,网络部分连通的思想便是受生物学中的视觉系统结构启发的。
在全连接神经网络中,相邻层的神经元全部连接在一起,由于其输入数据是一维结构,因此图像需要先转换为一维向量,在这个过程中,图像会完全丢失“形状”,即像素间的空间信息,从理论上说,神经网络几乎可以解决全部深度学习问题,但是在处理复杂问题时,往往难以达到理想的效果。
该类网络不仅参数量巨大,而且学习速度很慢,即使是一个简单的问题,一般也需要几百次甚至上千次的学习才可以收敛,而且容易产生过拟合问题,泛化能力较弱。而卷积层则可以保持形状不变,当输入图像时,卷积层会以3维数据的形式接收输入数据,并且同样以3维数据的形式输出至下一层。因此在CNN中,可以正确理解图像等具有形状的数据,而且由于局部连接,大大降低了参数量,节省了内存。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:卷积神经网络(Convolutional Neural Networks,CNN) - Python技术站