资源描述
BP神经网络实例智能控制第一章BP神经网络基本原理一、BP神经网络基本概念1、人工神经网络人工神经网络ANN(ArtificialNeuralNetwork),是对人类大脑系统的一阶特性的一种描述。简单地讲,它是一个数学模型,可以用电子线路来实现,也可以用计算机程序来模拟,是人工智能研究地一种方法。近年来发展迅速并逐渐成熟的一种人工智能技术,其来源于对神经元细胞的模拟。人工神经网络具有以下三个特点:信息分布表示,运算全局并行与局部操作,信息非线性处理。由于这三个特点,使得由人工神经网络构成的分类器具有强大的数据拟和与泛化能力,因而广泛运用于模式识别与机器学习领域。神经网络模式识别的过程分为两步:首先是学习过程,通过大量的训练样本,对网络进行训练,根据某种学习规则不断对连接权值进行调节,然后使网络具有某种期望的输出,这种输出就可以将训练样本正确分类到其所属类别中去,此时可以认为网络是学习到了输入数据或样本间的内在规律。接下来是分类过程,应用前面学习过程所训练好的权值,对任意送入网络的样本进行分类。人工神经网络模型各种各样,目前已有数十种。他们从各个角度对生物神经系统的不同层次进行了描述和模拟。代表模型有感知机、多层映射BP网、RBF网络、HoPfiled模型、Boit机等等。虽然人工神经网络有很多模型,但按神经元的连接方式只有两种型态:没有反馈的前向网络和相互结合型网络。前向网络是多层映射网络,每一层中的神经元只接受来自前一层神经元的信号,因此信号的传播是单方向的。BP网络是这类网络中最典型的例子。在相互结合型网络中,任意两个神经元都可能有连接,因此输入信号要在网络中往返传递,从某一初态开始,经过若干变化,渐渐趋于某一稳定状态或进入周期震荡等其它状态,这方面典型的网络有Hopfiled模型等。2、BP神经网络BP算法是利用输出层的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差。如此下去,就获得了所有其他各层的误差估计。这样就形成了将输出端表现出的误差沿着与输入信号传送相反的方向逐级向网络的输入端传递的过程。因此,人们就又将此算法称为向后传播算法,简称BP算法。如下图所示:输入层隐藏层输出层算法过程为(1) 设置各权值和阈值的初始值wd)O,0(1=0,1,.,L)为小随机数。jj(2) 输入训练样本C,d),对每个样本进行(3)(5)步。qq(3) 计算各个网络层的实际输出x(i)=f(s(i)=f(w(i)x(ii)+(i)(4) 计算训练误差dj(l)=(dj-xjl)f(sjl),输出层aj(l)=广(sjl)逅a(l+1)wkj+1),隐含层和输入层k=1(5)修正权值和阈值w(/+i)k,1w(/)k,M(1)x(/-i),q(w(/)k一w(/)k一1)jijijijiji0(/,1)k,10(/)k,M(I),ne(1)k-0(I)k-1)jjjjj(6)当样本集中的所有样本都经历了(3)(5)步后,即完成了一个训练周期(Epoch),计算性能指标E=XE,其中Eqq2qjqjq1j1(7)如果性能指标满足精度要求,即E,那么训练结束,否则,转到(2),继续下一个训练周期。是小的正数,根据实际情况而定,例如0.013、流程图根据BP网络的算法,我们可得流程图如下。第二章BP神经网络实例分析一、实例要求1、f(x)=cos(x),x,(0,2兀)1取九个点来训练网络,然后得出拟合曲线。2、f2(x)=|sin(x),x,(0,2)取适当数量训练点来训练网络,然后得出拟合曲线(sinxsiny/“3、f(x,y=-;x,y,(10,10)3xy取11*11个点来训练网络,并用21*21个点测试拟合的曲面。二、计算结果如下1、第一个函数:f(x)=cos(x),x,(0,2兀)14智能控制#智能控制2)学习率为0.2,训练次数为3300时#智能控制值差误50200400600800100012001400训练次数训练过程如学习曲线所示,圈圈为学习后产生的,折线为标准函数点连线。检验过程如检验曲线所示,点序列为拟合曲线上的点,曲线为标准函数曲线。误5智能控制差曲线如右图所示。2)学习率为0.01,训练次数为3300时的曲线。6智能控制#智能控制从函数1可以看出,学习率比较大时,曲线收敛比较快,可以比较快7速达到精度要求。但实际上,学习率比较大时(即收敛步长比较大),容易超出收敛边界,反而收敛导致不稳定,甚至发散。005001000150020002500训练次数300035002、第二个函数:厶(x)=|sin(x)|,x,(2)1)学习率为0.2,样本点数为10,学习次数为5000时的曲线如下:.4.210.80.40.21256700=0.634x学习曲线1.41.2c08=0.60.40.200123456x#智能控制误差曲线876000值差误0.4050010001500200025003000训练次数35004000450050002)学习率为0.2,样本点数为30学习次数为5000时的曲线如下:学习曲线201234567x1.20.8c0.6=0.40.2误差曲线从函数2可以看出,样本点值差误个数越多时,曲线精度越高。但学习时间会有所增加。.VZ.I3、第三个7智能控制、smxsmyflx,y丿,-;x,y(10,10)3xy学习率为0.1,动量项学习率为0.05,训练次数为5000,训练样本数为11*11图形如下:学习实际输出学习期望输出008智能控制9智能控制误差曲线#智能控制附:程序源代码第一个和第二个函数的程序:%此BP网络为两层隐含层,每个隐含层4个节点。输入输出各一层%输入层和输出层均采用恒等函数,隐含层采用S形函数clearall;closeall;b=0.01;%精度要求a=0.2;c=2;%学习率Num=30;%训练样本数N=3300;%训练次数Nj=80;o0=rand(2,1);o1=rand(4,1);o2=rand(4,1);o3=rand(1,1);w1=rand(4,2);w2=rand(4,4);w3=rand(1,4);%检验样本数%输入层阈值%第一层隐含层阈值%第二层隐含层阈值%输出层阈值%输入信号为两个%第一层隐含层与第二层隐含层的权系数%第二层隐含层与输出层的权系数symsxy;%fcn=cos(x);fcn=abs(sin(x);x0=0:2*pi/(Num-1):2*pi;y0=0:2*pi/(Num-1):2*pi;x=x0;%符号变量,用于两个输入值%被学习的函数%输入的训练样本y=y0;X(1,:)=x0;X(2,:)=y0;yf=eval(fcn);x3=zeros(1,Num);time=0;%输出的训练样本forj=1:1:Nfori=1:1:Num%前向计算:s1=w1*X(:,i)-o1;x1=1./(1+exp(-s1);s2=w2*x1-o2;x2=1./(1+exp(-s2);%第一层隐含层输出%第二层隐含层输出11智能控制12智能控制s3=w3*x2-o3;%x3=1./(1+exp(-s3);%输出层输出x3(i)=s3;%反向计算:%e3=(yf(i)-x3)./(exp(s3)+2+exp(-s3);e3=yf(i)-x3(i);e2=(w3)*e3)./(exp(s2)+2+exp(-s2);e1=(w2)*e2)./(exp(s1)+2+exp(-s1);%权值和阈值修正w3=w3+a*e3*(x2);%权值修正w2=w2+a*e2*(x1);w1=w1+a*e1*(X(:,i);o3=o3-a*e3;%阈值修正o2=o2-a*e2;o1=o1-a*e1;endE(j)=0.5*(yf-x3)*(yf-x3);%方差%输出层误差%第二层隐含层误差%第一层隐含层误差time=time+1;ifE(j)bbreakendend%检验m=0:2*pi/(Nj-1):2*pi;n=0:2*pi/(Nj-1):2*pi;x=m;y=n;ym=eval(fcn);%期望输出M(1,:)=x;M(2,:)=y;m3=zeros(1,Nj);fori=1:1:NjS1=w1*M(:,i)-o1;m1=1./(1+exp(-S1);S2=w2*m1-o2;m2=1./(1+exp(-S2);S3=w3*m2-o3;%m3(i)=1./(1+exp(-S3);%记录学习次数%第一层隐含层输出%第二层隐含层输出%输出层输出#智能控制m3(i)=S3;endfigure(1);plot(m,ym,g-);holdonplot(m,m3,r.);title(检验曲线);xlabel(x);ylabel(y=cos(x);figure(2);plot(x0,yf,b-);holdonplot(x0,x3,ro);title(学习曲线);xlabel(x);ylabel(y=cos(x);k=1:time;figure(3);plot(k,E);title(误差曲线);xlabel(训练次数);ylabel(误差值);第三个函数的程序%此BP网络为两层隐含层,每个隐含层10个节点。输入输出各一层%输入层和输出层均采用恒等函数,隐含层采用S形函数clearall;closeall;b=0.05;%精度要求a=0.1;%学习率c=0.05;%动量项学习率Num=11;%训练样本数N=5000;%训练次数Nj=21;o0=rand(2,1);o1=rand(10,1);o2=rand(10,1);o3=rand(1,1);w1=rand(10,2);w2=rand(10,10);w3=rand(1,10);o1_before=zeros(4,1);o2_before=zeros(4,1);o3_before=zeros(1,1);%检验样本数%输入层阈值%第一层隐含层阈值%第二层隐含层阈值%输出层阈值%输入层与第一层隐含层的权系数%第一层隐含层与第二层隐含层的权系数%第二层隐含层与输出层的权系数%用于存储前一次的阈值w1_before=zeros(4,2);w2_before=zeros(4,4);w3_before=zeros(1,4);o1_next=zeros(4,1);o2_next=zeros(4,1);o3_next=zeros(1,1);w1_next=zeros(4,2);w2_next=zeros(4,4);w3_next=zeros(1,4);%用于存储前一次的权值%用于存储后一次的阈值%用于存储后一次的权值x0,y0=meshgrid(-10:20/(Num-1)-0.001:10);%输入的训练样本yf=(sin(x0).*sin(y0)./(x0.*y0);%被学习的函数x3=zeros(Num,Num);time=0;E=zeros(1,N);forj=1:1:Nfori=1:1:Numforh=1:1:NumX=zeros(2,1);X(1,:)=x0(i,h);X(2,:)=y0(i,h);%前向计算:s1=w1*X-o1;x1=1./(1+exp(-s1);s2=w2*x1-o2;x2=1./(1+exp(-s2);%第一层隐含层输出%第二层隐含层输出s3=w3*x2-o3;%x3=1./(1+exp(-s3);%输出层输出x3(i,h)=s3;%反向计算:%e3=(yf(i)-x3)./(exp(s3)+2+exp(-s3);e3=yf(i)-x3(i);e2=(w3)*e3)./(exp(s2)+2+exp(-s2);e1=(w2)*e2)./(exp(s1)+2+exp(-s1);w3_next=w3+a*e3*(x2)+c*(w3-w3_before);w2_next=w2+a*e2*(x1)+c*(w2-w2_before);w1_next=w1+a*e1*X+c*(w1-w1_before);o3_next=o3-a*e3+c*(o3-o3_before);%输出层误差%第二层隐含层误差%第一层隐含层误差%权值修正%阈值修正o2_next=o2-a*e2+c*(o2-o2_before);o1_next=o1-a*e1+c*(o1-o1_before);w1_before=w1;w2_before=w2;w3_before=w3;o1_before=o1;o2_before=o2;o3_before=o3;w1=w1_next;w2=w2_next;w3=w3_next;o1=o1_next;o2=o2_next;o3=o3_next;d=yf(i,h);y=x3(i,h);E(j)=E(j)+0.5*(d-y)2);%方差endendtime=time+1;%记录学习次数ifE(j)bbreakendend%检验m,n=meshgrid(-10:(20/(Nj-1)-0.001):10);ym=(sin(m).*sin(n)./(m.*n);m3=zeros(Nj,Nj);fori=1:1:Njforj=1:1:NjM=zeros(2,1);M(1,:)=m(i,j);M(2,:)=n(i,j);S1=w1*M-o1;m1=1./(1+exp(-S1);%第一层隐含层输出S2=w2*m1-o2;m2=1./(1+exp(-S2);%第二层隐含层输出S3=w3*m2-o3;m3(i,j)=S3;%输出层输出endendfigure(l);surf(xO,yO,yf);title(学习期望输出);gridon;figure(2);surf(x0,y0,x3);title(学习实际输出);gridon;figure(3);subplot(221);surf(m,n,ym);title(检验期望输出);gridon;subplot(222);surf(m,n,m3);title(检验实际输出);gridon;k=1:time;subplot(212);title(误差曲线);plot(k,E);15
展开阅读全文