卷积神经网络CNN学习记录-概念篇


                                       卷积神经网络CNN


1. 网络简介

卷积神经网络(Convolutional Neural Network)是人工神经网络与深度学习相结合,它是一种具有卷积计算并且具有深度结构的前馈神经网络经,通过反向传播算法来训练网络中的权重,从而实现深度学习的方法[1]。

2. 网络特点

与传统神经网络相比,它不仅继承了传统神经网络的高容错性、强大的自我学习能力,还在此基础上增加了几大特点:

一是局部感受野,在传统神经网络中,通过全连接层使神经元对全局单元都进行感知,虽然考虑到了图像的所有特征,但是这样会同时将有效的特征给弱化了,反而会突出一些不重要的特征,而且输出的每一个神经单元都会对其他单元造成影响,从而使得分割效果表现不佳。卷积神经网络的局部感受野就很好的避免的这一点,在每次感知时,它并不感知全图,而是对局部区域进行感知,每一个区域都有它的代表性特征,这样一来降低了不同单元之间的联系,减少了相互之间的影响,使输出图像的单元只受输入图像的局部影响而不是像传统神经网络全部单元都受到输入图像的影响。

二是参数共享机制,举一个例子,假设输入图像为10*10大小,全连接层设为9个单元,卷积核(滤波器)也是9个单元,暂时不考虑偏置项b。

使用全连接参数量=10*10*9=900;

使用卷积核(滤波器)参数量=9;

由此得出结论,卷积核尺寸大小为多少参数量就为多少,一个卷积核的参数被多个区域共享,而且还采用了池化操作,不仅大幅的减少了网络参数量,而且训练出的模型更好、更准确,除此之外,由于参数共享机制的存在,即使对图片进行平移,特征仍然可以被识别出来,也就是常说“平移不变性”[2]。


3.  网络结构

                                             卷积神经网络CNN学习记录-概念篇

                                                                            图1 卷积神经网络结构示意图  

图1为卷积神经网络的结构示意图,从大体上来说分为三个部分即:输入层、隐藏层、输出层,与传统的神经网络不同之处是,卷积神经网络的隐藏层又进行了细分,分为三层即:卷积层、池化层、全连接层,它们各自有各自的功能和作用。

4. 卷积层

                                          卷积神经网络CNN学习记录-概念篇

                                                                                图2 卷积过程图 

对于卷积层,一般给定一个正方形的卷积核(滤波器),指定卷积的步长,在输入特征图上滑动,遍历特征图上的每一个像素点,每次移动一个步长,卷积核都会产生一个与输入特征图重合的区域,重合区域对应位置相乘再加上偏置项b,最终成为输出特征图的一个像素,就这样在卷积的过程中完成了图像的特征提取工作。

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)

其中:

input为输入数据,其shape格式为[batch, height, width, channels];

filter为使用的卷积核;

strides为步长;

padding为填白函数,用于维持边界信息,即对矩阵边缘补0操作,其值为"SAME"或"VALID",SAME表示补0,使卷积前后图像面积不变,VALID为不补0。

5. 池化层

池化层的作用是用来减少特征数量,主要分为最大池化(Max Pooling)和平均池化(Average Pooling)。最大池化是在对卷积层传入的输出特征图进行池化时,选择重复区域中的最大值作为新的输出特征图的像素,这样有利用保留区域的突出性特征,可以用于提取图片纹理等。平均池化是在进行池化操作时,计算重复区域像素的平均值并作为新的输出特征图的像素,可以有利于保留图片背景特征。

6. 全连接层

卷积神经网络的全连接层等价于传统前馈神经网络中的隐含层。

7. 复杂度

7.1时间复杂度

时间复杂度决定了训练模型以及模型预测的时间花费,如果神经网络的时间复杂度过高,则会导致模型训练和图像预测分类等工作耗费大量时间,导致无法进行快速的图像预测,使得这种网络在实际应用中的可能性变得很低。

卷积神经网络CNN学习记录-概念篇

7.2空间复杂度

决定了网络模型的参数量。由于维度诅咒(通过加入新的特征来增加问题的维数实际上会降低分类的性能)的限制,模型训练的参数越多,训练模型需要喂入的数据集就越大,然而在真实场景中,提供的数据量无法满足网络模型的需求,因此可能会导致模型训练发生过拟合现象

8.损失函数

损失函数(loss function)是一个非负实值函数,同时它是经验风险函数的核心部分,也是结构风险函数重要组成部分。它的作用是用来评估网络模型的预测值y`与真实值y的差异程度,通常用函数F(y,y` )来表示,损失函数越小,模型的鲁棒性就越好,预测的更加准确,参数w,b会表现出最优性,在开发过程中,根据实际需求制定相应的损失函数,会使模型的预测准确率更加精准、更加符合需求。

9.**函数

