首页 A1训练模型 一种提高BP神经网络性能的方法研究

一种提高BP神经网络性能的方法研究

标题:一种改善BP神经网络性能的方法研究

高宇航

(南京邮电大学计算机学院江苏南京210003)

:BP神经网络目前应用广泛,但其收敛速度慢、预测精度低的缺点一直受到诟病。因此,在传统的BP神经网络中采用了附加动量项法和动态学习率法,并在两者融合的基础上,提出了陡峭因子可调激活函数法来改进BP神经网络。以非线性函数拟合为例,从收敛速度和预测精度等方面对两种方法进行了比较分析。实验表明,所提出的改进方法显着提高了BP神经网络的收敛速度和精度。

:BP神经网络;附加动量项;动态学习率;陡峭因子可调激活函数

:TP183 文档识别码:ADOI:10.19358/j.issn.1674-7720.2017.06.017

引用格式:高宇航.一种提高BP神经网络性能的方法研究[J].微型计算机及其应用,2017,36(6):53-57,61。

0简介

人工神经网络(Artificial Neural Network,ANN)是一种非线性动态系统,它以信息处理的方式模仿、简化和简单抽象人脑神经元网络,而不是准确、真实地描述它。 BP(Back Propagation)神经网络是一种具有信号前向传播和误差反向传播的多层前馈网络[1]。 BP神经网络模型结构如图1所示。

由于BP神经网络具有自适应、自组织和实时学习的特点,目前广泛应用于模式识别、自动控制、预测与估计、信号处理、专家系统等领域。但由于其学习规则基于梯度下降算法,因此会存在收敛速度慢、预测精度低、无法达到全局极小点(即容易陷入局部极小点)等问题。 )[2]。因此,如何有效改进BP神经网络成为值得研究的重要问题。研究表明,影响BP神经网络性能的因素有很多。本文从几个方面探讨了改进BP神经网络的方法。

1BP神经网络的改进

1.1 附加动量项法

BP神经网络从网络误差的负梯度方向修正权重和阈值。这个过程没有考虑到以往经验的积累,导致趋势出现振荡,有可能陷入局部极小值[3]。因此,本文提出使用一个附加的动量项,即在误差反向传播的过程中,在当前的权重上加上一个与之前的权重变化相关的值。附加动量的权重公式为:

w(n)=w(n1)+w(n)+w(n1)w(n2)】(1)

式中,w(n)、w(n-1)、w(n-2)分别表示n、n-1、n-2时刻的权重,eta表示动量的学习率。

1.2 动态学习率法

传统的BP神经网络采用固定的学习率eta,取值范围一般为[0,1]。如果eta选得太小,学习时间就会太长;如果eta选得太大,虽然可以加快学习速度,但会导致权重修改过程产生振荡,从而使全局误差达不到预期值。

为了改善上述问题,根据梯度下降法呈锯齿状逼近极小点且越接近极小点收敛速度越慢的特点,提出动态学习率方法,以缩短收敛时间。训练时间。具体步骤如下: 首先设置初始学习率eta,然后检查修改后的权重是否可以减少误差。如果可以,说明学习率设置较小,需要增大学习率eta;如果误差不能减小,则表明调整已经过度,需要减小学习率eta。动态学习率eta的调整公式定义如下:

eta(n+1)=1.04n(n), E(n+1)E(n)

0.6n(n), E(n+1)1.03(n)

(n),其他情况(2)

1.3 选择合适的激活函数

在神经网络中,神经元的激活函数用于执行复杂的映射函数,这决定了该神经元节点的输出[4]。 FESAURO G指出,BP神经网络的收敛速度直接受激活函数的影响[5]。

激活函数的作用主要体现在将非线性因素引入多层神经网络中[6]。因为线性模型的表达能力非常缺乏,如果神经网络都是线性元件,那么输出就是输入的线性组合,相当于没有隐藏层的效果。这种情况就是最原始的感知器(Perceptron)。非线性是神经网络的核心。一旦引入非线性,BP神经网络就可以有效逼近任何连续函数,可以解决线性模型无法解决的非线性问题[7]。

目前常用的激活函数有两种:Sigmoid函数和双曲正切函数。

(1)Sigmoid函数:Sigmoid函数的函数图是S形的。函数定义为:f(net)=11+e-net。它是一个有界且可微的实函数。每个点的导数值始终为正。数,其导数为:f(net)=enet(1+enet)2。 Sigmoid函数图像及其导数图像如图2所示。

它的输出范围有限,可以将输入值映射到0到1之间,因此数据在传输过程中不易发散。当函数趋于负无穷时,极限为0;当函数趋于正无穷时,极限为1。 Sigmoid函数可以很容易地将非线性引入网络[8]。然而Sigmoid函数也有以下两个致命的缺点:

