您好, 访客   登录/注册

基于BP神经网络的手写数字识别

来源:用户上传      作者:

  摘 要
  随着人工智能的再次崛起,机器学习作为人工智能的一部分也被重新重视起来,数字识别技术也得到了关注并通过各种算法提高了识别准确率。手写数字识别在各个方面和领域发挥越来越重要的作用。本文采用包含隐含层的BP神经网络对手写数字识别進行实现。文章首先介绍BP神经网络原理及模型,并分别介绍了前向传播,反向传播中所用到的数学模型,然后通过BP神经网络的设计,从参数的随机初始化开始,前向传播,反向传播,代价函数的偏导数求解及验证,和最终的参数优化等完成实验,最终得到实验结果,并进行优化,结果表明BP神经网络在手写体数字识别方面的实际应用价值。
  关键词
  手写数字识别;BP神经网络;识别
  中图分类号: TP391.41;TP183               文献标识码: A
  DOI:10.19694/j.cnki.issn2095-2457.2020.11.019
  0 引言
  在人工智能的影响下,机器学习和深度学习也重新掀起了一股热潮。目前人工智能包含语音识别、自然语音处理、计算机视觉、机器学习四大部分[1-2]。其中机器学习是人工智能发展最快的分支之一。
  计算机技术和网络技术的发展,大量的数字信息在进行处理之前需要通过一定的方式采集到计算机之中,如信件上的邮政编码,银行各种票据上的数字信息,试卷上的准考证号,物流行业中手写快递单据等手写数字的录入等都可通过手写体数字识别技术来进行识别,提高效率,节省了人力。手写数字识别方法从原理上大致可以分为基于统计特征分类、基于结构特征分类、基于神经网络三大类算法[3-4]。笔者主要针对BP神经网络在手写数字识别方面的技术进行了matlab实现。
  1 BP神经网络原理及模型
  神经网络的实质是一个给定输入x到输出函数y的映射函数f(X)=Y,函数的各项系数就是我们要通过网络训练得到的参数θ,通过神经网络学习算法将函数的系数确定下来,当给定任意输入x时,通过神经网络计算输出一个与之相对应的y,至于通过训练输出的结果y是否满足我们的预期结果,这就是我们需要通过提高模型性能方面,优化学习算法来完成的事情。
  1.1 神经网络的原理
  BP是一种反馈型学习网络,算法的学习过程包括两部分,首先是信息的前向传播,然后是通过误差进行的反向传播。通过神经网络的输入层将数据信息输入到神经网络,输入层的各个单元将数据传递给隐含层各个神经元进行数据的内部处理,隐含层也称为中间层,其作用主要是信息的处理和交换,它的结构可以是单层结构也可以是多层结构,层数越多神经网络的复杂度就越高,隐含层将经过内部处理的数据信息传递到输出层的各个单元,处理后的数据信息在输出层进行输出,这样就完成了前向传播的一次训练[5]。反向传播则是将神将网络的输出值与期望值相比较,计算出误差,并利用误差逐层向前求解的过程。
  1.2 BP神经网络模型
  神经网络的模型是许多逻辑单元按照不同的层级组织起来,首先按照前向传播进行逐层计算,每一层的输出加权求和后,作为下一层输入变量,图1所示,为一个三层的神经网络。将需要进行处理和计算的数据在神经网络的第一层即输入层进行输入,经过训练数据预测结果在由输出层输出。然后将输出层输出的结果与期望值进行比较,传统神经网络在评价性能时通常采用均方误差[6]。其定义为:
  式(1),n为训练样本总数,x(i)为训练样本,y为训练样本的标签,即期望值, 为网络输出结果,参数θ即需要求解的最优参数。
  有时神经网络在训练集上表现出很好的特性,但是,在测试集上则表现不好,这是因为在训练网络时,训练集上出现了过拟合的现象。基于此,关于过拟合的处理方法是在代价函数后面加上正则化项。加入正则化项后的代价函数变为式(2)。
  式(1),式(2)是通过网络最终输出结果求解最优值的表达式,下面我们介绍,神经网络的内部模型。首先,我们先引入一些符号ω  表示第j层的第i个激活单元,求解方式如式(3)。θ 表示第j层映射到第j+1层的权重矩阵,其尺寸为:以第j+1层激活单元数量为行数,以第j层的激活单元数加1为列数的矩阵[7]。
  式(3)中m表示前一层即第j-1层激活单元的个数。
  2 BP神经网络手写数字识别模型
  本节将针对本实验对神经网络的前向传播,代价函数,反向传播以及代价函数偏导数的求解等实验中用到的几个重要数学模型进行详细的介绍。
  2.1 前向传播和代价函数
  本文采用图2所示的神经网络拓扑结构。根据图片的大小输入层,选用的784个节点(不包含添加的权重为1的偏置单元),隐含层为200个节点(不包含添加的权重为1的偏置单元),输出层采用10个节点的神经网络拓扑结构。
  根据神经网络结构,本文采用将采用交叉熵损失函数作为代价函数并加入了正则化项:
  其中,K=10表示所有可能数字的标签,即0到9个数字的标签。这里需要注意,正则化项中不需要对添加的为权重为1的偏置单元正则化。
  2.2 反向传播
  通过前向传播算法得到神经网络预测值 ,然后采用反向传播算法,计算代价函数的偏导数,即从输出层的预测值和期望值之间的误差计算开始,然后逐层的反向求出每一层的误差,直到神经网络的第二层。
  首先我们引入sigmoid函数,sigmoid函数的梯度为:
  上述公式中l表示当前所计算的层数,j表示当前计算层中激活单元的下标,也将是下一层第j个输入变量的下标,i表示下一层误差单元的下表,是受到权重矩阵中第i行影响的下一层中的误差单元的下标[8]。   3 实验与结果分析优化
  本文选用来自美国国家标准与技术研究所的MNIST手写数字训练集。共60000张,每张大小为28*28像素的灰度图[8]。
  首先,我们采用的是matlab中rand()函数对参数进行初始化,ε(代码中表示为esp)一般选用为0.001,学习速率选用0.001,Theta的初始化代码如下:
  Theta1=rand(785,200)*(2*esp)-esp
  Theta2=rand(201,10)*(2*esp)-esp
  然后用前向传播算法逐层计算出激活单元,利用训练集中对应的数据和经过神经网络的训练的预测结果得出第三层的误差,然后采用反向传播算法,通过该第三层的误差,计算出第二层所有的误差,计算出误差矩阵G 后,再根据式(8)计算代价函数的偏导数,并用利用数值检验方法检验求得的偏导数。计算步骤如下:
  (1)令ω (i)=x (i),通过前向传播计算出ω (l)=1,2,3……L
  (2)通过反向传播计算出前一层的误差向量:δ(L)=ω(L)-y(i)
  (3)计算误差矩阵:
  (4)数值检验:
  在matlab中采用fminunc()函数进行参数的优化。这样需要将权重矩阵展开为向量,需采用matlab中的reshape()函数实现。
  通过以上步骤采用0.001学习速率,迭代50次后,精度达到94.34%。
  采用随机失活(Dropout)对实验进行优化。随机失活的意思是在训练过程使一定比例的神经元失效,这个函数的使用场景是当网络设计比较复杂时,容易出现过拟合现象,通过使用随机失活可以减小网络复杂度,有效防止过拟合[3,9]。在训练过程中,丢弃一定比例的神经元,可以使神经网络中各神经元之间的依赖性降低,从而使神经网络在训练时具有更好的鲁棒性。经过优化后实验精度为95.56%。
  4 结论
  BP算法在使用时表现出简单、容易执行、运算量小等优点,是神经网络训练比较常用且相对比较成熟的算法。本文采用BP神经网络实现了对手写数字的识别,介绍了具体是实现步骤,通过matlab编程实现,并在实验后,通过加入Dropout,在一定程度上提高了神经网络训练结果的精度,但是由于本文神经网络复杂度不高,所以优化效果不是很明显。因BP神经网络,存在学习效率不高,训练时可能出现局部最优点,参数选择不当容易过拟合现象和收敛过慢的现象等缺点。笔者将在以后的学习中继续加强机器学习和深度学习的相关研究,学习更具优势的神经网络算法,研究卷积神经网络,将机器学习中常用的一些算法,如贝叶斯算法,模糊推理算法,深度置信网络融入其中,进一步提高神经网络精确度。
  参考文献
  [1]Ian Goodfellow等著.深度学习(Deep Learning). 赵申剑等.译. 人民邮电出版社,2017.
  [2]刘磊.基于多卷积层和随机失活优化的卷积神经网络手写数字识别[D].哈尔滨理工大学,2019.
  [3]胡君萍,傅科学.基于改进KNN算法的手写数字识别研究[J].武汉理工大学学报(信息与管理工程版),2019,41(01):22-26.
  [4]張黎,刘争鸣,唐军.基于BP神经网络的手写数字识别方法的实现[J].自动化与仪器仪表,2015(06):169-170.
  [5]夏少杰,项鲲.基于BP神经网络的手写数字识别及优化方法[J].智能物联技术,2018,1(01):19-22.
  [6]宋晓茹,吴雪,高嵩,陈超波.基于深度神经网络的手写数字识别模拟研究[J].科学技术与工程,2019,19(05):193-196.
  [7]Nadir Murru,Rosaria Rossini. A Bayesian approach for initialization of weights in backpropagation neural net with application to character recognition[J].Neuroco mputing,2016,193.
  [8]王玲.数据挖掘学习方法[M].北京:冶金工业出版社,2017.08.
  [9]Srivastava N,Hinton G,Krizhevsky A,et al.Dropout:A Simple Way to Prevent Neural Networks from Overfitting[J].Journal of Machine Learning Research,2014,15(1):1929-1958.
转载注明来源:https://www.xzbu.com/8/view-15219014.htm