BP神经网络算法原理:输入信号ix通过中间节点(隐层点)作用于输出节点,经过非线形变换,产生输出信号ky,网络训练的每个样本包括输入向量x和期望输出量d,网络输出值y与期望输出值d之间的偏差,通过调整输入节点与隐层节点的联接强度取值ijw和隐层节点与输出节点之间的联接强度jkT以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和阈值),训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。变量定义:设输入层有n个神经元,隐含层有p个神经元,输出层有q个神经元输入向量:12,,,nxxxx隐含层输入向量:12,,,phihihihi隐含层输出向量:12,,,phohohoho输出层输入向量:12,,,qyiyiyiyi输出层输出向量:12,,,qyoyoyoyo期望输出向量:12,,,qdoddd输入层与中间层的连接权值:ihw隐含层与输出层的连接权值:how隐含层各神经元的阈值:hb输出层各神经元的阈值:ob样本数据个数:1,2,km激活函数:f误差函数:211(()())2qoooedkyok算法步骤:Step1.网络初始化。给各连接权值分别赋一个区间(-1,1)内的随机数,设定误差函数e,给定计算精度值和最大学习次数M。Step2.随机选取第k个输入样本12()(),(),,()nxkxkxkxk及对应期望输出12()(),(),,()qdkdkdkdkoStep3.计算隐含层各神经元的输入1()()1,2,,nhihihihikwxkbhp和输出()(())1,2,,hhhokfhikhp及输出层各神经元的输入1()()1,2,pohohohyikwhokboq和输出()(())1,2,,ooyokfyikopStep4.利用网络期望输出和实际输出,计算误差函数对输出层的各神经元的偏导数()ok。ohoohoyieewyiw(())()()phohoohhhohowhokbyikhokww211((()()))2(()())()(()())f(())()qoooooooooooodkyokedkyokyokyiyidkyokyikkStep5.利用隐含层到输出层的连接权值、输出层的()ok和隐含层的输出计算误差函数对隐含层各神经元的偏导数()hk。()()oohhoohoyieekhokwyiw1()()(())()()hihhihnihihhiiihihhikeewhikwwxkbhikxkww212121111((()()))()2()()()1((()f(())))()2()()1(((()f(())))()2()()(()())f(())qooohhhhqooohhhqpohohoohhhhooohoodkyokhokehikhokhikdkyikhokhokhikdkwhokbhokhokhikdkyokyikw1()()(())f(())()qhhqohohhohokhikkwhikkStep6.利用输出层各神经元的()ok和隐含层各神经元的输出来修正连接权值()howk。1()()()()()hoohhoNNhohoohewkkhokStep7.利用隐含层各神经元的()hk和输入层各神经元的输入修正连接权()ihwk。1()()()()()()()hihhiihhihNNihihhihikeewkkxkwhikStep8.计算全局误差。2111(()())2qmookoEdkykmStep9.判断网络误差是否满足要求。当误差达到预设精度或学习次数大于设定的最大次数,则结束算法。否则,选取下一个学习样本及对应的期望输出,返回到第三步,进入下一轮学习。算法流程图:参数确定:确定了网络层数、每层节点数、传递函数、初始权系数、学习算法等也就确定了BP网络。确定这些选项时有一定的指导原则,但更多的是靠经验和试凑。1.样本数据采用BP神经网络方法建模的首要和前提条件是有足够多典型性好和精度高的样本。而且,为监控训练(学习)过程使之不发生“过拟合”和评价建立的网络模型的性能和泛化能力,必须将收集到的数据随机分成训练样本、检验样本(10%以上)和输入x,根据网络的状态方程计算网络输出y网络初始化计算全局误差:2111(()())2qmookoEdkykm修改权值:1()()NNwwkxk训练完成E达到最大学习次数NONOYESYES测试样本(10%以上)3部分。2.输入/输出变量一般地,BP网络的输入变量即为待分析系统的内生变量(影响因子或自变量)数,一般根据专业知识确定。若输入变量较多,一般可通过主成份分析方法压减输入变量,也可根据剔除某一变量引起的系统误差与原系统误差的比值的大小来压减输入变量。输出变量即为系统待分析的外生变量(系统性能指标或因变量),可以是一个,也可以是多个。一般将一个具有多个输出的网络模型转化为多个具有一个输出的网络模型效果会更好,训练也更方便。3.数据的预处理由于BP神经网络的隐层一般采用Sigmoid转换函数,为提高训练速度和灵敏性以及有效避开Sigmoid函数的饱和区,一般要求输入数据的值在0~1之间。因此,要对输入数据进行预处理。一般要求对不同变量分别进行预处理,也可以对类似性质的变量进行统一的预处理。如果输出层节点也采用Sigmoid转换函数,输出变量也必须作相应的预处理,否则,输出变量也可以不做预处理。但必须注意的是,预处理的数据训练完成后,网络输出的结果要进行反变换才能得到实际值。再者,为保证建立的模型具有一定的外推能力,最好使数据预处理后的值在0.2~0.8之间。标准化:minmaxminddddd4.隐层数一般认为,增加隐层数可以降低网络误差,提高精度,但也使网络复杂化,从而增加了网络的训练时间和出现“过拟合(overfitting)”造成网络的性能脆弱,泛化能力(generalizationability)下降。Hornik等早已证明:若输入层和输出层采用线性转换函数,隐层采用Sigmoid转换函数,则含一个隐层的MLP网络能够以任意精度逼近任何有理函数。显然,这是一个存在性结论。在设计BP网络时可参考这一点,应优先考虑3层BP网络(即有1个隐层)。图三层BP网络的拓扑结构5.隐层节点数1x2x1Nx1y2y2Ny1z2z3Nz123N1T2Tihwhjw---隐含层输出层输入层3NT在BP网络中,若隐层节点数太少,网络可能根本不能训练或网络性能很差;若隐层节点数太多,虽然可使网络的系统误差减小,但一方面使网络训练时间延长,另一方面,训练容易陷入局部极小点而得不到最优点,也是训练时出现“过拟合”的内在原因,但是目前理论上还没有一种科学的和普遍的确定方法。为尽可能避免训练时出现“过拟合”现象,保证足够高的网络性能和泛化能力,确定隐层节点数的最基本原则是:在满足精度要求的前提下取尽可能紧凑的结构,即取尽可能少的隐层节点数。因此,合理隐层节点数应在综合考虑网络结构复杂程度和误差大小的情况下用节点删除法和扩张法确定。6.传递函数图BP网络常用的传递函数BP网络的传递函数有多种。Log-sigmoid型函数的输入值可取任意值,输出值在0和1之间;tan-sigmod型传递函数tansig的输入值可取任意值,输出值在-1到+1之间;线性传递函数purelin的输入与输出值可取任意值。BP网络通常有一个或多个隐层,该层中的神经元均采用sigmoid型传递函数,输出层的神经元则采用线性传递函数,整个网络的输出可以取任意值。7.学习率学习率影响系统学习过程的稳定性。大的学习率可能使网络权值每一次的修正量过大,甚至会导致权值在修正过程中超出某个误差的极小值呈不规则跳跃而不收敛;但过小的学习率导致学习时间过长,不过能保证收敛于某个极小值。所以,一般倾向选取较小的学习率以保证学习过程的收敛性(稳定性),通常在0.01~0.8之间。8.网络的初始连接权值BP算法决定了误差函数一般存在(很)多个局部极小点,不同的网络初始权值直接决定了BP算法收敛于哪个局部极小点或是全局极小点。因此,要求计算程序必须能够自由改变网络初始连接权值。由于Sigmoid转换函数的特性,一般要求初始权值分布在-0.5~0.5之间比较有效。10.收敛误差界值Emin在网络训练过程中应根据实际情况预先确定误差界值。误差界值的选择完全根据网络模型的收敛速度大小和具体样本的学习精度来确定。当Emin值选择较小时,学习效果好,但收敛速度慢,训练次数增加。如果Emin值取得较大时则相反。网络模型的性能和泛化能力:训练神经网络的首要和根本任务是确保训练好的网络模型对非训练样本具有好的泛化能力(推广性),即有效逼近样本蕴含的内在规律,而不是看网络模型对训练样本的拟合能力。判断建立的模型是否已有效逼近样本所蕴含的规律,主要不是看测试样本误差大小的本身,而是要看测试样本的误差是否接近于训练样本和检验样本的误差。非训练样本误差很接近训练样本误差或比其小,一般可认为建立的网络模型已有效逼近训练样本所蕴含的规律,否则,若相差很多(如几倍、几十倍甚至上千倍)就说明建立的网络模型并没有有效逼近训练样本所蕴含的规律,而只是在这些训练样本点上逼近而已,而建立的网络模型是对训练样本所蕴含规律的错误反映。算法的特点:1.非线性映照能力。神经网络能以任意精度逼近任何非线性连续函数。在建模过程中的许多问题正是具有高度的非线性。2.并行分布处理方式。在神经网络中信息是分布储存和并行处理的,这使它具有很强的容错性和很快的处理速度。3.自学习和自适应能力。神经网络在训练时,能从输入、输出的数据中提取出规律性的知识,记忆于网络的权值中,并具有泛化能力,即将这组权值应用于一般情形的能力。神经网络的学习也可以在线进行。4.数据融合的能力。神经网络可以同时处理定量信息和定性信息,因此它可以利用传统的工程技术(数值运算)和人工智能技术(符号处理)。5.多变量系统。神经网络的输入和输出变量的数目是任意的,对单变量系统与多变量系统提供了一种通用的描述方式,不必考虑各子系统间的解耦问题算法的缺点:收敛速度缓慢;容易陷入局部极小值;难以确定隐层数和隐层节点个数。算法的改进:1.利用动量法改进BP算法标准BP算法实质上是一种简单的最速下降静态寻优方法,在修正wk时,只按照第k步的负梯度方向进行修正,而没有考虑到以前积累的经验,即以前时刻的梯度方向,从而常常使学习过程发生振荡,收敛缓慢。动量法权值调整算法的具体做法是:将上一次权值调整量的一部分迭加到按本次误差计算所得的权值调整量上,作为本次的实际权值调整量,即:1wnEnwn其中:α为动量系数,通常0<α<0.9;η—学习率,范围在0.001~10之间。这种方法所加的动量因子实际上相当于阻尼项,它减小了学习过程中的振荡趋势,从而改善了收敛性。动量法降低了网络对于误差曲面局部细节的敏感性,有效的抑制了网络陷入局部极小。2.自适应调整学习速率标准BP算法收敛速度缓慢的一个重要原因是学习率选择不当,学习率选得太小,收敛太慢;学习率选得太大,则有可能修正过头,导致振荡甚至发散。可采用下图所示的自适应方法调整学习率。调整的基本指导思想是:在学习收敛的情况下,增大η,以缩短学习时间;当η偏大致使不能收敛时,要及时减小η,直到收敛为止。3.动量-自适应学习速率调整算法采用动量法时,BP算法可以找到更优的解;采用自适应学习速率法时,BP算法可以缩短训练时间