饱和时梯度消失。当输入值很大或者很小的时候,Sigmoid函数这些区域的梯度几乎为0,即梯度消失。对于BP神经网络来说,如果梯度太小,权重的修改就会很小甚至几乎为0,导致整个网络难以学习。

Sigmoid函数的输出值不是零均值。这将导致下一层神经元将本层的非零平均输出信号作为输入。试想一下,如果输入到神经元的数据始终为正,那么得到的梯度也将是一个恒定的正数,这会引起锯齿现象,减慢收敛速度。

(2)双曲正切函数:又称Tanh函数,其函数可表示为:f(net)=21+e-2net-1,其导数为:f(net)=1-f(net) 2. Tanh函数图像及其导数图像如图3所示。输入值可以映射到-1到1之间。图像经过原点,经过I和III象限。 Tanh 函数是严格单调递增函数。当函数趋于负无穷时,极限为-1,当函数趋于正无穷时,极限为1[9]。 Tanh函数改善了Sigmoid函数输出值的非零均值,但饱和时梯度消失的问题仍然存在[10]。

为了比较Sigmoid函数和Tanh函数作为激活函数的性能,以经典非线性问题——异或问题(XOR)为研究对象,分别使用两个函数作为激活函数。最大训练次数设置为1000次。期望均方误差(MSE)精度设置为0.000 1,Sigmoid和Tanh迭代次数对比如表1所示。 表1 Sigmoid和Tanh迭代次数对比激活函数SigmoidTanhMSE精度0.000 10.000 1 实际MSE 精度0.000 094 5460.000 091 367 迭代次数10720

根据表1可知,采用Tanh函数作为激活函数时BP网络的收敛速度优于Sigmoid作为激活函数的收敛速度,其性能约为Sigmoid的5倍。

1.4 改进激活函数

传统的BP神经网络中,只有连接神经元的权重和作用于激活函数的阈值是可调的,而激活函数是固定的,这限制了BP神经网络的非线性。映射能力,进而影响网络的精度和收敛速度[11]。为了改善上述问题,有学者提出对Sigmoid函数的垂直和水平位置进行改进[12]。不过根据上文可以知道,Tanh函数作为激活函数比Sigmoid函数要好。 BP神经网络的学习规则基于梯度下降。为了优化BP神经网络,没有必要让它变得更复杂。基于上述思想,本文提出了陡峭因子参数可调的Tanh函数,其形式如下:

f(净)=21+e-2x-1(3)

其中,为陡度因子,决定了函数的陡度。本文中,xj表示输入层第j个节点的输入。假设输入层有m个节点,则j=1,m; wji 是输入层第j 个节点和隐藏层第i 个节点之间的连接。重量; i表示隐藏层第i个节点的阈值; f1(1 net)为隐藏层激活函数,其中1为隐藏层激活函数的可调陡度因子; win表示隐藏层第i个节点与输出层第n个节点之间的连接权值,假设隐藏层有q个节点,则n=1,q; n表示输出层第n个节点的阈值; f2(2net)为输出层激活函数,2为输出层激活函数的可调陡度因子; on表示输出层第n个节点的输出,假设输出层有l个节点,n=1,l。

根据上述规定,改进后的BP神经网络的前向传播过程为:

隐藏层第i个节点的输入为:

neti=wjixji(4)

隐藏层第i个节点的输出记为:

yi=f1(1neti)=f1(1mi=1wjixji) (5)

输出层第n个节点的输入为:

netn=qn=1winyii=qn=1winf1(1mi=1wjixji)i(6)

那么,输出层第n个节点的输出值可以表示为以下形式:

on=f2(2netn)=f2(2qn=1winyii)=f2qn=1winf1(1mi=1wjixji)i (7)

改进的BP神经网络误差反向传播过程如下:

每个样本p 的二次误差准则函数为:

Ep=12ln=1(tn-on)2(8)

假设系统中有P个训练样本,则系统的总误差准则函数为:

E=12Pp=1ln=1(tn-on)2(9)

根据BP神经网络反向传播原理,为了提高E沿梯度下降方向的连接权值,需要依次计算win、wji、2、1。可以使用下面的公式来计算所需的值,其中eta是增益因子。

改进后的BP神经网络输出层权值调整公式为:

改进BP神经网络隐含层权值调整公式为:

改进BP神经网络输出层激活函数陡峭因子调整公式为:

改进BP神经网络隐含层激活函数陡峭因子调整公式为:

根据推导规则可得:

经过排序,最终得到如下公式:

最后将计算出的值带入如下更新公式,其中t代表某个时间:

赢(t+1)=赢(t)+赢(17)

