深度学习 --- 卷积神经网络CNN(LeNet-5网络详解)

卷积神经网络(Convolutional Neural Network,CNN)是一种前馈型的神经网络,其在大型图像处理方面有出色的表现,目前已经被大范围使用到图像分类、定位等领域中。相比于其余神经网络结构,卷积神经网络须要的参数相对较少,使的其可以普遍应用。算法

本节打算先介绍背景和简单的基本概念术语,而后详细介绍LeNet-5网络,其工做流程你们须要先搞清楚,学习原理实际上是基于BP学习原理的,只是稍微有点麻烦点,这个在后面会单独讲,但愿先从定性的角度去学习他,而后在定量的分析其学习过程,这样更容易接受,掌握这些之后再看hintion的学生的一篇论文深度卷积神经网络《ImageNet Classification with Deep Convolutional  Neural Networks》,在后面会详细探讨这个神经网络优化方面的思想和手段,所以这将是一个很长的学习过程,要研究咱就把他研究透,只有这样你才有可能具备创造性解决问题的能力。固然,有前面的那么多的知识的铺垫,理解这里的就不会太困难了,好,废话很少说,下面开始:网络

发展背景和基本概念

        卷积神经网络是目前深度学习技术领域中很是具备表明性的神经网络之一,在图像分析和处理领域取得了众多突破性的进展,在学术界经常使用的标准图像标注集ImageNet上,基于卷积神经网络取得了不少成就,包括图像特征提取分类、场景识别等。卷积神经网络相较于传统的图像处理算法的优势之一在于避免了对图像复杂的前期预处理过程,尤为是人工参与图像预处理过程,卷积神经网络能够直接输入原始图像进行一系列工做,至今己经普遍应用于各种图像相关的应用中。
       从卷积神经网络的提出到目前的普遍应用,大体经历了理论萌芽阶段、实验发展阶段以及大规模应用和深刻研究阶段。
(1)理论萌芽阶段。1962年Hubel以及Wiesel经过生物学研究代表,从视网膜传递脑中的视觉信息是经过多层次的感觉野(Receptive Field)激发完成的,并首先提出了感觉野的概念。1980年日本学者Fukushima在基于感觉野的概念基础之上,提出了神经认知机(Neocognitron)。神经认知机是一个自组织的多层神经网络模型,每一层的响应都由上一层的局部感觉野激发获得,对于模式的识别不受位置、较小形状变化以及尺度大小的影响。神经认知机能够理解为卷积神经网络的初版,核心点在于将视觉系统模型化,而且不受视觉中的位置和大小等影响。 架构

(2)实验发展阶段。1998年计算机科学家Yann LeCun等提出的LeNet5采用了基于梯度的反向传播算法对网络进行有监督的训练,Yann LeCun在机器学习、计算机视觉等都有杰出贡献,被誉为卷积神经网络之父。LeNet5网络经过交替链接的卷积层和下采样层,将原始图像逐渐转换为一系列的特征图,而且将这些特征传递给全链接的神经网络,以根据图像的特征对图像进行分类。感觉野是卷积神经网络的核心,卷积神经网络的卷积核则是感觉野概念的结构表现。学术界对于卷积神经网络的关注,也正是开始于LeNet5网络的提出,并成功应用于手写体识别。同时,卷积神经网络在语音识别、物体检测、人脸识别等应用领域的研究也逐渐开展起来。
(3)大规模应用和深刻研究阶段。在LeNet5网络以后,卷积神经网络一直处于实验发展阶段。直到2012年AlexNet网络的提出才奠基了卷积神经网络在深度学习应用中的地位,Krizhevsky(他是hintion的学生对应的论文就是刚开始提到的深度卷积神经网络)等提出的卷积神经网络AlexNet在ImageNet的训练集上取得了图像分类的冠军,使得卷积神经网络成为计算机视觉中的重点研究对象,而且不断深刻。在AlexNet以后,不断有新的卷积神经网络提出,包括牛津大学的VGG网络、微软的ResNet网络、谷歌的GoogLeNet网络等,这些网络的提出使得卷积神经网络逐步开始走向商业化应用,几乎只要是存在图像的地方,就会有卷积神经网络的身影。
       从目前的发展趋势而言,卷积神经网络将依然会持续发展,而且会产生适合各种应用场景的卷积神经网络,例如,面向视频理解的3D卷积神经网络等。值得说明的是,卷积神经网络不只仅应用于图像相关的网络,还包括与图像类似的网络,例如,在围棋中分析棋盘等。app

基本概念机器学习

 卷积神经网络中有三个基本的概念:局部感觉野(Local Receptive Fields)、共享权值(Shared Weights)、池化(Pooling)。
