《《前馈神经网络续》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《前馈神经网络续》PPT课件.ppt(68页珍藏版)》请在三一办公上搜索。
1、例 采用BP网络映射下图曲线规律。,分析:这是 X到Y的映射问题,网络采用单输入输出节点,设一个中间 隐层隐层先考虑4个节点,即141BP网络结构。,按表中数据开始进行学习:,由于,则 W1i=w1i(0)=0.2 0.3 0.4 0.5T,对y6d6进行精度判断,未达精度要求继续误差反传训练。按表中数据依次训练学习,学习次数足够高时,可能达到学习目的,实现权值成熟,实现X到Y的映射精度。,2000次学习训练,18000此学习训练,一般网络学习训练次数很高,采用手工计算是不可能的,需要用计算机程序求解。,3.4.3 BP算法的程序实现 前面推导的BP网络算法是BP算法基础,称标准BP算法。目前
2、神经网络的实现仍以软件编程为主。现仍以前述三层BP网络为例,说明标准BP算法的编程步骤:,输入向量X:,X=x1 x2.xi.xnT,输出层输出向量O:,隐层权值矩阵V:,隐层第j个神经元的权列向量;,输出层间权值矩阵W:,输出层第k个神经元对应的权列向量;,网络期望输出向量:,d=,标准BP算法的程序实现,网络正向传播阶段,误差反向传播阶段,(以本节三层BP网络为例),目前实际应用中有两种权值调整方法。上述标准BP算法中,每输入一个样本,都要回传误差并调整权值,亦称单样本训练,只针对每个样本产生的误差进行调整,难免顾此失彼,实践表明,使整个训练次数增加,导致收敛速度过慢。另一种方法是在所有样
3、本输入后,计算网络的总误差E总:,E总=,然后根据总误差E总计算各层的误差信号并调整权值,这种累积误差的批处理方式称为批(Batch)训练或周期(epoch)训练。批训练遵循了以减小全局误差为目标的原则,因而可以保证误差向减小方向变化。在样本数较多时,批训练比单样本训练时的收敛速度快。,检查训练精度可用E=E总,也可用ERME:,EP不同样本的训练误差(共有P对样本),批训练BP算法流程,程序可用一般高级语言编写,如等,但考虑方便,最好采用语言,特别是环境中开发了工具箱(Toolboxes),其中神经网络开发工具(Neural Network)提供很丰富的手段来完成等设计与分析,Neural
4、Network中提供了网络初始化函数用语构建基本网络,可自动生成权值,提供各种转移函数,提供各种训练或学习方法与手段,并实现仿真运算,监视网络训练误差等,BP网络的训练,可概括归纳为输入已知数据,权值初始化,训练网络三大步.用神经网络工具箱训练BP网络,权值初始化和训练网络都可调用BP网络的相应工具函数。调用时,用户只需要将这些工具函数视为黑箱,知道输入什么得到什么即可,不必考虑工具函数内部究竟如何。,网络的一些重要函数和功能(与版本有关),基本神经元模型,传递函数(转移函数),线性传递函数purelin(s)即y=s;对数S型传递函数 logsig(s)即y=1/(1+e-s);双曲正切S型
5、传递函数 tansig(s)即=tansigs)即y=(1-e-s)(1+e-s)曲线。,初始化函数initff,可获得至多三层的前馈网络各层的初始权值和阈值。,函数的形式参数中,X为输入矢量;n1、n2,n3分别为第1,2,3层的神经元数目;f1、f2、f3分别为第1,2,3层神经元的传递函数;W1、W2、W3分别为第1,2,3层的权值矩阵;b1,b2,b3分别为第1,2,3层的神经元偏置(阈值)。在输入矢量X的数据时,应该包含所有输入值中的最大和最小值,这样才能保证经过initff处理后得到最佳的初始值。,例如:有一双层网络,有两个输入,定义了其最大和最小值,X=0,10;-5,5。第1层
6、(即隐层)神经元数和传递函数分别是n1=4,f1=tansig,第2层(即输出层)的n2=3,f2=purelin,调用格式:W1,b1,W2,b2=initff(0,10;-5,5,4,tansig,3,purelin),训练函数 神经网络的训练过程包括信号正向传播和误差反向传播。正向传播时,根据输人的矢量获得输出矢量;误差反向传递时,根据误差信号修改权值及阈值。这种过程不断迭代,最后当信号误差达到允许的范围时,训练结束。这时获得一个反映网络输入输出关系的各层权值和阈值。这部分工作由训练函数来完成。,(1)利用BP算法的练函数trainbp 调用格式:,函数的形式参数中,te 为实际训练次数
7、,tr为训练误差平方和的行矢量,tp为训练参数,其作用是调整训练过程的几个控制参数,tp=tp(1),tp(2),tp(3),tp(4),其中:,tp(1)学习过程显示的间隔次数,缺省值为25;tp(2)最大训练次数,缺省值为1000;tp(3)目标误差,缺省值为0.02;tp(4)学习速率,缺省值为0.01 当tp不赋值时,就用缺省值。,一旦训练达到最大的训练次数,或误差平方和降到期望误差之下时,网络都会停止训练。学习速率影响权值与阈值更新的比例,较小的值使学习速度减慢,但可有效避免振荡。,(2)利用快速BP算法的训练函数trainbpx 采用标准BP的缺点是收敛太慢,因此实际中出现了很多的
8、改进算法。trainbpx采用动量法和学习率自适应调整两种策略,从而提高了学习速度,并增加了算法的可靠性。所谓动量法就是将上一次权值调整量的一部分,叠加到按本次误差计算所得的权值调整量上,作为本次权值实际调整量,这样做能防止陷人局部极小。而学习率自适应调整就是根据情况来调整学习率的大小,而不是自始至终采用一个相同的学习率。一般地,在学习收敛情况下,增大学习率;当全局误差不能下降时,减小学习率,这样可防止振荡。,trainbpx的调用格式与trainbp完全相同,这里不再重复。只是训练参数tp和输入形式参数tr有不同的内容。tp=tp(1),tp(2),tp(3),tp(4),tp(5),tp(
9、6),tp(7),tp(8).具体如下:tp(1)tp(4)与trainbp中定义的tp(1)-tp(4)相同;tp(5)学习率增加比率,缺省为1.05;tp(6)学习率减少比率,缺省为0.7;tp(7)动量系数,缺省为0.9;tp(8)最大误差比率,缺省为1.04.tr为矩阵,第一行代表最终训练误差,第二行为相应的自适应学习率。,此外,利用Levenberg-Marquardt算法的训练函数trainlm也是改进标准BP算法的另一个措施是采用有效的优化方法。trainlm使用了L-M算法,使网络学习速度比trainbp快得多,但需要更多的内存。trainlm的调用格式与trainbp或tra
10、inbpx相同,但其中的训练参数有不同的内容。,仿真函数 仿真函数就是进行正向传播。训练函数包括信号正向传播和误差反向传播,因而训练函数中要调用仿真函数进行信号正向传播计算。此外,神经网络训练完毕后,要考察其泛化能力,即对非训练样本仍能给出正确输入输出关系的能力,也要调用仿真函数计算测试样本的输出值。,BP网络非线性映射程序设计例题,X,Y,1,2,3,4,5,6,单隐层网络,按图中曲线确定学习数据如下表(每0.05取一学习数据,共80个),程序1p=0:0.1:4;t=0.5:0.05:1,0.95:-0.05:0.5,0.45:-0.05:0,0.05:0.05:0.5;pauseplot
11、(p,t)r,q=size(p);%由输入向量p提取矩阵行r与列qs2,q=size(t);%由目标向量t提取矩阵行s2与列qs1=4;%设定隐节点w1,b1=rands(s1,r);%第一层权/阈值初始化w2,b2=rands(s2,s1);%第二层权/阈值初始化a2=purelin(w2*tansig(w1*p,b1),b2)disp_fqre=10;max_epoch=18000;err_goal=0.01;lr=0.01;tp=disp_fqre,max_epoch,err_goal,lr;%定义训练参数tpw1,b1,w2,b2,epochs,errors=trainbp(w1,b1
12、,tansig,w2,b2,purelin,p,t,tp)w1w2pauseploterr(errors),设置数据显示刷新频率,学习10次刷新一次图象;设置训练次数18000;设置训练误差值0.01;设置学习率0.01。,次循环训练结果,w1=1.0912 0.6403-1.4617 0.8554w2=-1.0060-0.1283-1.2641-0.6204,次循环训练结果(并没有达到训练精度),w1=-0.6917 0.7077-1.0585 0.7450w2=-0.4949 0.4975 0.9129 0.7644,增加隐层节点到,即,w1=0.4630-0.4875-0.9867 0.
13、1622-0.0391-0.5043 1.1380 0.1147w2=0.3094-0.3706-1.0122 0.0502-0.0059-0.4131-0.9519 0.0377,改变学习训练方法,采用训练,次循环训练,w1=-3.9821-1.2421 0.4084-3.2086w2=0.9451-1.4889-3.0491-1.3744,虽然效果改善较大但仍然未实现训练精度要求.,P=0:0.05:4;%设置输入样本T=0.5:0.025:1 0.975:-0.025:0 0.025:0.025:0.5;%期望输出值%目标拟合曲线plot(P,T)pause%生成1-4-1BP网络net
14、=newff(minmax(P),4 1,logsig purelin,trainlm);%设置第一第二层权值net.IW1=0.2;0.3;0.4;0.5;net.LW2=0.5 0.2 0.1 0.4;%设置第一层第二层阈值均为零net.b1=net.b1*0;net.b2=net.b2*0;%网络训练参数设置=0.0001;%设置训练误差值=50;%设置数据显示刷新频率,学习次刷新一次图象=1000;%设置训练次数net,tr=train(net,P,T);%进行网络训练Y=sim(net,P);%进行仿真运算pauseplot(P,T,P,Y,r)net.IW1%输出第一层权值net.
15、LW2%输出第二层权值,程序2,579次学习训练结果,TRAINLM,Epoch 250/1000,MSE 0.0004573/0.0001,Gradient 0.0153443/1e-010TRAINLM,Epoch 300/1000,MSE 0.000432378/0.0001,Gradient 0.118783/1e-010TRAINLM,Epoch 350/1000,MSE 0.000323387/0.0001,Gradient 0.0136006/1e-010TRAINLM,Epoch 400/1000,MSE 0.000291696/0.0001,Gradient 0.003817
16、89/1e-010TRAINLM,Epoch 450/1000,MSE 0.000268621/0.0001,Gradient 0.0024979/1e-010TRAINLM,Epoch 500/1000,MSE 0.000268481/0.0001,Gradient 1.94005e-006/1e-010TRAINLM,Epoch 550/1000,MSE 0.000268481/0.0001,Gradient 8.18043e-009/1e-010TRAINLM,Epoch 579/1000,MSE 0.000268481/0.0001,Gradient 2.45883e-010/1e-0
17、10TRAINLM,Maximum MU reached,performance goal was not met.W1=-0.7044-5.5470-13.1458 3.9445W2=3.3308-0.6611-0.2753 1.2390,程序2也没有实现训练精度!,程序1每执行一次会得到不同的训练结果,而程序2每次运行的结果总是相同的,都学习579次,权值解也不变.为什么?,因为,程序1的权值是每次随机生成,训练权值的起点不同,所得结果会不同.而程序2的初始权值是固定的,也就是说,从误差曲面的起点是固定的,训练方法一定的情况下,所的的解当然是不变的.,上述两程序,已经采用了不同的学习训练方
18、法,但仍求不出理想效果,可以肯定的原因是:?,1.再增加隐节点试试。2.虽然本问题看似简单,可就曲线来看,是个不连续函数,BP的单隐层映射能力是不够的,所以应考虑采用双隐层试一试.,改程序2中单隐层节点数到10,运行分析结果,145次运行满足误差要求,TRAINLM,Epoch 0/1000,MSE 0.254221/0.0001,Gradient 6.15588/1e-010TRAINLM,Epoch 50/1000,MSE 0.000189143/0.0001,Gradient 0.00351132/1e-010TRAINLM,Epoch 100/1000,MSE 0.000123291/
19、0.0001,Gradient 0.000869917/1e-010TRAINLM,Epoch 145/1000,MSE 9.98042e-005/0.0001,Gradient 0.000957324/1e-010TRAINLM,Performance goal met.,ans=-15.4332-2.3571 4.0804-4.1669-10.3551-8.1582-7.7554-3.5392-2.8295 0.7247ans=Columns 1 through 5-5.9554 4.1692-7.1438-2.1881 3.7977 Columns 6 through 10 8.6896
20、-4.2405 1.7616-12.5082 0.4546,采用双隐层BP应该效果好,1-4-4-1结构,P=0:0.05:4;%设置输入样本和期望输出值T=0.5:0.025:1 0.975:-0.025:0 0.025:0.025:0.5;plot(P,T)%目标拟合曲线pause%生成1-4-4-1BP网络net=newff(minmax(P),4 4 1,logsig logsig purelin,trainlm);%net.IW1=0.2;0.3;0.4;0.5;%设置第一、二、三层权值%net.LW2=0.5 0.2 0.1 0.4;0.1 0.2 0.3 0.4;0.5 0.4
21、0.3 0.2;0.1 0.2 0.4 0.3;%net.LW3,2=0.1 0.2 0.3 0.4;%net.b1=net.b1*0;%设置第一、二、三层阈值均为零%net.b2=net.b2*0;%net.b3=net.b3*0;%网络训练参数设置=0.0001;%设置训练误差值=30;%设置数据显示刷新频率,学习30次刷新一次图象=4000;%设置训练训练次数net,tr=train(net,P,T);%进行网络训练Y=sim(net,P);%进行仿真运算pauseplot(P,T,P,Y,r)net.IW1%输出第一层权值net.LW2%输出第二层权值net.LW3,2%输出第二层权值
22、,程序3,190循环结果,TRAINLM,Epoch 0/4000,MSE 0.225544/0.0001,Gradient 52.0527/1e-010TRAINLM,Epoch 10/4000,MSE 0.0111467/0.0001,Gradient 0.131007/1e-010TRAINLM,Epoch 20/4000,MSE 0.00845958/0.0001,Gradient 0.183184/1e-010TRAINLM,Epoch 30/4000,MSE 0.00460921/0.0001,Gradient 5.3198/1e-010TRAINLM,Epoch 40/4000,
23、MSE 0.000853839/0.0001,Gradient 0.0328775/1e-010TRAINLM,Epoch 50/4000,MSE 0.000668871/0.0001,Gradient 0.0122143/1e-010TRAINLM,Epoch 60/4000,MSE 0.000427319/0.0001,Gradient 0.240024/1e-010TRAINLM,Epoch 70/4000,MSE 0.00022008/0.0001,Gradient 0.108732/1e-010TRAINLM,Epoch 80/4000,MSE 0.000206397/0.0001,
24、Gradient 0.0509166/1e-010TRAINLM,Epoch 90/4000,MSE 0.000197642/0.0001,Gradient 0.00333432/1e-010TRAINLM,Epoch 100/4000,MSE 0.000190452/0.0001,Gradient 0.0187971/1e-010TRAINLM,Epoch 110/4000,MSE 0.000184317/0.0001,Gradient 0.0170996/1e-010TRAINLM,Epoch 120/4000,MSE 0.000179232/0.0001,Gradient 0.01180
25、68/1e-010TRAINLM,Epoch 130/4000,MSE 0.000174964/0.0001,Gradient 0.00824219/1e-010TRAINLM,Epoch 140/4000,MSE 0.000171184/0.0001,Gradient 0.00620115/1e-010TRAINLM,Epoch 150/4000,MSE 0.000167631/0.0001,Gradient 0.00521633/1e-010TRAINLM,Epoch 160/4000,MSE 0.00016412/0.0001,Gradient 0.00461571/1e-010TRAI
26、NLM,Epoch 170/4000,MSE 0.00016035/0.0001,Gradient 0.00357395/1e-010TRAINLM,Epoch 180/4000,MSE 0.000156047/0.0001,Gradient 0.173464/1e-010TRAINLM,Epoch 190/4000,MSE 9.98687e-005/0.0001,Gradient 0.0727145/1e-010TRAINLM,Performance goal met.,ans=-5.5897-3.5882 2.2851 2.0996ans=5.4158 0.6982-3.0454 3.02
27、38-0.1431-0.7769-0.4346-0.2738 0.5665 0.6746-0.6566-1.2467 4.4087-5.7523-2.5984 1.4784ans=-3.7496-0.3003 1.9785-5.0395,这是程序中固定初始权结果,如果随机生成初始权值,进行训练,可取得更好的精度,和很少的学习次数。如,9个循环次就获得求解。,上述就曲线尖角处感到逼近不理想,可进一步提高精度设置,如误差从0.0001改为0.000001,求解此程序,结果为:,TRAINLM,Epoch 620/4000,MSE 1.08536e-006/1e-006,Gradient 0.017
28、9782/1e-010TRAINLM,Epoch 626/4000,MSE 9.99596e-007/1e-006,Gradient 0.015447/1e-010TRAINLM,Performance goal met.,626次循环训练结果,ans=5.2726-11.0975 0.6000-16.8229ans=3.1300 11.1784 8.0327-0.0736 0.6472-1.1978 7.4136 8.1394-2.5695 8.3119-13.7473-0.0318-5.6989-0.3330-3.7392 7.5741ans=-2.0580 4.3949 2.0489-4
29、.6011,TRAINLM,Maximum epoch reached,performance goal was not met.,同样提高精度0.000001,在单隐层10节点下,进行了5000次循环也没有达到精度。而且在500次左右以后已不能有所改善。这也说明,对不连续函数,在不连续点附近,单隐层BP是难于胜任的。,例 设计一BP网络,使之完成下面图形的非线性映射。,采集训练样本集,每X=0.1为数据采集点(20训练样本对):即,输入矢量X=-l:0.1:1;目标矢量T=-.9602-0.577 0.0729 0.3771 0.6405 0.6600 0.4609-0.2013-0.434
30、4-0.5-0.3930 0.1647 0.0988 0.3072 0.3960 0.3449 0.1816-0.0312-0.2183-0.3201。,echo onclcpause%按任意键看输入数据clc%输入训练数据X=-1:0.1:1;T=-0.9602-0.5770-0.0729 0.3771 0.6405 0.6600 0.4609 0.1336-0.2013-0.4344-0.5000-0.3930-0.1647 0.0988 0.3072 0.3960 0.3499 0.1816-0.0312-0.2189-0.3201;pauseclc%绘X-T图plot(X,T,+);t
31、itle(Training vectors);xlabel(Input vector X);ylabel(Target vector T);pause%看初始化及训练网络clc%初始化网络n1=5;W1,b1,W2,b2=initff(X,n1,tansig,T,purelin);,采用1-5-1BP网络,%训练网络fpd=100;%学习过程显示频率mne=20000;%最大训练步数sse=0.001;%误差平方和指标lr=0.01;%学习率tp=fpd,mne,sse,lr;W1,b1,W2,b2,te,tr=trainbp(W1,b1,tansig,W2,b2,purelin,X,T,tp
32、);%te-实际训练步数pause%看误差相对训练步数曲线clc%看误差和相对训练步数曲线图ploterr(tr,sse);pause%按任意键看函数逼近clc%函数逼近x=0.5;%训练样本的一个输入t=0.3960;%训练样本的对应目标y=simuff(x,W1,b1,tansig,W2,b2,purelin);err=y-t%检查网络对训练样本的逼近误差echo off,TRAINBP:10/20000 epochs,SSE=2.5635.err=-0.3548,TRAINBP:50/20000 epochs,SSE=1.95881.err=-0.2742,TRAINBP:400/200
33、00 epochs,SSE=0.128206.err=-0.0131,TRAINBP:2498/20000 epochs,SSE=0.0009996.err=-0.0032,TRAINBP:20000/20000 epochs,SSE=0.00300047.TRAINBP:Network error did not reach the error goal.Further training may be necessary,or try different initial weights and biases and/or more hidden neurons.err=0.0077,讨论,为
34、什么会出现这种现象呢?网络初始值是随机选取的,因而每次初始值必不相同,这就使得网络各神经元的净输入可大可小,落在传递函数不同的位置,因而获得的导数值也是不同的。而权值修正公式中,delta函数正比于导数值,导数值较大时,修正量较大,故收敛也较快;反之网络处于麻痹状态,收敛较慢。由此看来,当网络训练情况不理想时,不要急于改变各参数值,而是试着再训练几次,直到满意为止。如果连续几次训练情况都不好,那就再考虑改变一些参数的设定。,2)隐结点数对训练误差的影响,当nl=3时,连续四次运行,当训练步数达到最大值时,误差平方和均未达到其目标值,因而可以认为,隐结点数少了。n1=8时,情况与n1=5时差不多
35、,网络误差平方和均少于给定目标值。那么,选择n1=5还是nl=8呢?如前所述,隐结点数越多,训练误差越小,但泛化误差越大。因此,在达到训练误差的前提下,隐结点数越少越好。,表2是n1=3和n1=8时的四次运行结果,3)学习率的影响,从图可知:当学习率lr较小时,误差稳步下降,直到收敛;加大lr,误差开始急剧下降,但后期趋于平坦,收敛较慢;进一步加大lr,误差在开始出现巨烈波动,后期趋于平坦,收敛也较慢;再加大lr,误差除早期巨烈波动外,在规定的最大训练次数内不收敛。因此,本例选择较小的学习率,以求稳步收敛。,本例与上例比较可以看到:尽管本例较上例曲线复杂,但采用单隐层逼近精度足够.无需增加隐层.?,本例是连续函数,而上例是非连续函数,用神经网络开发工具(Neural Network)的NNTOOL做单隐层网络(具有GUI特点),