《BP神经网络原理及应用.docx》由会员分享,可在线阅读,更多相关《BP神经网络原理及应用.docx(10页珍藏版)》请在优知文库上搜索。
1、BP神经网络原理及应用1人工神经网络简介神经系统的根本构造是神经元(神经细胞),它是处理人体内各局部之间相,工信息传递的根本单元。据神经生物学家探讨的结果说明,人的大脑一般有IOe-IOU个神经元。每个神经元都由一个细胞体,一个连接其他神经元的和突和一些向外伸出的其它较短分支-一树突组成。轴突的功能是将本神经元的输出信号(兴奋)传递绐别的神经元。其末端的很多神经末梢使得兴奋可以同时送给多个神经元。树突的功能是承受来自其它神经元的兴奋。神经元细胞体将承受到的全部信号进展简洁地处理后由轴突输出。神经元的树突与另外的神经元的神经末梢相连的局部称为突触.神经网络是由很多相互连接的处理单元组成。这些处理
2、单元通常线性排列成组,称为值.每一个处理单元有很多输入量,而对每一个输入量都相应有一个相关联的权重。处理单元将输入量经过加权求和,并通过传递函数的作用得到输出量,再传给下层的神经元。目前人们提出的神经元模型已仃很多,其中提出最早且影响最大的是1943年心理学家McCulloch和数学家PiltS在分析总结神经元根本特隐含层权值调整公式:,5EEnet.E.wiinetia匕yinetlSwii隐含层网值调整公式:,EEnetlEyineti&=-H=-H1.=F1.lnetl峋y,duet,(3-10)(3-11)又因为:f三-(V-o)Cq1.lZ(3-12)幽=V皿7眄=X幽T西,一,加,
3、加M(3-13)AFp1.-=-t(T-o)y,(nett)-%(3-14)=机,附)cne!i(3-15)4=netionetl(3-16)所以最终得到以下公式:产Z伍-J)W(世)yP-IA-I(3-17)Aq=立(,-C(4)P-IAl(3-18)%=立W-o;)nett)-Wunetiyxir=E(3-19)Aa=一d)w51)%/(”)(3-20)开始图2-2BP算法程序流程图Fig.2-2TheflowchartoftheBPalgorithmprogram2.2 根本BP算法的缺陷BP算法因其简洁、易行、计算量小、并行性强等优点,目前是神经网络训练采纳最多也是最成熟的训练算法之一
4、.其算法的实质是求解误差函数的最小值问题,由于它采纳非线性规划中的最速下降方法,按误差函数的负梯度方向修改权值,因而通常存在以卜问题:(1)学习效率低,收敛速度慢(2)易陷入局部微小状态2.3 BP算法的改良.1附加动量法附加动量法使网络在修正其权值时,不仅考虑误差在梯度上的作用,而且考虑在误差曲面上改变趋势的影响0在没有附加动量的作用下,网络可能陷入浅的局部做小值,利用附加动国的作用有可能滑过这些微小值“该方法是在反向传播法的根底上在每个权值(或阈值)的改变上加上一项正比于前次权值(或阈值)改变量的值,并依据反向传播法来产生新的权值或阈值)改变。带有附加动增因子的权值和阈值调整公式为:%依+
5、1)=(I-ncipi+cwj.(Jl)+I)=(,-ne)rf()+K,(八)其中k为训练次数,OlC为动量因子,一般取左右。附加动量法的实质是将最终一次权值(或网值)改变的影响,通过一个动量因子来传递,当动量因子取值为零时,权值(或阈值)的改变仅是依据梯度下降法产生:当动量因子取值为1时,新的权值(或闽()改变那么是设置为最终次权值(或阈值)的改变,而依梯度法产生的改变局部那么被忽视掉了。以此方式,当增加了动员项后,促使权值的调整向若误差曲面底部的平均方向改变,当网络权值进入误差曲面底部的平坦区时,6,将变得很小,于是AMi(A+)=A%(G),从而防止了AwV=O的出现,有助于使网络从误
6、差曲面的局部微小值中跳出。依据附加动址法的设计原那么,当修正的权值在误差中导致太大的增长结果时.,新的权值应被取消而不被采纳,并使动量作用停顿下来,以使网络不进入较大误差曲面:当新的误差改变率对其旧值超过个事先设定的最大误差改变率时,也得取消所计算的权值改变。其最大误差改变率可以是任何大于或等于1的值。典型的取值取。所以,在进展附加动量法的训练程序设计时,必需加进条件推断以正确运用其权值修正公式。训练程序设计中采纳动量法的推断条件为:0(*)(*-!)*1.04mc=0.95E(k)E(k-),E(k)为第k步误差平方和。me其它.2自适应学习速率时下一个特定的问题,耍选择适当的学习速率不是一
7、件简洁的事情.通常是凭经验或试验获得,但即使这样,对训练开场初期成效较好的学习速率,不见得对后来的训练相宜。为了解决这个问题,人们自然想到在训练过程中,自动调整学习速率。通常调整学习速率的准那么是:检查权值是否真正降低了误差函数,假如的确如此,那么说明所选学习速率小r,可以适当增加个量:假设不是这样,而产生了过调,那幺就应当削减学习速率的值。下式给出了个自适应学习速率的调整公式:.()5(k)E(k+1)1.04E(),E(kJ为第k步误差平方和。(k)其它初始学习速率TI(O)的选取范围可以有很大的随意性。当采纳前述的动量法时,BP算法可以找到全局最优解,而当采纳自适应学习速率时,BP算法可
8、以缩短训练时间,采纳这两种方法也可以用来训练神经网络,该方法称为动量自适应学习速率调整和法。2.4 网络的设计.1网络的层数理论上已证明:具有偏差和至少一个SN隐含层加上一个线性输出层的网络,能够靠近任何有理数。增加层数可以更进一步的降低误差,提高精度,但同时也使网络困难化,从而增加了网络权值的训练时间。而误差精度的提高事实上也可以通过增加神经元数目来获得,其训练效果也比增加层数更简洁视察和调整。所以般状况下,应优先考虑增加隐含层中的神经元数。.2的含层的神经元数网络训练精度的提高,可以通过采纳一个隐含层,而增加神经元数了的方法来获得。这在构造实现上,要比增加隐含层数要简洁得多。那么终究选取多
9、少隐含层节点才相宜?这在理论上并没有一个明确的规定。在详细设计时,比拟实际的做法是通过对不同神经元数进展训练比照,然后适当地加上点余量。.3初始权值的选取由于系统是非线性的,初始值对于学习是否到达局部最小、是否能够收敛及训练时间的长短关系很大。假如初始值太大,使得加权后的输入和n落在了S型激活函数的饱和区,从而导致其导数fYn)特别小,而在计算权值修正公式中,因为boc,(),当(n)0时,那么有60这使得t;0,从而使得调盛过程几乎停顿卜一来。所以一般总是希望经过初始加权后的每个神经元的输出值都接近于零,这样可以保证每个神经元的权值都能够在它们的S型激活函数改变最大之处进展调整。所以,一般取
10、初始权值在(7,1)之间的随机数.4学习速率学习速率确定每一次循环训练中所产生的权值改变员。大的学习速率可能导致系统的不稳定;但小的学习速率导致较长的训练时间,可能收敛很慢,不过能保证网络的误差值不跳出误差外表的低谷而最终趋于最小误差值.所以在一般状况下,倾向于选取较小的学习速率以保证系统的稳定性。学习速率的选取范围在之间。3BP神经网珞的应用现给出一药品商店一年当中12个月的药品销传量维位:豺)如卜丁205623952600229816341600187314871900150020461556训练一个BP网络,用当前的全部数据预料下一个月的药品销售fit.有两种方法实现,一种是编写matl
11、ab程序,一种是运用nntool工具箱O3.1 matlab程序实现我们用前三个月的销售量预料下一个月的销售量,也就是用1-3月的销售fit预料第4个月的销售量,用2-4个月的销售量侦料第5个月的销售S.如此循环下去,宜到用9-11月预料12月份的销售量。这样训练BP神经网络后,就可以用1072月的数据预料来年月的销售量。实现程序如下:p-20S623952600;239526002298;260022981634;229816341600;163416001873;160018731478;187314781900;147819001500;190015002046;)t三229816341
12、600187314871900150020461556;PrnaX=max(p);pfnaxl=max(p11ax;PminFin(p;pminl-min(pmin;for1-1:9*归一化处理pl(I,三-p(i/:)-pminl)/(pmal-pminl);endtl=t-pminl)/(pmaxl-pcninl);net-newff(0l;0l;01),(71xCtar.sg,t9Iogsig,ftraingd,);for51:9net.trainParam.epochs=15000;net.trainParam.goal三0.01;1.P.lr-0.1;net=train(net,pl
13、(if:)rtl(i);endy-sim(netj150020461556,);yl-y*(pmal-pminl)pminl;假如神经网络的训练函数运用trainlm,那么仿真步骤会很少,但须耍较大的系统内存。经预料,来年月的销售员(yl)为1.4848&+003箱(每次运行后的结果可能不I明。3.2 nntool神经网络工具箱的运用D在IBatlab(7.4)吩在窗口键入nntool吩咐翻开神经网络工具箱。如图:2)点击InIPOn按钮两次,分别把输入向量和目标输出参与到对应的窗口(IInputsl和Ta理央)中,有两种可供选择的参与对象(点击Import后可以望见),一种是把当前工作区中的
14、某个矩阵参与,另一种是通过.mat文件读入。3)点击NewNetwork按钮,填入各参数:以最常用的带一个隐层的3层神经网络为例说明,卜面没有列出的参数表示运用默认值就可以了,例如NetworkTypC为默认的Bp神经网络):i)InuiRange这个通过点击GelFromInPUl下拉框选择你参与的输入向量便可自动完成,当然也可以自己手动添加。ii) TrainingFunction最好运用TRAlNSCG,即共艳梯度法,其好处是当训练不收敛时,它会自动停顿训练,而口耗时较其他算法(TRAlN1.M.TRA1NGD)少,也就是收敛很快1假如收敛的话),而且TrainParamelerS输入不
15、多,也不用太多的技巧调整,一般指定迭代次数、结果显示频率和目标误差就可以了详见下文)。iii) 1.ayer1NumberofNeurons隐层的神经元个数,这是须要经验渐渐会试并调整的,大致上由输入向量的维数、样本的数量和辘出必(1.ayer2)的神经元个数确定。一般来说,神经元越多,输出的数值与目标值越接近,但所花费的训练时间也越长,反之,神经元越少,输出值与目标值相差越大,但训练时间会相应地削减,这是由于神经元越多其算法越困难造成的,所以须要自己渐渐学试,找到一个相宜的中间点比方输入是3行500()列的0-9的随机整数矩阵,在一开场选择100o个神经元,虽然精度比拟高,但是花费的训练时间较长,而且这样神经网络的构造与经怯都特别困难,不简洁在实际应用中实现,尝试改