zoukankan      html  css  js  c++  java
  • 视觉机器学习笔记------CNN学习

    卷积神经网络是第一个被成功训练的多层神经网络结构,具有较强的容错、自学习及并行处理能力。

    一、基本原理

    1.CNN算法思想

         卷积神经网络可以看作为前馈网络的特例,主要在网络结构上对前馈网络进行简化和改进,从理论上讲,反向传播算法可以用于训练卷积神经网络。卷积神经网络被广泛用于语音识别和图像分类等问题。

    2.CNN网络结构

         卷积神经网络是一种多层前馈网络,每层由多个二维平面组成。每个平面由多个神经元组成。

         网络输入为二维视觉模式,作为网络中间层的卷积层(C)和抽样层(S)交替出现。网络输出层为前馈网络的全连接方式,输出层的维数在分类任务中的类别数。

    2.1 输入层

          卷积神经网络的输入层直接接收二维视觉模式,如二维图像。可以不再需要额外的人工参与过程去选择或者设计合适特征作为输入,自动地从原始图像数据提取特征、学习分类器,可大大减少人工预处理过程,有助于学习与当前分类任务最为有效的视觉特征。

          为了显示清楚,上图中的输入层只绘制一个二维视觉模式,即对应一幅灰度图像。在实际应用时,输入层可为多通道图像,如三通道彩色图像,或者图像序列,如视频中的连续多帧图像。

    2.2 卷积层(C)层

          卷积层属于中间层,为特征抽取层。每个卷积层中包含多个卷积神经元(C)元,每个C元只和前一层网络对应位置的局部感受域相连,并提取该部分的图像特征,具体提取的特征体现在该C元与前一层局部感受域的连接权重之上。相对于一般的前馈网络,卷积神经网络的局部连接方式大大减少了网络参数。

          为了进一步减少网络参数,卷积神经网络同时限制同一个卷积层不同的神经元与前一层网络不同位置相连的权重均相等,即一个卷积层只用来提取前一层网络中不同位置处的同一种特征,这种限制策略称为权值共享,该假设源于图像处理的实际经验:如果一种特征在图像中的某个位置很有效,那么在图像的其他位置也可能很有效。通过设计这种权值共享连接方式,不仅可进一步减少网络参数,而且也可促进网络学习与位置无关的鲁棒视觉特征用于分类,就是最终学到的某个特征无论出现在图像什么位置,网络总能抽取到该特征并将其用于分类。

          通过设计多个卷积层,网络可以抽取多个不同特征用于最终的分类任务。

          如图2所示,该卷积层的局部感受域大小为5X5,使用黄色和红色标注一层卷积层上两个卷积神经元与前一层网络的对应关系,每一个卷积神经元与前一层网络的联接权重的数目为5X5.

    2.3 抽样层(S)层

          抽样层属于中间层,为特征映射层。每个抽样层包含多个抽样神经元(S)元,S元仅与前一层网络对应位置的局部感受域相连。与C元不同,每个S元与前一层网络局部感受域连接的所有权重都固定为特定值,在网络训练过程中不再进行改变。

          当前C层网络不仅不再产生新的训练参数,而且对前一层网络抽样得到特征进行下采样,进一步降低了网络规模。通过对前层网络局部感受域的下采样,使网络对于输入模式潜在的形变更为鲁棒。

         如图3所示,该抽样层前层网络的局部感受域大小设置为2X2,经过抽样层,前层网络抽取特征维数减为原来的1/4.

    2.4 输出层

         卷积神经网络的输出层与常见前馈网络一样,为全连接方式。最后一层隐层(可为C层或S层)所得到二维特征模式被拉伸为一个向量,与输出层以全连接方式相连。

         该结构可充分挖掘网络最后抽取特征与输出类别标签之间的迎神关系,在复杂应用中,输出层可以设计多层全连接结构。

    2.5 CNN结构示例

         全集神经网络通过结构上的局部连接、权值共享、下采样等,不仅可很好地控制整个网络规模,而且可实现网络对识别图像在位移、缩放和扭曲等形变的鲁棒性。

         对于只包含一层中间层的某前馈网络,假设输入为1000x1000px的图像,隐层神经元的数目为100万,输出类别数为10,那么如果网络为全连接结构,网络参数为1000x1000x1000000+1000000x10≈1012.

         如果采用局部连接结构,并且假设局部感受域的大小为10x10,那么每个隐层神经元只需要和这10x10的局部图像相连接,网络参数10x10x1000000+1000000x10≈108,网络参数下降约4个数量级。

          如果进一步采用权值共享,即100万个隐层神经元与前一层局部感受域的权重都相等,那么网络参数为10x10+1000000x10≈107,网络参数进一步下降一个数量级。

          如果通过抽样层下采样,假设抽样层的局部感受域大小为10x10,那么网络参数为10x10+10000x10≈105,网络参数下降两个数量级。

          卷积神经网络通过结构上的约束和设计可以大大减少网路参数,从结构本身实现一定的正则化,使网络训练过程相对较容易、不易过学习。使网络权重减少的结构限制都针对输入模式在平移、缩放及扭曲等形变上的不变性,训练出来的网络对于这些形变具备更好的鲁棒性。

    3、CNN网络学习

          卷积神经网络从整体上属于前馈网络,在理论上用于训练前馈网络的反向传播算法可以用来训练卷积神经网络。卷积神经网络在结构上存在特殊性,为了高效训练卷积神经网络,需要对反向传播算法进行优化。

    3.1 反向传播算法

          假设用于网络训练的样本集合为{xn,tn}n=1N,输入特征和目标类别的维数分别为ni和n0。以平方和误差为损失函数,网络在整个训练集合上的训练误差表示为如下:

          这里yn表示网络以xn为输入时的输出。网络 在整个训练集合上的训练误差为所有样本的误差和,那么网络在一个训练样本上的训练误差可以表示为:

          反向传播算法训练过程主要包括前向计算过程和反向更新过程。对于普通的全连接前馈网络,前向计算过程逐层计算输入x经过每一层网络的输出如下:

     al=δ(zl)   zl=Wlal-1+bl

          这里al表示输入经过第l层神经元计算节点后的结果,δ(·)表示神经元计算节点的激活函数,zl表示第l层神经元的总输入。对于输入层al=x,对于输出层有anl=y。在得到样本经过经过网络的输出后,就可以计算网络对于该样本的训练误差。

          在反向更新过程中,训练误差相对于网络参数的导数被从后向前逐层进行传播,训练误差相对于任意层偏置项b的导数为:

          这里引入变量δ表示训练误差相对于偏置项b的导数,其物理意义是训练误差相对于偏置项的变化率,即导数,可以称之为灵敏度。对于输出层,该变量对应的值为:

    δnl-1=δ`(unl-1)·(yn-tn)

          对于中间层l(1<l<nl-1),该变量对应的值为:δl=(Wl+1)Tδl+1·δ`(ul)

          根据每一层中改变的具体值,训练误差相对于该层联接权重Wl的导数为:

    3.2 适用于CNN的BP算法

          使用BP算法训练卷积神经网络的过程和普通前馈网络一样,分为前向计算和反向更新过程。卷积神经网络在结构上交替出现卷积层和抽样层,最后一层或几层为全连接层。对于全连接层。对于全连接层,其前向计算、反向更新过程与普通前馈网络一样。

          (1)卷积层

          卷积层的输入为前一层网络的多个二维特征图,卷积层将它们与多个可学习的卷积核(局部连接、权值共享的权重矩阵)进行卷积,然后将卷积结果通过神经元计算节点得到卷积层的输出二维特征图。每一个输出特征图融合与多个输入特征图的卷积结果。卷积层的前向计算过程可以表示为:

          这里Mjl表示第l层第j个输出特征图所对应的多个输入特征图的索引集合,符号“*”代表卷积操作,所有Mj中的输入特征图都共用一个偏置项bjl.

          根据基本的BP算法推导如何计算卷积层的梯度。

          假设卷积层l的下一层为抽样层l+1.BP算法表明,为了计算l层的每个神经元对应的权值更新,需要计算l层的灵敏度δl.为了求l层的灵敏度,需要先对l+1层对应节点的灵敏度求和(对应节点指连接到l层的感兴趣节点的第l+1层的那些节点),然后乘以它们之间联接的权重,最后再乘以l层该神经节点的输入u经过激活函数的导数值,就得到l层每个神经元节点对应的灵敏度δl 。然而由于抽样层下采样的原因,抽样层每一个像素(神经元节点)对应的灵敏度δl+1对应于卷积层输出特征图的一块像素(即采样窗口),因此卷积层l的一个输出特征图中的每个节点只与抽样层l+1中响应特征图的一个节点相连。为了高效计算卷积层l的灵敏度,可以上采样这个经过抽样层下采样的灵敏度图(特征图的每个像素都对应一个灵敏度,构成一个灵敏度图),使得到的上采样灵敏度图的大小与卷积层的灵敏度图大小一致,然后将卷积层l的激活值的导数与上采样灵敏度图进行点积操作即可。由于抽样层的下采样因子均为一个常数值β,所以最后只要对点积后的特征图乘以这个常数即可。需要对卷积层的每一个特征图和它在抽样层对应的灵敏度图都重复上述过程。这个过程表示为:

          这里up(·)表示上采样操作,如果下采样因子是n的话,只要简单地在每个像素水平和垂直方向上重复n次即可。实际上,这个函数可以使用Kronecker乘积⊗来定义:

          up(x)x⊗lnxn

          对于卷积层每一个特征图,可以计算灵敏度图。通过对卷积层的灵敏度图的所有节点进行求和,计算训练误差关于偏置的梯度:

          由于很多连接权值是共享的,因此对于一个给定权重,需要对所有与该权值有联系的连接对该点求梯度,然后再对这些梯度求和。

          (2)抽样层

          抽样层对于输入的每个特征图产生一个下采样的特征图,如果有N个输入特征图,就有N个输出特征图,只是每个输出特征图变小了。抽样层可表示为:

         down(·)表示下采样函数,该函数对输入图中每个不重复nxn的图像块求和后得到输出图中的一个点值,输出图的长和宽均为输入图的1/n。每个输出有一个特定的乘性偏置β和加性偏置b。

          只要得到抽样层的灵敏度图,就可以计算关于偏置参数β和b的梯度。对于下一层为全连接层的抽样层,其灵敏度图可以直接使用标准BP算法进行计算。

          若抽样层的下一层为卷积层,为了计算下一层卷积核的梯度,需要找出抽样层中哪个图像块与卷积层的灵敏度图中一个给定像素相对应。由于连接输入图像块与输出像素之间权重系数实际上就是卷积核的权重(旋转后),抽样层和卷积层灵敏度图之间的关系可以利用卷积操作高效地实现:

          在MATLAB中,使用full类型的卷积操作可以自动对图像边界进行填零处理。根据抽样层的灵敏度图,训练误差相对于加性偏置bj的梯度可以通过对敏感图上的元素进行求和得到:

          而训练误差相对于乘性偏置βj的梯度,由于涉及到该层在前向计算过程中得到的下采样后最初的特征图,可以在前向计算中将下采样后的特征图保存起来,可以使用djl表示对前一层输出特征图下采样后得到的特征图,即:djl=down(ajl-1)

          那么训练误差相对于乘性偏置βj的梯度可以由下式得到:

          根据卷积神经网络每一层的具体结构特点,选择对应计算公式得到训练误差相对于训练参数的梯度,就可以对网络参数进行更新。

     二、算法改进

          卷积神经网络训练过程收敛很慢且耗时。研究者提出了很多提高卷积神经网络运算效率的方法。

    1、设计新的卷积神经网络训练策略

          目前卷积神经网络的训练是利用BP算法以整体监督方式进行学习的,通过采用某种方式的预训练(监督式或无监督式),可以为卷积神经网络提供一个较好的初始值,从而大大提高其整体上使用BP算法进行训练的收敛速度。

    2、使用GPU加速卷积运算过程

         基于GPU运算,通过撰写高效C++代码实现卷积操作,可以将卷积操作速度提高3~10倍。

    3、使用并行计算提高网络训练和测试速度

         将一个大的卷积神经网络划分为几个小的子网络,再并行处理每个子网络中的运算过程,可以有效改善整个大网络的运算过程。

    4、采用分布式计算提高网络训练和测试速度

         该加速方式使用成千上万个运算节点,每个运算节点值完成整个网络计算中的很小一部分计算,通过调度节点为每个运算节点分配相应的计算任务,每个运算节点分别完成各自的计算任务,所有计算节点的计算任务都完成之后,调度节点再将每个计算节点的计算结果汇总融合。

         采用该加速方式,速度提高非常明显,可以完成一些以前几乎不能完成的网络训练任务,但主要问题是相关程序编制较为复杂,需要额外消耗较多的计算资源。

    5、硬件化卷积神经网络

         卷积神经网络成功应用于越来越多的实际问题之中,卷积神经网络中的卷积层和下采样层如果能够被硬件化,将会再次提高卷积神经网络的运行效率。

    三、仿真实验

         首先给出CNN训练的算法仿真,然后介绍卷积神经网络的两个著名实例,详细说明CNN在实际应用中网络结构的具体形式。

    1、卷积神经网络训练算法仿真

         算法1:基于BP算法的卷积神经网络训练算法

         输入:训练样本{xn,tn}n=1N,卷积神经网络的结构{hl}l=1L,学习速率η

         输出:卷积神经网络的参数

         训练过程: 

               初始化:设置卷积网络的所有层的卷积核和偏置项为较小的随机值;

               While not converged

               从训练样本集合中采样样本(xn,tn

         前向计算过程:

                          For l=1:L

         如果hl为卷积层:

                               

         如果hl为下采样层:

                             

         如果hl为全连接层:al=δ(zl),其中zl=Wlal-1+bl

                         End For

                         
                         反向传播过程:

                  For l=L:1

         如果hl为卷积层:

                            

                            

          如果hl为下采样层:

                            

                            

          如果hl为全连接层:

                            

                            

                                         End For

          更新参数:

                  End While

    2、卷积神经网络实际应用实例

         (1)Yann LeCun开发的LeNet所用的卷积神经网络

          基于LeNet的手写数字分类系统在商业上取得极大成功,网络上有LeNet5的在线演示,对于各种复杂的手写数字都能够准确识别。

          如图4所示,LeNet5的网络输入层由32x32的感知节点组成,每一个感知节点用来接收输入32x32灰度图像的一个像素。

          网络的第一个隐层为卷积层,卷积核的数目为6,卷积核的大小(即局部感受域的大小)为5x5,输入层经过第一卷积层,输入图像被卷积成6个28x28的特征图,特征图的大小由输入特征图的32x32变成输出的28x28,卷积采用了valid方式,即输出特征图的大小=输入特征图的大小-(卷积核的大小-1)

         网络的第二个隐层为抽样层,其局部感受域大小为2x2,即每一个2x2的像素被下采样为1个像素,经过第二层隐层后,特征图的大小变为14x14,特征图的数目不变,仍未6个。

         网络的第三个隐层为卷积层,卷积核的数目为16个,卷积核的大小为5x5,所以经过该层输出的特征图大小为10x10(10=14-5+1)。需要注意的是,该层输入的6个特征图,变成输出的16个特征图,这个过程可以看作是将S2的特征图用1个输入层为150(=5x5x6,而不是5x5)个节点。

         网络的输出层为16个节点的网络进行卷积,并且C3的每个特征图并不是和S2的每个特征图都相连,而是可能只和其中几个进行相连。

         LeNet5的具体连接关系如图5所示,纵坐标表示输入特征图索引,横坐标表示输出特征图索引,有X标记的位置表示该位置对应的输入特征图与输出特征图之间存在连接。

         网络的第四个隐层S4为下采样层,局部感受域的大小为2x2,该层输入16个5x5的特征图。

         网络的第五个隐层是卷积层,它是最后一个卷积层,卷积核的大小为5x5,卷积核的数目为6,在卷积操作完成之后,C5将得到的特征图展开成一个向量,向量的大小为120(=20x6).

        网络的第六个隐层F6为一个全连接网络,节点数为84,这84个节点与C5的120个输入节点完全连接。

        网络的输出层节点数目为10,表示对应问题的分类数目(0~9共10个数字).

        (2)Geoffrey Hinton的ILSVRC2013竞赛所用的卷积神经网络

         基于该网络的图像分类算法,取得了ImageNet ILSVRC2013的第一名,分类结果得到极大提高,是卷积神经网络在计算机视觉问题的一个里程碑工作。

         如图6所示,相比于LeNet5,该网络结构更为复杂,输入为224x224x3的彩色图像。

         网络的每个卷积层和抽样层将输入特征图分为两部分,实现并行处理,第一个隐层的卷积核数目为96,分为上下各48个卷积核,卷积时每隔4像素进行卷积,卷积层输出的特征图维数大大减少。

         网络的抽样层没有选用LeNet5使用的均值下采样(mean polling),而采用了最大值下采样(Max polling)。

         在最后的两个隐层中都选择全连接网络,可以学习出经过卷积层和抽样层学习到的特征与输出的更为复杂的关系。

         网络的输出层维数为1000维,表示将输入图像最终分为1000类。

     四、算法特点

    1、算法优点

         卷积神经网络是第一个被成功训练的包含多层结构的神经网络,相对于其他神经网络有着非常明显的优势。

         第一,卷积神经网络的结构设计受启发于神经学家关于视觉神经机制的研究成果,具有较为可靠的生物学依据。

         第二,卷积神经网络能够直接从原始输入数据中自动学习相应特征,省去一般机器学习算法所需要的特征设计过程,节省大量时间,能够学习和发现更为有效的特征。

         第三,卷积神经网络的结构本身实现一定形式的正则化,训练参数被控制在一个很小的数量级上,整个网络不仅更容易训练,而且最终网络也具备非常好的推广性能。

         第四,卷积神经网络的结构特点使得网络对于输入的噪声、形变和扭曲等变化的适应性非常强。

         早期卷积神经网络用于处理二维图像,目前卷积神经网络广泛用于处理一维声音信号、三维图像序列或者视频信号等,扩展能力强。

    2、算法缺点

         卷积神经网络存在着明显的缺点。

         第一,由于在结构上的限制性,卷积神经网络在网络记忆能力和表达能力上远远弱于对应的全连接网络。

         第二,由于卷积操作原因,在训练、测试时运行效率都非常低,运算过程非常耗时,比其对应的全连接网络慢近三倍。

         第三,在结构设计上没有通用的理论和方法指导,要想设出有效的卷积神经网络结构,需要花费大量时间。

       

  • 相关阅读:
    Post和Get的区别(兼谈页面间传值的方式)
    ClickOnce部署Winform程序的方方面面
    TSQL查询进阶深入浅出视图
    一个java volatile测试揭开的陷阱
    java volatile的一个验证反例
    [Swing扩展组件分享]为JTable添加选择列(CheckBox)的包装类
    JTextField限制输入长度的完美解决方案
    swing程序的关闭机制看好你的swing.Timer,别让它成为程序不能退出的原凶
    举例理解单元测试
    打印出txt中出现频率最高的十个词——软件工程个人项目C语言
  • 原文地址:https://www.cnblogs.com/xiaotongtt/p/6196057.html
Copyright © 2011-2022 走看看