(1)局部感觉野。对于通常的深度神经网络,每每会把图像的每个像素点链接到全链接的每个神经元中,而卷积神经网络则是把每个隐藏节点只链接到图像的某个局部区域,从而减小参数训练的数量。例如,一张1024×720的图像,使用9×9的感觉野,则只须要81个权值参数。对于通常的视觉也是如此,当观看一张图像时,更多的时候关注的是局部。
(2)共享权值。在卷积神经网络的卷积层中,神经元对应的权值是相同的,因为权值相同,所以能够减小训练的参数量。共享的权值和偏置也被称做卷积核或滤汲器。
(3)池化。因为待处理的图像每每都比较大,而在实际过程当中,没有必要对原图进行分析,可以有效得到图像的特征才是最主要的,所以能够采用相似于图像压缩的思想,对图像进行卷积以后,经过一个下采样过程,来调整图像的大小。函数

LeNet-5网络

本网络的的讲解主要参考1998年计算机科学家Yann LeCun发布的一篇论文《Gradient based learning applied to document-recognition》你们能够找到这篇论文结合学习,针对该网络,首先你们须要了解一下图像中的经常使用操做卷积,卷积这个词是信号处理领域的词,表示一个系统多数据处理的过程,在图像处理中的卷积,其实就是滤波器。下面先简要介绍一下卷积核的概念,这个不能细说,由于想要深刻理解卷积须要不少知识,这里只给你们一个直观的概念,随着咱们后面的不断深刻,在优化时在讨论卷积核如何设置。post

开始前先普及一下基础知识,咱们所知说的图片是经过像素来定义的,即每一个像素点的颜色不一样,其对应的颜色值不一样,例如黑白图片的颜色值为0到255,手写体字符,白色的地方为0,黑色为1,以下图,也就是说咱们日常说的像素其实就是图片的最小组成,黑白只是0-255,彩色其实就是RGB即三层基色合成的,就能够经过三层下图数值表明便可。学习

image

卷积核优化

你们能够简单理解,卷积核的的目的就是提取特征,那什么是特征呢?这篇文章我讲解了什么是特征。若是你们对卷积核感兴趣能够搜索一下看看,本人本科是电子信息工程的,全部这些概念我都已经深刻理解了。下面看看卷积对图像到底作了哪些事:.net

å¾1    æµ®é

如何达到上面的效果呢?咱们看看下图:

 中间那个就是卷积核了,其实就是3x3的方格,里面填一些数字,而后和原始图像进行相乘求和,这样就能够达到上面的效果。

经过卷积核就能够提取图片的特征和压缩图片了,其实卷积核就是一个二维的滤波器,下面再给一个你们处处能看到的动态卷积图:

å·ç§¯ç¥ç»ç½ç»

你们先感性的这里理解,等深刻知道CNN后再仔细研究也不迟,下面咱们就正式开始讲解 LeNet5网络。

 

由于咱们应对的领域是图像识别的领域同时网络的类型是基于BP的,所以针对这个领域先看看BP的缺点,咱们知道BP网络是全链接的,对于图片的识别,咱们不用提取特征,通常一层提取特征的效果并非很好,所以咱们须要不少层,若是按照BP进行全链接,会使得权值数量急剧增长,想要训练这么多的权值,样本必须足够的才行,即便样本数量够,可是计算量也会急剧增长,并且还有面临梯度消失的状况,所以须要改进链接的方式即采用局部链接和权值共享,以下图:

假如一张图片的像素点为4x4的,上图的左边图W为全链接,一个神经元就有16个链接 ,每一个链接的权值不一样,所以若是有n个神经元则有16n个权值,左图就是局部链接,此时加入四个像素点链接一个神经元,则须要四个,可是若是像素不少的状况下,权值仍是不少,此时是按照每一个神经元的链接权值如上图的w_1,w_2,w_3,w_4是其中一个神经元的是4个权值,所谓权值共享,就是其余神经元的权值也使用这四个值,此时的位置和数值都是这样对应的,这里你们须要理解。即四个神经元只有四个不一样的权值,如今咱们来算算,按照右边的计算:

 全链接的权值数:4x4x4=64(前面两是像素点,后面的4是神经元,这里先不考虑偏置值) ,

局部链接的权值:4x4=16(4个神经元,每一个神经元4个权值)

