APP下载

BP神经网络算法改进

2017-09-13黄尚晴赵志勇孙立波

科技创新导报 2017年20期
关键词:BP神经网络

黄尚晴+赵志勇+孙立波

摘 要:BP神经网络因其理论成熟及泛化能力强而被广泛的应用在不同的领域。尽管如此,其仍然存在着两大缺陷:其一,收敛速度慢;其二,容易陷入局部极小。特别是在解决大样本问题时,BP算法的缺陷更加突出。本文首先从样本训练方法上入手对BP算法进行改进从而保证收敛速度,提出一种交叉批量梯度下降算法(Cross - batch gradient descent algorithm,以下简称CBGD)。将改进后的算法用于手写数字的识别,相比于普通的BP算法在收敛速度及测试准确率上都有明显的提高。

关键词:BP神经网络 算法改进 交叉梯度下降 手写体数字识别

中图分类号:TP273 文献标识码:A 文章编号:1674-098X(2017)07(b)-0146-02

BP神经网络中的线性神经网络的基础上演化而来的,其一般包含输入层、隐含层和输出层。BP学习算法是Rumelhrat和Hintond等学者于1986年提出[1],理论上包含一层隐含层神经元的BP网络可以逼近任意的函数[2],而在实际应用中,BP神经网络的层数通常是大于或等于3,尤其对于复杂的问题,网络的层数都会满足这个条件。自从该算法后期研究主要分为两大类:其一就是通过变固定的学习速率为变化的学习速率、增加动量因子等方法对迭代算法本身作出修改;另一方面,就是通过启发式算法来实现对BP算法收敛性的优化,其中包含粒子群算法和蚁群算法等。这些改进虽然对BP算法有了很不错的改善,但是都很少涉及到通过改进训练样本方法来改善收敛性的,只有向国全等在[3]中提到通过对样本训练方法的改进来提升BP神经网络的收敛能力,然而由于其改进限于当时的硬件以及算法本身对样本数据的过多重复使用,导致对收敛速度没有很大得到提高。

1 BP神经网络介绍

BP算法具有自适应误差反向学习能力,其将输入信号通过输入层传输到输出层,再通过误差函数反向修正各层神经元的权重及偏置。仅看输入输,BP神经网络相当于映射,不同的网络代表不同的映射机制。假设神经网络的输入特征向量为X=(x1,x2,…,xi,…,xl)T,隐含层输出为Y=(y1,y2,…,yj,…,ym)T,输出层的输出为Z=(z1,z2,…,zk,…,zn)T,其中l,m和n分别是输入层、隐含层和输出层神经元的个数。

令隐含层第j个神经元到输入层第i个神经元的权值为wji,输出层第k个神经元到隐含层第k个神经元你的权重为vkj,此外,设隐含层第j个神经元的偏置为θ1,其对应的激活函数为f1(x),而输出层第k个神经元的偏置为θ2,其对应的激活函数为f2(x),由此可得出隐含层和输出层的表达式为。为了便于本文的讨论,选择隐含层的激活函数为S型函数f1(x)=1/(1+exp(-x));选择输出层的激活函数为f2(x)=x。若该神经网络的期望输出为T={t1,t2,…,ti,…,tk},则针对每个训练样本选择如下误差函数:,其中,由于BP网络对系统的仿真不可能一步到位,所以涉及到一个调整的过程,主要就是通过调整BP网络的权值和偏置来实现。根据式E可知,误差函数值要尽量趋近于0也就是取最小值。所以BP神经网络训练的过程就是为以E为目标函数的优化问题。

为了找到最优解,给出梯度下降算法[4]:,此处给出一层BP网络的权值和偏置的迭代公式,根据设定的网络层数也可以求出其他参数。根据梯度下降可得出针对每个样本训练完后权值和偏置调整的步长。

2 样本训练方法的改进

在实际应用中,往往会涉及到多个样本,所以使得所有训练样本的误差函数和最小才能实现对目标系统更加逼近的仿真。为实现这一目标,目前主流的研究思路主要包含三种,一种是批量梯度下降法、随机梯度下降算法和随机批量梯度下降算法。这些算法虽然都对BP算法的收敛性有所改善,但是都没有考虑样本之间的重复性与其内在的联系所造成的训练过程的繁琐。

