人工神经网络及其应用实例解读_第1页
人工神经网络及其应用实例解读_第2页
人工神经网络及其应用实例解读_第3页
人工神经网络及其应用实例解读_第4页
人工神经网络及其应用实例解读_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Page of25人工神经网络及其应用实例人工神经网络是在现代神经科学研究成果基础上提出的一种抽象数学模型,它以某种简化、抽象和模拟的方式,反映了大脑功能的若干基本特征,但并非其逼真的描写。人工神经网络可概括定义为:由大量简单元件广泛互连而成的复杂网络系统。所谓简单元件,即人工神经元,是指它可用电子元件、光学元件等模拟,仅起简单的输入输出变换y=O(x)的作用。下图是3中常用的元件类型:线性元件:y=0.3X,可用线性代数法分析,但是功能有限,现在已不太常用。21.510.50-0.5-1-1.5-2-6-4-20246连续型非线性元件:y=tanh(x),便于解析性计算及器件模拟,是当前研究

2、的主要元件之一。1.510.50-0.5-1-1.5-2-6-4-20246离散型非线性元件:y1空0,便于理论分析及阈值逻辑器件1-1,x0实现,也是当前研究的主要元件之一。21.510.50-0.5-1-1.5-2-6-4-20246每一神经元有许多输入、输出键,各神经元之间以连接键(又称突触)相连,它决定神经元之间的连接强度(突触强度)和性质(兴奋或抑制),即决定神经元间相互作用的强弱和正负,共有三种类型:兴奋型连接、抑制型连接、无连接。这样,N个神经元(一般N很大)构成一个相互影响的复杂网络系统,通过调整网络参数,可使人工神经网络具有所需要的特定功能,即学习、训练或自组织过程。一个简单

3、的人工神经网络结构图如下所示:上图中,左侧为输入层(输入层的神经元个数由输入的维度决定)右侧为输出层(输出层的神经元个数由输出的维度决定),输入层与输出层之间即为隐层。输入层节点上的神经元接收外部环境的输入模式,并由它传递给相连隐层上的各个神经元。隐层是神经元网络的内部处理层,这些神经元在网络内部构成中间层,不直接与外部输入、输出打交道。人工神经网络所具有的模式变换能力主要体现在隐层的神经元上。输出层用于产生神经网络的输出模式。多层神经网络结构中有代表性的有前向网络(BP网络)模型、多层侧抑制神经网络模型和带有反馈的多层神经网络模型等。本文主要探讨前向网络模型。多层前向神经网络不具有侧抑制和反

4、馈的连接方式,即不具有本层之间或指向前一层的连接弧,只有指向下一层的连接弧。代表是BP神经网络:输入模式由输入层进入网络,经中间各隐层的顺序变换,最后由输出层产生一个输出模式,如下图所示:输入层隐层输出层多层前向神经网络由隐层神经元的非线性处理衍生它的能力,这个任务的关键在于将神经元的加权输入非线性转换成一个输出的非神经元的输出由下式给出:y=o(乙wjb)j=i这里输入的加权和(括号内部分)由一个非线性函数传递,b表示与偏差输入相关的权值,wj表示与第j个输入相关的权值。使用最广泛的函数是S形函数,其曲线家族包括对数函数和双曲正切函数,这些都可用来对人口动态系统、经济学系统等建模。另外所用的

5、其他函数有高斯函数、正弦函数、反正切函数,在此不一一展开介绍,本文主要使用的激励函数是对数函数,函数表达式为:y=L(u)=1+eu函数曲线如下图所示:对于有限输入量,对数函数输出范围为ye(0,1)。在输入为u=0时,输出值为中间值y=0.5。输出在U=0附近随着输入的增加以相对快的速率增加并非常慢地到达上限。对于u0,输出起初减少得很快,然后随着下限的接近将会变慢。训练神经元的规则有很多种,这里首先介绍利用delta规则的学习,神经元选择为一个单输入单输出的简单情形,数学描述如下:,1u_wx+b,尸1+eu该神经元具有一个输入x,权重为w,偏差输入为b,目标输出为t,预报输出为y。则预报

