基于BP神经网络的函数拟合算法研究Word文件下载.docx
《基于BP神经网络的函数拟合算法研究Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于BP神经网络的函数拟合算法研究Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
因此,本文将采用神经网络进行函数拟合研究[1],并充分分析拟合的效率以及存在的问题。
1.2研究现状
1.2.1函数拟合的工具及方法
近几十年来,用来进行函数拟合的数学工具,已发生了巨大的变化,从19世纪初的傅里叶(Fourier)理论[2]到20世纪60年代的神经网络理论,再到近10多年来产生的小波理论、多小波理论[3]及小波神经网络等。
(1)Fourier变换的函数拟合
傅里叶(Fourier)变换能将满足一定条件的某个函数表示成三角函数(正弦函数或余弦函数)或者它们的积分的线性组合。
在不同的研究领域,Fourier变换具有多种不同的变体形式,如连续Fourier变换和离散Fourier变换。
Fourier变换的线性性质、频移性质、微分关系、卷积特性等基本性质决定了它是一种很好的函数拟合工具。
(2)小波变换的函数拟合[4]
小波变换是当前应用数学和工程学科中一个迅速发展的新领域,经过近10年的探索研究,重要的数学形式化体系已经建立,理论基础更加扎实。
传统的信号理论,是建立在Fourier分析基础上的,而Fourier变换作为一种全局性的变化,其有一定的局限性。
在实际应用中人们开始对Fourier变换进行各种改进,小波分析由此产生了。
小波分析是一种新兴的数学分支,它是泛函数、Fourier分析、调和分析、数值分析的最完美的结晶;
在应用领域,特别是在信号处理、图像处理、语音处理以及众多非线性科学领域,它被认为是继Fourier分析之后的又一有效的时频分析方法。
小波变换是指以某些特殊函数为基将数据过程或数据系列变换为级数系列以发现它的类似频谱的特征,从而实现数据处理。
(3)多小波理论[2]的函数拟合
作为小波理论发展的一个重要方向----多小波,不仅保持了单小波的优点,而且克服了它的缺点。
使得小波分析又一次形成研究热潮,成为国际研究热点。
多小波具有对称性、拟合性和插值性等特性。
函数拟合工具在实际应用中已被广泛运用,可以根据不同类型的函数,选择相应的拟合工具来进行拟合。
总的说来,函数拟合工具中函数的特性决定了最适宜拟合的函数类型和拟合的效果。
1.2.2神经网络的发展现状
神经网络用于函数拟合提供了一种不同于传统理论的方法,即神经网络函数拟合的研究将前馈网络与函数拟合有机地结合起来。
从理论上对神经网络的非线性拟合能力进行研究就是研究以前馈网络为代表的网络结构。
神经网络拟合能力的研究离不开人工神经网络长久而又曲折的发展历史。
1987年,Hecht等人指出了多层前馈网的非线性拟合能力与多变量连续函数表示定理[5]之间存在的关系,而这正是Kolmogrov于1957年证明了的。
这是第一次真正意义上的将拟合理论与前馈网络的映射能力相结合。
虽然后来Poggio指出这两方面实际上是无关的[7],但是不久之后许多学者都严格地证明了隐含层函数为S型函数的三层BP网络可以任意精度地拟合任意紧集上的连续函数。
BP网络的各种变型及其它用于函数拟合的网络的引出也都是基于此种原则。
1991年,Kreinovich得出了一个如下结论:
在非常微弱的限制下,对人工神经网络的隐含层引入任意的非线性单元都可使网络具有任意拟合各种连续函数的能力[8]。
这一结论对用于函数拟合的网络的实现具有非常重要的意义。
目前用于拟合的神经网络受到了广泛的关注。
而在应用最为广泛的BP神经网络上,由于隐含层神经元设置的不同会给函数拟合带来不同问题,本文在总结相关文献资料的基础上,详细分析了BP神经网络隐含层神经元的设置对函数拟合效果的影响,对比两种实验结果,就其问题讨论相关解决策略。
1.3本文研究内容
学习人工神经网络的基本结构及原理,并探讨BP神经网络在人工神经网络的地位和重要性,及其算法设计和技巧,利用神经网络的MATLAB编程分析函数逼近效果,之处其再函数逼近方面的良好性能和不足之处。
重点解决的问题:
1.探讨BP神经网络基本理论,基本方法;
2.设计BP神经网络的基本结构和MATLAB编程;
3.运用神经网络的MATLAB语言来实现算法设计。
1.4本文的组织结构
本文总共分为四章,各个章节内容如下:
第一章主要介绍课题研究意义以及当今神经网络的发展现状;
第二章介绍了神经网络的主要特性和结构,了解BP神经网络的架构;
第三章主要介绍BP神经网络解决函数拟合实验的设计并对结果进行简单的分析;
第四章对本文做出总结。
2人工神经网络简介
2.1人工神经网络特性
人工神经网络(ArtificialNeuralNetwork,ANN),亦称为神经网络(NeuralNetwork,NN),是由大量处理单元(神经元Neurons)广泛互连而成的网络,是对人脑的抽象、简化和模拟,它反映人脑的基本特性[9]。
人工神经网络研究的先锋,McCulloch和Pitts曾于1943年提出以一种叫做“似脑及其”(mindlikemachine)的思想,这种机器可由基于生物神经元特性的互连模型来制造,这就是神经网络的概念。
它具有以下特性:
(l)并行分布处理:
神经网络具有高度的并行结构和并行实现能力,因而能够有较好的耐故障能力和较快的总体处理能力。
这特别适于实时控制和动态控制。
(2)非线性映射:
神经网络具有固有的非线性特性,这源于其近似任意非线性映射(变换)能力。
这一特性给非线性控制问题带来新的希望。
(3)通过训练进行学习:
神经网络是通过所研究系统过去的数据记录进行训练的。
一个经过适当训练的神经网络具有归纳全部数据的能力。
因此,神经网络能够解决那些由数学模型或描述规则难以处理的控制过程问题。
(4)适应与集成:
神经网络能够适应在线运行,并能同时进行定量和定性操作。
神经网络的强适应和信息熔合能力使得网络过程可以同时输入大量不同的控制信号,解决输入信息间的互补和冗余问题,并实现信息集成和熔合处理。
这些特性特别适于复杂、大规模和多变量系统的控制。
(5)硬件实现:
神经网络不仅能够通过软件而且可借助软件实现并行处理。
近年来,一些超大规模集成电路实现硬件己经问世,而且可从市场上购到。
这使得神经网络具有快速和大规模处理能力的实现网络。
十分显然,神经网络由于其学习和适应、自组织、函数拟合和大规模并行处理等能力,因而具有用于智能控制系统的潜力。
2.2人工神经网络的特点
1、具有大规模并行协同处理能力
每一个神经元的功能和结构都很简单,但是由大量神经元构成的整体却具有很强的处理能力。
2、具有较强的容错能力和联想能力
单个神经元或者连接对网络整体功能的影响都比较微小。
在神经网络中,信息的存储与处理是合二为一的。
信息的分布存提供容错功能–由于信息被分布存放在几乎整个网络中。
所以当其中的某一个点或者某几个点被破坏时信息仍然可以被存取。
3、具有较强的学习能力
神经网络的学习可分为有教师学习与无教师学习两类。
由于其运算的不精确性,表现成“去噪音、容残缺”的能力,利用这种不精确性,比较自然地实现模式的自动分类。
具有很强的泛化(Generalization)能力。
4、是大规模自组织、自适应的非线性动力系统
具有一般非线性动力系统的共性,即不可预测性、耗散性、高维性、不可逆性、广泛连接性和自适应性等等。
2.3人工神经网络的基本特性和结构
人工神经网络由神经元模型构成;
这种由许多神经元组成的信息处理网络具有并行分布结构。
每个神经元具有单一输出,并且能够与其它神经元连接;
存在许多(多重)输出连接方法,每种连接方法对应一个连接权系数。
严格地说,人工神经网络是一种具有下列特性的有向图:
(1)对于每个节点i存在一个状态变量;
(2)从节点j至节点i,存在一个连接权系统数;
(3)对于每个节点i,存在一个阈值i;
(4)对于每个节点i,定义一个激活函数fi;
对于最一般的情况,此函数的形式为:
(2-1)
人工神经网络的互连结构(或称拓扑结构)是指单个神经元之间的连接模式,它是构造神经网络的基础,也是神经网络诱发偏差的主要来源。
从互连结构的角度(如图2-1):
图2-1人工神经网络的互联结构
(1)单层前馈网络
根据图2-2,输入向量为X=(x1,x2,…,xn);
输出向量为Y=(y1,y2,…,ym);
输入层各个输入到相应神经元的连接权值分别是wij,i=1,2,..,n,j=1,2,..,m。
若假设各神经元的阈值分别是θj,j=1,2,…,m,则各神经元的输出yj,j=1,2,..,m分别为
(2-2)
其中,由所有连接权值wji构成的连接权值矩阵W为:
(2-3)
在实际应用中,该矩阵是通过大量的训练示例学习而形成的。
图2-2单层感知器
2.4人工神经网络的主要学习算法
神经网络主要通过两种学习算法进行训练,即指导式(有师)学习算法和非指导式(无师)学习算法。
此外,还存在第三种学习算法,即强化学习算法;
可把它当做有师学习的一种特例。
(l)有师学习。
有师学习算法能够根据期望的和实际的网络输出(对应于给定输入)间的差来调整神经元间连接的强度或权。
因此,有师学习需要有个老师或导师来提供期望或目标输出信号。
有师学习算法的例子包括d规则、广义规则或反向传播算法以及LvQ算法等。
(2)无师学习。
无师学习算法不需要知道期望输出。
在训练过程中,只要向神经网络提供输入模式,神经网络就能够自动地适应连接权,以便按相似特征把输入模式分组聚集。
无师学习算法的例子包括Kohonen算法和呷enter一Grossberg自适应谐振理论(ART)等。
(3)强化学习如前所述,强化学习是有师学习的特例。
它不需要老师给出目标输出。
强化学习算法采用一个“评论员”来评价与给定输入相对应的神经网络输出的优度(质量因数)。
2.5BP神经网络结构
BP(BackPropagation)神经网络是一个具有三层或者三层以上的阶层神经网络,上下层之间的各种神经元实行权连接,而各层之间神经元无连接。
最基本的BP神经网络是三层前馈网络,即输入层、隐含层和输出层。
BP网络的结构如图2-3所示。
当一对学习样本提供给网络后,神经元的激活值从输入层经各中间层向输出层传播,在输出层的各神经元获得网络的输入响应。
接下来,按减小目标输出与实际输出之间误差的方向,从输出层反向经过各中间层回到输入层,从而逐层修正各连接权值,这种算法称为“误差逆传播算法”,即BP算法。
随着这种误差逆向的传播修正不断进行,网络对输入模式响应的正确率也不断上升[10]。
图2-3BP网络结构
BP算法属于δ算法,是一种监督式(有导师)的学习算法。
其基本思想是利用最小二乘法,即LMS算法,采用梯度搜索技术,以起始网络的实际输出值与期望输出值之间的误差平方和为最小。
对于q个输入学习样本:
,已知与其对应的输出样本:
学习的目的是用网络的实际输出
,与目标矢量
之间的误差来修改其权值,使
与期望
尽可能地接近;
即:
使网络输出层的误差平方和达到最小。
它是通过连续不断地在相对于误差函数斜率下降的方向上计算网络权值和偏差的变化而逐渐拟合目标的。
每一次权值和偏差的变化都与网络误差的影响成正比,并以反方向传播的方式传递到每一层[11]。
BP网络在结构上类似于多层感知器,是一种多层前馈神经网络。
BP神经网络是一种基于BP算法(误差反传算法)的多层前向网络,它的主要特点是信号前向传递,即误差反向传播。
BP网络的网络拓扑结构是多层前向网络,该网络由三部分构成:
输入层、隐含层和输出层。
隐含层大于等于一层,相邻两层的各个神经元彼此相连,且对应地有一个连接权值,形成有向无环图的前向网络拓扑结构,如图2-4所示。
在BP网络中,同层节点之间不存在相互连接,层与层之间多采用互联方式,且各层的连接权值可调。
BP网络实现了明斯基的多层网络的设想,是当今神经网络模型中使用最为广泛的一种。
BP神经网络是一种单向传播的神经网络,输入信号从输入层节点依次传过各隐含层节点,最后传到输出层节点。
每层节点的输出只影响下一层节点的输出。
所以,可将BP神经网络看作是一个从输入到输出的高度非线性映射,即F:
Rn→Rm,f(X)=Y。
对于样本集合:
输入xi(属于Rn)和输出yi(属于Rm),那么我们可以认为存在某一映射g使得g(xi)=yi(i=1,2,……,n)成立。
现在要求出一个映射f,使得在某种意义下,f是g的最佳拟合。
BP神经网络通过对简单的非线性函数进行数次复合,可以近似复杂的函数。
通过迭代处理的方法,不断调整连接神经元的网络权重,使得最终输出结果和预期结果的误差最小。
在图2-4中,给定一个样本集:
S={(X1,Y1),(X2,Y2),…,(Xs,Ys)},BP算法是逐一根据样本集中的的样本(Xk,Yk)计算出实际输出Ok及其误差E1,然后对各层神经元的权值W
(1),W
(2),…,W(L)各做一次调整,重复这个循环,直到∑Ep<
ε(所有样本的误差之和)。
然后用输出层的误差调整输出层权矩阵,并用此误差估计输出层的直接前导层的误差,再用输出层前一层误差估计更前一层的误差。
如此获得所有其它各层的误差估计,并用这些估计实现对权矩阵的修改。
形成将输出端表现出的误差沿着与输入信号相反的方向逐级向输入端传递的过程。
图2-4BP网络拓扑结构
实现BP算法的时候,需要用到MATLAB语言构造出典型神经网络的工具函数,本文所用到的工具函数有:
(1)神经元传递函数:
①tansing()函数,它是一双曲正切S型(sigmoid)传递函数,用于将神经元上范围为(-∞,+∞)的输入值映射到区间(-1,+1)上。
利用BP算法训练的隐含层神经元中经常用到它;
②purelin()函数,它是线性传递函数,用于BP算法训练的输出层神经元。
(2)网络建立函数:
newff()函数,用于建立一个前馈BP神经网络。
(3)网络训练函数:
train()函数,它用于训练建立的BP神经网络。
(4)网络仿真函数:
sim()函数,它用于仿真训练前后的BP神经网络。
2.6BP神经网络训练方法
(1)输入和输出层的设计。
输入的神经元可以根据需要求解的问题和数据表示方式确定。
(2)输出层的维数可根据使用者的要求来确定。
如果将BP网络用做分类器,类别模式一共有
个,那么输出层神经元的个数为
或
。
(3)隐含层的设计。
BP网络有一个重要的定理,即对于任何在闭区间内的一个连续函数都可以用单隐含层的BP网络拟合,因而一个三层BP网络就可以完成任意的
维到
维的映射。
设BP网络的输入层有m个神经元,输出层有n个神经元,隐含层有p个神经元,
为输入层节点,
;
为隐含层节点,
为输出层节点
为
的输入或输出;
、
分别为
的输入、输出;
分别为d(k)的输入、输出;
的期望输出;
与
之间的连接权(以下称为隐含层的权值);
之间的连接权(以下称为输出层的权值)。
对于隐含层,有
(2-4)
(2-5)
对于输出层,有
(2-6)
(2-7)
当网络实际输出与期望输出之间的全局误差E定义如下:
(2-8)
将以上误差定义式展开到隐含层,则有:
(2-9)
进一步展开至输入层,得到
(2-10)
从上式可以看出,网络输入误差是各层权值
的函数,因此调整权值可改变误差E。
显然,调整权值的原则是使误差不断地减小,因此应使权值的调整量与误差的梯度下降成正比,故而有:
(2-11)
(2-12)
上式中负号表示梯度下降,常数
表示比例系数,在训练中反映了学习速率。
3基于BP神经网络的函数拟合算法设计与实现
3.1面向函数拟合的BP网络结构
下面设计BP神经网络,用于对非线性函数的拟合。
通过各个参数的设置,观察BP神经网络对非线性函数拟合的效果。
3.1.1函数问题的提出
对待拟合的函数进行采样,生成训练样本集,画出要拟合的非线性函数图像:
置k=1为非线性函数频数,采样点为p=[-1:
.05:
1],即在-1到1之间每隔0.05开始采样,将其作为输入样本。
非线性函数为t=2*cos(k*pi*p),t是p的函数,计算上面采样点相对应的函数值,将其作为目标样本。
接下来,画出要拟合的非线性函数图像:
plot(p,t,'
-'
)%画出要拟合的函数图像
title('
要拟合的函数图像'
);
%图像的标题
xlabel('
时间'
%x轴变量的含义
ylabel('
非线性函数'
%y轴的含义
得到函数图像如图6所示:
图3-1非线性函数图像
3.1.2建立BP神经网络
本次实验利用newff建立神经网络,n=10表示神经元个数:
net=newff(minmax(p),[n,1],{'
tansig'
'
purelin'
},'
trainlm'
);
其中newff为构造前向网络的函数;
minmax用于求数组的最小值和最大值,在这里可表示输入的上限与下限;
trainlm为训练函数梯度下降法,还可选traingdm:
带动量梯度下降改进型;
tansig为激活函数,它正切S型传递函数。
第二层输出激活函数为线性激活purelin;
[n,1]表示第一层有n个神经元,第二层有1个神经元,n是可调节的隐层节点数目。
3.1.3网络仿真
利用sim函数进行网络仿真,训练BP网络,画出仿真图形和原函数的图形。
根据仿真结果观察BP网络对样本的拟合能力。
y1=sim(net,p)%网络仿真,仿真训练BP网络
figure;
p,y1,'
--'
)%画出图像
未训练网络的输出结果'
仿真输出--原函数-'
得到的结果如图7所示:
图3-2仿真曲线和原函数曲线
从图像上可以看出,使用newff建立BP神经网络的时候,所取的权值和阈值都是随机的,所以输出结果很差,两个函数的图像相差很多,根本达不到函数拟合的目的,并且每次运行的结果也有所不同。
3.1.4网络测试
基于上述实验结果,我们需要训练网络。
我们利用train函数进行训练,分别设置训练时间为50个单位时间,设计训练目标的误差小于0.01,开始训练并观察实验结果:
net.trainparam.epochs=50;
%设计训练时间为50个单位时间
net.trainparam.goal=0.01;
%设计训练目标的误差小于0.01
net=train(net,p,t);
开始训练
然后我们得到训练后的结果如图3-3所示。