局部链接和权值共享: 4

 所以权值的数量就下降了,这就是经过局部链接和权值共享来解决BP的存在的问题,这里的理论依据就是根据上面说的感觉野进行简化的,可是按照上图的局部链接存在一个问题就是边缘过分不平滑,会出现边缘效应,为了解决这个问题引入了采样窗口法使其彼此重叠,由于这样作和卷积很相似,所以采样窗口就称为卷积核了,咱们看这个窗口是怎么重叠的;

 

 假如采样窗口为2x2,所谓重叠,咱们每次左移一个像素点送给神经元,往下移动时也是这样的,这样就避免了边缘效应了

到这里基本上知道由来了,下面咱们就正式介绍 LeNet5网络

咱们就按照这个图详细介绍CNN,首先须要说明的是,这里先不介绍该网络的学习过程,先介绍网络的总体架构,解释每层的做用,后面再单独介绍CNN的学习算法和学习过程。

 上图包含输入层总共8层网络,分别为:

输入层(INPUT)、卷积层(Convolutions,C1)、池化层(Subsampling,S2)、卷积层(C3)、池化层(Subsampling,S4)、卷积层(C5)、全链接层(F6)、输出层(径向基层)

输入层(INPUT):

输入的手写体是32x32像素的图片,在论文里说输入像素的值背景层(白色)的corresp值为-0.1,前景层(黑色)的corresp值              为 1.175。这使得平均输入大约为0,而方差大约为1,从而加速了学习,要求手写体应该在中心,即20x20之内。

卷积层(Convolutions,C1): 提取特征