综合以上考虑,本文作以下改进。对于给定输入样本为X=(X1,X2,…,XN),其中N为输入样本个数,对应的期望输出为T=(T1,T2,…,TN),而相应的BP网络输出为Z=(Z1,Z2,…,ZN);首先将整个输入样本集X分成C1,C2,…,Cc組,但需要满足以下条件:,。根据上述条件,可知任意相邻两个样本的分组之间的交集个数可变。很显然,各个样本组交集个数越多,训练量越大,从而增大样本的训练时间;但是如果另一方面来看,当样本组Cp和Cq的交集越多时,训练样本组Cp得到的最优权值在很大程度上对样本组Cq来说也是最优的,所以整体训练下来将会减少训练样本的时间。因此,目的是找到一个较好的分组,用于训练整个样本。因此给出如下选择相邻样本组样本交集的方案:,,1≤。min_batch为相邻的训练样本组数量的最小值,一般人为给出。

不失一般性,假设采集的数据样本是相互独立的。下面给出确定样本集分组数量c的一种方案:,其中的[·]表示对方括号内的值进行取整。为了提高神经网络检测的可靠性,需要同时对样本进行不同数量的多次分组,并分别对其进行训练,也就是最后训练好的权值和偏置有多组,再分别对所需要仿真的系统进行检测,从多组网络中选择最好的网络作为测试网络。

3 改进算法在手写数字识别上的应用

本文将利用MNIST手写数据库对算法进行试验,目前已经有很多学者利用MNIST完成了自己的算法的研究[4]。数据集中共包含手写体数字0到9的训练数据和测试数据,本文选择训练样本集中50000个样本用于训练,并选择测试样本集中的10000个样本用于测试。由于其中每个样本数据是32×32的矩阵,其要转化成784维特征向量,并根据上一节中提到的样本分组方案。选择min_batch=20,s=5,计算出c=[50000/15]+1=3334。对样本编号成X1, X2,…,X50000,可将这50000个样本分为以下几组:,,…,。endprint

除了最后一个分组只包含5个样本外,其他每个分组都包含20个样本,而且相邻两个样本组中都具有5个相同的样本。根据图1所提到的样本训练方法可知,首先訓练样本集C1,然后将训练好的权值和偏置保留,并用于训练接下来的样本集C2,并以此类推。本算法用Python实现,只是分两种训练方式:一种是将50000个训练样本均匀的分成2500个组,然后依次进行训练;另外就是用前文介绍的方法来训练。最后得到对比结果如下:

图1给出迭代第78次到298次的结果,可以清晰的看出CGDB在收敛效果上的优越性。因为样本训练出来的效果仅仅只能反应模型对训练样本的表达能力,但是不能说明模型对整个分类问题能力。为了验证模型的泛化能力,用上述训练好的模型,去训练数据集中10000个测试集样本。得出最终的测试结果如图2所示。从图2的变化趋势来看,从测试结果来看,通过使用CBGD方法进行样本训练,在收敛速度上明显比普通的BGD方法要快,而且在收敛效果上,前者训练误差一直比后者的训练误差小,可知相比较而言,本文的方法在样本的表达上效果更佳。再通过样本测试结果来看,CBGD也比普通的CBGD表现得更好。

参考文献

[1] Williams D,Hinton G E.Learning representations by back-propagating errors[J]. Nature,1986,323:533-536.

[2] White H.Connectionist nonparametric regression:Multilayer feedforward networks can learn arbitrary mappings[J].Neural Networks,1990,3(90):535-549.

[3] composition using ACO-BP neural network[J]. Thermochimica Acta,2007,454(1):64-68.

[4] 向国全,董道珍.BP模型中的激励函数和改进的网络训练法[J].计算机研究与发展,1997(2):113-117.

[5] 李望晨.BP神经网络改进及其在手写数字识别中的应用[D].哈尔滨工业大学,2006.endprint

猜你喜欢

BP神经网络
基于神经网络的北京市房价预测研究
提高BP神经网络学习速率的算法研究