MATLAB神经网络(五):RBF网络

1988年,Broomhead和Lowc根据生物神经元具有局部响应这一特点,将RBF引入神经网络设计中,产生了RBF(Radical Basis Function)。1989年,Jackson论证了RBF神经网络对非线性连续函数的一致逼近性能。

RBF的基本思想是:用RBF作为隐单元的“基”构成隐藏层空间,隐含层对输入矢量进行变换,将低维的模式输入数据变换到高维空间内,使得在低维空间内的线性不可分的问题在高维空间内线性可分

RBF神经网络结构简单、训练简洁而且学习收敛速度快,能够逼近任意非线性函数,因此已被广泛应用于时间序列分析、模式识别、非线性控制和图形处理等领域。

RBF神经网络学习算法需要求解的参数有3个:基函数的中心、方差以及隐含层到输出层的权值。下面介绍自组织的中心选取方法。该方法由两个阶段组成:一是自组织学习阶段,此阶段为无监督学习过程,求解隐含层基函数的中心与方差,二是有监督学习阶段,此阶段求解隐含层到输出层之间的权值。

RBF网络的相关函数

[net,tr]=newrb(P,T,GOAL,SPREAD,MN,DF)
P为Q组输入向量组成的R*Q维矩阵;T为Q组目标分类向量组成的S*Q维矩阵;GOAL为均方误差目标(Mean Squared Error Goal)
默认为0;SPREAD为径向基函数的扩展速度,默认为1;MN为神经元的最大数目,默认为Q;DF为两次显示之间所添加
的神经元数目,默认为25;NET为返回值,一个RBF网络,tr为返回值,训练记录。
用newrb()创建RBF网络是一个不但尝试的过程,在创建过程中,需要不断增加中间层神经元和个数,知道网络的输出误差满足于显色丁的值为止。

newrbe()
该函数用于设计一个严格(exact)径向基网络。其调用格式为
net=newrbe(P,T,SPREAD)

radbas()
该函数为径向基传递函数。其调用格式为
A=radbas(N)
info=radbas(code)
其中,N为输入向量的S*Q维矩阵,A为函数返回矩阵,与N一一对应,即N中对的每个元素通过径向基函数得到A。
info=radbas(code)表示根据code值的不同返回有关函数的不同信息。

使用径向基函数来实现非线性的函数回归,代码如下

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);
%%网络建立和训练
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网络对同意函数进行拟合。


net=newrb(x,F);
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];

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])