人工智能BP神经网络算法简单实现Word文档格式.docx
《人工智能BP神经网络算法简单实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《人工智能BP神经网络算法简单实现Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
(3)赵青提出一种分层遗传算法与BP算法相结合的前馈神经网络学习算法。
将分层遗传算法引入到前馈神经网络权值和阈值的早期训练中,再用BP算法对前期训练所得性能较优的网络权值、阈值进行二次训练得到最终结果,该混合学习算法能够较快地收敛到全局最优解;
(4)胡洁等提出一种快速且全局收敛的神经网络学习算法,并且对该优化算法的全局收敛性进行分析和详细证明,说明提出的算法比标准的算法效率更高且更精确。
尽管国内外的很多学者对BP算法进行了改进,但这些算法只有在某些特定要求下才有效,并且对网络训练时要加强对网络的监控,网络的结构和参数是要通过多次的实验才能确定,这些都导致了网络训练时间的增加,降低了网络收敛速度。
因此,还需要进一步研究神经网络学习算法,提高网络收敛速度,使网络能够更好地应用于实际。
2神经网络基础
2.1人工神经网络概念
2.1.1生物神经元模型
生物神经系统是一个有高度组织和相互作用的数量巨大的细胞组织群体。
人类大脑的神经细胞大约有1010一10,‘个。
神经细胞也称神经元,是神经系统的基本单元,它们按不同的结合方式构成了复杂的神经网络。
通过神经元及其连接的可塑性,使得大脑具有学习、记忆和认知等各种智能。
人工神经网络的研究出发点是以生物神经元学说为基础的。
生物神经元学说认为,神经细胞即神经元是神经系统中独立的营养和功能单元。
其独立性是指每一个神经元均有自己的核和自己的分界线或原生质膜。
生物神经系统包括中枢神经系统和大脑,均是由各类神经元组成。
生物神经元之间的相互连接让信息传递的部位称为突触(SynaPse)。
突触按其传递信息的不同机制,可分为化学突触和电突触,其中化学突触占大多数,其神经冲动传递借助于化学递质的作用。
神经元是基本的信息处理单元。
它主要由树突、轴突和突触组成。
其结构大致描述如图1所示。
图1生物神经元结构
2.1.2神经网络模型
目前人们提出的神经元模型己有很多,其中提出最早且影响最大的是1943年心理学家McCulloch和科学家W.PittS在分析总结神经元基本特性的基础上首先提出的M一P模型,如图2所示,它是大多数神经网络模型的基础。
图2模型
Wji—代表神经元i与神经元j之间的连接强度(模拟生物神经元之间突触连接强度),称之为连接权。
Ui—代表神经元i的活跃值,即神经元状态。
Vi—代表神经元j的输出,即是神经元i的一个输入。
θj—代表神经元的阀值。
函数f表达了神经元的输入输出特性。
在M-P模型中,f定义为阶跳函数:
2.1.3神经网络结构
神经网络的网络结构可以归为以下几类:
l)前馈式网络:
该网络结构是分层排列的,每一层的神经元输出只与下一层神经元连接。
2)输出反馈的前馈式网络:
该网络结构与前馈式网络的不同之处在于这种网络存在着一个从输出层到输入层的反馈回路。
3)前馈式内层互连网络:
该网络结构中,同一层之间存在着相互关联,神经元之间有相互的制约关系,但从层与层之间的关系来看仍然是前馈式的网络结构,许多自组织神经网络大多具有这种结构。
4)反馈型全互连网络:
在该网络中,每个神经元的输出都和其他神经元相连,从而形成了动态的反馈关系,该网络结构具有关于能量函数的自寻优能力。
5)反馈型局部互连网络:
该网络中,每个神经元只和其周围若干层的神经元发生互连关系,形成局部反馈,从整体上看是一种网状结构。
2.1.4神经网络的学习
神经网络的学习也称为训练,指的是通过神经网络所在环境的刺激作用调整神经网络的自由参数,使神经网络以一种新的方式对外部环境做出反应的一个过程。
能够从环境中学习和在学习中提高自身性能是神经网络的最有意义的性质。
神经网络经过反复学习对其环境更为了解。
学习算法是指针对学习问题的明确规则集合。
学习类型是由参数变化发生的形式决定的,不同的学习算法对神经元的突触权值调整的表达式有所不同。
2.2BP神经网络
2.2.1Bp神经网络的定义、特点及应用
采用误差反向传播算法(Bp:
ErrorBack一propagationAlgorithm)的多层前馈人工神经网络(或称多层感知器,MLP:
Multiuyerperceptron)称为Bp神经网络或BP神经网络模型。
BP神经网络具有明显的特点:
l)分布式的信息存储方式
神经网络是以各个处理器本身的状态和它们之间的连接形式存储信息的,一个信息不是存储在一个地方,而是按内容分布在整个网络上。
网络上某一处不是只存储一个外部信息,而是存储了多个信息的部分内容。
整个网络对多个信息加工后才存储到网络各处,因此,它是一种分布式存储方式。
2)大规模并行处理
BP神经网络信息的存储与处理(计算)是合二为一的,即信息的存储体现在神经元互连的分布上,并以大规模并行分布方式处理为主,比串行离散符号处理的现代数字计算机优越。
3)自学习和自适应性
BP神经网络各层直接的连接权值具有一定的可调性,网络可以通过训练和学习来确定网络的权值,呈现出很强的对环境的自适应和对外界事物的自学习能力。
4)较强的鲁棒性和容错性
BP神经网络分布式的信息存储方式,使其具有较强的容错性和联想记忆功能,这样如果某一部分的信息丢失或损坏,网络仍能恢复出原来完整的信息,系统仍能运行。
2.2.2BP神经网络结构
BP神经网络通常由输入层、隐含层和输出层组成,层与层之间全互连,每层节点之间不相连。
它的输入层节点的个数通常取输入向量的维数,输出层节点的个数通常取输出向量的维数,隐层节点个数目前尚无确定的标准,需通过反复试凑的方法,然后得到最终结果。
根据Kolmogor。
、定瑾,具有一个隐层(隐层节点足够多)的三层BP神经网络能在闭集上以任意精度逼近任意非线性连续函数。
BP网络是一种多层前馈神经网络,由输入层、隐层和输出层组成。
层与层之间采用全互连方式,同一层之间不存在相互连接,隐层可以有一个或多个。
构造一个BP网络需要确定其处理单元————神经元的特性和网络的拓扑结构。
神经元是神经网络最基本的处理单元,隐层中的神经元采用S型变换函数,输出层的神经元可采用S型或线性型变换函数。
图1为一个典型的三层BP网络的拓扑结构。
神经网络学习采用改进BP算法,学习过程由前向计算过程和误差反向传播过程组成。
在前向计算过程中,输入信息从输入层经隐层逐层计算,并传向输出层,每层神经元的状态只影响下一层神经元的状态。
如输出层不能得到期望的输出,则转入误差反向传播过程,误差信号沿原来的连接通路返回,通过修改各层的神经元的权值,使得网络系统误差最小。
最终网络的实际输出与各自所对应的期望输出逼近。
3MATLAB6.1神经网络工具箱及其相关函数简介
BP神经网络设计时,需要确定网络的拓扑结构(隐层的层数及各层的神经元的数目)及其神经元的变换函数,网络的初始化,误差计算,学习规则及网络训练,训练参数及训练样本的归一化处理等方面的工作,在MATLAB6.1神经网络工具箱中,有对应的函数完成所涉及到的全部计算任务。
3.1设计BP网络的相关函数
1)神经元变换函数:
线性变换函数purelin、对数S型变换函数logsin、双曲线正切S型变换函数tansig。
2)BP网络生成函数newff:
它是用来生成BP神经网络并进行初始化,可以确定网络层数、每层中的神经元数和变换函数。
这个函数有六个输入参数,分别是:
输入向量的范围、网络结构、各层变换函数、训练算法函数、学习函数和性能函数。
输出参数为所生成的BP神经网络名net。
其语法为:
net=newff(PR,[S1,S2…,SN1],[TF1,TF2,…TFN1],BTF,BLF,PF)
其中:
PR是一个由每个输入向量的最大最小值构成的Rx2矩阵,R为输入神经元数目。
Si是第i层网络的神经元个数,网络共有N1层。
TFi是第i层网络神经元的变换函数,缺省为tansig.
BTF是BP训练算法函数,缺省为trainlm.
BLF是学习函数,缺省为learngdm.
PF是性能函数,缺省为mse.
newff在确定网络结构后会自动调用初始化函数init,用缺省参数来初始化网络中各个权值和阈值,产生一个可训练的前馈网络,即该函数的返回值net。
在MATLAB中,神经网络net当做对象(object)处理,其属性用结构来定义。
3)初始化函数init:
它是对网络的连接权值和阈值进行初始化。
newff在创建网络对象的同时,自动调动初始化函数,根据缺省的参数对网络进行连接权值和阈值初始化。
4)学习函数:
提供多种学习函数,用来修正权值和阈值。
基本的学习函数有:
learngd、learngdm。
5)性能函数:
它是用来计算网络的输出误差。
为训练提供判据,包括:
函数mae,计算网络的平均绝对误差。
函数mse,计算网络的均方误差。
函数msereg,计算均方误差和权/阈值的加权。
函数sse,计算网络的均方误差和。
6)训练函数train:
BP网络的训练初始化后,可对它进行训练。
在MATLAB中训练网络有两类模式:
逐变模式和批处理模式。
在逐变模式中,每输入一个学习样本就根据网络性能指标函数对连接权值和阈值更新一次。
在批处理模式中,所有的学习样本都学习完成后,连接权值和阈值才被更新一次。
使用批处理模式不需要为每一层的连接权值和阈值设定训练函数,而只需为整个网络指定一个训练函数,使用起来相对方便,而且许多改进的快速训练算法只能采用批处理模式。
训练网络的函数是train按设置的net.trainFcn和net.trainParam参数来训练网络,采用批处理方式进行网络的权值和阈值修正,最终达到设定的网络性能指标的要求。
7)BP训练算法函数:
它是根据网络的输入、目标期望输出,对由函数newff生成的BP网络进行计算,修正其权值和阈值,最终达到设定的网络性能指标的要求。
不同的训练算法函数对应不同的训练算法,如traingd对应最基本梯度下降法。
traingdm带有动量项的梯度下降法。
traingdx带有采用动量项的自适应算法。
用共轭梯度法进行训练的函数有:
traincgf(采用Fletcher-Reeves搜索技术)、traincgp(采用Polak-Ribiers搜索技术)、traincgb(采用Powell-Beale搜索技术)。
trainbfg是基于拟牛顿法的训练函数。
trainlm是用Levenberg-Marquardt数值优化法来实现误差反传算法的。
各算法的快慢及内存要求依问题的复杂程度、训练集大小、网络的大小及误差要求的不同而有所不同。
一般来讲,对于含有几百个权重的网络,Levenberg-Marquardt算法有最快的收敛速度。
该算法需要大的内存,可通过增大参数mem-reduc的值来减少内存的使用量。
需要注意的是:
减少内存使用量实际是通过将雅可比矩阵分解为一个个小的亚矩阵来实现的,每次只计算其中一个亚矩阵,这势必增加计算时间,所以,如果有足够的内存,应该将mem-reduc参数设为1,即每次都计算整个雅可比矩阵。
拟牛顿算法的速度仅次于Levenberg-Marquardt算法而比共轭梯度法的速度快,内存的需要量也介于这二者之间。
在共轭梯度法中,traincgb需要的内存数量最多,但通常也能最快收敛。
总地来讲,基于共轭梯度法、拟牛顿算法和Levenberg-Marquardt法等数值优化算法的训练函数的效率比基于启发式算法的traingd、traingdm、traingdx的效率高。
以上的训练算法函数均在网络生成函数newff中预先设置。
8)仿真函数sim:
可以用来计算网络在给定输入下的输出。
9)绘图函数poltperf:
可以用来计算网络性能曲线。
3.2数据预处理
如果对神经网络的输入和输出数据进行一定的预处理,可以加快网络的训练速度。
MATLAB提供的预处理方法有:
归一化处理(将每组数据都变为-1至1之间数,所涉及的函数有premnmx、postmnmx、tramnmx)、标准化处理(将每组数据都为均值为0,方差为1的一组数据,所涉及的函数有prestd、poststd、trastd)和主成分分析(进行正交处理,减少输入数据的维数,所涉及的函数有prepca、trapca)。
下面以归一化处理为例说明其用法,对于输入矩阵p和输出矩阵t进行归一化处理的语句为:
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t)。
训练时应该用归一化之后的数据,即:
net=train(net,pn,tn)。
训练结束后还应对网络的输出an=sim(net,pn)作如下处理:
a=postmnmx(an,mint,maxt)。
当用训练好的网络对新数据pnew进行预测时,也应作相应的处理:
pnewn=tramnmx(pnew,minp,maxp)。
anewn=sim(net,pnewn)。
anew=postmnmx(anew,mint,maxt)。
3.3训练数据的导入方法
要对BP网络进行训练,必须准备训练样本。
对样本数据的获取,有以下几种方法供选择,具体采用那种方法,取决于数据的多少,数据文件的格式等。
用元素列表方式直接输入数据。
创建数据文件,通过MATLAB提供的装载数据函数,从数据文件中读取。
函数load适合从MAT文件、ASCII文件中读取数据。
MATLABI/O函数适合从其它应用中的数据文件中读取数据。
还可以通过数据输入向导(ImportWizard)从文件或剪贴板中读取数据,单击File菜单下的“ImportData...”将出现“ImportWizard”窗口,通过该窗口进行设置,该方法不适合从M文件中读取数据。
4BP神经网络的MATLAB实现
4.1网络设计步骤
在进行BP神经网络设计时,需要考虑以下问题:
网络的拓扑结构(隐层的层数及各层的神经元的数目)。
神经元的变换函数选取。
网络的初始化(连接权值和阈值的初始化)。
训练参数设置。
训练样本的归一化处理。
样本数据导入方式等。
根据以上分析可知,对于网络的实现有四个基本的步骤:
网络建立:
通过函数newff实现,它根据样本数据自动确定输入层、输出层的神经元数目。
隐层神经元数目以及隐层的层数、隐层和输出层的变换函数、训练算法函数需由用户确定。
初始化。
通过函数init实现,当newff在创建网络对象的同时,自动调动初始化函数init,根据缺省的参数对网络进行连接权值和阈值初始化。
网络训练:
通过函数train实现,它根据样本的输入矢量P、目标矢量T。
和预先已设置好的训练函数的参数。
对网络进行训练。
网络仿真:
通过函数sim实现,它根据已训练好的网络,对测试数据进行仿真计算。
4.2设计实例
利用BP神经网络来完成非线性函数的逼近任务
样本数据如下:
输入X
输出D
4
8
2
1
5
3
9
6
10
7
看到期望输出的范围超出,输出层神经元函数利用线性函数作为转移函数。
程序如下:
clear。
clc。
X=-1:
0.1:
1。
D=[-0.9602-0.5770-0.07290.37710.64050.66000.4609...
0.1336-0.2013-0.4344-0.5000-0.3930-0.1647-.0988...
0.30720.39600.34490.1816-0.312-0.2189-0.3201]。
figure。
plot(X,D,'
*'
)。
%绘制原始数据分布图(图3)
net=newff([-11],[51],{'
tansig'
'
})。
net.trainParam.epochs=100。
%训练的最大次数
net.trainParam.goal=0.005。
%全局最小误差
net=train(net,X,D)。
O=sim(net,X)。
X,O)。
%绘制最后得到的结果和误差曲线
V=net.iw{1,1}%输入层到中间层权值
theta1=net.b{1}%中间层各神经元阀值
W=net.lw{2,1}%中间层到输出层权值
theta2=net.b{2}%神经元各神经元阀值
运行结果如下:
图3原始数据分布图
图4训练结果
图5matlab神经网络运行状态
由图5可以看出,经过多次训练以后,得出图3、4的结果只需要经过8次训练即可满足精度要求。
训练次数:
8次
用时:
〈1s
误差:
0.00299〈0.0500