人工神经元通过**函数模拟非线性函数,否则将退化成线性回归算法。**函数在输入超过一定范围时,**函数的输出逼近1的数值或其它数值,低于一定范围时输出逼近0或-1,模拟生物神经元被**或抑制的状态。这种特性将简单地把输入加权求和的线性运算转化为非线性运算,从而可以求解异或等非线性问题。选取不同的**函数会对网络模型的预测性能和计算性能产生不同的影响[10]。优秀的**函数判定标准主要有以下几点:

  1. 非线性:**函数为非线性时,可多层神经网络可逼近任意非线性函数
  2. 可微性:优化器大多采用梯度下降更新参数
  3. 单调性:优秀的**函数是单调的,能够保持梯度下降的方向不变,更利于收敛。
  4. 近似恒等性:f(x)≈x,当参数初始化为一个随机小值时,神经网络更加稳定。

目前常用的**函数有以下几种:

①Sigmoid函数:

卷积神经网络CNN学习记录-概念篇

                                                                                  图3 Sigmoid图像

卷积神经网络CNN学习记录-概念篇

从图3可以看出,Simoid是一个连续函数,因此很容易求得它的导函数,它可以将函数值的范围归一到值域[0,1]之间,并且保持梯度不变,非常有利于前向传输,在特征相差比较复杂或是相差不是特别大时效果比较好。但它也有相应的缺点,在x趋于无穷时,函数值的变化非常小,因此很容易丧失梯度,不利于神经网络的反馈传输,同时Sigmoid函数的幂运算非常复杂导致训练时间很长,输出非0均值时,收敛会很慢。

②Tanh函数:

卷积神经网络CNN学习记录-概念篇

                                                                                           图4 Tanh图像

卷积神经网络CNN学习记录-概念篇

Tanh函数又被称之为双切正切函数,它其实是Sigmoid函数的一个变形函数,由图4可知,Tanh函数是一个严格的单调递增函数,并且它关于原点对称,拥有奇函数的性质,函数的值域为[-1,1],从图像还可以看出Tanh函数在图像特征相差较大的情况下,它会通过不断的循环将特征最大化,表现十分优异。与Sigmoid函数的区别是,当输入为同一组数据时,如值域[0,1],Tanh函数梯度变化更快因此更容易收敛,并且Tanh函数的输出是零均值,所以Tanh函数的表现会比Sigmoid函数更出色,三十它还是和Sigmoid有同样的缺点,那就是使用Tanh函数同样会容易造成梯度缺失,而且它的幂运算也相当复杂导致训练时间很长。 

③ReLU函数

卷积神经网络CNN学习记录-概念篇

                                                                                      图5 ReLU函数图像

卷积神经网络CNN学习记录-概念篇

ReLU(Rectified Linear Unit,)函数又名 线性整流函数,由图5可以看出当ReLU函数的输入x小于0时,ReLU函数处于抑制态,其输出为0;当输入x大于等于0时,ReLU函数处于**态,其输出为x,且ReLU函数在零点处不可导。

ReLU函数相比Sigmoid函数和Tanh函数而言,它很大的一个优点是解决了梯度消失的问题(在正区间内),并且它的计算量也大幅下降,只需要判断输入的自变量函数值的正负即可,因此计算速度有了很大提升,并且收敛速度远快于Sigmoid函数和Tanh函数,但它的缺点是输出非0均值,而且ReLU函数和Sigmoid函数有一个相同点是它们的函数值全部为正,没有负值,因此当输入为负值的时候,ReLU函数会强制的将函数值置零,对应的携带负值的神经元就有可能面临永远不乏被**的问题,也就是会产生ReLU函数的特有现象神经元“坏死”,因此这种稀疏处理的方式会大大减少模型的有效容量,过多的置零操作会导致许多有效特征都被屏蔽掉,大大影响了网络模型的学习效果。

 10.学习率

卷积神经网络CNN学习记录-概念篇

其中:Wt+1为更新后的参数;Wt为当前参数;lr为学习率;

常用的一种学习率下降方法是指数衰减学习率,先采用较大的学习率便于快速取得最优解,然后再逐渐缩减学习率使模型在后期趋于稳定状态。

指数衰减学习率=初始学习率*学习衰减率(当前轮数/多少轮衰减一次参数)

11.欠拟合和过拟合

1.欠拟合

欠拟合的原因通常是模型过于简单,网络层数过少导致的拟合函数的能力不够,因此网络模型在训练集上的准确率偏低,同时在测试集上的准确率表现也欠佳,即使进行多次训练也无法找出最优解,模型也得不到预期的效果。要解决欠拟合的方法很简单,训练次数过少就增加迭代次数继续训练,模型/算法简单就尝试使用其他能力出众的算法、增加模型的参数数量、网络层数和复杂程度,数据量不够就增加数据集让模型充分的提取特征或者采用Boosting集成方法将多组“弱模型”组装成一组“强模型”等等。

2. 过拟合