咱们从上图能够看到这里有6个特征平面(这里不该该称为卷积核,卷积核是滑动窗口,经过卷积核提取特征的结果叫特            征平面),获得的每一个特征平面使用的一个5x5的卷积核(这里说明窗口滑动的权值就是卷积核的内容,这里须要注意的是特征平面有6个说明有6个不一样的卷积核,所以每一个特征平面所使用的权值都是同样的,这样就获得了特征平面。那么特征平面有多少神经元呢?以下图,32x32经过一个5x5的卷积核运算,根据局部链接和平滑,须要每次移动1,所以从左移动到右时是28,所以特征平面是28x28的,即每一个特征平面有28x28个神经元。以下图,权值共享就是右边的神经元的权值都是w,这里你们须要好好理解,仍是在解释一下,6个特征平面对应6个不一样的卷积核或者6个滤波器,每一个滤波器的参数值也就是权值都是同样的,下图就是卷积对应的一个特征平面,这样的平面有6个,即卷积层有6个特征平面。

如今咱们计算一下该层总共有多少个链接,有多少个待训练的权值呢?

链接数,首先每一个卷积核是5x5的,每一个特征平面有28x28的神经元(每一个神经元对应一个偏置值),总共有6个特征平                面,所以链接数为:(5x5+1)x28x28x6 = 122304。

权值数,首先每一个特征平面神经元共用一套权值,而每套权值取决于卷积核的大小,所以权值数为:(5x5+1)x6 = 156个

池化层(Subsampling,S2): 下降数据维度

池化层又叫下采样层,目的是压缩数据,下降数据维度,以下图所示,他和卷积有明显的区别,这里采样2x2的选择框进 行压缩,如何压缩呢,经过选择框的数据求和再取平均值而后在乘上一个权值和加上一个偏置值,组成一个新的图片,每一个特征平面采样的权值和偏置值都是同样的,所以每一个特征平面对应的采样层只两个待训练的参数。以下图4x4的图片通过采样后还剩2x2,直接压缩了4倍。本层具备激活函数,为sigmod函数,而卷积层没有激活函数。

那咱们看看S2层,他是使用2x2进行采样,原来是28x28的,采样后就是14x14,总共有6张采样平面,即每一个特征平面对           应一个采样层的一个平面,总共的待训练的权值为:2x6=12

卷积层(C3):

这一层也是卷积层,和C2不一样的是这一层有16个特征平面,那么16个特征平面是如何和上一层池化层是如何对应的呢?这里的16个特征平面是这样对应的,每一个特征平面对应的卷积核,和池化层的多个平面进行卷积。这里把C3的卷积层特征平面编号即0,1,2,...,15,把池化层S2也编号为0,1,2,3,4,5.这两层具体如何对应呢?以下图

上面说了,C3层和S2的对应关系和前面不同,主要体如今C3的每个特征平面是对应多个池化层的采样数据,如上图,横向的数表示卷积层C3的特征平面,纵向表示池化层的6个采样平面,咱们以卷积层C3的第0号特征平面为例,它对应了池化层的前三个采样平面即0,1,2,三个平面使用的是三个卷积核(每一个采样平面是卷积核相同,权值相等,大小为5x5),既然对应三个池化层平面,那么也就是说有5x5x3个链接到卷积层特征平面的一个神经元,由于池化层全部的样本均为14x14的,而卷积窗口为5x5的,所以卷积特征平面为10x10(你们可按照第一个卷积计算求的)。只是这里的卷积操做要更复杂,他不是全部的都是特征平面对应三个池化层平面,而是变化的,从上图咱们能够清楚的看到前6个特征平面对应池化层的三个平面即0,1,2,3,4,5 , 而6~14每张特征平面对应4个卷积层,此时每一个特征平面的一个神经元的链接数为5x5x4,最后一个特征平面是对应池化层全部的样本平面,这里你们好好理解。咱们来计算一下链接数和待训练权值个数:

链接数: (5x5x3+1)x10x10x6+(5x5x4+1)x10x10x9+(5x5x6+1)x10x10 = 45600+90900+15100=151600

权值数: (5x5x3+1)x6 + (5x5x4+1)x9 + 5x5x6+1  = 456 + 909+151 = 1516

这一层为何要这样作呢?为何不和前面的同样进行卷积呢?Lecon的论文说,主要是为了打破对称性,提取深层特征,由于特征不是对称的,所以须要打破这种对称,以提取到更重要的特征,这样设计的目的就是这个缘由,你们好好体会,咱们继续往下看。

池化层(S4):

这一层采样和前面的采样是同样的,使用的采样窗口为2x2的,对C3层进行采样,获得16个采样平面,此时的采样平面为5x5的,这里不细讲了,另外本层存在激活函数,为sigmod函数。你们上面理解的话,这里仍是很简单的。咱们继续看下一层:

卷积层(C5):

这一层仍是卷积层,且这一层的特征平面有120个,每一个特征平面是5x5的,而上一层的池化层S2只有16个平面且每一个平面为5x5,本层使用的卷积核为5x5,所以和池化层正好匹配,那么怎么链接呢?很简单就是这里每一个特征平面链接池化层的全部的采样层。这里称呼特征平面已经不合适了,由于每一个卷积核只对应一个神经元了,所以本层只有120个神经元并列排列,每一个神经元链接池化层的全部层。C5层的每一个神经元的链接数为5x5x16+1,所以总共的链接数为:(5x5x16+1)x120=48120,而这一层的权值和链接数同样,所以也有48120个待训练权值。结合下面的图看:

全链接层(F6):

这一层其实就是BP网络的隐层,且为全链接层,即这一层有84个神经元,每个神经元都和上一次的120个神经元相链接,那么链接数为(120+1)x84 = 10164,由于权值不共享,隐层权值数也是10164,至于为何隐层是84个神经元稍后解释,本层的输出有激活函数,激活函数为双曲正切函数:                           

 根据论文解释:A的幅值,S是原点处的倾斜率,A的经验值是1.7159,缘由没说。

输出层:该层有十个神经元,能够理解这是对于手写体10个数,那个输出的数大,那个神经元表明的数字就是输出,下面咱们看看他是和F6层是如何链接的,他不在是BP的神经输出层,而是基于径向基神经网络的输出层,径向基神经网络在上一节咱们详细探讨了,上一节咱们主要说了是关于高斯径向基,这里使用的是更简单的欧几里得径向基函数,以下:

这公式是什么意思呢?

首先你们应该明白什么是径向基神经网络,他基于距离进行衡量两个数据的相近程度的,RBF网最显著的特色是隐节点采用输人模式与中心向量的距离(如欧氏距离)做为函数的自变量,并使用径向基函数(如函数)做为激活函数。径向基函数关于N维空间的一个中心点具备径向对称性,并且神经元的输人离该中心点越远,神经元的激活程度就越低。上式是基于欧几里得距离,怎么理解那个式子呢?就是说F6层为84个输入用x_j表示,而输出有10个用y_i表示,而权值 使用w_{ji},上式说明全部输入和权值的距离平方和为依据判断,若是越相近距离越小,输出越小则去哪一个,若是咱们存储的到w_{ji}的值为标准的输出,如标准的手写体0,1,2,3等,那么最后一层就说明。F6层和标准的做比较,和标准的那个图形越类似就说明就越是那个字符的可能性更大。咱们看看标准的是什么样的:

 这里标准的每一个字符都是像素都是12x7=84.这就是解释了为何F6层的神经元为84个,由于他要把全部像素点和标准的比较在进行判断,所以从这里也能够看出,这里不只仅能够训练手写体数字,也能够识别其余字符,取决于w_{ji}和网络的设计,这些能够认为修改的。例如咱们让他识别可打印的ASCII码,把小图片添加到这里就能够了,同时增长输出的神经元个数就能够完成了。再给出另一个详细的图:

到这里本节就结束了,下一节咱们将解释该网络的学习过程和权值更新是如何进行的。