收藏 分享(赏)

matlab-神经网络.ppt

上传人:无敌 文档编号:307913 上传时间:2018-03-27 格式:PPT 页数:50 大小:914KB
下载 相关 举报
matlab-神经网络.ppt_第1页
第1页 / 共50页
matlab-神经网络.ppt_第2页
第2页 / 共50页
matlab-神经网络.ppt_第3页
第3页 / 共50页
matlab-神经网络.ppt_第4页
第4页 / 共50页
matlab-神经网络.ppt_第5页
第5页 / 共50页
点击查看更多>>
资源描述

1、3. BP网络 (Back Propagation network),BP网络是一种多层前馈型神经网络,其神经元的传递函数多半是S型函数,输出量多为0到1之间的连续量,它可以实现从输入到输出的任意非线性映射。由于权值的调整采用反向传播(Back Propagation)学习算法,因此也常称其为BP网络。 目前,在人工神经网络的应用中,绝大部分的神经网络模型都采用BP网络及其变化形式。它也是前向网络的核心部分,体现了人工神经网络的精华。BP网络主要用于以下四方面: 函数逼近:用输入矢量和相应的输出矢量训练一个网络以逼近一个函数。 模式识别:用一个待定的输出将它与输入联系起来。 分类:把输入矢量所

2、定义的合适方式进行分类。 数据压缩:减少输出矢量维数以便于传输或存储。 本部分在介绍BP网络的基本结构基础上,着重讨论用MATLAB创建网络、训练以及网络仿真等诸多方面的方法,最后给出BP网络应用的几个实例。,3.1 BP神经网络模型结构,BP神经元模型,神经元传递函数,上图给出一个基本的BP神经元模型,它具有R个输入,每个输入都通过一个适当的权值w和上一层相连,网络输出可表示为:a=f (w*p+b)f就是表示输入/输出关系的传递函数。BP网络中隐层神经元的传递函数通常用log-sigmoid型函数logsig()、tan-sigmoid型函数tansig()以及纯线性函数purelin()

3、。 如果BP网络的最后一层是sigmoid型神经元,那么整个网络的输出就限制在一个较小的范围内;如果BP网络的最后一层是purelin型线性神经元,那么整个网络的输出可以取任意值。,下图(上半部) 是一个典型的BP网络结构。具有S个神经元,R个输入和S个输出,神经元采用S型传递函数logsig() 。可见,就单层网络而言,除传递函数不同外,与前面所介绍的感知器和线性神经网络没有什么不同。,上图(下半部) 是一个典型两层BP网络 (一个隐层和一个输出层)。前馈型网络通常有一个或多个隐层,隐层中的神经元均采用S型传递函数,输出层的神经采用线性传递函数。隐层的非线性传递函数神经元可以学习输入输出之间

