1.案例背景
1.1 RBF神经网络概述
径向基函数(Radical Basis Function,RBF)是多维空间插值的传统技术,由Powell于1985年提出。1988年, Broomhead和 Lowe根据生物神经元具有局部响应这一特点,将 RBF引入神经网络设计中,产生了RBF神经网络。1989 年,Jackson论证了RBF 神经网络对非线性连续函数的一致逼近性能。
RBF神经网络属于前向神经网络类型,网络的结构与多层前向网络类似,是一种三层的前向网络。第一层为输入层,由信号源结点组成;第二层为隐藏层﹐隐藏层节点数视所描述问题的需要而定,隐藏层中神经元的变换函数即径向基函数是对中心点径向对称且衰减的非负非线性函数,该函数是局部响应函数,而以前的前向网络变换函数都是全局响应的函数;第三层为输出层,它对输入模式作出响应。
RBF网络的基本思想是:用RBF作为隐单元的“基”构成隐藏层空间,隐含层对输入矢量进行变换,将低维的模式输入数据变换到高维空间内,使得在低维空间内的线性不可分的问题在高维空间内线性可分。
RBF神经网络结构简单、训练简洁而且学习收敛速度快,能够逼近任意非线性函数,因此它已被广泛应用于时间序列分析、模式识别、非线性控制和图形处理等领域。
1.2 RBF神经网络结构模型
径向基神经网络的神经元模型如图7-1所示。径向基神经网络的节点激活函数采用径向基函数,通常定义为空间任一点到某一中心之间的欧式距离的单调函数。
由 图7-1所示的径向基神经元结构可以看出,径向基神经网络的激活函数是以输人向量和权值向量之间的距离||dist||作为自变量的。径向基神经网络的激活函数的一般表达式为
随着权值和输入向量之间距离的减少,网络输出是递增的,当输入向量和权值向量一致时,神经元输出为1。图中的b为阈值,用于调整神经元的灵敏度。利用径向基神经元和线性神经元可以建立广义回归神经网络,此种神经网络适用于函数逼近方面的应用;径向基神经元和竞争神经元可以建立概率神经网络,此种神经网络适用于解决分类问题。
由输入层、隐藏层和输出层构成的一般径向基神经网络结构如图7-2所示。在 RBF 神经网络中,输入层仅仅起到传输信号的作用,与前面所讲述的神经网络相比较,输人层和隐含层之间可以看作连接权值为1的连接,输出层和隐含层所完成的任务是不同的,因而它们的学习策略也不相同。输出层是对线性权进行调整,采用的是线性优化策略,因而学习速度较快。而隐含层是对激活函数(格林函数或高斯函数,一般取高斯函数)的参数进行调整,采用的是非线性优化策略,因而学习速度较慢。
1.3 RBF神经网络的学习算法
RBF神经网络学习算法需要求解的参数有3个:基函数的中心、方差以及隐含层到输出层的权值。根据径向基函数中心选取方法的不同,RBF 网络有多种学习方法,如随机选取中心法、自组织选取法、有监督选取中心法和正交最小二乘法等。下面将介绍自组织选取中心的RBF神经网络学习法。该方法由两个阶段组成;一是自组织学习阶段,此阶段为无导师学过程,求解隐含层基函数的中心与方差;二是有导师学习阶段,此阶段求解隐含层到输出层间的权值。
径向基神经网络中常用的径向基函数是高斯函数,因此径向基神经网络的激活函数可表示为
1.4曲线拟合相关背景
曲线拟合(curve fitting)是用连续曲线近似地刻画或比拟平面上离散点组所表示的坐标之间函数关系的一种数据处理方法,是用解析表达式逼近离散数据的一种方法。在科学实验或社会活动中,通过实验或观测得到量α与y的一组数据对(xi,yi)(i=1,2,…,m),其中x是彼此不同的。人们希望用一类与数据的背景材料规律相适应的解析表达式如y=f(z,c)来反映量x与y之间的依赖关系,即在一定意义下“最佳”地逼近或拟合已知数据。y=f(r,c)常被称作拟合模型,式中 c=(c1 ,c2…,cn)是一些待定参数。当c在f中线性出现时,此时称模型f为线性模型,否则称f为非线性模型。现在有许多衡量拟合优度的标准, 最常用的一种做法是选择参数c使得拟合模型与实际观测值在各点的残差(或离差)ek=yk- f(xk,c)
加权平方和达到最小,此时所求曲线称作仕加仪取小一水应入加太想阳立确定参数,从而求许多求解拟合曲线的成功方法,对于线性模型一般趣过建且N水胖月性组不明步参黝才得拟合曲线。至于非线性模型,则要借助求解非线性方程组或用最优化方法求得所需参数才能得到拟合曲线,有时也称之为非线性最小二乘拟合。
本例用RBF网络拟合未知函数,预先设定一个非线性函数,如式(7-1)所示,假定函数解析式不清楚的情况下,随机产生x1,x2和由这两个变量按式(7-1)得出的y。将x1,x2作RBF网络的输人数据,将y作为RBF 网络的输出数据,分别建立近似和精确RBF网络进行回归分析,并评价网络拟合效果。
在使用精确(exact)径向基网络来实现非线性函数的回归例子中,共产生了301个样本﹐全部作为网络的训练样本,使用图形可视化来观察拟合效果。
在使用近似(approximate)径向基网络对同一函数进行拟合的例子中,共产生了400个训练数据和961个验证数据,使用400个训练数据训练RBF网络后,使用训练好的网络来预测961个验证数据的结果,并通过可视化的方法观察RBF神经网络的拟合效果。
2 MATLAB 实现
2.1 RBF网络的相关函数
2.2 matlab代码
1)严格(Exact)径向基网络来实现非线性的函数回归
%% Matlab神经网络43个案例分析
%% 清空环境变量
clc
clear
%% 产生输入 输出数据
% 设置步长
interval=0.01;
% 产生x1 x2
x1=-1.5:interval:1.5;
x2=-1.5:interval:1.5;
% 按照函数先求得相应的函数值,作为网络的输出。
F =20+x1.^2-10*cos(2*pi*x1)+x2.^2-10*cos(2*pi*x2);
%% 网络建立和训练
% 网络建立 输入为[x1;x2],输出为F。Spread使用默认。
net=newrbe([x1;x2],F)
%% 网络的效果验证
% 我们将原数据回带,测试网络效果:
ty=sim(net,[x1;x2]);
% 我们使用图像来看网络对非线性函数的拟合效果
figure
plot3(x1,x2,F,'rd');
hold on;
plot3(x1,x2,ty,'b-.');
view(113,36)
title('可视化的方法观察准确RBF神经网络的拟合效果')
xlabel('x1')
ylabel('x2')
zlabel('F')
grid on
2)RBF网络对同一函数拟合
%% Matlab神经网络43个案例分析
%% 清空环境变量
clc
clear
%% 产生训练样本(训练输入,训练输出)
% ld为样本例数
ld=400;
% 产生2*ld的矩阵
x=rand(2,ld);
% 将x转换到[-1.5 1.5]之间
x=(x-0.5)*1.5*2;
% x的第一行为x1,第二行为x2.
x1=x(1,:);
x2=x(2,:);
% 计算网络输出F值
F=20+x1.^2-10*cos(2*pi*x1)+x2.^2-10*cos(2*pi*x2);
%% 建立RBF神经网络
% 采用approximate RBF神经网络。spread为默认值
net=newrb(x,F);
%% 建立测试样本
% generate the testing data
interval=0.1;
[i, j]=meshgrid(-1.5:interval:1.5);
row=size(i);
tx1=i(:);
tx1=tx1';
tx2=j(:);
tx2=tx2';
tx=[tx1;tx2];
%% 使用建立的RBF网络进行模拟,得出网络输出
ty=sim(net,tx);
%% 使用图像,画出3维图
% 真正的函数图像
interval=0.1;
[x1, x2]=meshgrid(-1.5:interval:1.5);
F = 20+x1.^2-10*cos(2*pi*x1)+x2.^2-10*cos(2*pi*x2);
subplot(1,3,1)
mesh(x1,x2,F);
zlim([0,60])
title('真正的函数图像')
% 网络得出的函数图像
v=reshape(ty,row);
subplot(1,3,2)
mesh(i,j,v);
zlim([0,60])
title('RBF神经网络结果')
% 误差图像
subplot(1,3,3)
mesh(x1,x2,F-v);
zlim([0,60])
title('误差图像')
set(gcf,'position',[300 ,250,900,400])
3.运行结果分析
由图可知,神经网络的训练结果能较好逼近该非线性函数F,由误差图可知,神经网络的预测效果在数据边缘处的误差较大,在其他数值处的拟合效果很好。网络的输出和函数值之间的差值在隐藏层神经元的个数为100时已经接近于0,说明网络输出能非常好地逼近函数。
4案例扩展
4.1应用径向基神经网络需要注意的问题
尽管RBF 网络的输出是隐单元输出的线性加权和,并且网络学习速率快,但并不等于RBF神经网络就可以取代其他前馈网络。这是因为RBF网络很可能需要比BP神经网络多得多的隐含层神经元来达到预期的训练目标。BP网络采用sigmoid()函数,这样的神经元有很大的输出可见区域,而径向基网络使用的径向基函数﹐输人空间区域很小,这就不可避免地导致了在输人空间较大时,需要更多的径向基神经元。
4.2SPREAD对网络的影响
SPREAD为径向基函数的扩展系数﹐默认值为1.0。合理选择SPREAD是很重要的,其值应该足够大,使径向基神经元能够对输入向量所覆盖的区间都产生响应,但也不要求大到所有的径向基神经元都如此,只要部分径向基神经元能够对输入向量所覆盖的区间产生响应就足够了。SPREAD的值越大,其输出结果越光滑,但太大的SPREAD值会导致数值计算上的困难,若在设计网络时,出现“Rank deficient”警告,应考虑减小SPREAD 的值重新进行设计。因此,在网络设计的过程中,需要用不同的SPREAD值进行尝试,以确定一个最优值。
为了更严格地对数据进行拟合,最好使SPREAD的值小于输人向量之间的典型距离