6、误差为:E=ty_t-_t1+e1+euwxb为消除当误差在整个输入模式上求和时引起的误差符号问题,在delta规则里使用的误差指示是平方误差,定义为:1)211221+ewxb根据delta规则,最优权值(使平方误差最小)可以在训练过程中从初始权值出发,沿负梯度方向下降得到。将平方误差对w,b(神经元的可调整参数)进行微分,得:6s_E6u6seu(1+73_dduE(Wdudw6sdsdu厂dbdudbu2eXu(1+e)2u2e(1+e)2u2根据delta原则,权值改变应与误差梯度的负值成比例,引入学习率B,每次迭代中的权值改变可表示为:Aw=p-=E-ex(ttVxu2eu(1+e)

7、2u2学习率B决定了沿梯度方向的移动速度,以确定新的权值。大的P值会加快权值的改变,小的3值则减缓了权值的改变。第i次迭代后的新权值可表示为:w=w+B-Ei+1ib=b+B-Ei十1ie包-x(1+e2-u2eu(1+e)2如果将偏差输入b视为输入x的一部分,令x0=1,w0=b,可以得到对于多输入神经元的权值修正式:eW.+1=W.+B-E-x.,j=0,1,2,.,njj(1+e-)j总之,利用delta规则的有监督的学习可以按如下方法来实现:个输入模式(x,x,x,,x)通过连接被传递,它的初始权值被设置012n为任意值。对加权的输入求和,产生输出y,然后y与给定的目标输出t做比较决定

8、此模式的平方误差。输入和目标输出不断地被提出,在每一次迭代或每一个训练时间后利用delta规则进行权值调整直到得到可能的最小平方误差。delta规则在每一步中通过导数寻找在误差平面中某个特定点局部区域的斜率,它总是应用这个斜率从而试图减小局部误差,因此,delta规则不能区分误差空间中的全局最小点和局部最小点,它本身不能克服单层神经网络的局限,无法直接应用到多层神经网络(易陷入局部最小点),但它的一般形式是多层神经网络中的学习算法一一反传算法的核心。在多层前向神经网络的训练过程中,误差导数或关于权值的误差表面的斜率对权值的调整是至关重要的,在网络训练期间,所有的输出神经元和隐含神经元权值必须同

9、时调整,因此,有必要找出关于所有权值的误差导数。由于网络层数增多,平方误差8与权值的连接没有之前单个神经元时那么直接,故可以使用链式规则的概念来找到导数。F面对一个含有一层隐含神经元的BP网络进行讨论,网络结构如下图所示:各个神经元的输入输出关系为:iyny=,u=/i1+wiulj=0z=v,v=厶byl=0设目标输出为t,则平方误差定义为:12使用链式法则,分别列出平方误差8对所有网络参数的导数:-=-(t-z)asdbasi.,i=0丄2,,mi88一dudyauay(1+e)iiii-u.2dsdsduds=-xjTi=1,2,da.duda.-du.j.iJii,i=1,2,.,m.

10、,m,J=0,1,2,.,n在实际的编程过程中,我们需要的是空和竺,所以如果有需要,也可以直接采用以下整理之后的形式:ds(tz).y.,i=0,1,2,丄.,mdbldsdaJi(1+euJ)-i=1,2,2.,m,J=0,1,2,.,n研究表明,两层网络在其隐层中使用S形激励函数,在输出层中使用线性传输函数,就几乎可以以任意精度逼近任意感兴趣的函数,只要隐层中有足够的单元可用。问题1:试使用BP神经网络去逼近正弦函数的正半周,如下:t=sin(x),xe0,兀由于输入量x仅有一维,故BP神经网络结构可以设计为:各个神经元的输入输出关系为:1,2jij1y=,u=i1+eiUij=02zrv

11、,vrbiiyi=0根据之前的推导,平方误差s对所有网络参数的导数为:6s乔)”i=0丄26su齐二Z)U(+;Jrh2,j=0,1eUi网络参数修正方程为:6sbk+1=b-卩-ik=bPHy,i=012後1=a-j卩=卩(1z).b扩j,一马j=0,1k6sk为加快寻找最优权值的速度,可以使用动量法。之前的方法中,收敛到最优权值的速度取决于学习率的大小,但是过大的学习率会导致来回震荡,不能稳定到最优权值点。动量法的引入,使得较大的学习率也可以具有较好的稳定性,即提供了在学习期间到达最优权值时的稳定性。这种方法基本上是将过去权值变化的平均值附加到每一次权值变化的新权值增量,从而使网络权值的变

12、化更平滑。数学表示如下:Aw尸卩Aw+(1卩)卩(-)k+1k矶式中,卩是一个在0和1之间的动量参数,Aw是在前一个训练k时间里的权值变化。使用动量法的实际效果是:基本上,如果以前积累的变化与之前方向所暗示的是同一个方向时,动量部分就会加速当前权值改变;如果当前积累的变化是相反的方向,动量将阻止当前的变化。据此编写MATLAB程序,源代码如下:beta=0.1;miu=0.8;fori=1:1:101;x1(1,i)=(i-1)*pi/100;t(1,i)=sin(x1(1,i);endx0=1;yO=1;a01=rand();a02=rand();a11=rand();a12=rand();

13、b0=rand();b1=rand();b2=rand();delta_a01=0;delta_a02=0;delta_a11=0;delta_a12=0;deltab0=0;deltab1=0;deltab2=0;k=1rtotalerror=0;while1y1=1/(1+exp(-u1);y2=1/(1+exp(-u2);z=b0*y0+b1*y1+b2*y2;totalerror=totalerror+(t(1,k)-z)A2/2;deltab0=miu*deltab0+(-mil)betasun(t(1,k)z)*y0);b0=b0+deltab0;deltabl=miu*delta

14、b1+(-mil)betasun(t(1,k)z)*y1);b1=b1+deltabl;deltab2=miu*deltab2+(-mil)betasun(t(1,k)z)*y2);b2=b2+deltab2;deltaa01=miu*deltaa01+-mil)betasun(t(1,k)-z)b1*temp1*x0);a01=a01+deltaa01;deltaa02=miu*deltaa02+-mil)betasun(t(1,k)-z)b2*temp2*x0);a02=a02+deltaa02;deltaa11=miu*deltaa11+-mil)betasun(t(1,k)-z)b1*