4、的线性和非线性关系,线性输出层是为了拓宽网络输出。如果需要限定网络输出(例如约束在0和1之间),则可以采用S型传递函数(例如logsig()。,训练神经网络之前需要构造一个网络构架,函数newff()就用于构造BP神经网络。它需要四个输入条件,依次是:由R维的输入样本最大最小值构成的Rx2维矩阵、各层的神经元个数、各层神经元的传递函数以及训练用函数的名称。例如:net=newff(-1 2; 0 5, 3,1, tansig, purelin, traingd); 就生成了初始化待训练的神经网络。,3.2 生成网络,3.4 网络仿真,给定网络结构和输入变量p,就可以应用sim()函数计算相应的

5、网络输出a。举例:net=newff(-1 2; 0 5, 3,1, tansig, purelin, traingd);net=init(net);p=1;2;a=sim(net,p)a= 0.3467,3.3 权值和阈值的初始化,前馈型神经网络在训练之前必须要对权值和阈值进行初始化,newff()函数可以自动完成这一过程,但是无法重新赋初值。如果想重新初始化,可以应用init()函数,使网络恢复到初始化的情况。,p=1 2 3; 2 4 1;a=sim(net, p)a= 0.3467 0.9705 0.6030,3.5 BP网络的训练,上例演示了对应一维和多维输如情况下的仿真 (可能每次

6、结果不同,这是因为前面初始化的网络是随机的,对应的网络不同,结果自然不同)。,BP神经网络的训练函数有traingd、traingdm、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm、trainbr等,每种训练函数各有特点,但是没有一种函数能适应所有情况下的训练过程。使用者应根据各自所研究的任务不同,选择合适的训练方法和函数,满足各自不同的课题。,无论是函数逼近还是模式识别,都必须对神经网络进行训练。训练之前首先需要样本,样本中包含输入向量P以及相应的期望输出向量T,训练过程中应不断调

7、整权值和阈值,使得神经网络的表现函数达到最小。前馈型神经网络的表现函数缺省为网络输出a和期望输出向量T的均方差mse。下面,将各种函数所对应的方法一并归类如下:,梯度下降法:traingd();改进BP算法1 (启发式学习算法):有动量的梯度下降法:traingdm();有自适应学习率的梯度下降法:traingda();有动量和自适应学习率的梯度下降法: traingdx();能复位的BP算法: trainrp();改进BP算法2 (基于数值最优化理论的训练算法):共轭梯度法: traincgf()、traincgp()、traincgb()、trainscg();高斯-牛顿法: traino

8、ss();levenberg-Marquardt法: trainlm();,3.6 BP网络的相关讨论,在BP网络的训练中,训练方法的选择是非常重要的。对于简单问题,可选择梯度下降法traingd(),但由于训练中稳定性要求学习率很小,所以梯度下降法使得训练很慢。动量法因为学习率的提高通常比单纯的梯度下降法要快,但在实际应用中还是很慢,这两种方法通常只应用于递增训练。如果内存足够,对于中小型网络,可以采用Levenberg-Marqardt训练方法;如果内存空间有限的情况下,可以采用其他收敛速度较快的算法。对于大型网络,就要采用其他训练函数,例如trainscg()或者trainrp()。,多

9、层神经网络可以应用于线性系统和非线性系统中,对任意函数模拟逼近(当然,感知器和线性神经网络也有可能解决这类网络问题)。虽然理论上是可行的,但实际上BP网络并不一定总能有解。,对于非线性系统,选择合适的学习率是一个很重要的问题。在线性网络中,学习率过大会导致训练过程不稳定。相反,学习率过小又会造成训练时间过长。和线性网络不同,对于非线性多层网络很难选择很好的学习率。对那些快速训练算法,缺省参数值基本上都是最有效的设置。,非线性网络的误差面比线性网络的误差面复杂得多,问题在于多层网络中非线性传递函数有着多个局部最优解。寻优的过程与初始点的选取关系很大,初始点如果更靠近局部最优点,而不是全局最优点,

10、就不会得到正确结果,这也是多层网络无法得到最优解的一个原因。为了解决这个问题,在实际训练过程中,应重复选取多个初始点进行训练,以保证训练结果的全局最优性。,网络隐层神经元的数目也对网络有一定的影响。神经元数目太少会造成网络的不适性,而神经元数目太多又会引起网络的过适性。,3.7 应用举例,1). 问题提出 要求设计一个简单的BP网络,实现对非线性函数的逼近。通过改变该函数的参数以及BP网络隐层神经元的数目,来观察训练时间以及训练误差的变化情况。将要逼近的非线性函数设为正弦函数,其频率参数k可以调节:,3.7.1 非线性函数逼近,k=1;% 先令频率参数为1n=10; % 隐层神经元数目n=10

