基于BP神经网络和RBF网络的非线性函数逼近问题比较研究Word格式.docx
《基于BP神经网络和RBF网络的非线性函数逼近问题比较研究Word格式.docx》由会员分享,可在线阅读,更多相关《基于BP神经网络和RBF网络的非线性函数逼近问题比较研究Word格式.docx(27页珍藏版)》请在冰点文库上搜索。
1人工神经网络原理
1.1生物神经元
神经元是大脑处理信息的基本单元,人脑大约由1011个神经元组成,神经元互相连接成神经网络。
神经元以细胞体为主体,由许多向周围延伸的不规则树枝状纤维构成的神经细胞,其形状很像一棵枯树的枝干。
主要由细胞体、树突、轴突和突触(Synapse,又称神经键)组成。
生物神经元传递信息的过程为多输入、单输出,神经元各组成部分的功能来看,信息的处理与传递主要发生在突触附近,当神经元细胞体通过轴突传到突触前膜的脉冲幅度达到一定强度,即超过其阈值电位后,突触前膜将向突触间隙释放神经传递的化学物质,突触有两种类型,兴奋性突触和抑制性突触。
前者产生正突触后电位,后者产生负突触后电位。
图1-1:
生物神经元示意图
1.2人工神经网络定义
人工神经网络(articlesneuralnetwork,ANN)结构和工作机理基本上以人脑的组织结构(大脑神经元网络)和活动规律为背景的,它反映了人脑的某些基本特征,但并不是要对人脑部分的真实再现,可以说它是某种抽象、简化或模仿。
人工神经网络能根据系统的复杂度来自动的调整网络内部结构关系,进而很好地模拟系统信息的传递情况,因此神经网络的自组织、自学习的优越性极为明显。
另外,神经网络允许输入信息有畸变、不完整等,因此它的容错性很强,并且有很好的鲁棒性。
人工神经网络本质是神经细胞之间联接权重的调整,联接权重的调整规则构成神经网络学习算法,学习算法又决定了神经网络学习能力的高低。
其处理单元一般有三个:
输入单元、输出单元和隐含层单元。
各个神经元之间的连接强度反映着信息表示到信息处理的一个过程,是网络学习训练中的关键所在。
隐含层单元主要对输入信息进行处理,它的构造对网络来说非常重要,隐层越多学习算法所得结果越精确,但是算法会更繁琐,所以要根据精度的要求来确定隐层个数,避免做无用功。
神经网络能够逼近任意非线性映射,拥有学习、泛化及高度并行实现能力,它能同时运行定性和定量的数据,能被很容易地应用于多变量系统,适用于复杂系统的建模方面的研究。
1.3人工神经元模型
人工神经元是对生物神经元的模拟与抽象,是神经网络的基本处理单元。
目前人工神经网络模型大多采用由心理学家W.McCulloch和数理逻辑学家W.H.Pitts共同提出的M-P模型,图1.1表示一个人工神经元模型。
图1-2人工神经元模型
上图中p=(
)表示神经元输入向量,来自外部或者其它神经元的输出;
w=(
)表示其他神经元与该神经元R个突触的连接强度即权值向量;
∑称为激活值,表示这个人工神经元的输入总和;
O表示这个神经元的输出;
θ表示这个人工神经元的阈值。
这个输入信号的加权和超过C,则人工神经元被激活。
这样,人工神经元的输出可描述为:
(1-1)
其中
表示神经元输入——输出关系函数,称为激活函数或输出函数。
阈值θ一般不是一个常数,它是随着神经元的兴奋程度而变化的。
1.4激活函数
在神经网络中,网络解决问题的能力与效率除了与网络结构有关外,在很大程度上取决于网络所采用的激活函数。
激活函数的选择对网络的收敛速度有较大的影响,针对不同的实际问题,激活函数的选择也应不同。
常用的激活函数有以下几种形式
(1)阈值函数其表达式为:
(1-2)
该函数通常也称为阶跃函数。
当激活函数采用阶跃函数时,人工神经元模型即为MP(McCulloch-Pitts)模型。
此时神经元的输出取1或0,反应了神经元的兴奋或抑制。
(2)线性函数(Linear)其表达式为:
(1-3)
该函数可以在输出结果为任意值时作为输出神经元的激活函数,但是当网络复杂时,线性激活函数大大降低网络的收敛性,故一般较少采用。
(3)对数S形函数(Sigmoid)其表达式为:
(1-4)
对数S形函数的输出介于0~1之间,常被要求为输出在0~1范围的信号选用。
它是神经元中使用最为广泛的激活函数。
(4)双曲正切S形函数其表达式为:
(1-5)
双曲正切S形函数类似于被平滑的阶跃函数,形状与对数S形函数相同,以原点对称,其输出介于-1~1之间,常常被要求为输出在-1~1范围的信号选用。
2BP神经网络原理
2.1BP神经网络概述
BP(BackPropagation)神经网络是一种神经网络学习算法。
其由输入层、中间层、输出层组成的阶层型神经网络,中间层可扩展为多层。
相邻层之间各神经元进行全连接,而每层各神经元之间无连接,网络按有教师示教的方式进行学习,当一对学习模式提供给网络后,各神经元获得网络的输入响应产生连接权值(Weight)。
然后按减小希望输出与实际输出误差的方向,从输出层经各中间层逐层修正各连接权,回到输入层。
此过程反复交替进行,直至网络的全局误差趋向给定的极小值,即完成学习的过程。
2.2BP神经网络模型及其原理
BP神经网络是误差反向传播神经网络的简称,它由一个输入层,一个或多个隐含层和一个输出层构成,每一次由一定数量的的神经元构成。
这些神经元如同人的神经细胞一样是互相关联的。
BP神经元结构图如3-2所示,b表示阈值向量;
n表示输出单元数;
f表示神经元传输函数;
图2-1BP神经元的一般模型
除了传输函数为非线性函数以外,BP神经元与其他神经元类似。
其常用的函数是logsig和tansig函数,有的输出层也采用线性函数purelin。
输出y表示为:
y=tansig(Wp+b)(2-1)
BP神经网络是一种多层前馈神经网络,采用误差反向传播算法。
结构上BP神经网络在输入层和输出层之间有了一层或多层隐含单元。
鉴于交通量的强非线性,为了尽可能提高预测模型的预测精度,本设计选择利用两个隐层的BP神经网络建立模型,即在单隐层BP网络的基础上添加一个隐层。
如图3-3所示为含两个隐层的BP神经网络,相邻层实现全联接,每个隐层内部神经元之间不联接。
图2-2BP神经网络结构图
数据处理器构成的样本的维数确定了输入层单元数,输出层含神经元一个,训练用输出值由数据处理器提供。
当输出的结果与目标不一致时,通过对权值与阈值的调整,使其达到误差要求进而得到输出结果。
BP神经网络的学习过程以下几步所组成:
Step1:
网络初始化。
置输入层到隐含层,隐含层到输出层的所有权值为任意小的随机数,并设定初始阈值。
Step2:
提供训练样本。
根据学习规则,需要提供输入向量
和相对应的输出向量
。
Step3:
从输入层开始向隐含层、输出层逐层计算输出。
Step4:
调整权值。
根据误差,从输出层节点开始,到隐含层节点,再到输入层节点逐层的调整权重。
Step5:
返回Step2重新计算,直到误差满足要求为止。
2.3BP神经网络的信息处理特点
信息分布存储:
人脑存储信息的特点是利用突触效能的变化来调整存储内容,即信息存储在神经元之间的连接强度的分布上,BP神经网络模拟人脑的这一特点,使信息以连接权值的形式分布于整个网络;
信息并行处理:
人脑神经元之间传递脉冲信号的速度远低于冯·
诺依曼计算机的工作速度,但是在很多问题上却可以做出快速的判断、决策和处理,这是由于人脑是一个大规模并行与串行组合的处理系统。
BP神经网络的基本结构模仿人脑,具有并行处理的特征,大大提高了网络功能;
具有容错性。
生物神经系统部分不严重损伤并不影响整体功能,BP神经网络也具有这种特性,网络的高度连接意味着少量的误差可能不会产生严重的后果,部分神经元的损伤不破坏整体,它可以自动修正误差。
这与现代计算机的脆弱性形成鲜明对比;
具有自学习、自组织、自适应的能力。
BP神经网络具有初步的自适应与自组织能力,在学习或训练中改变突触权值以适应环境,可以在使用过程中不断学习完善自己的功能,并且同一网络因学习方式的不同可以具有不同的功能,它甚至具有创新能力,可以发展知识,以至超过设计者原有的知识水平。
2.4BP神经网络主要功能
目前,在人工神经网络的实际应用中。
绝大部分的神经网络模型都采用BP神经网络及其变化形式。
它也是前向网络的核心部分,体现了人工神经网络的精华。
BP网络主要用于以下四方面。
用输入向量和相应的输出向量训练一个网络以逼近一个函数;
模式识别:
用一个待定的输出向量将它与输入向量联系起来;
分类:
把输入向量所定义的合适方式进行分类;
数据压缩:
减少输出向量维数以便传输或存储。
3运用BP神经网络逼近非线性函数
3.1构造函数
构造一个非线性函数f(t)=sin(t)+cos(t),然后再建立一个BP神经网络,通过这个神经网络实现对该非线性函数的逼近。
接着我们在试着改变所建立的神经网络隐层神经元的数目,通过观察最后的仿真结果,给出神经网络在函数逼近问题中的简要分析。
3.2仿真分析
3.2.1绘制原图像
绘制要逼近的非线性函数的曲线。
曲线及程序如下所示。
t=0:
0.1:
8;
f=sin(t)+cos(t);
plot(t,f)
title('
要逼近的非线性函数sin(t)+cos(t)'
);
xlabel('
时间t'
ylabel('
非线性函数f=sin(t)+cos(t)'
)
图3-2f=sin(t)+cos(t)
t=0:
0.05:
pi
图3-1f=sin(t)+cos(t)
8
3.2.2建立神经网络
应用newff()函数建立BP网络结构。
隐层神经元数目n可以改变,暂设为n=3,输出层有一个神经元。
选择隐层和输出层神经元传递函数分别为tansig函数和purelin函数,网络训练的算法采用Levenberg–Marquardt算法trainlm。
使用的代码如下。
n=12;
net=newff(minmax(x),[n,1],{'
tansig'
'
purelin'
},'
trainbfg'
learngdm'
sse'
%利用准牛顿反向传播算法对网络进行训练,动量梯度下降权值与阈值的学习,对于刚建立的网络,我们可以使用sim函数观察输出结果。
y1=sim(net,f);
figure;
plot(t,f,'
-'
t,y1,'
:
'
未训练网络的输出结果'
仿真输出--原函数-f=sin(t)+cos(t)'
此时得到的结果如下图所示。
图3-3未训练网络的输出结果示意图
(绿色虚线表示未训练的函数曲线,蓝色实线表示原函数曲线)
需要注意的是,由于使用newff()函数建立函数网络时,权值和阈值的初始化是随机的。
因此,每次的函数输出都不一样,具有随机性。
3.2.3训练神经网络
应用train()函数对网络进行训练之前,需要预先设置网络训练参数。
图和代码如下。
图3-4MATLAB训练过程示意图
net.trainParam.epochs=1500;
%训练时间(步数)为1500;
net.trainParam.goal=0.001;
%训练目标误差为0.001;
net.trainParam.lr=0.01;
%自学习的学习速率为0.01(默认值);
net.trainParam.show=100;
%现实训练结果的间隔步数
[net,Tr]=train(net,t,f);
训练后的误差变化率如下图所示。
图3-5训练后的误差变化率
3.2.4神经网络的测试
对于训练好的网络进行仿真,程序代码如下:
y2=sim(net,t);
t,y2,'
--'
训练后网络的输出结果(红色线)'
仿真输出'
绘制网络输出曲线,并与原始非线性函数曲线以及未训练网络的输出结果曲线相比较,比较出来的结果如下图所示。
图3-6训练后网络的输出结果示意图
(绿色虚线表示训练前的函数曲线,红色是训练后的,蓝色实线表示原函数曲线)
通过观察结果,可以发现训练后的输出,与期望得到的相符。
3.2.5改变隐层神经元的数目,并观察结果
改变BP网络函数隐层神经元的数目,对于函数逼近的效果有一定的影响。
一般来说隐层神经元数目越多,则BP网络逼近非线性函数的能力越强。
下面通过改变非线性函数的隐层神经元数目来加以比较证明。
其中,蓝色的曲线为原曲线,红色的是训练后的,绿色的是训练前的。
分别令n=3,8,16,26;
得出仿真结果如下图。
图3-8n=8
图3-7n=3
图3-10n=26
图3-9n=16
4RBF神经网络
Powell于1985年提出了多变量差值的径向基函数(RadialBasisFunction,简称RBF)方法。
后来,Broomhead等人于1988年成功地将径向基函数用于模式识别。
4.1RBF神经网络的基本原理
RBF网络是一种前馈神经网络,一般为三层结构。
用径向基函数(RBF)作为隐单元的“基”构成隐含层空间,对输入矢量进行一次变换,将低维的模式输入数据变换到高维空间内,通过对隐单元输出的加权求和得到输出,这就是RBF网络的基本思想。
与多层感知器不同,RBF网络的做显著的特点是隐节电的基函数采用距离函数,并使用径向基函数作为激活函数。
RBF网络的各个神经元具有局部特性,最终整个RBF网最终也呈现“”局部映射,即RBF网是一种局部响应的神经网络。
这意味着如果神经网络有较大的输出,必定激活了一个或多个隐节点。
事实上,RBF网络的隐节点的局部特性主要四模仿了某些生物神经元的“内兴奋外抑制”功能,灵长类动物的视觉系统中就有这样的的神经元。
RBF网的分类方法可分为两大类:
数据中心从样本输入中选取和数据中心动态调节方法。
聚类方法是最经典的RBF网学习算法,其思路是先用无监督学习方法确定RBF网中h个隐节点的数据中心,并根据数据中心之间的距离确定隐节点的扩展常数,然后用有监督学习训练个隐节点的输出权值。
RBF的梯度训练方法与BP算法训练多层感知器的原理类似,也是通过最小化目标函数实现对个隐节点数据中心、扩展常数和输出权值的调节。
径向基函数网络利用具有局部隆起的所谓径向基函数来做逼近或分类问题,对于某些问题,RBF网络比BP精度更高。
RBF网络能够逼近任意的非线性函数,可以处理系统内的难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近、时间序列分析、数据分类、模式识别、信息处理、图像处理、系统建模、控制和故障诊断等。
4.2RBF神经网络的网络结构
RBF网络只有一层隐含层,一个多输入多输出的RBF网络结构如图1所示,其中m,p和n分别表示个输入层、隐含层和输出层的单元个数。
图4-1多输入多输出RBF网络结构图
径向基函数采用高斯基函数:
(4-1)
式中c为基函数中心向量,与输入同维数,σ为基函数跨度参数向量,它们的位数均与输入向量相同。
设输入向量为
时,输出向量为
,此时隐含层第j个单元的输出为
(4-2)
输入层和隐含层之间的权值为p×
n的全1矩阵,并固定不变。
隐含层和输出层之间的权值矩阵为n×
p维,且随着网络的训练不断进行修正。
RBF网络的第i维输出为:
(4-3)
为输入到输出等效的映射。
设第k步迭代的误差:
(4-4)
式中
为第i维输出的期望值。
采用随机梯度法加上动量修正项的方法,得到各参数的修正公式为:
(4-5)
(4-6)
(4-7)
(4-8)
(4-9)
式中j=1,2,…,p,i=1,2,…,n,ηw、ησ和ηc分别为权值w、基函数跨度参数σ和基函数中心c的学习率,可以取不同的值,αw、ασ和αc为相应的动量修正参数。
5运用RBF神经网络逼近非线性函数
RBF神经网络同样是一种前馈反向传播网络,它有三个网络层:
输入层,隐含层和输出层。
隐含层为径向基层;
输出层为一线性层,所以我们在创建RBF网络的时候,就不用考虑各层神经元节点个数的选取。
下面我们详细介绍一下RBF神经网络函数逼近模型的建立和仿真。
在创建RBF神经网络的时候,隐含层神经单元个数n=5,训练样本个数为10,在经过多次调试之后,从而得出了逼近函数。
5.1Matlab编程仿真
clearall;
closeall;
clc;
t=[0:
pi]'
;
%自变量t,每一行表示一个输入
size_n=size(t,1);
%输入样本的个数
y=sin(t)+cos(t);
%因变量y
yp=0*y;
%网络输出
train_num=10;
%训练样本个数
%output_dim=3;
train_in=zeros(train_num,1);
%训练样本输入
train_out=zeros(train_num,1);
%训练样本输出
hid_num=5;
%隐含层神经单元个数
%w_in_hid=zeros(hid_num,input_dim);
%输入层-隐含层之间的权值
w=0.3*zeros(1,hid_num);
%隐含层-输出层的权值
b=0.8*ones(1,hid_num);
%节点基宽
center=1.6*rand(1,hid_num);
%基函数中心
h=zeros(1,hid_num);
%RBF网络的径向基向量
eta_w=0.1*ones(1,hid_num);
%学习率η
eta_b=0.1*ones(1,hid_num);
eta_c=0.15*ones(1,hid_num);
alpha=0.5;
%动量因子α
maxgen=800;
%最大迭代次数
error_goal=1e-3;
%误差精度要求
mse=zeros(1,maxgen);
%均方误差
wk_1=w;
wk_2=w;
%前12时刻的权值
bk_1=b;
bk_2=b;
%前12时刻的基宽值
ck_1=center;
ck_2=center;
%前12时刻的中心值
delta_c=zeros(1,hid_num);
B=zeros(maxgen,hid_num);
W=zeros(maxgen,hid_num);
C=zeros(maxgen,hid_num);
%提取训练样本
fori=1:
train_num
seq=floor(i/train_num*size_n);
train_in(i)=t(seq,:
train_out(i)=y(seq,:
end
gen=0;
%while1
maxgen
gen=gen+1;
%当前迭代次数
ye=zeros(1,train_num);
%训练时的网络实际输出
E=zeros(1,train_num);
%训练时的性能指标函数
B(gen,:
)=b;
W(gen,:
)=w;
C(gen,:
)=center;
%训练样本
forj=1:
fork=1:
hid_num
h(k)=exp(-norm(train_in(j)-center(k))^2/(b(k)^2));
end
ye(j)=w*h'
E(j)=0.5*(train_out(j)-ye(j))^2;
%性能指标函数值
%修正权值
e=train_out(j)-ye(j);
%当前输出误差
w(k)=wk_1(k)+eta_w(k)*e*h(k)+alpha*(wk_1(k)-wk_2(k));
delta_b=e*w(k)*h(k)*(train_in(j)-center(k))/b(k)^3;
b(k)=bk_1(k)-eta_b(k)*delta_b+alpha*(bk_1(k)-bk_2(k));
delta_c(k)=e*w(k)*h(k)*(train_in(j)-