过拟合成因是给定的数据集相对过于简单,数据图片类型单一,数据量稀少导致模型无法学习到有效特征,反而使得模型在学习过程中学习了过多的噪声图片,过多的脏数据使生成的模型在训练集上准确率特别高,然而当用生成的模型对测试集进行预测的时候,一些特征由于数据集的问题导致学习力度不够,不能有效的识别标注出来,因此导致该模型在测试集上的准确率非常低,无法达到预期效果。下面列举了过拟合的几种常见的解决方法:

  • Early Stopping

Early Stopping也被称为“早停函数”,就如同它的名称一样,Early Stopping是一种通过终止拟合函数迭代来防止过拟合的方法,它的核心思想就是在网络模型在训练模型出现迭代收敛之前就预先停止迭代,Early Stopping具体做法是,在每一个Epoch结束时先计算出验证集的准确率,当准确率不再提高时,就停止训练,而不是非要等规定的Epoch训练完才停止训练。它的防止过拟合表现非常优秀,因此在一些框架中直接提供了早停库函数可以直接调用。

  • 数据扩增

一种简单而有效的方式,通过增加数据集大小,使得训练集中的噪声图像所占比例缩小,从而减少噪声图像对模型的影响,让模型更多的去拟合有效特征,进而能够防止模型发生过拟合的现象。

  • 正则化

正则化是指通过引入额外的新信息、新特征来解决过拟合问题的一种最常用的方法,它的工作流程是在模型原有的目标函数后增加若干正则项,正则项常用的有L1正则项和L2正则项,L1正则化大概率会使很多参数变为零,因此该方法可通过稀疏参数,即减少参数的数量,降低复杂度。L2正则化会使参数无限接近零但不为零,因此该方法可通过减小参数值的大小来降低复杂度。

  • Dropout

Dropout是一种通过修改自身结构来缓解过拟合的一种方法,在训练过程中,Dropout函数将神经元以一定的概率从神经元中舍去,神经网络使用时再恢复链接,保留下来的神经元按照梯度下降法则进行参数的迭代更新,这样一来在前向传播的过程中,可以有效减少训练过程中神经元的数量,大大增强模型的泛化性,使得模型不会太依赖某些局部的特征,从而也使得训练的负荷减少,提高训练的速度。

12.网络优化器

神经网络优化器是一种提升模型性能的方式,它采用循环更新迭代参数来影响模型训练和模型输出的网络参数,使其渐渐逼近或达到最优解,从而最小化(或最大化)损失函数loss(x),也就是说采用网络参数的在loss图像中的梯度值作为标准,找到一种能使损失函数loss(x)最大化/最小化的一个解作为最优解。常见的神经网络优化器有以下几种[3]:

  • Batch Gradient Descent(批量梯度下降)

批量梯度下降法是梯度下降法最为基础的一种方法,该算法的核心思想是在更新每个参数的时候,同时对所有在使用的样本都同时进行更新。这种方法的优点是能得到全局最优解,并且易于并行实现,迭代次数也很少。它的缺点是每当批量梯度下降迭代一次,它就需要用到训练集的所有数据,因此如果样本数目很大,速度就会变得很慢,效率很低。

  • Stochastic Gradient Descent(随机梯度下降)

随机梯度下降算法解决了批量梯度下降法的缺点,该算法的核心思想是通过单个样本来更新迭代一次,它的训练速度很快,在数据量很大的情况下(例如几十万),可能只训练了其中几万条或者几千条的数据,就已经将参数迭代到最优解了,对比1)中的批量梯度下降(BGD),迭代一次需要用到十几万训练数据,一次迭代不可能求得最优解,若迭代10次就需要遍历训练数据10次,因此SGD的缺点也很明显,准确率不如BGD高,因为它的噪音比BGD要多,所以SGD并不是每次都往整体最优的方向迭代,得到的解也不是全局最优的解,而且由于迭代次数过多,所以从解空间的搜索过程来看没有明确的目标性。

  • Mini-Batch Gradient Descent(小批量梯度下降法)

  小批量梯度下降法中和了BGD,SGD二者的优点和缺点,它不仅使算法的训练速度变快,而且保证了最终参数的准确率。它的核心思想是在每次更新参数的时候,使用小批量样本(数量一般为50~256)。小批量梯度下降法的优点是收敛更加稳定,另一方面可以充分的利用深度学习库中高度优化的矩阵操作来进行更有效的梯度计算。

但小批量梯度下降法对学习率的选择要求很严,如果太小,收敛速度就会变慢,如果太大,损失函数就会在极小值处不停的震荡甚至偏离。

 

 

  1. Botto L, Bengio Y,Global Training of Document Processing Systems Using Graph Transformer Networks[C]. Proceedings of the IEEE Computer Society Conference on Computer Vision and Pattern Recognition, San Juan, Puerto Rico:IEEE,1997:489-494.
  2. 张庆辉,万晨霞.卷积神经网络综述[J].中原工学院学报,2017,(03):82-86,90.
  3. 王功鹏, 段萌, 牛常勇. 基于卷积神经网络的随机梯度下降算法[J]. 计算机工程与设计, 2018.