卷积神经网络(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卷积神经网络等。值得说明的是,卷积神经网络不仅仅应用于图像相关的网络,还包括与图像相似的网络,例如,在围棋中分析棋盘等。
基本概念
卷积神经网络中有三个基本的概念:局部感受野(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》大家可以找到这篇论文结合学习,针对该网络,首先大家需要了解一下图像中的常用操作卷积,卷积这个词是信号处理领域的词,表示一个系统多数据处理的过程,在图像处理中的卷积,其实就是滤波器。下面先简要介绍一下卷积核的概念,这个不能细说,因为想要深入理解卷积需要很多知识,这里只给大家一个直观的概念,随着我们后面的不断深入,在优化时在讨论卷积核如何设置。
开始前先普及一下基础知识,我们所知说的图片是通过像素来定义的,即每个像素点的颜色不同,其对应的颜色值不同,例如黑白图片的颜色值为0到255,手写体字符,白色的地方为0,黑色为1,如下图,也就是说我们平常说的像素其实就是图片的最小组成,黑白只是0-255,彩色其实就是RGB即三层基色合成的,就可以通过三层下图数值代表即可。
文章图片
卷积核
大家可以简单理解,卷积核的的目的就是提取特征,那什么是特征呢?这篇文章我讲解了什么是特征。如果大家对卷积核感兴趣可以搜索一下看看,本人本科是电子信息工程的,所有这些概念我都已经深入理解了。下面看看卷积对图像到底做了哪些事:
文章图片
如何达到上面的效果呢?我们看看下图:
文章图片
中间那个就是卷积核了,其实就是3x3的方格,里面填一些数字,然后和原始图像进行相乘求和,这样就可以达到上面的效果。
通过卷积核就可以提取图片的特征和压缩图片了,其实卷积核就是一个二维的滤波器,下面再给一个大家到处能看到的动态卷积图:
大家先感性的这里理解,等深入知道CNN后再仔细研究也不迟,下面我们就正式开始讲解 LeNet5网络。
文章图片
因为我们应对的领域是图像识别的领域同时网络的类型是基于BP的,因此针对这个领域先看看BP的缺点,我们知道BP网络是全连接的,对于图片的识别,我们不用提取特征,一般一层提取特征的效果并不是很好,因此我们需要很多层,如果按照BP进行全连接,会使得权值数量急剧增加,想要训练这么多的权值,样本必须足够的才行,即使样本数量够,但是计算量也会急剧增加,而且还有面临梯度消失的情况,因此需要改进连接的方式即采用局部连接和权值共享,如下图:
文章图片
假如一张图片的像素点为4x4的,上图的左边图W为全连接,一个神经元就有16个连接 ,每个连接的权值不同,因此如果有n个神经元则有16n个权值,左图就是局部连接,此时加入四个像素点连接一个神经元,则需要四个,但是如果像素很多的情况下,权值还是很多,此时是按照每个神经元的连接权值如上图的 w 1 w_1 w1?, w 2 w_2 w2?, w 3 w_3 w3?, w 4 w_4 w4?是其中一个神经元的是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 i x_i xi?表示,而输出有10个用 y i y_i yi?表示,而权值 使用 w j i w_{ji} wji?,上式说明所有输入和权值的距离平方和为依据判断,如果越相近距离越小,输出越小则去哪个,如果我们存储的到 w j i w_{ji} wji?的值为标准的输出,如标准的手写体0,1,2,3等,那么最后一层就说明。F6层和标准的作比较,和标准的那个图形越相似就说明就越是那个字符的可能性更大。我们看看标准的是什么样的:
文章图片
这里标准的每个字符都是像素都是12x7=84.这就是解释了为什么F6层的神经元为84个,因为他要把所有像素点和标准的比较在进行判断,因此从这里也可以看出,这里不仅仅可以训练手写体数字,也可以识别其他字符,取决于 w j i w_{ji} wji?和网络的设计,这些可以认为修改的。例如我们让他识别可打印的ASCII码,把小图片添加到这里就可以了,同时增加输出的神经元个数就可以完成了。再给出另外一个详细的图:
【深度学习|深度学习 --- 卷积神经网络CNN(LeNet-5网络详解)】
文章图片
推荐阅读
- Pytorch|PyTorch学习笔记(二)(简介与基础知识)
- 深度学习|YOLOv1——v5学习笔记
- 僧旅|神经网络模型LeNet-5学习
- 神经网络|【机器学习基础】常用激活函数(激励函数)理解与总结
- 数据挖掘|2022第十届泰迪杯数据挖掘大赛B题电力负荷预测代码
- Object|NMS和几种IOU的复现
- 深度学习基础|深度学习基础-线性回归
- 机器学习|机器学习_pytorch_高级神经网络结构_AutoEncoder自编码
- 神经网络|信息瓶颈提出者Naftali Tishby生前指导,129页博士论文「神经网络中的信息流」公布...