周一至周五 | 9:00—22:00

期刊论文网 > 社会科学论文 > 统计学论文 > 统计学类论文 基于卷积神经网络的深度学习研究及应用

统计学类论文 基于卷积神经网络的深度学习研究及应用

2018-12-10 15:22:02来源:组稿人论文网作者:婷婷

  摘要

  深度学习是机器学习研究中的新的方向与热点,深度结构能够让包含很多隐含层的学习模型学习到抽象的数据表示形式。深度学习在音频识别、目标识别、目标探测和大量其他的领域例如基因领域等有着很大的进展。深度学习能够通过BP算法发现大数据中的复杂结构。该算法可以帮助指导模型如何改变前一层的误差和改变此层的内部的参数,从而用于计算。其中,深度学习中的卷积网络模型在图像处理等领域有着明显的提升。

  本文综述了人工神经网络的发展现状和最新研究成果,并简要介绍了神经网络和经典卷积神经网络算法和基本概念。本文训练了一个新的深度卷积神经网络来分类mnist数据库的手写数字,使之能够对应于10个不同的类别。在测试集上,本文达到了98.8%准确率,虽然构造是相对简单的卷积神经网络模型,但其准确率依旧不逊于一些由顶级专家精心构造的传统技术,甚至比它们效果还要好。本文的卷积网络总共拥有250,730个参数和36,324个神经元,一共有8层,其中包含三个卷积、池化层、两个全连接层,顶层为softmax分类器。为了使模型训练更快,本文使用局部连接技术。在全连接层中,本文使用了最新提出并且被证明是极其有效的正则化技术即‘dropout’,来避免过度拟合。

  关键词:深度学习,卷积神经网络,手写数字识别

  第一章绪论

  本章概述了深度学习一些经典理论,重点讲述了深度学习的发展历史和现在主流的研究方向。针对深度学习在各领域的实际应用,介绍了它们各自优点及缺点。本章的后面对自己的工作做了一些总结。

  1.1研究背景

  机器学习的主要任务是设计出可以智能地挖掘出隐藏在数据中的模式和规律的学习算法,它在现代社会各方面都有出色的表现,从web搜索到社会网络内容的过滤和电子商务网站的商品推荐。深度学习是机器学习的一个新的研究方向跟热点。有多方面的因素促进这一进程,其一是现代网络的用户生产生活时产生的大量数据,它们的一大特点就是量大且包含的信息很杂,一般要额外处理;第二,如今的计算机的计算能力越发强大,尤其是GPU的出现。大量研究显示,深度学习这一模型能够表示高度抽象且复杂的函数,并且高效地解决了大量语音识别、目标识别和自然语言处理与理解等人工智能相关的任务。深度模型的基本框架是由多层非线性映射的组织构成,它的网络层间的输入输出彼此连接。本模型可以学习到原始数据的某种特征的表示,除此之外这种表示还可以包含输入的一些结构特点,成功地应用在分类、回归和信息检索等实际问题。以前的技术常常是根据手工提取需要的特征,显然它们不仅要求不少的工程方面的工作量还对专业知识要求也很高。但若我们找到一种可以普遍使用的方法来自动学习代替以前的方案,就可以缓解这些困境,它是deep learning的优点。

  Rosenblatt在1985年第一次提出感知机模型这一概念,它可以分类一些简单的形状,神经网络模型研究的第一个高潮由此掀起。然而,当时感知机模型的特征提取层不是自动学习的而是人工构造的,并且单个隐含层的结构也限制了它的学习能力。当然,这与那时的计算机性能也有关系。1986年,Hinton在感知机的基础上构造了用多个隐含层的深层神经网络,这也掀起了神经网络研究的第二次高潮。深层神经网络能够学习更加复杂的问题,相比感知机,具备更强的学习能力。除了结构上的差别,深层神经网络还使用了新的算法来实现权值的更新,即模型的训练,这就是很有名的反向传播算法。但是BP算法训练的效果并不好,尤其在隐含层比较多的情况下表现很差,不利于构造较深的网络结构,它存在如下问题:

  不能进行无监督的训练,只能训练有标注数据;

  学习速度比较慢;

  误差信号存在梯度扩散;

  很容易过度拟合

  Vapnik在之后就第一次引入了支持向量机,这种模型在理论和应用上均具有很大的优点。然而这个时期的神经网络不仅仅理论上有缺陷还因为训练上经验不够,因此它不可避免地步入低潮阶段。支持向量机使用核函数从而将低维的输入空间映射到高维空间,使得模型的训练更加有效。然而,由于支持向量机本质上是局部估计算子的一种,它要求数据足够平滑并且要有足够的先验知识[3]。因此,面对高维数据时,支持向量机也不再适用。

  2006年,机器学习领军人物Hinton等在Science期刊上首次提出深度网络和深度学习概念,掀起了神经网络模型研究的第三次高潮,一直持续至今。这篇文献提出两个重要点:

  (1)多层结构的人工神经网络模型相对浅层结构一般具备更强的特征学习能力,深度学习模型学习而来的特征信号在更本质上代表着原始数据,这将有利于分类和可视化问题的解决;

  (2)由于一般很难训练得到深度神经网络的最优解,他建议采用逐层预训练方法来解决这一困境。第一步训练好模型的低层,然后将它的输出作为模型训练中更高层的输入数据。在该文中,他选用了无监督学习方式对学习模型进行逐层初始化。

  深层学习与浅学习相比具有许多优点:

  (1)浅层神经网络不能很好地实现表征一个复杂的高维函数,但是基于深度模型的神经网络就能够更好的表征复杂目标函数;

  (2)从仿生的角度,模拟人脑的最佳途径是深入学习网络结构,这方面的浅层结构模型有很大的缺点。深度学习也是分层处理输入数据,用不同的层提取数据的不同水平的特征,这与人脑学习过程相似;

  (3)在网络结构的计算复杂度方面,浅学习与深度学习相比表达目标函数时需要增加指数规模的计算参数,大大增加了计算的复杂度,并且它的泛化能力很差。

  深度学习领军人物Hinton基于深度置信网络创造的无监督学习算法有效地缓解了深度学习优化模型的困境(贪婪逐层预训练算法)。接着Bengio、Ranzato、Erhan和Glorot等许多研究者继续研究了他的工作,他们广泛地探索了深度学习算法,提高和应用深度学习技术。其中Benjio和Ranzato等人提出建议用无监督学习的神经网络来初始化每个层的想法;Erhan等人试图解释在模型学习的过程中为什么无监督学习有着这样的效果;Glorot等探讨了是什么造成了深度学习模型训练的失效。

  1.2国内外研究现状

  1.2.1语音和音频

  Yu等人介绍了深度学习相关概念以及DBN等这些常用的深度学习模型和常见的深度学习算法,其中有RBM和降噪自编码模型这些常见的训练方法。通过利用深度学习模型强健的判别训练和连续建模的能力,深度学习已经在大规模词汇和持续语音识别任务成功的应用。堆栈自编码网络卷积和DBN等深度神经网络模型已经开始用于语音数据和音频信息处理,例如语音识别和音乐分类,并且它们都取得到成功。

  Microsoft在2011年推出了在深度学习模型基础上的新的语音识别系统,极大的改变了语音识别领域很多现有的技术。一般而言,模型采用深度结构之后,它就会更充分地表示出样本数据间特征的相关信息,接着根据综合相应的信息组成我们需要的的特征,根据训练数据完成对参数地训练。因为神经网络研究人员是基于人脑结构来设计神经网络模型的构架,故它能够逐层地提取样本数据的特征,然后就可以得到用于模式分类处理的特征。在实际应用时深度神经网络建模技术能够很好地与传统语音识别技术相结合,使得语音识别系统误分类率大幅下降。

  1.2.2图像跟视频

  手写字符识别:基于机器学习理论和众多的实验结果,Bengio等人证明了深度学习有很好的潜能,并且他们解释了来自不同分布但相关的任务可以彼此共享数据中的隐含层,产生了更好的学习效果。除此之外,在基于62个类别的大规模手写字识别下进行实验时,也产生了不错的效果。Lee等人在原有的模型基础上发展了受限玻尔兹曼机,新的模型能够进行稀疏表达,从而高效地完成图像处理等任务。Hinton探索了怎么来训练S型的深度学习模型,使之可以产生对手写数字有效的特征表示。他们的主要思想就是先通过贪婪逐层预训练方法来对RBM进行训练,然后再进行微调操作。

  人脸识别:Nair等人将深度学习成功地应用于目标识别和人脸探测,他们通过利用基于噪声的线性单元组成的深度结构神经网络来完成任务。

  图像识别和检索:深度信念网络在简单的图像分类中有着很好结果,除此之外,它能够较好的用于图像检索等任务中。

  1.2.3自然语言处理

  除了语音、视频以及图像处理之外,深度学习中另一个重要的应用领域便是自然语言处理(NLP)。Bengio讲述了深度学习模型在自然语言处理方面的基本思路,并指出这些方法在语言判别和情感分析等任务中表现出很好的性能。近些年,自然语言处理的主流方法是基于统计模型,深度学习是其中之一。然而,与图像识别方向上的成功相比,深度学习在NLP问题得到的结果并不能令人满意,有待研究人员进一步探索。

  1.3深度学习面临的挑战

  1.3.1理论上的挑战

  只有更加的深入理论上的研究才能更好的理解深度学习模型,现阶段人们对深度学习模型训练的困难并没有理论上的证明。由于深度神经网络含有很多层,每层又有大量的非线性神经元,造成整个网络具有很强的非线性,加大了基于梯度的优化方法来求最优解的难度,训练模型参数很困难。虽然深度学习相对浅学习具有更强的非线性拟合能力,但这需要大量的参数,同时目前也没有理论能保证需要多少样本来训练特定的模型。训练模型时需要的计算量也难以预估,优化方法需要改进。未来研究人员需要深入研究贪婪逐层预训练算法在最小化训练样本的似然函数方面表现如何,这种方法是否过于贪婪,除此之外仍需要对半监督学习算法更进一步研究。

  1.3.2建模上的挑战

  对于非邻层或同层神经元之间的连接建模,现在研究的不是很多,并没有构造出应用的成熟模型。在输入数据是多态的情况上,也没有深度学习模型能直接处理,需要改进现有的模型。同样在多任务学习时,现有模型也需要完善。由于标签数据的稀缺,构造出能更少依赖标签数据的深度模型就显得很是重要。除此之外,在大数据时代,往往需要并行处理和分析数据,未来可以改造深度模型使得能够并行加速。

  1.3.3工程实现上的挑战

  训练深度学习模型时,训练时间长,易于过拟合,使得模型对新数据的泛化能力比较差。需要改造现有的优化算法,使得模型能够更快的收敛到最优解,加快学习速度,提高泛化能力。工业上常常需要分布式处理和混合数据的建模,这一问题也是目前深度学习模型的构建的困难。

  1.4本文主要内容

  本文主要任务是深度学习模型怎么解决手写数字识别,介绍相关的理论和基于python的实际建模。面对这一多分类问题时,深度学习模型中最有效的就是深度卷积神经网络,卷积神经网络擅长处理到多维数组数据。卷积神经网络自21世纪开始就成功的用于目标检测、对象识别以及图像处理的其他领域,它们成功地应用都是基于大量的有标签的数据。在生物信息分割、信号识别、文本处理以及自然图形中的部分目标的探测方面,卷积神经网络均有不少建树。近年来,深度卷积模型的一个重大成功的应用便是很热的方向--人脸识别。

  本文一共分为5章,前三章是背景介绍及理论知识,第四章是建模应用,最后一章总结。本文详细的工作如下:

  第一章是绪言,概述了本文的研究背景和国内外研究的近况。之后讲述了深度学习在图像、语音、视频和自然语言处理上的各种应用,最后是它未来面临的挑战。

  第二章是人工神经网络算法介绍,详细讲述了人工神经元、神经网络、BP算法、具有代表性的多层感知机以及一些构建神经网络的一些常见技术,例如正则化和优化。

  第三章是卷积神经网络算法研究,主要介绍了CNN模型的基本构架及卷积操作的概念,详细讲述了四大关键想法,即稀疏连接、权值共享、平移不变性以及池化。

  第四章是基于keras的手写数字识别,介绍了minist手写数字数据库,概述了keras的基本概念和操作,详细讲述了卷积神经网络模型的搭建过程并分析了模型的性能。

  第五章是对本文的一些总结,然后讲述了对深度学习未来的展望。

  第二章人工神经网络算法介绍

  2.1生物学依据

  人类在面对大量而复杂的数据时总能找到重要的信息。研究显示,大脑在分析外部信息时不是直接处理数据,而是通过多层的网络模型来获取数据的结构规律。1981年,胡贝尔等人了解到人类的视觉在大脑皮层是分级处理信息的,由此掀起了人们研究神经系统的信号处理机理的热潮:神经-中枢-大脑的学习流程,即首先对输入信息进行低级抽象处理,然后进行更高级的抽象操作。特征提取从低到高逐级抽象,从而更有利于特征表示,大大减少了数据处理量并保留了极为重要的结构信息。

  2.2人工神经元

  神经网络的基本元素便是人工神经元,它能够模仿动物神经元的一些特点即对输入信号进行加权和操作。对于人工神经元而言,它可以感知输入向量的信息,可以通过激活函数对其组合进行转换得到新的输出,一般对输入向量进行线性感知,然后进行非线性激活。模型的权值和激活函数的选择决定了模型的感知方式,输入数据的组合方式对神经元的激活状态也有很大的影响。我们以监督学习作为例子,对带标签的数据集(xi,y(i)),神经网络算法开始建立具有参数W、b的复杂且非线性的假设模型h(x),然后根据样本数据来训练模型参数。下面重点讲述模型中最简单的组织,即单个神经元,图2-1就是它的示意图。

  图2-1单一神经元结构示意图

  单个神经元实际上是个运算单元,它的输入是训练数据向量x,一般它的偏置部分单独表示,假设f是该神经元的激活函数,f:R⇒R。则其输出结果为hw,b(x)=f(wTx)=f(i=13wixi+b)。第二章会介绍一些主要的激活函数,并给出公式。单个神经元的输入和输出的对应关系可以看作是逻辑回归的一种。

  2.3神经网络

  若干个神经元组织在一起的网结构就是所谓的神经网络,最简单的就是神经元的输入输出依次相连接。图2-2为神经网络示意图。

  图2-2神经网络结构示意图

  图2-2中,神经网络中的单个神经元我们是使用圆形来表示的,带有标签+1的圆叫做偏置单元。神经网络从左到右各层依次称为输入层、隐含层和输出层。最左层和最右层之间的全部层均称为隐含层,因为它们的值不能在训练过程中被观测到。

  模型的层数这里用nl表示,故图2-2相应的nl=3。把层l标记为Ll,故L1表示输入层,Lnl表示输出层。此神经网络具有参数(W,b)=(W1,b1,W2,b(2)),其中Wi,j(l)代表第l层的第j个节点与第l+1层的第i个节点之间的连接权值。bi(l+1)是第l+1层中其第i个节点的相应偏置项。针对此模型来说,W(1)∈R3×3,W(2)∈R1×3。偏置节点没有输入连接,它的值恒设定为1,第l层的节点数表示为Sl。

  第l层第i个节点的输出用ai(l)表示。当l=1时,ai(1)=xi,即第i个输入值。对于特定的(W,b),神经网络通过假设函数hW,b(x)输出结果。神经网络的详细计算过程如下:

  a1(2)=f(W11(1)x1+W12(1)x2+W13(1)x3+b1(1))(2-1)

  a2(2)=f(W21(1)x1+W22(1)x2+W23(1)x3+b2(1))(2-2)

  a3(2)=f(W31(1)x1+W32(1)x2+W33(1)x3+b3(1))(2-3)

  hW,b(x)=a1(3)=f(W11(2)a1(2)+W12(2)a2(2)+W13(2)a3(2)+b1(2))(2-4)

  第l层第i个节点输出可用zi(l)表示,如公式(2-5)所示

  zi(2)=j=0nWij(1)xj+bi(1)(2-5)

  故ai(l)=f(zil)。若使用向量工具表示则为公式(2-6)所示

  f([z1,z2,z3])=[fz1,fz2,f(z3)](2-6)

  由此,上面的等式可以简洁的写为:

  z(2)=W(1)x+b(1)(2-8)

  a(2)=f(z(2))(2-9)

  z(3)=W(2)a(2)+b(2)(2-10)

  hW,b(x)=a(3)=f(z(3))(2-11)

  一般矩阵化参数,运算时利用矩阵和向量工具,然后使用线性代数方法快速求解神经网络模型。更一般地,用a(1)=x表示输入层的值,假设第l层的输出值为a(l),则可以根据下面的公式计算l+1层的输出值a(l+1):

  z(l+1)=W(l)a(l)+b(l)(2-12)

  a(l+1)=f(z(l+1))(2-13)

  2.4反向传播算法(BP)

  BP算法的主要思想就是一个具有参数(W,b)的代价函数J的偏导数能够通过函数的构造递归的分解,也就是链式法则[11]。可以通过向后传播对某层输出即下一层输入的导数来求目标函数对于该层输入的导数。给定训练数据(x,y),先进行前向算法逐层地计算出模型全部节点的输出结果,包目标函数hW,b(x)的输出值。接着得到第l层的所有神经元的δi(l),它的大小是此节点对最终结果影响的度量。对全部输出神经元而言,我们能够计算出模型最后输出值和训练数据标签值的差距,将这个差距定义为δi(nl),第nl层是output。对隐层各节点而言,可以根据其上层神经元的残差加权平均从而得到此层的δi(l),此节点的的输入数据为ai(l)。下面是BP算法步骤:

  BP算法

  首先根据前馈算法计算层L2,L3,...,Lnl的输出值;

  对于输出层的每个节点i,令

  δi(nl)=∂J∂zinl=∂∂zi(nl)12‖y-hW,b(x)‖2=-(yi-ai(nl))f'(zi(nl))(2-14)

  令l依次为nl-1,nl-2,nl-3,...,2,则对于第l层的每个节点有δi(l)=(j=1sl+1Wji(l)δj(l+1))f'(zi(l))(2-15)

  计算下列偏导数

  ∂∂WijlJW,b;x,y=ajlδi(l+1)(2-16)∂∂bilJ(W,b;x,y)=δi(l+1)(2-17)

  也可以通过向量矩阵的方式重写上述算法。上述的标准算法在应用时会有下列问题:

  易形成局部极小而得不到全局最优;

  模型训练量很大,学习效率较低;

  没有理论保证隐含层为哪种结构下更优;

  模型对样本的记忆能力有限,会出现失忆现象。

  一般而言,有不少可以改进的方法,下面是其中三种主要的改进的方法:

  在模型中加动量项,可以加快收敛,在模型到达局部最优值的时候产生一个扰波动,从而减少陷入局部最小值的可能;

  自适应调节学习率:首先设定好学习率,如果权值改变后模型误差反而上升的话,那么相应的调整无效,且η=βη(β<1);若经过若干次权值调整后使得模型误差下降,那么此次的调整有效,且η=θη(θ>1);

  引入陡度因子:在转移函数中增加陡度因子λ,例如f(x)=11+e-xλ。

  2.5多层感知机

  前馈深度网络也被称作多层感知机(MLPs),是一种典型的深度网络。在神经网络术语里,我们把每层神经元的数量看做该机器学习模型的宽度,把层的数量看做它的深度。前馈监督神经网络几乎是最早也是最成功的非线性学习算法。网络中对应于特征的中间层称为隐含层,因为真正的特征值是未知的而这些特征是由训练模型得到的。MLPs具有强大的非线性学习能力,事实上,只要有足够多的隐含层它就能表示出任意复杂而光滑的函数。它通过非线性转换从而把数据映射到一个新空间,就可以把一个不可分的聚类问题转化成可分的。下图就是一个经典的浅层MLP构造。

  图2-3多层感知机

  图2-3是浅结构的多层感知机,含有一个激活函数为sigmoid的隐含层。通过权重矩阵W(1)和偏置向量b(1)来计算隐含层a=sigmoid(b1+W1X),通过权重矩阵W(2)和偏置向量b(2)来计算输出y=b(2)+W(2)a。隐含层的输出值a是原始数据的某种表示,它包含输入的一些特征从而有利于完成目标任务,例如根据这些特征来进行分类。

  对于一个含有M层的深结构多层感知机,通过权值矩阵W(k)将向量化的输入ak映射为zk,再由函数f变换得到输出ak+1。a0表示输入向量x,aM表示预测的输出值。损失函数L(y,y)依赖于输出值y和标签y。

  下面是含有M层的多层感知机的详细算法:

  深度MLP算法

  前馈部分:

  输入向量:a0=x

  对于k=1,...,M,进行下列循环:

  zk=bk+Wkak-1(2-18)

  ak=f(zk)(2-19)

  结束循环;

  y=a(M)(2-20)

  J=L(y,y)+λΩ(2-21)

  后馈部分,前馈部分计算完后,接着计算输出层的梯度,更新公式如下:

  g⇐∇yJ=∇yL(y,y)+λ∇yΩ(2-22)

  (Ω一般是参数的函数,而不是激活值的函数,所以最后一项可能为0)

  对于k=M,...,1,进行下列循环:

  g⇐∇z(k)J=g∘f'(z(k))(2-23)

  ∇b(k)J=g+λ∇b(k)Ω(2-24)

  ∇W(k)J=ga(k-1)T+λ∇W(k)Ω(2-25)

  g⇐∇a(k-1)J=W(k)Tg(2-26)

  结束循环。

  2.6贪婪逐层预训练算法

  由于模型的复杂性以及优化的困难,造成有时直接训练模型来解决具体的任务是很难的。这时候我们或许可以尝试先用简单点的模型进行训练任务,然后再逐步增加模型的复杂度。同样,我们也可以用复杂的模型先完成简单点的任务,然后再依次向最终的任务靠近,这些都是提高解决问题的效率的策略。在面临训练期望的模型解决想要的任务之前,这些先用简单的模型解决简单的任务的策略被称为预训练。

  贪婪算法把问题分成若干个小的成分,然后独立地选择最佳的方法解决各个成分。然而不幸的是,把每个成分的独立而最佳的方法联合起来并不等于是从整体上最优地解决问题。但是,贪婪算法在计算上的代价比整体解决问题更小,同时这种策略的结果虽然不是最优的但也是可以接受的。一般在贪婪算法之后,接着用一个具有微调作用的联合优化算法去搜索最终任务的最优解。同时,用贪婪算法得到的结果来初始化联合的优化算法往往能显著地加快模型的训练以及得到更好的结果[12]。

  预训练算法特别是贪婪预训练算法在深度学习模型中是很普遍的。一般而言,贪婪监督预训练算法,其中每个增加的隐含层都是经过预训练的,作为浅层监督MLP的一部分,它把以前的隐含层的输出作为其输入。

  为什么贪婪监督预训练会有这种作用?有很多合理的假设,Erhan认为预训练可以调节网络模型参数,然而Bengio则猜测预训练有利于参数空间一些地方的初始化,这些地方更易于优化并且容易找到更好的局部最优解标准。最新的观点认为预训练是一种正则机制,它通过最小化偏差和在参数空间中引偏置来帮助学习过程[13]。一般而言,预训练过后,模型具有更好的优化能力和泛化能力。

  2.7建模技术

  2.7.1激活函数

  下面是一些常用的非线性的神经网络激活函数,经验表明,在构建神经网络时激活函数的选择对模型的质量影响很大:

  ReLU:f(a)=max(a,0),这个在前馈网络中是目前最流行的隐含层的激活函数,它是近似生物神经激活函数;

  双曲正切函数:f(a)=tanh(a),双曲正切激活函数,比较常用;

  Sigmoid:f(a)=1(1+e-a),S型激活函数,经常使用;

  Softmax:f(a)=eaijeaj,其中ifi(a)=1,fi(a)>0,在多分类中流行的激活函数,它根据逻辑斯蒂回归而来;

  Softplus:f(a)=log(1+ea),近期出现的近似生物神经激活函数。

  2.7.2正则化

  机器学习的中心问题不仅是怎样设计算法使得模型对训练数据的拟合的很好,也包括模型对新数据的泛化能力。机器学习中的很多策略可能在增加训练误差的代价上,用来减少测试误差,这些策略统称为正则化。很多经典的正则化技术都是基于限制模型的容量,例如在线性回归与逻辑回归中可以在目标函数J中增加一个参数范数的惩罚项Ω(θ)来优化模型,如下:J(θ;X,y)=J(θ;X,y)+αΩ(θ)。对于L2参数正则化,Ω(θ)=12‖w‖22,其中w是参数的子集,这也就是大名鼎鼎的岭回归。

  除此之外,常用的还有L1正则化,即Ω(θ)=‖w‖1=i|wi|。由于深度模型需要完成复杂的任务,所以模型需要较多的参数来提高其表达能力。然而,训练大量参数意味着需要大量训练数据,不然容易过拟合(overfitting)。Dropout是一种计算代价小但很有效的正则化方法,是一种模型选择技术可以避免训练时过度拟合。它通过稀疏性约束或者随机强制使某些值变为0,即由给定概率p来随机去掉输入的某些维度[14]。

  Dropout可以视为对大型的神经网络使用bagging技术,在python的keras库中可以方面使用这一正则化方法。对于只有一个隐含层的简单模型,dropout技术就是相当于把下列公式

  Yi(l)=f(Zi(l))(2-27)

  Zi(l)=Wi(l)Xl+bi(l)(2-28)

  替换成(2-29)到(2-32)。实际上就是相对于把输入X替换成D*X,其中D是由独立的服从贝努力分布的随机变量组成的矩阵。

  Di(l)~Ber(p)(2-29)

  Yi(l)=D(l)*X(l)(2-30)

  Yi(l)=f(Zi(l))(2-31)

  Zi(l)=Wi(l)X(l)+bi(l)(2-32)

  2.7.3优化算法

  深度学习里有很多优化算法,常见的优化算法是这些:SGD、SGD+momentum、RMSprop、AdaDelta、RMSprop+momentum和Adam。一般来说,算法的选择取决于使用者对该算法的熟悉程度,没有一个算法在解决问题时总是最优的。下文主要介绍使用最广的SGD及其变种。

  随机梯度方法(SGD)及其变种,是机器学习尤其是深度学习中普遍使用的优化算法。它与批量梯度下降(BGD)相似,只不过随机梯度算法在更新梯度时是选择具有随机性的估计器。SGD算法根据各个随机选定的样本来进行迭代更新,这样的话样本量即使很大,我们只需其中较少的样本,就能得到理想的θ的解。但是对于BGD来说每次计算均需要很大样本量,且一般最优解需要很多次才可以得到。故100次迭代过程就需要遍历样本100次,造成很大的计算量。但是,SGD计算过程中的噪音相对较多,对运算结果产生影响,故SGD计算时很难总是朝着想要的方向。总体说来,下面是它们的主要差异:

  批量梯度下降---最小化所有样本的损失函数,最终得到的解具有全局最优性,由它而来的参数是能够最小化风险函数;

  SGD---最小化事先选好的样本的损失函数。虽然计算时很难每次向着想要的方向,但从整个流程看它却是向着目标前进,并且其结果也往往在全局最优解附近。

  SGD算法如下:

  随机梯度算法

  假设学习速率η,初始化参数θ,损失函数L(fx;θ,y),令g=∂L(fx;θ,y)∂θ。

  当跳出标准没有到达时,进行下列循环:

  从训练数据集x(1),...,x(m)中采样小批量数据,

  令g=0;

  对于i从1,...,m,进行下列循环:

  计算梯度:g⇐g+∇θL(fxi;θ,y(i))m(2-33)

  结束内循环。

  更新θ:θ⇐θk+ηg(2-34)

  结束循环。

  其中,k=1∞ηk=∞,k=1∞ηk2<∞。

  尽管上述的标准SGD在优化策略中用的很广泛,但其学习速度有时会比较慢,尤其当梯度较小的时候。然而,在面对较小的和稳定的梯度时,加入动量项可以加速学习速率。我们用变量v来表示动量项,更新规则如下:

  v⇐αv+η∇θ1mt=1mL(fxt;θ,y(t))(2-35)

  θ⇐θ+v(2-36)

  其中,α选的越大,则以前的梯度对现在的方向影响也越大。相对于标准算法,此算法的学习速率由α,η联合控制。

  SGD+momentum算法如下:

  加动量的随机梯度算法

  假设学习速率η,动量参数α,初始化参数θ,初始化动量v,损失函数为L(fx;θ,y)。基于假定密度函数p(x,y)是连续的情况下,梯度为

  g=∫∂Lfx;θ,y∂θdp(x,y)(2-37)

  当跳出标准没有到达时,进行下列循环:

  从训练数据集x(1),...,x(m)中采样小批量数据;

  令g=0;

  对于i从1,...,m,进行下列循环:

  计算梯度:g⇐g+∇θL(fxi;θ,y(i))(2-38)

  结束内循环。

  更新动量v:v⇐αv-ηg(2-39)

  更新θ:θ⇐θ+v(2-40)

  结束循环。

  第三章卷积神经网络算法研究

  3.1 CNNs基本结构

  卷积神经网络(CNNs)是一类特殊的神经网络,此模型至少在某层上用卷积操作替换了一般的矩阵操作。它处理已知的网状拓扑结构的数据更加有效,例如:时间序列数据和图像数据等。卷积网络模型及其变种有很多的成功应用,已是目前语音、视频和图像识别领域的热点方向。此模型相对传统的技术而言,不仅模型结构更简单,并且它具有相对更少的参数。在输入是图像格式的数据时,上述的优点会更加突出。图片能够直接作为模型的输入,故减少了以前算法中繁杂的特征提取和数据重建过程。卷积网络能够识别二维形状,它可看作是特殊的多层感知机。该模型对比例缩放、平移、倾斜以及一些其他变形有高度不变性[14]。

  卷积神经网络的概念示范如图3-1所示:

  图3-1卷积神经网络示意图

  图3-1是先使用函数fx对输入的图像进行卷积操作以达到过滤目的,接着对之前输出添加bx得到新的层Cx。接着是下采样,下采样操作就是:每相邻的四个像素求和成为一个像素,由权值Wx+1进行加权操作,再加上偏置bx+1,最后通过一个激活函数例如Relu,产生了一个原来大小四分之一的特征映射图Sx+1。

  C层通常是特征提取层,每一个节点的输入与上一层的某些局部相连接,能够收集到这些局部某些特性,模型可以根据这些信息确定特征彼此之间的位置。对于特征映射层,我们可以把它当作一个平面,平面里的神经元的权值均相等。映射方式可以采用流行的sigmoid作为此神经模型的激活函数,它能够让映射关系具有平移不变性。

  一般而言,因为同样地特征映射的所有节点共享权值,故大大削减了模型参数的数量,缓解了模型参数选取地困境。卷积神经网络模型中每个特征提取层之后一般均连接着S层,它可以进行局部平均操作并且能够进行二次提取。这种特殊的特征提取结构让模型对输入样本有较高的错误容忍能力。

  一般是由基本要素自己根据经验对需要完成的目标来设定相应的CNN的构架。我们可以由实际应用需求来确定相应的卷积层和采样层的数量以及分类器的选择。卷积网络有四个重要的思想可以帮助提高一个机器学习系统的效率:稀疏连接,权值共享、平移不变性和池化。

  3.2卷积操作

  3.2.1卷积的概念

  卷积是数学中的一种重要运算,在信号处理上用的很广泛,一般连续函数x(a),w(a)的卷积定义为:

  s(t)=∫x(a)w(t-a)da(3-1)

  我们也可以把它记为公式(3-2)的形式,积分区间取决于x(a),w(a)的定义域。

  s(t)=(x*w)(t)(3-2)

  与此相同,下面定义了离散函数的卷积概念,如公式(3-3)所示。

  s(t)=(x*w)(t)=a=-∞∞x[a]w[t-a](3-3)

  在机器学习领域,输入数据通常是多维数组,核也是由可学习的参数构成的多维数组,这些多维数组也被称为张量。若输入的数据是图像I,核为K,上述的数组就是二维的,对应的卷积如下:

  s[i,j]=(I*K)[i,j]=mnIm,nK[i-m,j-n](3-4)

  由于卷积操作是可以交换的,所以我们也可以把上式写成:

  s[i,j]=(I*K)[i,j]=mnIi-m,j-nK[m,n](3-5)

  通过卷积运算可以提高信号的特征,并且减小噪声,这是卷积运算的重要特征。离散卷积也可视为与一个矩阵相乘,但相应的矩阵会受到一些约束。例如,对简单的离散卷积而言,相应的矩阵一般就是Toeplitz矩阵。图3-2就是离散卷积操作的示意图,可以清楚地看到,离散卷积操作等价于某种意义上的矩阵乘积。

  图3-2离散卷积操作示意图

  3.2.2卷积的意义

  对于一个r×c的原始图像,可以定义它为xlarge。第一步通过从原始图像中抽取的a×b的小的图像样本xsmall对模型进行训练,通过f=sigmoid(W(1)xsmall+b(1))就可以计算出了k个特征,其中W(1),b(1)是模型中相应的权值和偏置。对所有a×b子图像xS而言,通过fS=sigmoid(W(1)xS+b(1))得到输出,接着根据全部的fconvolved进行卷积操作,最终得到k×(r-a+1)×(c-b+1)个矩阵,它们一般表达着原始数据的某些不同的抽象的特征,而且一般是局部的特征,通过更高层的信息提取和综合各个卷积得到的特征层,往往模型就可以很好的表征原始输入的某些特性,从而解决目标任务。

  3.3卷积网络的四大建模技术

  3.3.1稀疏连接(局部感受)

  传统的神经网络模型基于矩阵操作来描述输入与输出神经元之间连接状态。然而,卷积网络使用了稀疏连接这一概念。稀疏连接的模型是基于层间靠近位置的相关关系,从而毗邻的每层的神经元只需与它上层部分结构相连接,使核比输入更小。事实上,没有必要对每个神经元都进行全局感知,很多时候只要局部感受即可,最后在之后的层中综合前面层感知到的所有局部信号从而模拟出全局信息。人脑的视觉机制在研究人员发现稀疏连接概念中有很大的贡献。视觉系统中相应的神经元也是感知局部信号,也就是说此神经元只对某些特殊区地方的刺激感兴趣。例如,处理一个上万像素的图像时,通过检测小的而有意义的特征使得核仅仅具有上百或者更少的像素。这意味着只需要存取很少的参数,既降低了数据维数又提高了统计精度,同时也只需要更少的计算就可以得到输出。一般感知局部结构的信号会找到输入的某些局部特征,例如图像的棱、弧、轮廓等。它们代表着输入的重要特征,是组成人类视觉的微小元素,然而,基于BP算法的全部像素是些毫无意义的点,没有找到相互之间的关系。图3-3就是稀疏连接的示意图。

  图3-3稀疏连接示意图

  3.3.2权值共享

  权值共享就是模型中多个函数使用同一权值。传统网络中,在计算每层的输出时权值矩阵中的每个元素仅仅被用一次。不过对卷积神经网络模型而言,卷积层的所有卷积矩阵一直都在感知输入数据的过程中使用,根据卷积操作便可以得到相应输入的特征,某种意义上就是提取出想要的特征来完成任务。相对全连接,这时模型的效率就显著地提高并且计算复杂度也更小。其基本原理是图像的一部分的统计特性一般与其他部分的统计特性相同。这也就意味着我们在这部分学习中的特性可以用在另一个部分,所以对这幅图像的所有位置,我们可以使用相同的学习特性。图3-4是卷积网络中的权值共享示意图。

  图3-4权值共享示意图

  3.3.3平移不变性(translation invariant)

  如果图像中的连续的区域进行池化处理,并且在相同的(重复)池中的隐藏单元的特性是相同的,这有的结果一般就具备所谓的平移不变性。在一定意义上模型具有很高的容错能力,即使输入有了一些小的平移变化,经过相应的操作得到的结果相对不变。有些时候,例如目标检测和语音识别等任务,人们想要模型对输入有平移不变性,这样的话即使输入进行了平移处理,样本的标签依旧是原来的。假设研究人员在处理MNIST数据库中某个数字时,即使对它进行各种平移处理,但是让你惊叹的是最后的结果都会是理想的分类模型,它依旧可以准确地把输入分类为正确的标签。图3-5是模型中的平移不变性的示意图。

  图3-5平移不变示意图

  3.3.4池化(pooling)

  模型的前一部分可以学习到有利于完成任务的理想特征,之后我们就可以对得到的特征进行处理以达到目标。只从理论的角度来分析,显然利用所有的特征可以有助于研究人员完成任务,常见地便是softmax模型,然而这样做的话就极大的增加了计算量。我们可以用学习100*100的某个图像为例,如果模型经过训练得到300个大小为5*5的卷积核,然后每个卷积核与输入进行卷积就会有相应的(100−5+1)*(100−5+1)=9216维的输出结果。因为300个卷积核均会进行这样的操作,故每个输入就会有2764800维的特征输出结果,模型训练如此大的分类器很是困难,并且这样极易过拟合(over-fitting)。

  由于图像具有静态属性,故对于图像处理大部分研究人员常用卷积得到的特征,这种特征对于图像来说在不同的空间位置上往往可以彼此适用[15]。针对这种情况,人们就会对不同位置的特征进行统计处理,比如根据输入在某些位置的指定特征可以取其平均值(或最大值)。这些由统计而来的特征相对原始特征不仅具有更低的维度,而且还提高了模型性能,不容易过拟合。这类统计处理过程一般称为池化,根据不同的计算方法可以叫为平均池化与最大池化。图3-6为最大池示意图。

  图3-6最大池示意图

  第四章基于mnist的手写数字识别

  数字识别是目标识别研究领域中的热点方向,常常应用于手写数字识别、银行帐号识别、门牌识别和快递编码识别等任务中。相对于传统手工输入,基于智能数字识别的模型可以减少很多工作量,并且高效。近些年,手写数字识别是在手写识别中广泛研究的很有潜力的应用。大量的研究成果由各种研究方法得到,例如,最近邻法(KNNs)、支持向量机(SVMs)、神经网络(NNs)和卷积神经网络(CNNs)等等,其中很多的研究都是基于mnist数据库而来的。

  4.1 mnist介绍

  在本文中,我们使用一个手写体数字mnist数据库,它是标准库经过处理而来,包括40000个样本组成的训练集和2000个样本组成的测试集。此类训练样本通常尺寸归一化并转换到一种特定尺寸与格式的图片。

  原先的mnist数据库是由NIST的SD-1和SD-3数据库构建而成,包含一系列二进制手写数字图像。SD-3数据库是美国人口普查局的工作人员的笔迹收集,SD-1是在校高中生的笔迹收集,由于前者笔记更高故SD-3更易于识别。本文的这40000个训练数据是从250人生活中采集而来,这在一定程度上表明训练数据相对正交,从而让结果的可信度更高。

  4.2 keras简介

  Keras是python中很流行的深度学习库,依赖于theano和tensorflow并对它们进行了封装,十分简化,模块化程度很高。它的设计参考了Torch,并充分发挥了GPU和CPU操作,其开发目的是为了更快的做神经网络实验。keras支持卷积网络模型和迭代网络模型以及它们结合,适用于神经网络模型的设计、开发、调试,它还能够在GPU上运行从而加快速度。除此之外,keras具有非常好的官方文档,非常适合深度学习的初学者学习。本文的深度模型实验是由keras实现的。

  下面介绍keras的关键模块的介绍:

  Optimizer:此模块包含了很多重要优化算法,例如随机梯度下降算法SGD、Adagrad、Adadelta等这类很主流的方法并且调用方法很是简单,极易调试参数。

  Objective:这是目标函数模块,主要有mean_squared_error、mean_absolute_error、categorical_crossentropy等函数。

  Activation:这是激活函数模块,keras提供了linear、sigmoid、tanh、softplus、relu、softplus等常见函数。

  Initialization:此模块可以进行参数初始化,在添加层的时候本模块进行初始化。本库有uniform、normal、zero、glorot_normal等很多常用的初始化方式。

  Layer:此模块含有convolution、recurrent等重要的层。其中有flatten函数可以压缩矩阵为向量,reshape函数可以转化输入的维度。卷积层是由Theano封装而来。

  Preprocessing:此模块可以处理输入,例如文本、图片等。擅长处理图片输入,可以对它进行各种旋转和平移。

  Models:此模块可以把上述的重要模块进行堆叠,组合成研究需要的模型,极大的方便了模型的开发。

  4.3模型的搭建

  在keras中输入数据必须是数组类型,一般用数值计算的库numpy进行变换处理。可以把python读入的数据转化为4维的数组,命名为data,和1维数组的标签,即label。keras执行多分类任务时,要求标签是二进制形式,然而幸运的是它自带的模块里有相应的转换函数。有一点需要说明的是,由于keras是依赖theano库的,而后者在windows系统中安装很有问题,所以建议在linux来搭建本文的卷积神经网络模型。

  表4-1就是本文在python上搭建的模型,输入为之前转换好的四维数组格式。本卷积网络网络模型的结构由输入层、卷积层、池层、总连接层和输出层构成,共有8层结构。该网络一共有250730个参数,其中三个卷积层的参数个数分别为40、296和1168,第一个由压缩图片格式都到的全连接层的参数个数最多为247936,最后输出层的参数个数为1290。图4-1是此神经网络模型的示意图,可以情况看到模型的流程及每层的结构,有利于理解卷积神经网络的内部操作过程。

  表4-1卷积网络模型结构示意图

  Initial input shape:(None,1,28,28)Layer(name)Output ShapeParam#Convolution2D(convolution2d)(None,4,26,26)40Activation(activation)(None,4,26,26)0Convolution2D(convolution2d)(None,8,24,24)296Activation(activation)(None,8,24,24)0Convolution2D(convolution2d)(None,16,22,22)1168Activation(activation)(None,16,22,22)0MaxPooling2D(maxpooling2d)(None,16,11,11)0Dropout(dropout)(None,16,11,11)0Flatten(flatten)(None,1936)0Dense(dense)(None,128)247936Activation(activation)(None,128)0Dropout(dropout)(None,128)0Dense(dense)(None,10)1290Activation(activation)(None,10)0Total params:250730

  第一层输入:28*28大小的图片,1通道;

  第二层卷积:层名为'convolution2d',3*3大小的卷积核4个,初始化方式为keras内置的'glorot_uniform',输入格式为(1,28,28),边界模式为'valid'。valid输出经过卷积处理后的图片;假如输入图片与卷积核尺寸不同时,full把不足的地区用0来填充然后卷积处理,激活函数为'linear';

  第二层激活:层名为'activation',激活函数为'relu';

  第三层卷积:层名为'convolution2d',3*3大小的卷积核8个,初始化方式为'glorot_uniform',边界模式为'valid',激活函数为'linear';

  第三层激活:层名为'activation',激活函数为'relu';

  第四层卷积:层名为'convolution2d',3*3的卷积核16个,初始化方式'glorot_uniform',边界模式为'valid',激活函数为'linear';

  第四层激活:层名为'activation',激活函数为'relu';

  第五层池化:层名为'maxpooling2d',池大小为2*2的核,边界模式为'valid';

  第五层dropout:层名'dropout',参数为0.25;

  第六层全连接:层名是'dense',输入是1936维向量,把最大池化层的输出链接成向量形式,然后把它当作该层的输入,输出是128维,初始化方式’glorot_uniform',激活函数为'linear';

  第六层激活:层名为'activation',激活函数为'relu';

  第六层dropout:层名'dropout',参数为0.5;

  第七层全连接:层名为'dense',输出为10维,初始化方式'glorot_uniform',激活函数为'linear';

  第七层激活:层名为'activation',激活函数为'softmax';

  第八层输出:输出是图片所属各个类的概率。

  这个是多分类模型,其损失函数为此库包含的分类型相对熵,选择的优化算法是'optimizer':{'epsilon':1e-06,'lr':1.0,'name':'Adadelta','rho':0.95}。

  图4-1卷积神经网络构架

  4.3性能分析

  模型建好后,用训练集的40000个数据训练模型。每个训练和梯度更新块的大小为100,迭代次数为25。交叉验证的比例为0.2,即每次32000进行训练8000用于验证。图4-2是40000训练样本对模型进行训练的过程时准确率和交叉验证准确率随着迭代次数的折线图,蓝色的线是每次训练的准确率,红色线是相应的交叉验证准确率。从中可以看到,模型对训练数据集的拟合程度很好,在迭代12次以后每次的准确率和交叉验证准确率就基本保持一致,并且都达到相对平稳状态。

  图4-3是训练样本训练模型时,损失和交叉验证损失随迭代次数的折线图,损失函数是keras内置的多分类型相对熵,蓝色线是每次迭代的平均损失,红色线是每次迭代的平均交叉验证损失。从中能够知道,损失伴随迭代次数的增长而快速下降,并且达到相对平稳状态。交叉验证损失始终保持较低水平,迭代几次后两个损失基本保持一致。

  图4-4为第一个卷积核权值矩阵对应的马赛克图。从中我们可以清楚的看到,在这4个3×3的权值矩阵中,各个元素的大小。经过该卷积操作后,得到的26×26的新图片在视觉意义上就是从原始图片经过特征提取、压缩信息而来。新图片更加抽象,这一自动提取特征过程是卷积神经网络的一大优势。在之后的层,会经过更多的特征提取与压缩,最终得到我们想要的目标。

  经训练得到相应的参数之后,我们就可以根据2000个从未训练过的测试集进行预测检验,一共有24个误分类样本,正确率为98.8%。图4-5是误分类的数字,由图可知,这些数字基本写的比较糟糕,可能造成了它们相对难以正确分类。表4-2是基于mnist的主流分类模型及误分类率,显而易见,深度学习尤其是卷积神经网络相对传统的技术在此项上面拥有很大的优势。虽然本文构造是相对简单的卷积神经网络模型,但其准确率依旧不逊于一些由顶级专家精心构造的传统技术,甚至比它们效果还要好。目前为止,世界上在此数据库上实现最好的方法依旧是深度卷积网络为主。

  图4-2准确率和交叉验证准确率

  表4-2基于mnist的主流分类器及误分类率

  CLASSIFIERTEST ERROR RATE(%)Authorlinear classifier(1-layer NN)12.0LeCun et al.1998K-nearest-neighbors,L32.83Kenneth Wilder,U.Chicagoboosted trees(17 leaves)1.53Kegl et al.,ICML 200940 PCA+quadratic classifier3.3LeCun et al.1998SVM,Gaussian Kernel1.43-layer NN,softmax,cross entropy1.53Hinton,unpublished,2005Convolutional net LeNet-41.1LeCun et al.1998Convolutional net LeNet-50.95LeCun et al.1998unsupervised sparse features+SVM0.59Labusch et al.,IEEE TNN 2008large conv.net,unsup pretraining0.60Ranzato et al.,NIPS 2006large/deep conv.Net0.35Ciresan et al.IJCAI 2011committee of 8 conv.Net0.27+-0.02Ciresan et al.ICDAR 2011committee of 35 conv.Net0.23Ciresan et al.CVPR 2012

  图4-3损失和交叉验证损失

  图4-4第一层卷积核马赛克图

  图4-5误分类数字

  第五章总结与展望

  5.1总结

  深度学习不仅为研究者通过模仿大脑构造来解决智能问题提供了十分有用的工具,而且在其他相关领域的研究和实践中提供了新的思路和技术,具有广阔的研究前景。随着人们对深度学习进行深入研究,研究者提出各种更加高效的深度学习模型和改进学习的算法。通过深度学习来解决智能问题慢慢成为机器学习的主流,让深度学习在机器学习研究中逐步拥有核心地位。卷积神经网络模型减少了特征的人工提取工作,并且由于此模型特定的构架故它可以学到输入数据的某些结构信息,具有很强的表示能力,在相应的任务中表现出极高的效率。在前人研究的基础上,本文的主要工作如下:

  全面的介绍了深度神经网络相关的概念、算法和训练技巧,并简述了深度学习的发展缘由、优势与不足和在解决实际问题中各种应用与展望。

  在经典的网络模型的基础上,本文构造了一种新结构的卷积神经网络,在理论层面对原始模型进行改进,新模型可以适用于更多的图像识别任务。

  在基于mnist数据库的手写数字识别任务中展示了改进的卷积神经网络模型性能,改善了识别能力。因为传统的人工提取特征不仅工作量大而且耗时,本文提出的模型可以在数字识别任务中取代人工操作不仅提高了工作效率,而且系统具有很好的识别准确率。

  5.2展望

  在现有的深度学习算法研究中,构建和学习特征的深层表示是极其必要的。由于深度学习是一项新技术,虽然目前也不少的经验性研究成果但仍然需要展开很多的工作。尤其是,深度学习的研究者目前没有发现一个单独的深度学习技术成功的应用到所有的分类任务。即使通用的生成式预训练以及判别式微调的学习策略在许多任务上成功的应用,然而它在其他任务上表现的不是很好,例如说话人识别和语种识别,或许从原始数据中提取出判别和不变性特征的学习方法可以更好的解决这一问题。一般而言,提取判别特征可以减少很多深度学习模型的大小。

  目前深度学习的很多研究者在积极研究新的深度学习模型构架和学习策略,有望提高深度学习在具有挑战性的智能问题上的性能。除此之外,人们还在研究预训练对深度学习架构的参数的重要度,因为它可以降低甚至取消对模型进行正则化处理。深度学习模型应用的一个主要困难就是需要很多的经验来选择参数的合理取值,例如学习速度、正则项强度以及层数与层里的神经元数。同时,神经系统科学家建议,可以考虑更大的学习框架和问题以便观察人类大脑对现实的有意义的表示,研究分层的大脑可以提高工程中深度学习模型的性能。

  对于卷积神经网络而言,由于此模型针对的是大训练样本的识别问题,对于特定的问题它的网络构架以及模型参数需要进行相应的优化,不仅训练时间长而且对计算机的性能要求也很高。除此之外,随着样本的改变和增加,卷积神经网络模型的识别性能会降低,需要找到一个能够快速收敛的学习算法。

  本文将深度学习模型中的卷积神经网络成功的应用于手写数字识别,取得了很好的效果。虽然模型有很高的识别准确率并且学习的效率也比较高,但相对其他研究者而言本文并没有分析经过卷积操作后原始数据的变化,没有可视化这一效果。同时,与目前最好的高达99.7%的识别准确率相比,本文的相关指标仍需要提高。由于实际应用的流程都是动态识别从而加快效率,本文也没有对此进行研究。在未来的研究中需要对相关的问题展开进一步的探索。

栏目分类