matlab辅助神经网络设计.docx
《matlab辅助神经网络设计.docx》由会员分享,可在线阅读,更多相关《matlab辅助神经网络设计.docx(44页珍藏版)》请在冰豆网上搜索。
matlab辅助神经网络设计
第一节神经网络基本理论
一、人工神经网络概论
二、生物神经元模型
三、Matlab的神经网络工具包
第二节感知器
一、感知器神经元模型
二、感知器的网络结构
三、感知器神经网络的学习规则
四、感知器神经网络的训练
五、重要的感知器神经网络函数的使用方法
六、感知器神经网络应用举例
第三节线性神经网络
一、线性神经元模型
二、线性神经网络结构
三、线性神经学习网络的学习规则
四、线性神经网络训练
五、重要线性神经网络函数的使用方法
六、线性神经网络的应用举例
第四节BP网络
一、BP网络的网络结构
二、BP网络学习规则
三、BP网络的训练
四、重要BP神经网络函数的使用方法
五、BP网络的应用举例
第五节径向基函数网络
一、径向基函数神经网络结构
二、径向基函数的学习算法
三、重要径向基函数的函数使用方法
第六节反馈网络
一、Hopfield网络的结构与算法
二、Hopfield网络运行规则
三、重要的反馈网络函数
四、重要的自组织网络函数
五、反馈网络应用举例
第七节自组织网络
一、自组织特征映射的网络结构
二、自组织特征映射网络的学习
三、自组织特征映射网络的训练
四、重要的自组织网络函数
五、自组织网络应用举例
第一节神经网络基本理论
一、人工神经网络概论
近代神经生理学和神经解剖学的研究结果表明,人脑是由约一千多亿个神经元(大脑皮层约140多亿,小脑皮层约1000多亿)交织在一起的、极其复杂的网状结构,能完成智能、思维、情绪等高级精神活动,无论是脑科学还是智能科学的发展都促使人们对人脑(神经网络)的模拟展开了大量的工作,从而产生了人工神经网络这个全新的研究领域。
人工神经网络(ANNS)常常简称为神经网络(NNS),是以计算机网络系统模拟生物神经网络的智能计算系统,是对人脑或自然神经网络的若干基本特性的抽象和模拟。
网络上的每个结点相当于一个神经元,可以记忆(存储)、处理一定的信息,并与其它结点并行工作。
神经网络的研究最早要追述到40年代心理学家Mcculloch和数学家Pitts合作提出的兴奋与抑制型神经元模型和Hebb提出的神经元连接强度的修改规则,其成果至今仍是许多神经网络模型研究的基础。
50~60年代的代表性工作主要有Rosenblatt的感知器模型、Widrow的自适应网络元件Adaline。
然而在1969年Minsky和Papert合作发表的Perceptron一书中阐述了一种消极悲观的论点,在当时产生了极大的消极影响,加之数字计算机正处于全盛时期并在人工智能领域取得显著成就,这导致了70年代人工神经网络的研究处于空前的低潮阶段。
80年代以后,传统的VonNeumann数字计算机在模拟视听觉的人工智能方面遇到了物理上不可逾越的障碍。
与此同时Rumelhart、Mcclelland和Hopfield等人在神经网络领域取得了突破性进展,神经网络的热潮再次掀起。
目前较为流行的研究工作主要有:
前馈网络模型、反馈网络模型、自组织网络模型等方面的理论。
人工神经网络是在现代神经科学的基础上提出来的。
它虽然反映了人脑功能的基本特征,但远不是自然神经网络的逼真描写,而只是它的某种简化抽象和模拟。
求解一个问题是向人工神网络的某些结点输入信息,各结点处理后向其它结点输出,其它结点接受并处理后再输出,直到整个神经网工作完毕,输出最后结果。
如同生物的神经网络,并非所有神经元每次都一样地工作。
如视、听、摸、想不同的事件(输入不同),各神经元参与工作的程度不同。
当有声音时,处理声音的听觉神经元就要全力工作,视觉、触觉神经元基本不工作,主管思维的神经元部分参与工作;阅读时,听觉神经元基本不工作。
在人工神经网络中以加权值控制结点参与工作的程度。
正权值相当于神经元突触受到刺激而兴奋,负权值相当于受到抑制而使神经元麻痹直到完全不工作。
如果通过一个样板问题“教会”人工神经网络处理这个问题,即通过“学习”而使各结点的加权值得到肯定,那么,这一类的问题它都可以解。
好的学习算法会使它不断积累知识,根据不同的问题自动调整一组加权值,使它具有良好的自适应性。
此外,它本来就是一部分结点参与工作。
当某结点出故障时,它就让功能相近的其它结点顶替有故障结点参与工作,使系统不致中断。
所以,它有很强的容错能力。
人工神经网络通过样板的“学习和培训”,可记忆客观事物在空间、时间方面比较复杂的关系,适合于解决各类预测、分类、评估匹配、识别等问题。
例如,将人工神经网络上的各个结点模拟各地气象站,根据某一时刻的采样参数(压强、湿度、风速、温度),同时计算后将结果输出到下一个气象站,则可模拟出未来气候参数的变化,作出准确预报。
即使有突变参数(如风暴,寒流)也能正确计算。
所以,人工神经网络在经济分析、市场预测、金融趋势、化工最优过程、航空航天器的飞行控制、医学、环境保护等领域都有应用的前景。
人工神经网络的特点和优越性使它近年来引起人们的极大关注,主要表现在三个方面:
第一,具有自学习功能。
例如实现图像识别时,只需把许多不同的图像样板和对应的应识别的结果输入人工神经网络,网络就会通过自学习功能,慢慢学会识别类似的图像。
自学习功能对于预测有特别重要的意义。
人工神经网络计算机将为人类提供经济预测、市场预测、效益预测,其前途是很远大的。
第二,具有联想存储功能。
人的大脑是具有联想功能的。
如果有人和你提起你幼年的同学张某某,你就会联想起张某某的许多事情。
用人工神经网络的反馈网络就可以实现这种联想。
第三,具有高速寻找最优解的能力。
寻找一个复杂问题的最优解,往往需要很大的计算量,利用一个针对某问题而设计的人工神经网络,发挥计算机的高速运算能力,可能很快找到最优解。
人工神经网络是未来微电子技术应用的新领域,智能计算机的构成就是作为主机的冯·诺依曼计算机与作为智能外围机的人工神经网络的结合。
二、生物神经元模型
神经元是脑组织的基本单元,其结构如图1所示,神经元由三部分构成:
细胞体,树突和轴突;每一部分虽具有各自的功能,但相互之间是互补的。
树突是细胞的输入端,通过细胞体间联结的节点“突触”接受四周细胞传出的神经冲动;轴突相当于细胞的输出端,其端部的众多神经未梢为信号的输出端子,用于传出神经冲动。
神经元具有兴奋和抑制的两种工作状态。
当传入的神经冲动,使细胞膜电位升高到阀值(约为40mV)时,细胞进入兴奋状态,产生神经冲动,由轴突输出。
相反,若传入的神经冲动,使细胞膜电位下降到低于阀值时,细胞进入抑制状态,没有神经冲动输出。
图1生物神经元结构
二、人工神经元模型
人工神经元模型是以大脑神经细胞的活动规律为原理的,反映了大脑神经细胞的某些基本特征,但不是也不可能是人脑细胞的真实再现,从数学的角度而言,它是对人脑细胞的高度抽象和简化的结构模型。
虽然人工神经网络有许多种类型,但其基本单元—人工神经元是基本相同的。
如图2是一个典型的人工神经元模型:
图2人工神经元模型
神经元模型相当于一个多输入单输出的非线性阀值元件,X1,X2,…,Xn表示神经元的n个输入,W1,W2,…,Wn表示神经元之间的连接强度,称为连接权,
称为神经元的激活值,O表示这个神经元的输出,每个神经元有一个阀值θ,如果神经元输入信号的加权和超过θ,神经元就处于兴奋状态。
以数学表达式描述为:
O=f(
-θ)
三、Matlab的神经网络工具包
由于神经网络自身的特点,计算中经常涉及到大量的训练样本数据、复杂的运算操作、繁琐的程序设计等问题。
对此,具有强大功能的数学软件Matlab,为我们提供了神经网络工具箱NeuralNetwoksToolbox(NNT)及丰富的函数命令。
NNT是进行神经网络训练和仿真的优良平台。
常用来对网络进行初始化、仿真、设计、调整、优化。
集成化的处理方式、友好的界面、形象的演示过程、简易的操作,为神经网络应用者节约了大量的不必要的编程时间,使得非专业人士应用神经网络成为了可能。
Matlab是Mathworks公司开发的工程计算软件包,其中有一个神经网络工具包,可以用来方便地创建各种神经网络,对数据进行学习和模拟输出。
Matlab中普遍采用的是物理和工程学中强有力的矩阵描述的语言,简洁优美。
第二节感知器
感知器(Pereceptron)是一种特殊的神经网络模型,是由美国心理学家F.Rosenblatt于1958年提出的,一层为输入层,另一层具有计算单元,感知器特别适合于简单的模式分类问题,也可用于基于模式分类的学习控制和多模态控制中。
一、感知器神经元模型
感知器神经元通过对权值的训练,可以使感知器神经元的输出能代表对输入模式进行的分类,图2.1为感知器神经元模型。
图2.1感知器神经元模型
感知器神经元的每一个输入都对应于一个合适的权值,所有的输入与其对应权值的加权和作为阀值函数的输入。
由于阀值函数的引入,从而使得感知器可以将输入向量分为两个区域,通常阀函数采用双极阶跃函数,如:
(2.1)
而感知器神经元模型的实际输出为
(2.2)
其中b为阀值
二、感知器的网络结构
图2.2所描述的是一个简单的感知器网络结构,输入层有R个输入,Q个输出,通过权值wij与s个感知器神经元连接组成的感知器神经网络。
根据网络结构,可以写出感知器处理单元对其输入的加权和操作,即:
(2.3)
而其输出ai为
ai=f(ni+bi)(2.4)
由式2.1易知
(2.5)
则当输入ni+bi大于等于0,即有ni≥-bi时,感知器的输出为1;否则输出为0。
上面所述的单层感知器神经网络是不可能解决线性不可分的输入向量分类问题,也不能推广到一般的前向网络中去。
为解决这一问题,我们可以设计多层感知器神经网络以实现任意形状的划分。
图2.3描述了一个双层感知器神经网络。
其工作方式与单层感知器网络一样,只不过是增加了一层而已,具体的内容这里不做讨论。
三、感知器神经网络的学习规则
感知器的学习规则主要是通过调整网络层的权值和阀值以便能够地网络的输入向量进行正确的分类。
如图2.2所示的输入向量P、输出和量a和目标向量为t的感知器神经网络,感知器的学习规则是根据以下输出矢量a可能出现的几种情况未进行参与调整的:
1)如果第i个神经元的输出是正确的,即有ai=t1,则与第i个神经元联接的权值和阀值保持不变。
2)如果第i个神经元的输出是不正确,应该有两种情况。
i)实际输出为0,而理想输出为1,即有ai=0,而ti=1,则所有的输入j对权值和阀值进行调整,修正值Δw1j=pj,Δbj=1。
ii)实际输出为1,而期望输出为0,即有ai=1,而ti=0,则对所有的输入j进行权值和阀值调整,Δw1j=-pj,Δbi=-1。
基于感知器误差e=t-a,感知器学习规则可望写为:
Δw1j=ei·pj
可以证明当前输入样本来自线性可分的模式时,上述学习算法在有限步同收敛,这时所得的权值能对所有样本正确分类,这一结论被称为感知器收敛定理。
四、感知器神经网络的训练
要使前向神经网络模型实现某种功能,必须对它进行训练,让它逐步学会要做的事情,并把所学到的知识记忆在网络的权值中。
感知器神经网络的训练是采用由一组样本组成的集合来进行。
在训练期间,将这些样本重复输入,通过调整权值使感知器的输出达到所要求的理想输出。
感知器的训练主要是反复对感知器神经网络进行仿真和学习,最终得到最优的网络阀值和权值。
我们可以用以下方法训练网络:
1)确定我们所解决的问题的输入向量P、目标向量t,并确定各向量的维数,以及网络结构大小、神经元数目。
假定我们采用图2.2的网络结构。
2)初始化:
权值向量w和阀值向量b分别赋予[-1,+1]之间的随机值,并且给出训练的最大次数。
3)根据输入向量P、最新权值向量w和阀值向量b,计算网络输出向量a。
4)检查感知器输出向量与目标向量是否一致,或者是否达到了最大的训练次数,如果是则结束训练,否则转入(5)。
5)根据感知器学习规则调查权向量,并返回3)。
五、重要的感知器神经网络函数的使用方法
对于感知器的初始化、训练、仿真,在MATLABP神经网络工具箱中分别提供了init(),trainp()和sim()函数。
1.初始化函数init()
感知器初始化函数init()可得到R个输入,S个神经元数的感知器层的权值和阀值,其调用格式为:
[w,b]=init(R,S)
另外,也可以利用输入向量P和目标向量t来初始化。
[w,b]=init(p,t)
在介绍trainp()函数前,让我们先介绍一下训练的控制参数tp。
tp=[disp_freqmax_epoch]
其中disp_freq指定两次显示间训练次数,缺省值为1;map_epoch指定训练的最大次数,缺省值为100。
调用训练函数trainp()函数后又得到新的权值矩阵,阀值向量以及误差te。
trainp()函数所需要的输入变量为:
输入向量P、目标向量t以及网络的初始权值和阀值,训练的控制参数tp。
调用格式为:
[w,b,te]=trainp(w,b,p,t,tp)
由于函数trainp()并不能保证感知器网络所得到的网络权值和阀值达到要求。
因此,在训练完后,要用下列验证语句验证一下。
a=sim(p,w,b);
ifall(a==t),disp(′Itworks!
′),end
假如网络不能成功运行,就可以继续运用trainp()函数对网络进行训练。
经足够的训练后,网络仍达不到要求,那么就应当认真分析一下,感知器网络是否适合于这个问题。
3.仿真函数sim()
sim()函数主要用于计算网络输出。
它的调用比较简单。
a=sim(p,w,b)
六、感知器神经网络应用举例
为了便于消化与理解感知器神经网络的四只问题,下面将给出一个具体的问题进行分析,问题的描述如下:
两种蠓虫Af和Apf已由生物学家W.L.Grogan与w.w.Wirth(1981)根据它们触角长度和翼长中以区分。
见表2.1中9Af蠓和6只Apf蠓的数据。
根据给出的触角长度和翼长可识别出一只标本是Af还是Apf。
1.给定一只Af或者Apf族的蒙,你如何正确地区分它属于哪一族?
2.将你的方法用于触角长和翼中分别为(1.24,1.80)、(1.28,1.84)、(1.40,2.04)的三个标本
表2.1
Af
触重长
1.24
1.36
1.38
1.378
1.38
1.40
1.48
1.54
1.56
翼长
1.72
1.74
1.64
1.82
1.90
1.70
1.70
1.82
2.08
Apf
触角长
1.14
1.18
1.20
1.26
1.28
1.30
翼长
1.78
1.96
1.86
2.00
2.00
1.96
输入向量为:
p=[1.241.361.381.3781.381.401.481.541.561.141.181.201.261.281.30;1.721.741.641.821.901.701.701.822.081.781.961.862.002.001.96]
目标向量为:
t=[111111111000000]
图形显示,目标值1对应的用“+”、目标值0对应的用“o”来表示:
plotpv(p,t)
为解决该问题,利用函数newp构造输入量在[0,2.5]之间的感知器神经网络模型:
net=newp([02.5;02.5],1)
初始化网络:
net=init(net)
利用函数adapt调整网络的权值和阀值,直到误差为0时训练结束:
[net,y,e]=adapt(net,p,t)
训练结束后可得如图2.5的分类方式,可见感知器网络将样本正确地分成两类:
图2.5网络训练结果
感知器网络训练结束后,可以利用函数sim进行仿真,解决实际的分类问题:
p1=[1.24;1.80]
a1=sim(net,p1)
p2=[1.28;1.84]
a2=sim(net,p2)
p3=[1.40;2.04]
a3=sim(net,p3)
网络仿真结果为:
a1=0a2=0a3=0
第三节线性神经网络
线性神经网络是最简单的一种神经元网络,由一个或多个线性神经元构成。
1959年,美国工程师B.widrow和M.Hoft提出自适应线性元件(Adaptivelinearelement,简称Adaline)是线性神经网络的最早典型代表。
它是感知器的变化形式,尤其在修正权矢量的方法上进行了改进,不仅提高了训练收敛速度,而且提高了训练精度。
线性神经网络与感知器神经网络的主要不同之处在于其每个神经元的传递函数为线性函数,它允许输出任意值,而不是象感知器中只能输出0或1。
此外,线性神经网络一般采用Widrow-Hoff(简称W-H)学习规则或者最小场方差(LeastmeanSquare,简称LMS)规则来调整网络的权值和阀值。
线性神经网络的主要用途是线性逼近一个函数表达式,具有联想功能。
另外,它还适用于信号处理滤波、预测、模式识别和控制等方面。
一、线性神经元模型
线性神经元可以训练学习一个与之对应的输入/输出函数关系,或线性逼近任意一个非线性函数,但它不能产生任何非线性的计算特性。
图3.1描述了一个具有R个输入的由纯线性函数组成的线性神经元。
图3.1线性神经元模型
由于线性神经网络中神经元的传递函数为线性函数,其输入与输出之间是简单的比例关系:
a=g(w*p,b)
其中函数g(x)为线性函数。
二、线性神经网络结构
如图3.2描述了一个由S个神经元相并联形成一层网络,这种网络也称为Madaline网络。
W-H学习规则只能训练单层的线性神经网络,但这并不是什么严重问题。
因为对线性神经网络而言,完全可以设计出一个性能完全相当的单层线性神经网络。
三、线性神经学习网络的学习规则
前面我们提到过,线性神经网络采用W-H学习规则。
W-H学习规则是Widrow是Hoft提出的用来求得权值和阀值的修正值的学习规则。
首先要定义一个线性网络的输出误差函数:
E(w,b)=
(t―a)2=
(t―w*p)23.1
由式3.1可看出,线性网络具有抛物线型误差函数所形成的误差表面。
所以只有一个误差最小值。
通过W-H学习规则来计算权值和偏差的变化,并使网络的误差平方和最小化,总能够训练一个网络的误差趋于最小值。
这可通过沿着相对于误差平方和最速下降方向连续调整网络的权值和阀值来实现。
根据梯度下降法,权矢量的修正值正比于当前位置上E(w,b)的梯度,对于第i输出节点为:
3.2
或表示为:
3.3
3.4
这里δi定义为第i个输出节点的误差:
δi=ti―ai3.5
式3.3称为W-H学习规则。
W-H学习规则的权值变化量正比于网络的输出误差及网络的输入向量。
它不需求导数,所以算法简单,又具有收敛速度快和精度高的优点。
式3.3中的称为学习率,学习率的选取可以适当防止学习过程中产生振荡,提高收敛速度和精度。
四、线性神经网络训练
首先给线性神经网络提供输入向量P,计算线性网络层的输出向量a,并求得误差e=t―a;
然后比较输出的误差平方和是否小于期望的误差平方和,如果是,则停止训练;否则,采用W-H规则调整权值和阀值,反复进行。
如果经过训练网络不能达到期望目标,可以继续对网络进行训练。
经过足够的训练后,网络还是达不到要求。
那么就仔细地分析一下,所要解决的问题,是否适合于线性神经网络。
五、重要线性神经网络函数的使用方法
在MATLAB神经网络工具箱中提供了基于线性神经网络的初始化函数initlin()、设计函数solvelin()、仿真函数simulin()以及训练函数trainwh和adaptwh。
下面我们将分别介绍多种函数的使用方法。
1.初始化函数initlin()
函数initlin()对线性神经网络初始化时,将权值和阀值取为绝对值很小的数。
其使用格式
[w,b]=initlin(R,S)
R为输入数,S为神经元数。
另外,R和S也可用输入向量P和目标向量t来代替,即
[w,b]=initlin(p,t)
2.设计函数solvelin()
与大多数其它神经网络不同,只要已知其输入向量P和目标向量t,就可以直接设计出线性神经网络使得线性神经网络的权值矩阵误差最小。
其调用命令如下:
[w,b]=solvelin(p,t);
3.仿真函数simulin()
函数simulin()可得到线性网络层的输出
a=simulin(p,w,b)
其中a为输出向量,b为阀值向量
4.训练函数trainwh和adaptwh()
线性神经网络的训练函数有两种:
trainwh()和adaptwh()。
其中函数trainwh可以对线性神经网络进行离线训练;而函数adaptwh()可以对线性神经网络进行在线自适应训练。
利用trainwh()函数可以得到网络的权矩阵w,阀值向量b,实际训练次数te以及训练过程中网络的误差平方和lr。
[w,b,te,lr]=trainwh(w,b,p,t,tp)
输入变量中训练参数tp为:
·tp
(1)指定两次更新显示间的训练次数,其缺省值为25;
·tp
(2)指定训练的最大次数,其缺省值为100;
·tp(3)指定误差平方和指标,其缺省值为0.02;
·tp(4)指定学习速率,其缺省值可由maxlinlr()函数(此函数主要用于计算采用W-H规则训练线性网络的最大的稳定的分辨率)得到。
而利用函数adaptwh()可以得到网络的输出a、误差e、权值矩阵w和阀值向量b。
[a,e,w,b]=adaptwh(w,b,p,t,lr)
输入变量lr为学习速率,学习速率lr为可选参数,其缺省值为1.0。
另外,函数maxlinlr()的调用格式为:
lr=maxlinlr(p);
六、线性神经网络的应用举例
为了理解线性神经网络的理论及其应用问题,下面给出一个实际问题进行分析,设计一个线性神经网络,用于信号仿真及信号预测。
首先输入信号样本为:
time=1:
0.0025:
5;
p=sin(sin(time)*time*10);
目标信号为:
t=p*2+2;
图形显示样本信号的规律为:
plot(time,p,time,t,’---’)
title(‘InputandTargetSignals’)
xlabel(‘Time’)
ylabel(‘Input__Target__’)
图3.3样本信号
利用输入样本信号和理想输出进行线性神经网络初始化:
[w,b]=initlin(p,t)
然后利用函数adaptwh对构造的网络进行训练,
lr=0.01;[a,e,w,b]=adaptwh(w,b,p,t,lr)
其中lr为学习率,a为网络的输出,e为误差。
仿真结果与目标信号对比分析:
plot(time,a,time,t,‘--’)
title(‘OutputandTargetSignals’)
xlabel(‘Time’);ylabel(‘Output__Target__’)
图3.4仿真结果与目标信号对比分析
误差分析:
pl