|本文同步于微信公众号【科学计算与编程】
|欢迎关注,获取更多优秀文章!
RBF神经网络概述
径向基函数(Radical Basis Function,RBF)是多维空间插值的传统技术,由Powell于1985年提出。1988年,Broomhead和Lowe根据生物神经元具有局部响应这一特点,将RBF引入神经网络设计中,产生了RBF神经网络。1989年,Jackson论证了RBF神经网络对非线性连续函数的一致逼近性能。
RBF神经网络属于前向神经网络类型,网络的结构与多层前向网络类似,是一种三层的前向网络。
- 第一层为输入层,由信号源节点组成
- 第二层为隐含层,节点数视所描述问题的需要而定,隐含层中神经元的变换函数即径向基函数是对中心点径向对称且衰减的非负线性函数,该函数是局部响应函数,而以前的前向网络变换函数都是全局响应的函数
- 第三层为输出层,它对输入模式做出响应
RBF的基本思想是:用RBF作为隐单元的“基”构成隐含层空间,隐含层对输入矢量进行变换,将低维的模式输入数据变换到高维空间内,使得在低维空间内的线性不可分问题在高维空间内线性可分。
RBF神经网络结构简单,训练简洁而且学习收敛速度快,能够逼近任意非线性函数,因此它已被广泛用于时间序列分析、模式识别、非线性控制和图形处理等领域。
RBF神经网络结构模型
径向基神经网络的神经元模型如下图1所示。
径向基神经网络的节点激活函数采用径向基函数,通常定义为空间任一点到某一中心之间的欧式距离的单调函数。
由上图1所示的径向基神经元结构可以看出,径向基神经网络的激活函数施以输入向量和权值向量之间的距离||dist||作为自变量的。径向基神经网络激活函数的一般表达式为
随着权值和输入向量之间距离的减少,网络输出是递增的,当输入向量和权值向量一致时,神经元输出为1。
图中的b为阈值,用于调整神经元的灵敏度。
利用径向基神经元和线性神经元可以建立广义回归神经网络,此种神经网络用于函数逼近方面的应用;径向基神经元和竞争神经元可以建立概率神经网络,此种神经网络适用于解决分类问题。
由输入层、隐含层和输出层构成的一般径向基神经网路结构如图2所示。
在RBF神经网络中,输入层仅仅起到传输信号的作用,与前面所讲述的神经网络相比较,输入层和隐含层之间可以看做连接权值为1的连接,输出层和隐含层所完成的任务是不同的,因而它们的学习策略也不同。
输出层是对线性权进行调整,采用的是线性优化策略,因而学习速度较快。而隐含层是对激活函数(格林函数或高斯函数,一般取高斯函数)的参数进行调整,采用的是非线性化优化策略,因而学习速度较慢。
RBF神经网络的学习算法
RBF神经网络学习算法需要求解的参数有3个:基函数的中心、方差以及隐含层到输出层的权值。
根据径向基函数中心选取方法的不同,RBF网络有多种学习方法,如随机选取中心法、自组织选取法、有监督选取中心法和正交最小二乘法等。
下面将介绍自组织选取中心的RBF神经网络学习法。该方法有两个阶段组成:
- 一是自组织学习阶段,此阶段为无导师学习过程,求解隐含层基函数的中心与方差;
- 二是有导师学习阶段,此阶段求解隐含层到输出层之间的权值
径向基神经网络中常用的径向基函数是高斯函数,因此径向基神经网络的激活函数可表示为
式中,||xp-ci||为欧式范数,ci为高斯函数的中心,σ为高斯函数的方差
由图2所示的径向基神经网络的结构可得到网络的输出为
式中,xp为第p个输入样本,p=1,2,3,...,P,P为样本总数,ci为网络隐含层节点的中心,Wij为隐含层到输出层的连接权值,i=1,2,3,...,h为隐含层节点数,yi为与输入样本对应的网络的第j个输出节点的实际输出。
设d是样本的期望输出值,那么基函数的方差可表示为
学习算法的具体步骤如下:
步骤一:基于K-均值聚类方法求取基函数中心c。
①网络初始化:随机选取h个训练样本作为聚类中心ci(i=1,2,3,...,h)
②将输入的训练样本集合按最近邻规则分组:按照xp与中心为ci之间的欧式距离将xp分配到输入样本的各个聚类集合ζp(p=1,2,...,P)中
③重新调整聚类中心:计算各个聚类集合②ζp中训练样本的平均值,即新的聚类中心ci,如果新的聚类中心不再发生变化,则所得到的ci即为RBF神经网络最终的基函数中心,否则返回②,进行迭代-
步骤二:求解方差σi
该RBF神经网络的基函数为高斯函数,方差σi可如下求解:
式中,cmax是所选取中心之间的最大距离。
-
步骤三:计算隐含层和输出层之间的权值。
隐含层至输出层之间神经元的连接权值可以用最小二乘法直接计算得到,计算公式如下:
什么是曲线拟合
曲线拟合(curve fitting)是用连续曲线近似地刻画或比拟平面上离散点组所表示的坐标之间函数关系的一种数据处理方法,是用解析表达式逼近离散数据的一种方法。
在科学实验或社会活动中,通过实验或观测得到量x与y的一组数据对(xi,yi)(i=1,2,...,m),其中xi是彼此不同的。人们希望用一类与数据的背景材料规律相适应的解析表达式如y=f(x,c)来反映量x与y之间的依赖关系,即在一定意义下“最佳”地逼近或拟合已知数据。y=f(x,c)常常被称作拟合模型,式中c=(c1,c2,...,cn)是一些待定参数。
当c在f中线性出现时,此时称模型f为线性模型,否则成f为非线性模型。
现在有许多衡量拟合优度的标准,最常用的一种做法是选择参数c使得拟合模型与实际观测值在各个点的残差ek=yk-f(xk,c)的加权平方和达到最小,此时所求曲线称作在加权最小二乘意义下对数据的拟合曲线。
目前有许多求解拟合曲线的成功方法,对于线性模型一般通过建立和求解方程组来确定参数,从而求得拟合曲线,至于非线性模型,则要借助求解非线性方程组或用最优化方法求得所需参数才能得到拟合曲线,有时也称之为非线性最小二乘拟合。
模型建立
本文用RBF网络拟合未知函数,预先设定一个非线性函数,如下式所示,假定函数解析式不清楚的情况下,随机产生x1,x2和由这两个变量按式子得出的y。将x1,x2作为RBF网络的输入数据,y为输出数据,分别建立近似和精确RBF网络进行回归分析,并评价网络拟合效果。
在使用精确(exact)径向基网络来实现非线性函数的回归例子中,共产生了301个样本,全部作为网络的训练样本,使用图形可视化来观察拟合效果。
在使用近似(approximate)径向基网络对同一函数进行拟合的例子中,共产生了400个训练数据和961个验证数据,使用400个训练数据训练RBF网络后,使用训练好的网络来预测961个验证数据的结果,并通过可视化方法观察RBF神经网络的拟合效果。
MATLAB实现
exact径向基网络实现非线性函数回归
使用exact径向基网络实现非线性的函数回归,代码如下:
% RBF网络的回归--非线性函数回归的实现
%% 清空环境变量
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
approximate RBF网络对同一函数进行拟合
下面用approximate RBF网络对同一函数进行拟合:
% RBF网络的回归--非线性函数回归的实现
%% 清空环境变量
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])
结果分析
运行代码后,在命令窗口输出结果如下:
NEWRB, neurons = 0, MSE = 108.563
NEWRB, neurons = 50, MSE = 3.67744
NEWRB, neurons = 100, MSE = 0.00159733
NEWRB, neurons = 150, MSE = 1.59352e-05
NEWRB, neurons = 200, MSE = 4.2166e-06
NEWRB, neurons = 250, MSE = 4.5229e-07
NEWRB, neurons = 300, MSE = 1.11398e-07
NEWRB, neurons = 350, MSE = 7.24862e-08
NEWRB, neurons = 400, MSE = 6.41087e-08
由上图3,图4可知,神经网络的训练结果能较好逼近非线性函数F,由误差图可知,神经网络的预测效果在数据边缘处的误差较大,在其他数值处的拟合效果很好。网络的输出和函数值之间的插值在隐含层神经元的个数为100时已经接近于0,说明网络输出能非常好地逼近函数。
应用径向基神经网络需要注意的问题
尽管RBF网络的输出是隐单元输出的线性加权和,并且网络学习速率快,但并不等于RBF神经网络可以取代其他前馈网络。
这是因为RBF网络很可能需要比BP神经网络多得多的隐含层神经元来达到预期的训练目标。
BP网络采用sigmoid()函数,使得输出可见区域很大,而径向基网络使用的径向基函数,输入空间区域很小,这就不可避免地导致在输入空间较大时,需要更多的径向基神经元。