目前,在人工神经网络的实际应用中,绝大部分的神经网络模型是采用误差逆传播(error BackPropagation, BP)网络和它的变化形式径向基函数(Radial Basis Function, RBF)神经网络。RBF网络是一种高效的前馈式神经网络,它具有其他前向网络所不具有的最佳逼近性能和全局最优特性,并且结构简单,训练速度快。同时,它也是一种可以广泛应用于模式识别、非线性函数逼近等领域的神经网络模型。

1.     RBF网络的基本思想

RBF神经网络属于前向神经网络类型,网络的结构与多层前向网络类似,是一种三层的前向网络。第一层为输入层,由信号源结点组成;第二层为隐藏层,隐藏层节点数视所描述问题的需要而定,隐藏层中神经元的变换函数即径向基函数是对中心点径向对称且衰减的非负非线性函数,该函数是局部响应函数,而以前的前向网络变换函数都是全局响应的函数;第三层为输出层,它对输入模式作出响应。

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

2.     RBF神经网络学习算法

学习算法具体步骤如下:

R语言BP神经网络预测模型 rbf神经网络拟合_bp网络拟合函数 matlab

R语言BP神经网络预测模型 rbf神经网络拟合_bp网络拟合函数 matlab_02

3. RBF 神经网络拟合未知函数

R语言BP神经网络预测模型 rbf神经网络拟合_bp网络拟合函数 matlab_03

在使用精确( exact )径向基网络来实现非线性函数的回归例子中,共产生了301个样本,全部作为网络的训练样本,使用图形可视化来观察拟合效果。

在使用近似( approximate)径向基网络对同一函数进行拟合的例子中,共产生了400个训练数据和961个验证数据,使用400个训练数据训练RBF 网络后,使用训练好的网络来预测961个验证数据的结果,并通过可视化的方法观察RBF 神经网络的拟合效果。

4.     MATLAB 实现结果

代码运行后的结果如图2,3,4所示。

R语言BP神经网络预测模型 rbf神经网络拟合_rbf神经网络_04

R语言BP神经网络预测模型 rbf神经网络拟合_bp网络拟合函数 matlab_05

R语言BP神经网络预测模型 rbf神经网络拟合_bp网络拟合函数 matlab_06

由图2 和图4可知,神经网络的训练结果能较好逼近该非线性函数F,由误差图可知,神经网络的预测效果在数据边缘处的误差较大,在其他数值处的拟合效果很好。网络的输出和函数值之间的差值在隐藏层神经元的个数为100 时已经接近于0 ,说明网络输出能非常好地逼近函数。

5.     MATLAB主程序代码

% % 消空环境变量

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 神经网络

net=newrb(x, F);

%采用approximate RBF神经网络。spread为默认值

%%建立测试样本

% generate thetesting 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];

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

F=20+x1.^2-10*cos(pi*x1)+x2.^3-10*cos(pi*x2);

%%建立RBF 神经网络

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