11、 aim=0.01;% 逼近误差% 产生频率可调的正弦波作为要逼近的非线性函数p=-1:0.05:1;t=sin(k*pi*p);plot(p,t);title(要逼近的非线性函数);xlabel(时间);,xlabel(时间);ylabel(非线性函数);,2). 网络建立,应用函数newff()建立BP网络结构,为二层BP神经网络。隐层神经元数目n可以改变,暂设为n=10,输出层有一个神经元。选择隐层和输出层神经元传递函数分别为tansig函数和purelin函数,网络训练用算法采用Levenberg-Marquardt算法trainlm。,net=newff(minmax(p),n,1,

12、tansig purelin,trainlm);y1=sim(net,p);plot(p,t,p,y1,-);title(未训练的网络输出结果);xlabel(时间);ylabel(仿真输出- 原函数);,绘制网络输出曲线,并与原函数相比较,结果如下页图所示。,因为使用newff()函数建立网络时,权值和阈值的初始化是随机的,所以网络输出结果很差,根本达不到函数逼近的目的,并且每次运行的结果也有所不同。,3). 网络训练,应用函数train()对网络进行训练之前,需要预先设置训练参数。将训练次数设置为50,训练精度设置为0.01,其余参数使用缺省值。训练后得到的误差变化过程如下页图所示。,ne

13、t.trainParam.epochs = 50;% 训练次数设置为50net.trainParam.goal =aim;% 训练精度设置为0.01net= train(net,p,t); % 训练,TRAINLM, Epoch 0/50, MSE 14.2629/0.01, Gradient 325.276/1e-010TRAINLM, Epoch 2/50, MSE 0.00126849/0.01, Gradient 0.474027/1e-010TRAINLM, Performance goal met.,从以上结果可以看出,网络训练速度很快,经过一次循环迭代过程就差不多达到了要求的精度

14、。,4). 网络测试,y2 = sim(net,p);plot(p,t,p,y1,p,y2);title(训练后的网络输出结果);xlabel(时间);ylabel(仿真输出);,5). 讨论,改变非线性函数的频率和BP网络隐层神经元的数目,对于函数逼近的效果有一定的影响。网络非线性程度越高,对于BP网络的要求越高,则相同的网络逼近效果要差一些;隐层神经元的数目对于网络逼近效果也有一定影响,一般来说,隐层神经元数目越多,则BP网络逼近非线性函数的能力越强,而同时网络训练所用的时间相对来说要长一些。,(1) 频率参数设为k=2,隐层神经元数目仍为n=10,结果如下面各图所示:,(2) 频率参数设

15、为k=1,隐层神经元数目改为n=5,结果如下面各图所示:,3.7.2 模式识别,计算机模式识别是近年来发展起来的技术。如利用机器来识别银行的签字,那么工作人员就能在相同的时间里做更多的工作,既节省了时间,又节约了人力物力资源。下面介绍在模式识别中应用BP网络的简单实例。,1). 问题提出 设计一个网络并训练它来识别字母表中的26个字母,数字成像系统对每个字母进行数字分析将其变成数字信号。下图(左) 显示的就是字母A的网格图。但是,这只是理想图像系统得到的结果。实际情况总会存在一些噪声干扰,或者存在一些非线性因素,实际得到的字母网格图如下图(右) 所示。 要求设计网络,不仅能够对理想输入向量进行

16、很好的分类,也能够准确识别含有误差的输入向量。,字母A的网格图,有噪声字母A的网格图,本例中,26个字母均被定义成输入向量,每个代表字母的输入向量均有35(5x7)个元素,这样就组成了一个输入向量矩阵alphabet。期望输出向量被定义成一个变量targets,期望输出向量含有26个元素,字母在字母表中所占位置处元素为1,其他位置为0。例如,因为字母A在字母表中是第一个字母,所以其期望输出向量为(1,0,0),2). 网络建立 根据上面提出的设计要求,输入向量具有35个元素,网络输出就是反映字母所在位置的具有26个元素的输出向量。如果网络正确,那么输入一个字母,网络就能输出一个向量,它对应位置

17、的元素值为1,其他位置的元素值为0。 另外,网络还必须具有容错能力。因为实际情况下,网络不可能接收到一个理想的布尔向量作为输入。当噪声均值为0,标准差小于等于0.2时,系统应该能够做到正确识别输入向量,这就是网络的容错能力。,对于辨识字母的要求,神经网络被设计成两层BP网络,具有35个输入端,输出层有26个神经元,如下图所示。隐层和输出层的神经元传递函数均为logsigmoid,这是因为logsigmoid函数输出量在(0, 1)区间内,恰好满足输出布尔值的要求。隐层含有10个神经元,神经元数目的选择是依据经验和猜测而定。在实际训练中,如果训练过程不理想,可以适当增加隐层神经元数目。,训练网络

