转载自《深度学习–基于Keras的Python实践》第十二章
魏贞原 著
电子工业出版社
微信文章地址:https://mp.weixin.qq.com/s/KhtZVooroo0qyD8U_D7S2w
很不错的书,推荐购买实体书。
转载目的是为了方便大家学习,如有侵权,请联系 [email protected] 。立即删除
卷积神经网络(ConvolutionalNeural Network,CNN)是一种前馈神经网络,是一种强大的人工神经网络技术,它的人工神经元可以响应一部分覆盖范围内的周围单元,并保存了问题的空间结构,对计算机视觉和自然语言处理有出色的表现。由于该网络避免了对图像的复杂前期预处理,可以直接输入原始图像,目前被广泛的应用于计算机视觉方面。
卷积神经网络是最近几年发展起来,并引起广泛重视的一种高效识别方法。20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时,发现其独特的网络结构,可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络(ConvolutionalNeural Networks,CNN),现在CNN已经成为众多科学领域的研究热点之一。 K.Fukushima在1980年提出的新识别机是卷积神经网络的第一个实现网络。随后,更多的科研工作者对该网络进行了改进。其中,具有代表性的研究成果是Alexander和Taylor提出的“改进认知机”,该方法综合了各种改进方法的优点并避免了耗时的误差反向传播。
一般地,CNN的基本结构包括两层,其一为特征提取层,每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征。一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来;其二是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射是一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数。卷积神经网络中的每一个卷积层都紧跟着一个用来求局部平均与二次提取的计算层,这种特有的两次特征提取结构减小了特征分辨率。
CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。
卷积神经网络在实际的应用中,可以直接将原始图像作为输入,这使其具有非常高的优势。在给定一个具有32×32像素的标准尺寸的灰度图像的数据集,传统的前馈神经网络将需要1,024个输入权重(加上一个偏差)。但是将像素的图像矩阵平坦化到长的像素值向量,使得图像中的所有空间结构失去了效果。除非所有的图像都被完全调整大小,否则神经网络将会出现很大的问题。此外,如果对一个像素是1000×1000的图像进行识别,采用多层感知器(MLP)神经网络,需要一个1000×1000个输入层神经元,如果设置同等数量的隐藏层神经元,计算开销时非常巨大的,这基本上时无法计算的。
卷积神经网络通过使用小的输入数据的平方值,来学习内部特征,并保持像素之间的空间关系。特征在整个图像中被学习和使用,因此图像中的对象在场景中被移动,仍然可以被网络检测到。这就是为什么卷积神经网络被广泛应用于照片识别,手写数字识别,人脸识别等具有不同方向的对象识别的原因。以下是使用卷积神经网络的一些好处:
在卷积神经网络(CNN)中通车包含一下类型的层:
在图像处理中,往往把图像表示为像素的向量,比如一个1,000×1,000的图像,可以表示为一个1,000,000的向量。假如神经网络中,隐含层数目与输入层一样,即也是1,000,000时,那么输入层到隐含层的参数数据为1,000,000×1,000,000=,这样数据量非常巨大,基本没法训练。所以要想使用神经网络处理图像,必先减少参数加快训练速度。卷积层就是用来局部感知提取特征,降低输入参数的层。
滤波器(Filters)本质上是该层的神经元,具有加权输入并产生输出值,输入大小是固定大小的图像样本(如5×5)。 如果卷积层是输入层,则输入将是像素值。 如果它们在网络架构中较深,则卷积层将从前一层的特征图获取输入。
其实简单的局部感知,参数仍然过多,需要进一步降低参数的数量,第二个方法就是权值共享。在上面的例子中,每个神经元都对应100个参数,一共1,000,000个神经元,如果这1,000,000个神经元的100个参数都是相等的,那么参数数目就变为100了。 怎么理解权值共享呢?在这里可以把100个参数(也就是卷积操作)看成是提取特征的方式,该方式与位置无关。这其中隐含的原理则是:图像的一部分的统计特性与其他部分是一样的。这也意味着在这一部分学习的特征也能用在另一部分上,所以可以在图像上的所有位置,使用同样的学习特征。更直观一些,当从一个大尺寸图像中随机选取一小块,比如说 8x8 作为样本,并且从这个小块样本中学习到了一些特征,这时我们可以把从这个8x8 样本中学习到的特征作为探测器,应用到这个图像的任意地方中去。特别是,可以用从 8x8 样本中所学习到的特征跟原本的大尺寸图像作卷积,从而对这个大尺寸图像上的任一位置获得一个不同特征的激活值。每个卷积都是一种特征提取方式,就像一个筛子,将图像中符合条件(激活值越大越符合条件)的部分筛选出来。
在CNN的设定里,特征图(Feature Map)是卷积核卷出来的,而不同的特征提取(核)会提取不同的特征,模型想要达成的目的是,找到能解释现象的最佳的一组卷积核。例如某个核如果形似gabor算子,就会提取出边缘信息的特征,但这个特征太简单,很可能不是模型需要的特征。这与大脑的功能是很相似的,比如gabor算子模拟了V1具有方向选择性的神经元,这些神经元被称为simplecell,只能对orientation做出响应,人脑依靠这些神经元检测出图像的边缘信息。若要完成一些更高级的功能,就需要更复杂的神经元,它们能对信号做一些更复杂的变换。而神经科学的证据表明,这些复杂的神经元很可能是由多个V1 simple cell的输出信号组合而成。考虑一个对象识别的任务,对象自身具有不同的特征,不同的cell编码其不同的特征,组合起来表达这一特定对象。CNN的设定中的特征图(featuremap)对应各层cell的信号输出。
对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征。采用池化层可以忽略目标的倾斜、旋转之类的相对位置的变化,以此提高精度,同时降低了特征图的维度并且已定成度上可以避免过拟合。池化层通常非常简单,取平均值或最大值来创建自己的特征图。
全连接层在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层等操作是将原始数据映射到隐藏层的特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。全连接层通常具有非线性激活函数或softmax激活函数,预测输出类的概率。 在卷积层和池化层执行特征抽取和合并之后,在网络末端使用全连接层用于创建特征的最终非线性组合,并用于预测。
ImageNet LSVRC是一个图片分类的比赛,其训练集包括127W+张图片,验证集有5W张图片,测试集有15W张图片。本文截取2010年Alex Krizhevsky的CNN结构进行说明,该结构在2010年取得冠军,top-5错误率为15.3%。值得一提的是,在2017年最后一届的ImageNet LSVRC比赛中,取得冠军的团队(WMW)已经达到了top-5错误率2.3%。
图12-1即为Alex的CNN结构图。需要注意的是,该模型采用了2-GPU并行结构,即第1、2、4、5卷积层都是将模型参数分为2部分进行训练的。在这里,更进一步,并行结构分为数据并行与模型并行。数据并行是指在不同的GPU上,模型结构相同,但将训练数据进行切分,分别训练得到不同的模型,然后再将模型进行融合。而模型并行则是,将若干层的模型参数进行切分,不同的GPU上使用相同的数据进行训练,得到的结果直接连接作为下一层的输入。
转载自《深度学习–基于Keras的Python实践》第十二章
魏贞原 著
电子工业出版社
微信文章地址:https://mp.weixin.qq.com/s/KhtZVooroo0qyD8U_D7S2w
很不错的书,推荐购买实体书。
转载目的是为了方便大家学习,如有侵权,请联系 [email protected] 。立即删除