15、temp1*x1(1,k);a11=a11+deltaa11;deltaa12=miu*deltaa12+-mil)betasun(t(1,k)-z)b2*a12temp2*x1(1,k);=a12+deltaa12;k+1;ifk=length(x1)+totalerroriftotalerror0.001break;elsetotalerror0;endendendclearu1u2temp1temp2y1y2zx0yO;u1=a01*x0+a11*x1(1,k);u2=a02*x0+a12*x1(1,k);temp1=exp(-u1)/(1+exp(-u1)A2);temp2=exp(-

16、u2)/(1+exp(-u2)A2);x0=ones(size(x1);y0=ones(size(x1);u1=aO1*x0+a11*x1;u2=a02*x0+a12*x1;yi=1./(1+exp(-u1);y2=1./(1+exp(-u2);z=b0*yO+b1*y1+b2*y2;plot(x1,t,r);holdon;plot(x1,z,b);holdoff;axis(0pi-).21.2);程序运行后,输出拟合曲线与原函数曲线,如下图所示:可以看出,训练后的神经网络的预报输出与目标输出已经很接近,拟合效果是较为理想的。总的来说,神经网络的学习过程,是神经网络在外界输入样本的刺激下不断改

17、变网络的连接权值乃至拓扑结构,以使网络的输出不断地接近期望的输出。BP算法是多层前向神经网络的一种学习规则,核心思想是将输出误差以某种形式通过隐层向输入层逐层反传,学习的过程就是信号的正向传播与误差的反向传播交替的过程。多层前向神经网络的主要功能有:(1)非线性映射能力。多层前向神经网络能学习和存储大量输入输出模式映射关系,而无需事先了解描述这种映射关系的数学方程。只要能提供足够多的样本模式供对神经网络进行学习训练,它便能完成由n维输入空间到m维输出空间的非线性映射。(2)泛化能力。当向网络输入训练时未曾见过的非样本数据时网络也能完成由输入空间到输出空间的正确映射。(3)容错能力。输入样本中带

18、有较大的误差甚至个别错误对网络的输入输出规律影响很小。多层前向神经网络的标准BP学习算法有着以下明显的缺陷:(1)易形成局部极小(属于贪婪算法,局部最优)而得不到全局最优;(2)训练次数多使得学习效率低下,收敛速度慢;(3)隐节点的选取缺乏理论支持;(4)训练时学习新样本有遗忘旧样本的趋势。标准BP算法的改进方法主要有:增加动量项;自适应调节学习率等。增加动量项已经在之前进行过讨论,可以减小振荡趋势,提高训练速度。自适应调节学习率是指根据环境变化增大或减小学习率,基本方法是:设一初始学习率,若经过一批次权值调整后使总误差增大,则本次调整无效,并令卩=a1P(ai1)。下面通过一个非线性分类问题

19、来考察前向神经网络在模式识别领域的应用。问题2:x-y平面上有200个点,分别属于两个类别。试设计并训练一个多层前向神经网络,以完成该分类任务,使得被错误分类的样本数量最低。3类以绿色标示,3类以蓝色标示。120.90.80.7右44Mr=tr4-44=-4fc-卡丰*T*0.60.50.40.30.20.10.10.20.30.40.50.60.70.80.9根据题意,前向神经网络的结构设计如下:网络的输入输出关系及分类策略为:1+2v21,u.=eiu.ajji=j=01,2z=21+evb.y.i=0J,z0(X,y)%,z0&t(1,i)=1)|z(1,i)0&t(1,i)=1)%el

20、seerror=error+1;endenderrortempO=-(t-z).*exp(-v)./(L+expvtemp1=b1.*exp(-u1)./(1+exp(-u1)./(1+expu2delta_bO=miudelta_b1=miudelta_b2=miudelta_bO+(delta_b1+(delta_b2+(-mil)*beta*-mi)*beta*-mil)*beta*sun(-tempO.*y0);sun(-tempO.*y1);sun(-temp0.*y2);deltaa01=miu*deltaa01+1-mi)x0)fdeltaa11=miu*deltaa1+1-mi

21、)x1)fdeltaa21=miu*deltaa2+1-mi)x2)fdeltaa02=miu*deltaa0+1-mi)x0)fdeltaa12=miu*deltaa1+1-mi)beta*su(-temp0.*temp1.*beta*su(-temp0.*temp1.*beta*su(-temp0.*temp1.*beta*su(-temp0.*temp2.*beta*su(-temp0.*temp2.*x1);delta_a22=miu*delta1-mi)*beta*su(-temp0.*temp2.*temp2=b2.*exp(-u2)x2);b0=:b0+deltab0;b1=:b

22、1+deltab1;b2=:b2+deltab2;a01=a01+deltaa01;a11=a11+deltaa11;a21=a21+deltaa21;a02=a02+deltaa02;a12=a12+deltaa12;a22=a22+deltaa22;l=l+1;ifl=1000break;endendj1=1;j2=1;k1=1;k2=1;fori=1:1:nifx(i,3)=-1ifz(1,i)0 x21(k1,:)=x(i,:);k1=k1+1;elsex22(k2,:)=x(i,:);k2=k2+1;endendendholdon;plot(x11(:,:),x11(,2),g*);

23、plot(x12(:,:),x12(,2),r+);plot(x21(:,:),x21(,2),bo);plot(x22(:,:),x22(,2),r+);holdoff;axis(0101);程序运行结果,经过训练,该神经网络对200个样本的分类正确率达到了96.5%,分类效果较好,具体分类情况如下图所示,其中被错误分类的样本已用红色标示出,其它正确分类的样本仍用原类别对应的颜色进行标示。1七0.90.8士.*0.70.60.50.4门000.30.20.1Jr0.10.20.30.40.50.60.70.80.94=-cPoOoO-0.+之前的所有程序都是完整地按照多层前向神经网络的标准B

24、P学习算法过程进行编写的,程序较为复杂,而且如果出现差错,也不易发现,因此应用有一定难度,下面介绍使用MATLAB的神经网络工具箱进行人工神经网络的设计与训练的方法。关于神经网络工具箱的帮助信息,可以在ProductHelp中搜索“NeuralNetworkToolbox”获得,包含有较为详细的使用方法,可以在需要时进行查阅。下面以一个函数拟合的问题为例,演示如何使用神经网络工具箱。首先介绍几个将要用到的函数:premnmx:用于将网络的输入数据或输出数据进行归一化,归一化后的数据将分布在1,1区间内。其语法格式为:Pn,minp,maxp,Tn,mint,maxt=premnmx(P,T);

25、tramnmx:在训练网络是如果所用的是经过归一化的样本数据,那么以后使用网络时所用的新数据也应该和样本数据接收相同的预处理,tramnmx用于完成此项处理,语法格式为:Pn_new=tramnmxP_new,minp,maxp);Tn_new=tramnmxT_new,mint,maxt);postmnmx:网络输出结果需要反归一化还原为原始数据,常用的函数即是postmnmx,其语法格式为:Y=postmnmx(Yn,mint,maxt);newff:训练前馈网络的第一步是建立网络对象。函数newff建立一个可训练的前馈网络。这需要4个输入参数:第一个参数是一个Rx2的矩阵以定义R个输入向

26、量的最小值和最大值;第二个参数是一个设定每层神经元个数的数组;第三个参数是包含每层用到的传递函数名称的细胞数组;最后一个参数是用到的训练函数的名称。例如可以这样建立一个网络对象:net=newf(minma(PNl),NodeNumTypeN,TF1TF,trainlm);或者可以在建立网络对象时并不设定训练函数,而是之后进行指定,如:net=newff(minmax(PNl),NodeNumTypeNum,TFlTF2);net.trainFcn=trainlm;两者是等效的。train:BP神经网络的训练函数,其语法格式为:net=train(net,Pn,Tn);sim:对于给定的输入量

27、,模拟神经网络的输出,其语法格式为:Yn=sim(net,Pn);例如使用神经网络工具箱对一个正弦函数进行拟合,源程序如下:clcclearcloseall%产生训练样本与测试样本P1=1:2:200;%训练样本,每一列为一个样本T1=sin(Pl*0.1);%训练目标P2=2:2:200;%测试样本,每一列为一个样本T2=sin(P2*0.1);%测试目标%归一化PN1,minp,maxp,TN1,mint,maxt=premnmx(P1,T1);PN2=tramnmx(P2,minp,maxp);TN2=tramnmx(T2,mint,maxt);%设置网络参数NodeNum=20;%隐层

28、节点数TypeNum=1;%输出维数TF1=tansig;TF2=purelin;%判另U函数(缺省值)%TF1=tansig;TF2=logsig;%TF1=logsig;TF2=purelin;%TF1=tansig;TF2=tansig;%TF1=logsig;TF2=logsig;%TF1=purelin;TF2=purelin;net=newff(minmax(PN1),NodeNumTypeNum,TF1TF2);%指定训练参数%net.trainFcn=traingd;%梯度下降算法%net.trainFcn=traingdm;%动量梯度下降算法%net.trainFcn=tra

29、ingda;%变学习率梯度下降算法%net.trainFcn=traingdx;%变学习率动量梯度下降算法%(大型网络的首选算法)%net.trainFcn=trainrp;%RPROP(弹性BP)算法,内存需求最小%共轭梯度算法%net.trainFcn=traincgf;%Fletcher-Reeves修正算法%net.trainFcn=traincgp;%Polak-Ribiere修正算法,内存需求比Fletcher-Reeves修正算法略大%net.trainFcn=traincgb;%Powell-复齟算法内存需求比Polak-Ribiere修正算法略大%(大型网络的首选算法)%ne

30、t.trainFcn=trainscg;%ScaledConjugateGradien算法,内存需求与Fletcher-Reeves修正算法相同,计算量比上面三种算法都小很多%net.trainFcn=trainbfg;%Quasi-NewtonAlgorithms-BFGSAlgorithm,计算量和内存需求均比共轭梯度算法大,但收敛比较快%net.trainFcn=trainoss;%OneStepSecantAlgorith计算量和内存需求均比BFGS算法小,比共轭梯度算法略大%(中型网络的首选算法)%net.trainFcn=trainlm;%Levenberg-Marquard算法,

31、内存需求最大,收敛速度最快%net.trainFcn=trainbr;%贝叶斯正贝U化算法%有代表性的五种算法为:traingdx,trainrp,trainscg,trainoss,trainlmnet.trainFcn=trainlm;net.trainParam.show=20;%训练显示间隔net.trainParam.lr=0.3;%学习步长-traingd,traingdmnet.trainParam.mc=0.95;%动量项系数-traingdm,traingdxnet.trainParam.mem_reduc=1;%分块计算Hessian矩阵(仅对Levenberg-Marquardt算法有效)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论