18、就是要使其输出向量正确代表字母向量。然而,由于噪声信号的引入,网络可能会产生不精确的输出,通过竞争传递函数compet()训练后,就能够保证正确识别带有噪声的字母向量。,用于字母识别的神经网络结构,% 网络生成% Character recognition problem definitionalphabet,targets=prprob; S1=10; % 定义隐层神经元数目R, Q= size(alphabet); % 获取输入变量数S2,Q=size(targets); % 获取输出变量数P=alphabet; % P为输入矩阵% 生成BP网络net= newff(minmax(P),S

19、1 S2,logsig logsig,traingdx); net.LW2,1= net.LW2,1*0.01; % 调整输出层权值net.b2= net.b2*0.01; % 调整输出层阈值,首先生成代表26个字母布尔值的样本数据,然后应用函数newff()构建一个两层神经网络。,3). 网络训练,为了使产生的网络对输入向量有一定的容错能力,最好的办法是既使用理想的信号,又使用带有噪声的信号对网络进行训练。具体过程如下: (1) 应用理想的输入信号对网络进行训练,直到其均方差达到精度为止。 (2) 应用10组理想信号和带有噪声的信号对网络进行训练。在进行训练时,同时对两组相同的无噪声字母信号

20、样本进行训练,目的是确保网络能够正确分辨理想信号。 进行了上述的训练之后,网络对无噪声信号进行辨识的时候可能也会采用有噪声信号的方法,这样就会产生不必要的资源浪费。可以再次训练网络,这一次就只需要应用理想信号进行训练,从而保证在输入理想字母信号时,网络具备良好的辨识能力。下面说明这一过程:,无噪声训练 开始应用无噪声信号对网络进行训练,最大训练次数设定为5000次,最小均方差设为0.1。,T=targets;net.performFcn= sse; % 表现函数net.trainParam.goal= 0.1; % 训练精度要求net.trainParam.show= 20; % 结果显示间隔

21、net.trainParam.epochs= 5000; % 训练次数net.trainParam.mc=0.95; % 动量因子net,tr=train(net,P,T); % 训练,无噪声训练过程图示,有噪声训练 为了保证设计的网络对于噪声信号有一定的容错性,可以应用两套理想字母向量和两套有噪声字母向量作为训练样本,这样期望输出信号就包括4组重复字母向量信号,加入的噪声采用水平为0.1和0.2两种信号,并且在循环中重复循环训练10次。这样做的目的,就是保证神经元正确分辨有噪声字母的同时,也能对理想字母向量做到正确的识别。 因为训练样本的增加(为无噪声训练的4倍),所以在有噪声训练时,最大训

22、练次数降为300,误差精度降为0.6。,% 有噪声训练netn = net; % 构造一新网络进行有噪声训练netn.trainParam.goal=0.6 % 降低训练精度要求netn.trainParam.epochs= 300; % 最大训练次数T=targets targets targets targets; % 构造新的目标矩阵,for pass=1:10 P= alphabet,alphabet,(alphabet+randn(R,Q)*0.1), (alphabet+randn(R,Q)*0.2); netn,tr = train(netn,P,T);end,10次循环训练的结

23、果。,再次无噪声训练 这次训练是为了使得网络进行理想信号识别时,节省资源。 netn.trainParam.goal=0.1; % 更改训练精度 netn.trainParam.epochs=500; % 设定训练次数 netn.trainParam.show= 5; % 结果显示间P=alphabet; % P为输入矩阵T=targets; % 新的目标矩阵netn,tr = train(netn,P,T); TRAINGDX, Epoch 0/500, SSE 0.0624098/0.1, Gradient 0.0766478/1e-006TRAINGDX, Performance goa