wji(t+1)=wji(t)+wji(18)

2(t+1)=2(t)+2(19)

1(t+1)=1(t)+1(20)

2实验结果与分析

为了验证改进BP神经网络的性能,利用MATLAB工具拟合非线性函数z=x2+y2,并从1800组输入输出数据中随机选取1700组输入输出数据为BP神经网络的训练数据。训练结束后,将剩余的100组作为测试数据来测试网络的拟合性能[15]。

分别采用以Tanh函数为激活函数的传统BP神经网络和采用附加动量项方法结合动态学习率的改进算法和参数可调的Tanh激活函数来训练网络。最后对两种方法的结果进行了比较。分析。

2.1 网络初始化

在网络初始化阶段,需要确定输入层神经元节点数nI、输出层神经元节点数nO、隐含层神经元节点数nH。根据需要拟合的非线性函数的特点,设置输入层神经元节点数nI为2,输出层神经元节点数nO设置为1,神经元节点数隐藏层中的nH可以根据以下公式得到:

nH=nI+nO+a

其中a为0~10之间的常数。根据上述设置,最终构建的BP神经网络的输入层神经元节点数为2,隐含层神经元节点数为10,输出层神经元数节点数为1。接下来需要随机初始化网络参数:连接权值(-0.5,0.5);阈值 (-0.5, 0.5);陡度因子 (0.7, 1.5)。

2.2 数据预处理

参数随机初始化后,需要对输入网络的数据进行归一化处理。这样可以减少各维度数据之间的数量级差异,从而避免由于输入和输出数据数量级差异较大而导致网络收敛缓慢和训练时间过长。问题。

MATLAB中对应的归一化代码如下:

[inputn,inputps]=mapminmax(input_train);

[输出n,输出ps]=mapminmax(output_train);

2.3 对比测试

分别训练传统BP神经网络和附加动量项方法与动态学习率和参数可调Tanh激活函数相结合改进的网络。指定训练的目标均方误差分别为0.000 01和0.000 001,最大迭代次数设置为10 000次。

最后利用100组测试数据分析传统BP神经网络和改进BP神经网络在迭代次数和误差精度方面的拟合性能。结果如下。

从迭代次数角度分析,如图4和图5所示,当系统目标均方误差设置为0.000 01时,传统BP神经网络需要迭代70次才能达到这个精度,而改进后的BP神经网络需要迭代70次才能达到这个精度。 BP神经网络只需要33次迭代就可以达到这个精度。

当系统目标均方误差为0.000 001时,如图6和图7所示,在此精度要求下,传统BP神经网络迭代193次即可完成,而改进后的BP神经网络只需要72次迭代即可完成。满足均方误差精度要求。

接下来从学习准确率的角度来分析。限于篇幅,从100个测试数据中随机选取10个数据作为样本。当目标均方误差精度为0.00001时,传统BP神经网络的预测值记为A1,改进BP神经网络记为A2;当目标均方误差精度为0.000 001时,传统BP神经网络的预测值记为B1,改进BP神经网络的预测值记为B2。结果如表2所示。从表2可以看出,改进后的BP神经网络与传统神经网络相比,在学习精度上也有显着的提高。

3结论

针对传统BP神经网络收敛速度慢、预测精度低、易陷入局部极小点等缺点,提出一种在平滑权值中添加动量项的方法变化、动态学习率方法和陡峭因子参数可以结合激活函数的改进方法,并使用非线性函数拟合作为实验与传统BP神经网络进行比较分析,证明改进的BP神经网络在此paper具有更快的收敛速度和更高的精度。

参考

[1]周志华,曹存根。神经网络及其应用M北京:清华大学出版社,2004。

2 ABRAHAM A. 元学习进化人工神经网络J神经计算,2004,56: 1-38。

[3] 张育农,曲璐,陈俊伟,等。多输入Sigmoid激励函数神经网络权值及结构的确定[J]计算机应用研究,2012,29(11): 4113-4151。

4吴爱龙,曾志刚。不同激活函数周期神经网络拉格朗日意义上的全局指数稳定性J神经计算,2011,74(5):831-837。

5 DEBES K, KOENIG A, GROSS H M. 人工神经网络中的传递函数基于仿真的教程J.大脑、思想和媒体,2005(1)。

6 MHASKAR H N, MICCHELLI C A. 如何选择激活函数J.神经信息处理系统的进展,1994: 319。

7 GULCEHRE C,MOCZULSKI M,DENIL M,等。噪声激活函数J arXiv 预印本arXiv:1603.00391,2016。

[8]王学光,郭彦兵,齐占清。激活函数对BP网络性能的影响及其仿真研究[J]自动化技术及应用,2002,21(4): 15-17。

热门文章