BP神经网络算法原理:输入信号 x i通过中间节点(隐层点)作用于输出节点,经过非线形变换,产生输出信号 y k,网络训练的每个样本包括输入向量x 和期望输出量d,网络输出值y 与期望输出值 d 之间的偏差,通过调整输入节点与隐层节点的联接强度取值w ij和隐层节点与输出节点之间的联接强度T jk以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和阈值),训练即告停止。
此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。
变量定义:设输入层有 n 个神经元,隐含层有p 个神经元 , 输出层有 q 个神经元输入向量: x x1 , x2 ,L , x n隐含层输入向量:hi hi1, hi2 ,L , hi p隐含层输出向量:ho ho1 , ho2 ,L ,ho p输出层输入向量:yi yi1, yi2 ,L , yi q输出层输出向量:yo yo1, yo2 ,L , yo q期望输出向量 : do d1, d2 ,L , d q输入层与中间层的连接权值:w ih隐含层与输出层的连接权值:w ho隐含层各神经元的阈值: b h输出层各神经元的阈值:b o样本数据个数 :k1,2,L m激活函数 : f误差函数: e 1 q(d o (k )yo o (k )) 22 o1算法步骤:Step1. 网络初始化 。
给各连接权值分别赋一个区间( -1 , 1)内的随机数,设定误差函数 e ,给定计算精度值和最大学习次数 M 。
Step2. 随机选取第 k 个输入样本x( k)x 1( k ), x 2 (k),L , x n (k ) 及对应期望输出d o ( k) d 1 (k ), d 2 ( k),L , d q (k)Step3. 计算隐含层各神经元的输入nhi h ( k)w ih x i (k ) b h h 1,2,L , p 和输出i1ho h (k)f (hi h (k )) h 1,2, L , p及输 出 层各 神 经元的输入pyi o (k )w ho ho h (k) b o o 1,2,L q 和输出 yo o ( k) f ( yi o (k )) o 1,2, L , ph 1Step4. 利用网络期望输出和实际输出, 计算误差函数对输出层的各神经元的偏导数 o (k ) 。
e e yi ow ho yi o w hopyi o ( k) (hw ho ho h (k ) b o )ho h (k )w how hoe( 1q (d o ( k) yo o (k))) 2 2 o 1( d o (k )yi oyi o(d o (k) yo o (k ))f ( yi o (k )) @ o (k )Step5. 利用隐含层到输出层的连接权值、输出层的差函数对隐含层各神经元的偏导数h (k ) 。
e e yi o o ( k) ho h (k )w hoyi owhoeehi h (k)wihhi h ( k) w ihnhi h (k )( w ih x i (k ) b h )i1x i ( k)wihwihyo o (k )) yo o (k )o ( k) 和隐含层的输出计算误精品文档e hi h (k )(1q(do( k)yo (k)) 2 )2 o 1o ho h (k )ho h (k )hi h (k )(1q(d o ( k)f( yi o (k )))2 )ho h (k)2 o1ho h ( k)hi h (k)(1q((d o (k)f(p w ho ho h (k ) b o )2 ))2 o1h 1ho h (k )ho h (k)hi h (k ) q ho h (k)o 1( do(k )yoo(k ))f ( yio(k))who hi h(k) q(o (k )w ho )f (hi h ( k)) @h (k )o 1Step6. 利用输出层各神经元的o (k )和隐含层各神经元的输出来修正连接权值w ho (k ) 。
w ho (k )eo (k)ho h (k) whow ho N 1w ho N o (k )ho h (k)Step7. 利用隐含层各神经元的h (k ) 和输入层各神经元的输入修正连接权 w ih ( k) 。
w ih (k)e e hi h ( k)wih hi h ( k)h (k) x i ( k)wihw ih N 1w ih N h (k ) x i (k ) Step8. 计算全局误差。
1m qy o ( k)) 2E(d o (k)2m k 1 o1Step9. 判断网络误差是否满足要求。
当误差达到预设精度或学习次数大于设定的最大次数,则结束算法。
否则,选取下一个学习样本及对应的期望输出,返回到第三步,进入下一轮学习。
算法流程图:网络初始化输入 x ,根据网络的状态方程计算网络输出y计算全局误差:1m qE(d o (k) y o (k))22m k 1o 1YESENOYES达到最大学习次数NO修改权值:训练完成w Nw N 1(k )x(k )参数确定:确定了网络层数、每层节点数、传递函数、初始权系数、学习算法等也就确定了BP网络。
确定这些选项时有一定的指导原则,但更多的是靠经验和试凑。
1.样本数据采用 BP 神经网络方法建模的首要和前提条件是有足够多典型性好和精度高的样本。
而且,为监控训练(学习)过程使之不发生“过拟合”和评价建立的网络模型的性能和泛化能力,必须将收集到的数据随机分成训练样本、检验样本(10%以上)和测试样本( 10%以上) 3 部分。
2.输入 / 输出变量一般地,BP网络的输入变量即为待分析系统的内生变量(影响因子或自变量)数,一般根据专业知识确定。
若输入变量较多,一般可通过主成份分析方法压减输入变量,也可根据剔除某一变量引起的系统误差与原系统误差的比值的大小来压减输入变量。
输出变量即为系统待分析的外生变量(系统性能指标或因变量),可以是一个,也可以是多个。
一般将一个具有多个输出的网络模型转化为多个具有一个输出的网络模型效果会更好,训练也更方便。
3.数据的预处理由于 BP 神经网络的隐层一般采用Sigmoid 转换函数,为提高训练速度和灵敏性以及有效避开Sigmoid 函数的饱和区,一般要求输入数据的值在0~1 之间。
因此,要对输入数据进行预处理。
一般要求对不同变量分别进行预处理,也可以对类似性质的变量进行统一的预处理。
如果输出层节点也采用Sigmoid 转换函数,输出变量也必须作相应的预处理,否则,输出变量也可以不做预处理。
但必须注意的是,预处理的数据训练完成后,网络输出的结果要进行反变换才能得到实际值。
再者,为保证建立的模型具有一定的外推能力,最好使数据预处理后的值在0.2 ~0.8 之间。
标准化:d d dmindmaxdmin4.隐层数一般认为,增加隐层数可以降低网络误差,提高精度,但也使网络复杂化,从而增加了网络的训练时间和出现“过拟合 (overfitting) ”造成网络的性能脆弱,泛化能力(generalization ability) 下降。
Hornik 等早已证明:若输入层和输出层采用线性转换函数,隐层采用 Sigmoid 转换函数,则含一个隐层的 MLP网络能够以任意精度逼近任何有理函数。
显然,这是一个存在性结论。
在设计 BP 网络时可参考这一点,应优先考虑 3 层 BP网络(即有 1 个隐层)。
输入层隐含层输出层x1y z -T1111x2y2z 2-T2 2x NyN 2w z N3-1T Nih hj3N3图三层 BP网络的拓扑结构5.隐层节点数精品文档在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 值取得较大时则相反。
试样本误差大小的本身,而是要看测试样本的误差是否接近于训练样本和检验样本的误差。
非训练样本误差很接近训练样本误差或比其小,一般可认为建立的网络模型已有效逼近训练样本所蕴含的规律,否则,若相差很多(如几倍、几十倍甚至上千倍)就说明建立的网络模型并没有有效逼近训练样本所蕴含的规律,而只是在这些训练样本点上逼近而已,而建立的网络模型是对训练样本所蕴含规律的错误反映。