-1-基于BP神经网络的非线性函数拟合摘要:本文建立BP神经网络对一个多输入多输出系统的二元非线性函数进行拟合,仿真实验表明:在样本数据充足且不含噪声的情况下,训练的精度越高,逼近的效果越好;数据不充足且不含噪声时,训练精度的高低在一定范围内对于网络性能没有决定性的影响,网络性能主要取决于初始化;不管训练数据是否充足,若含有噪声,训练精度过高会使网络泛化能力降低。0引言作为当前应用最为广泛的一种人工神经网络,BP网络在函数逼近、模式识别、数据压缩、智能控制等领域有着非常广泛的应用。BP网络由大量简单处理单元广泛互联而成,是一种对非线性函数进行权值训练的多层映射网络,结构简单,工作状态稳定,具有优良的非线性映射能力,理论上它能够以任意精度逼近任意非线性函数。BP神经网络通过学习能够存储大量输入输出样本中蕴含的映射关系,只需提供足够的样本模式对BP网络进行训练,而无需事先了解数学方程。本文采用BP神经网络解决下列函数拟合问题。函数逼近:设计一个神经网络拟合下列多输入多输出函数:yR1R=2+xR1RP1.5P-1.5sin(3xR2R);yR2R=xR2Rsin(xR1R)+xR1Rcos(xR2R);1xR1R,xR2R5产生200个数据,其中100个用来训练网络,另外100个用于网络模型的测试。1BP神经网络结构和算法一个典型的3层BP神经网络结构如图1所示,包括输入层、隐含层和输出层。各层神经元之间无反馈连接,各层内神经元之间无任何连接。其中隐含层的状态影响输入输出之间的关系,及通过改变隐含层的权系数,就可以改变整个多层神经网络的性能。BP神经网络的学习过程由正向传播和反向传播组成。在正向传播中,输入的样本从输入层经过隐含层之后,传向输出层,在逐层处理的过程中,每一层神经元的状态只对下一层神经元的状态产生影响。在输出层把现行输出和期望输出进行比较,如果现行输出不等于期望输出,则进入反向传播过程。反向传播过程中,误差信号从输出层向输入层传播,并对每个隐含层的各个神经元的权系数进行修改,使误差不断减少,直至达到精度要求。-2-BP算法的实质是求取误差函数最小值问题,通过多个样本的反复训练,一般采用非线性规划中的最速下降方法,按误差函数的负梯度方向修改权系数。输入节点隐含节点输出节点图1典型3层BP神经网络结构图2用于函数拟合的BP神经网络模型的建立为建立函数拟合的BP神经网络模型,一般要考虑以下几步:(1)样本数据的产生为简单起见,在x1,x2均属于[1,5]区间内选择均匀分布的200个数据点分别作为训练和测试样本。如图2所示。11.522.533.544.5511.522.533.544.55x1x2训练和测试数据训练数据测试数据图2数据样本(2)数据预处理通常需要将样本数据归一化,由于这里的数据变化范围不大,所以暂不考虑对数据的归一化。-3-(3)网络结构的选择①网络层数:理论证明,在不限制隐层节点数目的情况下,单隐层BP网络可以实现任意非线性映射。但本题中,仿真表明采用两个隐层更为合适。②输入输出层节点数:本题中,所拟合的函数为两个输入变量,两个输出变量。所以BP网络输入层设置两个节点,输出层也设置两个节点。③隐层节点数:隐含层节点数目的选择是一个十分复杂的问题,到目前为止,还没有用数学公式来明确表示应该怎样确定隐含层的节点数目。节点数目太少,不能很好的表达样本数据种所蕴含的规律;但隐含层节点太多又导致学习训练时间太长,误差也不一定最佳,还可能出现“过度吻合”的问题,使得泛化能力降低。本题中隐层节点的选取主要采用试凑的办法。如前所述,这里设置两个隐层,第一层节点设置分为3和30两种,第二层节点设置分为2和20两种,以便于对比。④神经元的传递函数:隐层采用单极性sigmoid函数“tansig”,输出层采用线性传递函数“purelin”。(4)训练及仿真采用批训练方法,一批数据即为全部100个训练样本。输入x1,x2∈[1.2,4.8],输出y1∈[1.8660,14.0105];y2∈[-7.9795,4.9380]。通过对100个样本进行一次整体学习后,再统一修改一次网络的权。学习算法采用学习率可变的动量BP算法(traingdx)。训练目标为网络输出与样本输出之间的均方误差(mse),训练精度可根据需要设定。BP网络训练完成以后,即可用于仿真。将测试数据输入网络,得到的网络输出与样本输出进行比较,即可分析网络的泛化能力。当然,通过网络仿真的数据需要经过适当的反归一化变换才能够与测试样本的输出直接进行比较。(5)测试及仿真为检验所训练出的网络是否满足要求,需要对其进行仿真测试。测试数据的输入x1,x2∈[1.4,5.0],输出y1∈[2.1587,14.5593];y1∈[-8.0943,5.3798]。3模型仿真及验证按前述方法用下面的指令创建神经网络:net=newff([1.24.8;1.24.8],[3,2,2],{'tansig','tansig','purelin'},'traingdx','learngdm');待拟合的函数图形化结果如图3所示。图3(a)为y1,y2的三维视图,图3(b)为y1的二维投-4-影视图,图3(c)为y2的二维投影视图。1234512345051015x1待拟合的曲面y1x2y11234512345-10-505x1待拟合的曲面y2x2y2图3(a)待拟合函数的三维视图11.522.533.544.552468101214x1y1平面x2=3截曲面y1所得的曲线在x1-y1面上的投影11.522.533.544.555.566.577.588.59x2y1平面x1=3截曲面y1所得的曲线在x2-y1面上的投影图3(b)待拟合函数y1的投影视图11.522.533.544.55-8-7-6-5-4-3-2-1012x1y2平面x2=3截曲面y2所得的曲线在x1-y2面上的投影11.522.533.544.55-3-2.5-2-1.5-1-0.500.511.52x2y2平面x1=3截曲面y2所得的曲线在x2-y2面上的投影图3(c)待拟合函数y2的投影视图图3待拟合的函数图形化结果-5-首先采用学习率可变的动量BP算法(其训练函数为'traingdx'),取不同的隐含层得到的训练结果如图4,测试结果如图5:1)隐含层为3,2,epochs=30000,goal=0.001;1234512345051015x1BP网络训练输出曲面y1x2y11234512345-10-505x1BP网络训练输出曲面y2x2y2图4(a)网络训练输出曲面1234512345-0.1-0.0500.050.10.15x1网络训练误差曲面x2输出误差1234512345-0.2-0.100.10.2x1网络训练误差曲面x2输出误差图4(b)网络训练输出误差曲面图4(c)网络训练过程的误差曲线(goal=0.001,用时2分51秒且未达目标)-6-以下为网络测试结果:1234512345051015x1BP网络测试输出曲面y1x2y11234512345-10-505x1BP网络测试输出曲面y2x2y2图5(a)仿真测试输出曲面1234512345-1.5-1-0.500.51x1网络测试误差曲面x2输出误差1234512345-1.5-1-0.500.511.5x1网络测试误差曲面x2输出误差图5(b)仿真测试输出误差曲面图5(c)网络测试误差曲线(goal=0.001,耗时3分2秒)此时训练的收敛速度太慢,网络训练误差较大,函数逼近效果不是很好,有待改进。-7-2)隐含层为30,20,epochs=30000,goal=0.0011234512345051015x1BP网络训练输出曲面y1x2y11234512345-10-505x1BP网络训练输出曲面y2x2y2图6(a)网络训练输出曲面1234512345-0.1-0.0500.050.1x1网络训练误差曲面x2输出误差1234512345-0.1-0.0500.050.1x1网络训练误差曲面x2输出误差图6(b)网络训练输出误差曲面图6(c)网络训练过程的误差曲线(goal=0.001,用时1秒)网络测试结果如下:-8-1234512345051015x1BP网络测试输出曲面y1x2y11234512345-10-505x1BP网络测试输出曲面y2x2y2图7(a)网络测试输出曲面1234512345-1.5-1-0.500.511.5x1网络测试误差曲面x2输出误差1234512345-1.5-1-0.500.511.5x1网络测试误差曲面x2输出误差图7(b)网络测试输出曲面及误差图7(c)网络测试过程的误差曲线(goal=0.001,用时4秒)对比可看出,虽然此时网络训练和测试速度提高很多,但网络性能并没有随着隐含层层数的增加而有显著改善,反而出现了“过适配”问题。网络训练误差有所减小,但-9-网络测试误差没有显著下降。从误差曲面看,反而有局部的误差增大。从前面的实验结果可以看出:并不是网络隐含层层数越多,函数逼近的效果就越好。即使在相同的训练精度下,网络的性能也可能因初始化的不同而在性能上有很大差别。4.网络性能的改善为提高BP网络的泛化能力。可以从几个方面考虑:一是网络结构参数,;二是该进训练方法;三是提高数据质量。这里采用自动归一化法提高网络的泛化性能。贝叶斯归一化法基于贝叶斯框架理论。按照该理论,假定网络的权值和阀值是按照指定的分布随机可变的,归一化参数与这些分布的位置随机变量有关,于是可以用统计的方法估计出这些参数。其实现函数是“trainbr”。利用这个函数训练BP网络,可以使得网络响应更加平滑,提高泛化能力。相应的网络训练语句为:net=newff([1.24.8;1.24.8],[3,2,10],{'tansig','tansig','purelin'},'trainbr','learngdm');1234512345051015x1BP网络训练输出曲面y1x2y11234512345-10-505x1BP网络训练输出曲面y2x2y2图8(a).自动归一化后网络训练输出曲面1234512345-8-6-4-2024x10-3x1网络训练误差曲面x2输出误差1234512345-0.01-0.00500.0050.01x1网络训练误差曲面x2输出误差图8(b).自动归一化后网络训练误差曲面-10-图8(c)自动归一化后网络训练过程的误差曲线(goal=0.001,用时1秒)网络测试结果:1234512345051015x1BP网络测试输出曲面y1x2y11234512345-10-505x1BP网络测试输出曲面y2x2y2图9(a).自动归一化后网络测试输出曲面1234512345-1-0.500.51x1网络测试误差曲面x2输出误差1234512345-1-0.500.511.5x1网络测试误差曲面x2输出误差图9(b).自动归一化后网络测试的误差曲面-11-图9(c)自动归一化后网络测试的误差曲线(goal=0.001,用时1秒)采用这种方法训练出来的网络,注重泛化能力,不追求每一个数据点的精确逼近,使输出曲线比较平滑,而且很快就能达到训练目标。不过测试显示,误差并没有急剧减小,而是存在相对稳定的误差。5结束语本文首先简单介绍了BP神经网络的原理,接着针对函数拟合的问题,建立了相应的BP神经网络模型,然后对建立的模型进行了仿真测试和验证,最后采用自动归一化法对网络进行了改进,以提高网络的泛化能力,使得函数逼近的效果更加显著。若要提高网络模型的函数拟合性能,一方面需要增加训练点数,以保证有充分多、充分好的数据,另一方面应考虑优化网络结构。网络本身的结构对于神经网络的性能具有决定性的影响。在实际工程中,我们获得数据的数量、质量可能会受到客观条件的限制。因此,在生成有限数据的条件下,研究如何从优化网络结构的角度来提高函数逼近的效果将更具现实意义。参考文献:[1]周开利,康耀红.神经网络模型及其Matlab仿