摘要:本文简述了BP神经网络模型及BP学习算法规则,并在Matlab中利用BP神经网络对英文字母进行了识别,经结果分析发现BP神经网络对字母具有一定的辨识能力,是一种对字母识别的有效方法。
关键词: BP神经网络 Matlab 字母识别
1 引言
20世纪80年代中期,学者Rumelhart、McClelland和他们的同事提出了多层前馈网络MFNN(Mutltilayer Feedforward Neural Networks)的反向传播学习算法,简称BP网络(Back Propagation Network)学习算法。BP网络是对非线性可微分函数进行权值训练的多层前向网络。在人工神经网络的实际应用中,80%~90%的模型都采用BP网络或其变化形式。采用BP 算法的多层前馈网络, 是迄今为止应用最广泛的神经网络, 具有很强的非线性逼近能力以及自适应、自学习能力。
英文字母识别,是文字识别中一个重要分支。由于英文字母字体种类繁多,因而对英文字母的识别难度很大。针对英文字母的特性,本文基于BP 算法,设计了一种英文字母识别训练系统。本文主要选取四种大小写英文字母作为训练集样本, 用设计的BP网络对其进行训练, 从而得到英文字母的识别结果。
2 BP神经网络
BP 神经网络作为人工神经网络中应用最广的算法模型,具有完备的理论体系和学习机制。它模仿人脑神经元对外部激励信号的反应过程,建立多层感知器模型,利用信号正向传播和误差反向调节的学习机制,通过多次迭代学习,成功地搭建出处理非线性信息的智能化网络模型。
2.1 BP神经网络模型
反向传播神经网络(Back-Propagation Network,简称BP网络)是对非线性可微分函数进行权值训练的多层网络,是前向神经网络的一种。
BP网络主要用于:
1)函数逼近与预测分析:用输入矢量和相应的输出矢量训练一个网络,逼近一个函数或预测未知信息;
2)模式识别:用一个特定的输出矢量将它与输入矢量联系起来;
3)分类:把输入矢量以所定义的合适方式进行分类;
4)数据压缩:减少输出矢量维数以便于传输与存储。
在人工神经网络的实际应用中,80%-90%的神经网络模型是采用 BP 网络或它的变化形式,它也是前向网络的核心部分,体现了人工神经网络最精华的部分。
BP神经网络的模型结构如图1所示。
图1 具有一个隐含层和输出层的BP神经网络模型
BP网络的激活函数必须是处处可微的,所以它就不能采用二值型的阈值函数{0,1}或符号函数{-1,1},BP网络经常使用的是Sigmoid函数、正切函数或线性函数。Sigmoid型激活函数具有非线性放大系统功能,它可以将输入从负无穷大到正无穷大的信号,变换成0到1或-1到1之间的输出,对较大的输入信号,放大系数较小;而对较小的输入信号放大系数较大,所以采用 Sigmoid 型激活函数可以去处理和逼近非线性的输入/输出关系。不过,如果在输出层采用Sigmoid型激活函数,输出则被限制在一个很小的范围内,若采用线性激活函数,则可使网络输出任意值。所以只有当希望对网络的输出进行限制,如限制在0和1之间,那么在输出层应当包含Sigmoid型激活函数。
2.2 BP学习算法规则
BP网络是一种具有三层或三层以上的神经网络,上下层之间实现全连接,而每层神经元之间无连接。当一对学习样本提供给网络后,神经元的激活值从输入层经各中间层向输出层传播,在输出层的各神经元获得网络的输入响应。接下来,按照减少目标输出与实际误差的方向,从输出层经过各中间层逐层修正各连接权值,最后回到输入层,这种算法称为“误差逆传播算法”,即BP算法。
从大的方面来说,学习算法可分为两类:有监督的学习算法和无监督的学习算法。对于有监督的学习算法,学习和应用是分开的两个过程。学习过程是一个外加的对神经网络的连接强度进行系统调整的过程,而应用过程则是一个自治的动力学过程。通俗的说,这种神经网络就是“先学习,再使用”。而无监督的学习算法中的学习过程和应用过程是一个统一的过程。它不需要单独的学习过程,而是在与外界环境的不断交互作用中达到自组织学习,也就是“边干边学,干中学,学中干”。
BP算法属于一种有监督的学习算法。其主要思想是:对n个输入学习样本:,已知其对应的输出样本为:。学习的目的是用网络的实际输出与目标矢量之间的误差来修正其权值,使实际输出与目标矢量尽可能地接近;即:使网络输出层的误差平方和达到最小。它是通过连续不断地在相对于误差函数斜率下降的方向上计算网络权值和偏差的变化而逐渐逼近目标的。
BP 算法由两部分组成:信息的正向传递与误差的反向传播。在正向传递过程中,输入信息从输入层经隐含层逐层计算传向输出层,每一层神经元的状态只影响下一层神经元的状态。如果在输出层没有得到期望的输出,则计算输出层的误差变化值,然后反向传播,通过网络将误差信号沿原来的连接通路反传回来,修改各层神经元的权值直至达到期望目标。
3 BP神经网络在字母识别中的应用
在对字母进行识别之前,首先必须将字母进行预处理,即将待识别的4个字母中的每一个字母都通过方格形式进行数字化处理,其有数据的位置设为1,其他位置设为0。如图2给出了字母A、B和C的数字化过程,然后用一个1×35的向量表示。例如图2中字母A的数字化处理结果所得对应的向量为:
LetterA=[00100010100101010001111111000110001]
图2 数字化字母
由此可得每个字母由35个元素组成一个向量。由4个标准字母组成的输入向量被定义为一个输入向量矩阵alphabet,即神经网络的样本输入为一个35×4的矩阵。其中alphabet=[letterA,letterB,lettereC, letterD]。
为了对字母进行识别,我们设定目标误差为0.001,从输入层到隐层的激活函数采用了S型正切函数tansig,从隐层到输出层的激活函数采用了S型对数函数logsig,这是因为函数的输出位于区间[0,1]中,正好满足网络输出的要求。
根据BP网络的设计目标,一般的预测问题都可以通过单隐层的BP网络实现。难点是隐层节点个数的选择,隐层节点数对网络的学习和计算特性具有非常重要的影响,是该网络结构成败的关键。若隐层节点数过少,则网络难以处理复杂的问题;但若隐层节点数过多,则将使网络学习时间急剧增加,而且还可能导致网络学习过度,抗干扰能力下降。目前为止,还没有完善的理论来指导隐层节点数的选择,仅能根据Kolmogorov定理,和单隐层的设计经验公式,并考虑本例的实际情况加以确定。
为了使产生的网络对输入向量有一定的容错能力,最好的办法是使用理想的信号和带有噪声的信号对网络进行训练。由于选取的训练样本的限制,这里我们只使用了理想的信号对网络进行训练。网络学习的速率和冲量参数设置为自适应改变,并使用函数trainlm 进行快速训练。
我们模仿Matlab中的齿轮箱故障诊断系统,为每一个字母选取4个训练样本,即共16个样本。得结果如图3所示:
图3 测试结果
分析测试结果我们不难发现,在检测字母B时出现了不理想结果,这是由于训练样本太少导致的,如果我们增加训练样本,将大大增加字母识别的准确率。
训练表现如下图4所示:
从图4中可以看出,样本训练中迭代次数达到33次时均方误差不再减小,此时均方误差为0.031252。
4 总结与展望
本文利用BP网络对字母进行识别,结果表明此网络对字母具有一定的辨识能力,是一种对字母识别的有效方法。通过本文的识别结果可以看到,字母A,C,D能够被较好的识别,而字母B的识别效果不佳,如果能够在增加训练样本的基础上,再对带噪声的信号进行训练可能达到更好的识别效果。
参考文献
[1]苏高利, 邓芳萍. 论基于MATLAB语言的BP神经网络的改进算法[J]. 科技通报, 2003, 19(2):130-135. DOI:10.3969/j.issn.1001-7119.2013.02.012.
[2] 戚德虎, 康继昌. BP神经网络的设计[J]. 计算机工程与设计, 2018, (2):48-50.
[3]郭兴伟, 葛元, 王林泉. 基于形状特征的字母手势的分类及识别算法[J]. 计算机工程, 2004, 30(18):130-132. DOI:10.3969/j.issn.1000-3428.2014.18.050.