神经网络到卷积神经网络原理与实践.docx
《神经网络到卷积神经网络原理与实践.docx》由会员分享,可在线阅读,更多相关《神经网络到卷积神经网络原理与实践.docx(19页珍藏版)》请在冰豆网上搜索。
神经网络到卷积神经网络原理与实践
神经网络到卷积神经网络
推导与实践
摘要
卷积神经网络(ConvolutionalNeuralNetwork,CNN)是一种源于人工神经网络(NeuralNetwork,NN)的深度机器学习方法,近年来在图像识别领域取得了巨大的成功。
CNN由于采用局部连接和权值共享,保持了网络的深层结构,同时又大大减少了网络参数,使模型具有良好的泛化能力又较容易训练。
NN的训练算法是基于梯度下降的错误反向传播(BackPropagate,BP)算法,CNN的训练算法是BP算法的一种变形。
本文从梯度下降的数学推导中总结了NN训练过程中的错误信号传播和权重修改策略,用切割小图训练共权神经网络的方式解释了CNN中的卷积过程,并以特殊卷积的方式解释了CNN的子采样过程,最后将NN的错误信号传播和权重修改策略移植到CNN的训练中。
我们将推导出的CNN训练方法用C++编码实现,用CNN应用最早最典型的手写数字识别问题验证被编码的推导过程,得到了正确的效果。
图目录
第三章神经网络与卷积神经网络
人工神经网络(NeuralNetwork,NN)有50多年的历史。
神经网络的发展也经历过单层感知机,多层感知机,多层感知机变形几个阶段。
卷积神经网络(ConvolutionalNeuralNetwork,CNN)是多层感知机的一种变体。
神经网络的训练方法是错误反向传播算法(BackPropagate,BP),而错误反向传播算法的数学基础是梯度下降。
在本章的前半部分,我给出单层感知机和多层感知机的工作原理,即BP算法。
计算机学者从生物视觉的研究中得到启示,一个视觉神经细胞只与其距离较近的邻层神经元相连。
鉴于此,CNN的采用了局部感受野。
为了简化模型,一个特征平面的神经元共享权值。
CNN最早由YannLecun实现并运用到手写数字识别问题中,并取得该领域最高的识别率,至今未被超越。
CNN是NN的一种变形,CNN与NN最大的不同在于CNN的卷积和子采样过程,而子采样可以被认为是一种特殊的卷积过程。
在本章的后半部分,将以切割小图训练共享权值的NN的方式阐释卷积神经网络中的卷积过程。
本文按照BP的思想实现并训练了一个卷积神经网络模型。
我使用经典的手写数字识别问题检测CNN训练推导过程的准确性。
在实验中,我使用6万张图片训练CNN,用1万张数字图片做测试,训练后的CNN模型在测试集上的准确率高达98.6%。
实验说明用切割小图训练NN的方法推导的CNN训练方法是正确的。
3.1神经网络
神经网络(neuralnetwork,NN)是生物科学和信息科学交叉的产物。
生物学家研究人脑神经的工作过程,发现神经元(神经细胞)和神经元之间通过突起(轴突和树突)的相连,神经细胞感受到刺激之后产生兴奋并通过细胞突起将兴奋传导给与之有连接的神经元。
神经元的连接大多是相邻层间的连接,神经细胞总体上呈现分层结构,感受器中的神经接收外界刺激,神经中枢的神经元决定人脑的意识。
如图3.1为一个神经细胞的结构:
图3.1神经元的结构[24]
Figure3.1structureofaneuron[24]
一个神经元和其它神经元的连接如图3.2所示:
图3.2神经元之间的连接[25]
Figure3.2theconnectionbetweenneurons[25]
一个神经元通常和若干个神经元相连,连接有强有弱,不同的连接就像电子元件之间阻值不同的带阻导体。
一个非输入神经元在兴奋传导过程中受到的刺激总和为与之相连的神经元传递来的兴奋之和。
我们用Y表示一个神经元受到的兴奋之和,兴奋来自于n个与之相连的前层神经元,那么Y可以通过公式3-1来计算。
在公式3-1中,x0=1,它并不是一个真实的兴奋输入,只是为了统一表示而虚拟出来的一个节点,w0反映神经元基础兴奋度。
一个神经元与n个前层神经元相连,xi是n个前层神经元传来的兴奋值,wi是其与前层n个神经元的连接紧密程度。
(3-1)
一个神经元受到总量为Y的刺激之后会在细胞内部转化一下,得到一个兴奋输出y,该输出将传导给与之相连的后层神经元。
我们假设y与Y满足公式3-2(对应整形函数,可以有多种定义)。
Sigmoid函数是一个S形函数,图3.3为sigmoid函数的图像。
Sigmoid函数在定义域单调递增,当Y取0时,y=0.5;当Y趋向正无穷时,y=1;当Y趋向负无穷时,y=0。
(3-2)
图3.3sigmoid函数
Figure3.3sigmoidfunction
3.1.1单层感知机
神经网络最简单的结构就是单输出的单层感知机,单层感知机只有输入层和输出层,分别代表了神经感受器和神经中枢。
图3.4是一个只有2个输入单元和1个输出单元的简单单层感知机。
在图3.4中,w1、w2代表神经网络的输入神经元受到的刺激,w1、w2代表输入神经元和输出神经元间连接的紧密程度,w3代表输出神经元的兴奋阈值。
Y是输出神经元受到的刺激总和,y为输出神经元的输出。
图3.4单层感知机
Figure3.4aone-layerperceptron
如果整形函数(如sigmoid)确定,网络拓扑和连接权重就足以表示一个网络。
在网络拓扑确定的情况下,利用训练数据修改连接权重的过程就是BP算法。
我们利用一个例子说明单层感知机的训练过程。
有一个单层感知机的网络拓扑如图3.5所示,权重wi(i=1,2,3)被初始化为0~1之间的随机小数。
一个训练的样本我们用式子[(x1,x2),T]表示,x1,x2为输入神经元的兴奋值,T教师信号,即期望输出神经元产生的输出,T取值一般为0或者1。
单层感知机的BP训练分为三个过程:
前向过程、错误反向传导过程和连接权重修改过程。
(1)前向过程:
利用当前的权重和输入兴奋计算Y和y的过程就是BP训练的前向过程,前向过程模拟的是脑神经的工作过程。
Y和y的计算满足公式3-3。
(3-3)
(2)错误信号反向传播过程:
图3.5单层感知机的错误信号
Figure3.5Errorofone-layerperceptron
对于未经训练的网络,y往往和期望输出T不一样,y和T的差值构成整个神经网络的源错误信号,该信号要用来指导网络权重的修正。
我们按照图3.5定义输出神经元的输入错误信号Err(Y)和输出错误信号Err(y)。
(3)连接权重的修改:
权重的修改,有两个感性直观的方法:
a.某个输出神经元的错误越大,与之相关的连接(w)就需要越多的修改;例如:
Err(Y)很大,说明w修改量delta(w)也应该很大。
b.在输入神经元中,谁的兴奋值越大,对错误产生的责任就越大,其与输出神经元的连接就需要越多的修改。
例如:
x1=0.1,x2=0.8。
Err(Y)的出现,x2的责任更大,连接权重w2的修改量delta(w2)要比delta(w1)要更大。
基于以上两点,我们把一条连接权重的修改量定为该连接的前层神经元的输出x乘以后层神经元的Err(Y),用公式3-4表示:
(3-4)
再由公式3-5我们可以得到图3.5中的各权重修改量为:
(3-5)
算出delta(w)之后,我们通过公式3-6完成对网络的更新。
(3-6)
我们可以从多元函数求极值角度解释上述过程。
模型的训练的理念是经验风险最小化,也就是要使训练数据的错误|Err(y)|最小,但是由于|Err(y)|带有绝对值的目标不方便求导,我们把模型训练目标用函数lossFun表示。
lossFun定义如公式3-7:
(3-7)
对于一个样本[(x1,x2),T],特征为x1、x2;类别或输出目标为T。
lossFun是一个以[(x1,x2),T]为常量,以[w1,w2,w3]为变量的多元函数。
模型的训练优化可看成一个多元函数求极值的问题。
已知条件为:
(3-8)
在公式3-8中,x1,x2,T为常量,w1、w2,、w3为变量。
lossFun对w1求偏导得到:
(3-9)
同理可得:
(3-10)
训练样本[(x1,x2),T]时,网络参数按照梯度下降的方向求解。
偏导数算出的是lossFun上升最快的方向,W的修改量delta(W)是lossFun下降最快的方向,所以delta(W)方向与梯度方向相反。
(3-11)
3.1.2单输出多层感知机
在单层感知机的基础上增加若干个(本文增加一个)隐层,得到多层感知机(MultiPerceptronMachine,MLP)。
结构如图3.6所示:
图3.6单输出多层感知机
Figure3.6aMLPwithsingleoutput
图3.6中各变量满足公式3-12:
(3-12)
假如现在有一个样本[(x1,x2),T],用该样本训练网络时,网络优化的目标为lossFun最小。
lossFun是一个关于变量w和v多元函数。
网络的训练又变成多元函数求极值的问题。
求v1的梯度:
(3-13)
同理可得vi的梯度:
(3-14)
求w11的梯度:
(3-15)
同理,可得wij的梯度:
(3-16)
通过上述方法算得单输出多层感知机的各连接权重w和v的梯度,只要按照w和v的梯度下降方向更新网络就能完成网络训练。
3.1.3多输出多层感知机
在前面两节中的神经网络输出节点都是一个,如果遇到多分类问题,我们便需要多输出的神经网络。
图3.7为一个多输出多层感知机。
图3.7多输出多层感知机
Figure3.7aMLPwithmultioutput
在图3.7的网络中,各变量满足公式3-17:
(3-17)
通过数学求导,得到lossFun对vjk的梯度:
(3-18)
求导得到lossFun对wij的梯度:
(3-19)
在求出权重梯度之后,只要按照梯度下降的方向更新连接权重就可以完成网络的训练。
从公式3-21和3-22我们总结出:
对于末层神经元,输出错误定义为:
(3-20)
对于非末层神经元,输出错误如Err(y)由与其相连的后层神经元的输入错误Err(Z)加权求和得到,如公式3-21所示。
(3-21)
一个神经元的输入错误Err(Y)与输出错误Err(y)满足公式3-22。
(3-22)
一条连接权重的更新量为该条连接前层神经元的输出乘以后层神经元的输入错误信号,如公式3-23所示。
(3-23)
3.2卷积神经网络
受Hubel和Wiesel对猫视觉皮层电生理研究启发,有人提出卷积神经网络(CNN),YannLecun最早将CNN用于手写数字识别并一直保持了其在该问题的霸主地位。
近年来卷积神经网络在多个方向持续发力,在语音识别、人脸识别、通用物体识别、运动分析、自然语言处理甚至脑电波分析方面均有突破。
卷积神经网络与普通神经网络的区别在于,卷积神经网络包含了一个由卷积层和子采样层构成的特征抽取器。
在卷积神经网络的卷积层中,一个神经元只与部分邻层神经元连接。
在CNN的一个卷积层中,通常包含若干个特征平面(featureMap),每个特征平面由一些矩形排列的的神经元组成,同一特征平面的神经元共享权值,这里共享的权值就是卷积核。
卷积核一般以随机小数矩阵的形式初始化,在网络的训练过程中卷积核将学习得到合理的权值。
共享权值(卷积核)带来的直接好处是减少网络各层之间的连接,同时又降低了过拟合的风险。
子采样也叫做池化(pooling),通常有均值子采样(meanpooling)和最大值子采样(maxpooling)两种形式。
子采样可以看作一种特殊的卷积过程。
卷积和子采样大大简化了模型复杂度,减少了模型的参数。
3.2.1卷积神经网络的常用结构
卷积神经网络通常采用若干个卷积和子采样层的叠加结构作为特征抽取器。
卷积层与子采样层不断将特征图缩小,但是特征图的数量往往增多。
特征抽取器后面接一个分类器,分类器通常由一个多层感知机构成。
在特征抽取器的末尾,我们将所有的特征图展开并排列成为一个向量,称为特征向量,该特征向量作为后层分类器的输入。
图3.8卷积神经网络结构示例
Figure3.8asamplestructrueofCNN
3.2.2卷积与子采样
图3.9卷积过程
Figure3.9procesureofconvolution
卷积过程有三个二维矩阵参与,它们分别是两个特征图和一个卷积核:
原图inputX、输出图outputY卷积核kernelW。
卷积过程可以理解为卷积核kernalW覆盖在原图inputX的一个局部的面上,kernalW对应位置的权重乘于inputX对应神经元的输出,对各项乘积求和并赋值到outputY矩阵的对应位置。
卷积核在inputX图中从左向右,从上至下每次移动一个位置,完成整张inputX的卷积过程。
卷积过程如图3.9所示。
子采样有两种形式,一种是均值子采样(mean-pooling),一种是最大值子采样(max-pooling)。
两种子采样看成特殊的卷积过程,如图3.10所示:
(1)均值子采样的卷积核中每个权重都是0.25,卷积核在原图inputX上的滑动的步长为2。
均值子采样的效果相当于把原图模糊缩减至原来的1/4。
(2)最大值子采样的卷积核中各权重值中只有一个为1,其余均为0,卷积核中为1的位置对应inputX被卷积核覆盖部分值最大的位置。
卷积核在原图inputX上的滑动步长为2。
最大值子采样的效果是把原图缩减至原来的1/4,并保留每个2*2区域的最强输入。
图3.10子采样过程的卷积式表示
Figure3.10max-poolingandmean-poolinginformofconvolution
3.2.3卷积与权值共享
在卷积神经网络的卷积层,卷积核本质是神经元之间相互连接的权重,而且该权重被属于同一特征图的神经元所共享。
在实际的网络训练过程中,输入神经元组成的特征图被交叠切割成卷积核大小的小图。
每个小图通过卷积核与后层特征图的一个神经元连接。
一个特征图上的所有小图和后层特征图中某个神经元的连接使用的是相同的卷积核,也就是同特征图的神经元共享了连接权重。
图3.11CNN中的卷积过程
Figure3.11convolutioninCNN
图3.11展示了卷积神经网络中兴奋在卷积层由前向后传播的一次卷积过程。
这个过程相当于把inputX切割成和kernalW一样大小的4各小图,4张小图对应4个4*1的神经网络,这四个小神经网络共享权值KernalW,如图3.12所示。
图3.12四个4*1的神经网络
Figure3.12fourNNof4*1
在人工神经网络中,一个非输入神经元表征了某种特征,一个非输入神经元又可以由与之相关的前层连接表示,通过权重的还原,我们可以看到每个神经元代表的特征,神经元特征是逐层具象化的[7]。
在卷积神经网络中,卷积核是神经元之间的连接权重,如果只用来训练局部,可以代表局部某种特征,但是它被一个特征图共享,用来训练整个特征图,代表了比较通用(适用于全图)的某种的特征。
中我们往往在卷积神经网络中设置多个卷积层,在一个卷积层中设置多个卷积核,以得到丰富的特征供尾部的分类器使用。
3.2.4CNN训练过程中的三次卷积过程
在神经网络的训练中包含兴奋前向传递、错误信号反向传递和权重修改三个过程,在卷积神经网络的训练过程中存在三次卷积过程与之对应。
这三次卷积分别是前向过程的图像卷积、错误反向传导过程中的错误传导卷积和权值更新卷积。
前向图像卷积、权值更新卷积采用的是valid卷积模式,错误信号传导卷积采用的是full卷积模式。
卷积过程可以通过切割小图(如图3.11与3.12)训练神经网络的方式(公式3.23~3.26)论证。
卷积神经网络的一次迭代训练分为三个过程。
第一个过程为由原始兴奋输入,经过前向卷积和子采样过程以及后层分类器的前向过程得到分类器的输出。
第二个过程为由分类器输出和教师信号得到末层网络的错误信号,并根据梯度下降法将错误信号依次往前传递到所有非输入层的神经元中。
第三个过程为根据神经元上的错误信号以及神经元的输出更新网络的权重,包括后层分类器的权重更新和卷积核更新。
在特征抽取器通过三次卷积完成以上三个过程中。
3.2.4.1前向过程的卷积
前向过程的卷积为典型valid的卷积过程,即卷积核kernalW覆盖在输入图inputX上,对应位置求积再求和得到一个值并赋给输出图OutputY对应的位置。
每次卷积核在inputX上移动一个位置,从上到下从左到右交叠覆盖一遍之后得到输出矩阵outputY(如图3.11与图3.13所示)。
如果卷积核的输入图inputX为Mx*Nx大小,卷积核为Mw*Nw大小,那么输出图Y为(Mx-Mw+1)*(Nx-Nw+1)大小。
图3.13前向卷积过程
Figure3.13forwardconvolutionalprocedure
3.2.4.2错误反向传导过程的卷积
在错误信号反向传播过程中,先按照神经网络的错误反传方式得到尾部分类器中各神经元的错误信号,然后错误信号由分类器向前面的特征抽取器传播。
错误信号从子采样层的特征图(subFeatureMap)往前面卷积层的特征图(featureMap)传播要通过一次full卷积过程来完成(如图3.14)。
这里的卷积和上一节卷积的略有区别。
如果卷积核kernalW的长度为Mw*Mw的方阵,那么subFeatureMap的错误信号矩阵Q_err需要上下左右各拓展Mw-1行或列,与此同时卷积核自身旋转180度。
subFeatureMap的错误信号矩阵P_err等于featureMap的误差矩阵Q_err卷积旋转180度的卷积核W_rot180。
图3.14中的卷积过程可以通过公式3-24和四个4*1的NN误差反向传播的过程(图3.12)论证。
对于图3.14中错误信号矩阵Q_err中的A,它的产生是P中左上2*2小方块(对应图3.12中的①)导致的,该2*2的小方块的对A的责任正好可以用卷积核W表示,错误信号A通过卷积核将错误信号加权传递到与错误信号量为A的神经元所相连的神经元a、b、d、e中(如图3.11与3.12),所以在图3.14中的P_err左上角的2*2位置错误值包含A、2A、3A、4A。
同理,我们可以论证错误信号B、C、D的反向传播过程。
综上所述,错误信号反向传播过程可以用图3.14中的卷积过程表示。
图3.14错误传播过程中的卷积
Figure3.14convolutioninErrorpropagate
3.2.4.3权值更新过程中的卷积
卷积神经网络中卷积层的权重更新过程本质是卷积核的更新过程。
由神经网络的权重修改策略(公式3-26)我们知道一条连接权重的更新量为该条连接的前层神经元的兴奋输出乘以后层神经元的输入错误信号,卷积核的更新也是按照这个规律来进行。
图3.15四个4*1的神经网络的权重更新
Figure3.15weightupdateof4NNof4*1
在前向卷积过程(图3.13)中,卷积核的每个元素(链接权重)被使用过四次,所以卷积核每个元素的产生四个更新量。
把前向卷积过程当做切割小图进行多个神经网络训练过程,我们得到四个4*1的神经网络的前层兴奋输入和后层输入错误信号,如图3.16所示。
图3.16卷积核的权重修改量
Figure3.16W_deltaofKernalW
根据神经网络的权重修改策略(公式3-26),我们可以算出如图3.16所示卷积核的更新量W_delta。
权重更新量W_delta可由P_out和Q_err卷积得到,如图3.17所示。
图3.17权重更新过程中的卷积
Figure3.17convolutioninweightupdate
3.2.5卷积的作用
通过实验我们发现,训练之后的卷积核有些能突显图像的边缘特征,有些能对原图产生了震颤效果。
通过丰富的卷积核,卷积可以提炼原题的某些特征,同时模型将对目标在产生偏移、缩放或者轻微形变的时候变得鲁棒。
图3.18两个固定卷积核
Figure3.18twofixedkernels
另外,我们要可以将第一层卷积核固定,设置为特定的算子,如边沿检测算子,平移算子(如图3.18),模糊算子。
每个卷积核处理完一个特征图之后得到一个新的特征图,多个卷积可以得到多个特征图,这个过程相当于增加了训练集,相当于对模型进行了数据增量训
练,使模型的鲁棒性更好。
3.3卷积神经网络实践
卷积神经网络最早也最成功、最典型的问题是手写数字识别问题,为了进一步验证本文以上CNN推导的算法过程的正确性,我用C++按照以上推导过程实现了一个卷积神经网络,得到了预期的结果,这个结果验证了以上推导过程的正确性。
本文根据以上的神经网络和卷积神经网络的推导过程采用图3.19所示的网络结构实现了卷积神经网络[27]。
我们采用了MNIST数据集的60000张手写数字图片作为训练集,用10000张手写数字图片作为训练集,我们的卷积神经网络经过训练样本的100次迭代,在训练集上得到99.51%的准确率,在测试集上得到98.8%的准确率。
图3.19数字识别使用的卷积神经网络结构[26]
Figure3.19structureofCNNusedforMINSTtest[26]
3.4本章小结
本章我们讲解了神经网络和卷积神经网络的工作原理,重点介绍了卷积神经网络的卷积过程,最后本文编码实现CNN用于手写数字识别,验证了模型推理的准确性。
第六章总结与展望
本文从数学角度分析论证了神经网络和卷积神经网络的工作原理,总结了BP算法中错误信号传播和权重修改策略。
本文首次提出用切割小图训练共权神经网络的思想和BP算法的错误信号计算、权重修改规律解释了CNN中的卷积过程,本文基于此思想,实现了CNN算法,用手写数字识别问题进一步说明了该思想的准确性。
论文题目
卷积神经网络研究及其在
基音检测中的应用---第三章
学院:
计算机学院
专业:
计算机科学与技术
研究方向:
人工智能
姓名:
黄志强
指导教师:
何立强教授
张学良副教授
2015年5月2日