24、l met.,4). 系统性能测试,为了测量所设计的神经网络模式识别系统的可靠性,应用上百个输入向量加入了不同的噪声信号进行了测试,并绘制网络识别错误与噪声信号的比较曲线。,加入网络输入向量的噪声均值为0,标准差范围为00.5。在每个噪声级别上,分别利用100个不同的噪声信号进行试验,并将噪声信号加到每个字母向量上,然后通过仿真计算网络输出,将输出通过竞争传递函数,保证输出向量26个元素中有一个值为1,其余均为0。以下是相应的程序:,noise_range = 0: 0.05: 0.5;max_test = 100;network1=;network2=;T=targets; for nois

25、elevel = noise_range errors1=0; errors2=0; for i=1:max_test P = alphabet+randn(35,26)*noiselevel; A= sim(net,P);,AA= compet(A); errors1= errors1+sum(sum(abs(AA-T)/2; An= sim(netn,P); AAn= compet(An); errors2= errors2+sum(sum(abs(AAn-T)/2; end network1 = network1 errors1/26/100; network2 = network2 e

26、rrors2/26/100;endplot(noise_range, network1*100,-, noise_range, network2*100);title(识别误差);xlabel(噪声指标);ylabel(无噪声训练网络 - - - 有噪声训练网络 );,识别误差与噪声的关系,图中,实线表示同时经过无噪声信号和有噪声信号训练的网络的可靠性,虚线表示只经过无噪声训练后的网络的可靠性。从中可以看出,网络经过有噪声信号输入样本训练后,其容错能力有了明显的增强。,当输入噪声信号的平均值为0或者0.05时,网络能够正确识别;而当噪声信号加强到平均值为0.2时,两个网络都开始产生识别误差。改

27、进: 增加网络训练时间或者增加网络隐层神经元数目。 将输入的字母向量由原来的5x7网格加大为10x14的网格。,用字母A、J、W测试系统noiseJ = alphabet(:,1)+randn(35,1)*0.2; % 字母Aplotchar(noiseJ);A2= sim( net, noiseJ);A2= compet(A2);answer= find(compet(A2) =1);plotchar(alphabet(:,answer);,从图中可以看出,网络正确的识别出了这些字母。,alphabet(:,10),alphabet(:,23),3.8 应用提示,故障诊断。 新材料研究。 智

28、能控制。,4. 径向基函数网络(Radial Base Function network, RBF),众所周知,BP网络用于函数逼近时,权值的调节采用的是负梯度下降法。这种调节权值的方法有其局限性,即收敛速度慢和局部极小等。这里主要介绍逼近能力、分类能力和学习速度等方面均优于BP网络的另一种网络径向基函数网络。,4.1 径向基函数网络模型结构,径向基函数网络是一种两层前向型神经网络,包含一个具有径向基函数神经元的隐层和一个具有线性神经元的输出层。,神经元模型,下页图所示为一个有R个输入的径向基神经元模型。径向基函数神经元的传递函数有各种各样的形式,但最常用的形式是高斯函数(radbas)。与前

29、面介绍的神经元不同,神经元radbas的输入为输入矢量p和权值矢量w之间的距离乘以阈值b。径向基传递函数可表示为如下形式:,径向基函数,从图中可以看出,n为0时,径向基函数输出最大值1,即权值向量w和输入向量p之间距离减小时,输出就会增加。也就是说,径向基函数对输入信号在局部产生响应。函数的输入信号n靠近函数的中央范围时,隐层节点将产生较大的输出。由此可以看出这种网络具有局部逼近能力,所以径向基函数网络也称为局部感知场网络。,径向基函数网络的结构,径向基函数网络包括隐层和输出层。输入信号传递到隐层,隐层有S1个神经元,节点函数为高斯函数;输出层有S2个神经元,节点函数通常是简单的线性函数。其结

30、构如图所示。,径向基函数网络的结构,4.2 径向基函数的工作原理解释,当输入向量加到输入端时,径向基层的每个神经元都会输出一个值,代表输入向量与神经元权值向量之间的接近程度。,如果输入向量与权值向量很接近,则径向基层的输出接近于1,经过第二层的线性神经元,输出值就更靠近第二层权值。 在这个过程中,如果只有一个径向基神经元的输出为1;而其他的神经元输出均为0或者接近于0,那么线性神经元层的输出,就相当于输出为1的神经元相对应的第二层权值的值。一般情况下,不止一个径向基神经元的输出为1,所以输出值也就会有所不同。,如果输入向量与权值向量相差很多,则径向基层的输出接近于0,经过第二层的线性神经元,输

31、出也接近于0。,4.3 径向基函数网络的构建,应用newrbe()函数可快速设计一个径向基函数网络,且使得设计误差为0,调用方式如下:net= newrbe( P, T, SPREAD) 其中P为输入向量,T为期望输出向量(目标值),SPREAD为径向基层的散布常数;缺省值为1。输出为一个径向基网络,其权值和阈值完全满足输入和期望值关系要求。,由newrbe()函数构建的径向基函数网络,径向基层(第一层)神经元数目等于输入向量的个数。径向基层的阈值设定为 0.8326/SPREAD,目的是使得加权输入为/SPRREAD时径向基层输出为0.5,阈值的设置决定了每个径向基神经元对于输入向量产生响应

32、的区域。例如,如果SPREAD为4,每个径向基神经元对应那些不小于0.5的第一层输出,其输入向量均在距离权值向量为4的区域内。由此看来,SPREAD应当足够大,使得神经元响应区域覆盖所有输入区间。,4.4 更有效的径向基函数网络设计,应用newrbe()函数设计网络时,径向基神经元的数目与输入向量的个数相等,那么在输入向量较多的情况下,则需要很多的神经元,这就给网络设计带来一定的难度。函数newrb()则能更有效地进行网络设计。 用径向基函数网络逼近函数时;newrb()函数可自动增加网络的隐层神经元数目,直到均方差满足精度或者神经元数目达到最大为止。调用方式如下: newrb (P,T,CO

33、AL,SPREAD)其中P,T,SPREAD变量意义同上,GOAL为训练精度。 函数newrb()的设计方法与函数newrbe()类似,惟一不同的是newrb()函数每一次循环只产生一个神经元,而每增加一个径向基神经元,都能最大程度的降低误差,如果未达到精度要求则继续增加神经元,满足精度要求后则网络设计成功。程序终止条件是满足精度要求或者达到最大神经元数目。,4.5 应用实例,径向基函数网络多用于函数逼近和分类问题的研究,本例来演示如何应用函数newrb()构建一个径向基网络,然后对一系列的数据点进行函数逼近。,问题的提出,假设如下的输入/输出样本,输入向量为-1,1 区间上等间隔的数组成的向

34、量P,相应的期望值向量为T。,P = -1:.1:1;T = -.9602 -.5770 -.0729 .3771 .6405 .6600 .4609 . .1336 -.2013 -.4344 -.5000 -.3930 -.1647 .0988 . .3072 .3960 .3449 .1816 -.0312 -.2189 -.3201;plot (P,T,+);title (训练样本);xlabel (输入向量 P);ylabel (目标向量 T);,以输入向量为横坐标,期望值为纵坐标,绘制训练用样本的数据点,如图所示。,我们的目的是找到一个函数能够满足这21个数据点的输入/输出关系,其

35、中一个方法就是通过构建径向基函数网络来进行曲线拟合。,eg = 0.02; % sum-squared error goalsc = 1; % spread constantnet = newrb (P, T, eg, sc);,2) 网络生成,应用newrb()函数可以快速构建一个径向基函数网络,并且网络自动根据输入向量和期望值进行调整,从而进行函数逼近,预先设定均方差精度eg以及散布常数sc。,3) 网络测试,将网络输出和期望值随输入向量变化的曲线绘制在一张图上,就可以看出网络设计是否能够做到函数逼近,如下页图所示。,plot ( P,T,+);xlabel (输入);X = -1:0.01:1;Y = sim (net, X);,hold on;plot(X,Y);hold off;legend(目标,输出),其中“+”点为样本数据点,从中可以看出,应用径向基函数网络进行函数逼近非常成功。,4.6 问题讨论,广义回归神经网络 (Generalized regression neural networks , 简称GRNN),用来实现函数逼近。,概率神经网络 (Probabilistic neural networks , 简称PNN),主要用于模式分类的问题研究。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报