在(l+1)层第m个单元时
l?1?Ek?Ek?netmk?Ekl?1l?1l?18) ??w??wmj (3·???mjmkll?1ll?1??jk??jkm?netmkm?netmkm将式(3·8)代入式(3·7)中,则得
?1l?19) ?ljk???lmkwmjf?(netljk) (3·
m 总结上述结果,有
l?1l?1??ljk???mkwmjf?(netljk)?m???Ekll?1?l??jk?jk? (3·10) ??wij 因此,反向传播算法的步骤可概括如下:
(1)选定权系数初值;
(2)重复下述过程,直到误差指标满足精度要求,即:
1E?2N?Ek?1Nk??,?:精度
?对k=1到N
?1 正向过程计算:计算每层单元的?ljk,netljk和yk,k=2,...,N。
反向过程:对各层(l=L-1到2),对每层各单元,计算?ljk。
?修正权值
wij?wij???E??0 (3·11) ?wij (3)结束。
这里,训练样本的呈现顺序从一个回合到另一个回合必须是随机的。动量和学习率参数随着训练迭代次数的增加而调整(通常是减少的)。 2.2BP网络学习算法
在标准BP算法中,设k为迭代次数,则每一层权值和阈值的修正按下式进行
x(k?1)?x(k)??g(k)(3·12)
式中:x(k)为第k次迭代各层次之间的连接权向量或阈值向量。
g(k)??E(k)为第k次迭代的神经网络输出误差对各权值或阈值的梯度向量。?x(k)负号表示梯度的反方向,即梯度的速度下降方向。
?为学习速率,在训练时是一个常数。在MATLAB神经网络工具箱中,其默认
值是0.01,可以通过改变训练参数进行设置。
Ek为第k次迭代的网络输出的总误差性能函数,在MATLAB神经网络工具箱
中,BP网络误差性能函数的默认值为均方误差MSE(mean square error),以二层BP网络为例,只有一个输入样本时,有
1s2213) E(k)?E[e(k)]?2?[ti?ai2(k)]2(3·
si?1a2i(k)?f2{?[?i2,j(k)ai1(k)?bi2(k)]}j?1s22?f2{?[?i2,j(k)f1(?(i?i1(k)pi?ibi1(k)))?bi2(k)]}j?1j?1s2s1(3·14)
2.3 BP网络的局限性
BP网络还不是一个完善的神经网络,目前还存在着以下问题:
(1)学习算法收敛的速度慢。BP神经网络中存在固定的学习率,惯性因子。这是导致BP神经网络学习过程收敛速度缓慢的直接原因。BP算法本质上是基于梯度的最速下降法,利用误差对权值、阐值的一阶导数信息来指导下一步的权值调整方向,以求达到最终误差最小。为保证算法的收敛性,学习率叮必须小于某一上界,这就决定了BP神经网络的收敛速度不可能快。有时一个十分简单的问题,往往也要学习几百次甚至上千上万次才有可能收敛。 (2)局部极小问题,即不能保证收敛到全局最小点。从结构上讲BP神经网络输入输出间的非线性关系致使网络的误差或能量函数是一个具有多极点的非线性空间而BP算法一味追求的是网络误差或能量函数的单调下降,也就是说,算法赋予网络的是只会“下坡”而不会“爬坡”的能力。正因为如此常常导致网络陷入局部最小点不能自拔,而达不到全局最小点。所以,有人说它是一种急于求成的“贪心”算法。从数学观点看来,误差反向传播采用梯度下降法,其学习过程是一个非线性优化过程,所以不可避免地会遇到优化过程中最常见的局部极小问题。 (3)隐含层的层数和隐单元的个数的选取至今尚没有一个统一的规律,在许多实际应用中基本上是采用试凑法和一些经验公式。在使用BP神经网络时,遇到的第一个大问题就是网络最佳结构的确定。具体地说,就是给定了某个应用任务,如何确定网络层数和每层应选的节点数。目前,对于BP神经网络隐层数目以及隐层的节点数目的确定方法都没有充分的理论依据,大都是靠经验来确定。而且,对于不同的问题遵循的规律也不一样。所以,BP神经网络的结构是难以确定的。 (4)BP学习算法的迭代步长即学习因子的值和惯性系数的选取也是由经验确定的选取不当会引起网络震荡甚至导致网络麻痹而不能收敛。BP神经网络的结构复杂性,训练样本的数量和质量,网络的初始权值,学习时间,目标函数的复杂
性,对目标函数的先验知识等,这些因素都对神经网络的泛化能力有一定影响,既有定量的,也有定性的,影响情况错综复杂,所以导致让所设计的BP神经网络的泛化能力很难保证。
(5)BP网络的学习,记忆具有不稳定性。一个训练结束的BP网络,当给它 提供新的输入模式时,将破坏已有的用于记忆的连接权矩阵,从而导致已经记忆 的学习模式的信息雌过学习己具备的能力)完全消失。这种现象是目前的BP算法所固有的,是必然的,无法避免的。此时,必须将原有的学习模式与新加入的学习模式放在一起重新训练网络。
3BP网络应用实例 3.1数据预处理
基于已知的医疗数据,对数据进行预处理。在原始表中,共有998行,82列。基于数据的可操作性,对略有残缺和辨识度不大的列项予以舍去。在此基础上,针对研究问题的方向,尽量的选取与之有较大关联的数列项,并舍去相应的列项。最后处理的原始数据共有998行,26列。 3.2实际应用
在整个应用的过程中,取前800行的数据做训练,剩下的198行做检测。其中,取23列数据做输入,3列做输出,相应的三列分别为基线测量的血压分级,高血压和体重指数。
应用神经网络工具箱,做相应的BP网络数据处理。
102Best Validation Performance is 0.35486 at epoch 56 TrainValidationTestBestMean Squared Error (mse)10110010-110 0-210203040506062 Epochs
BP网络的训练过程