基于matlab的RBF神经网络的非线性方程回归实现

1 引言

1.1研究背景及意义

实际应用结果表明, 该神经网络可以很好地克服BP 神经网络学习过程的收敛过分 依赖于初值和可能出现局部收敛的缺陷, 具有较快的运算速度、较强的非线性映射能力和较好的效能。RBF径向基函数,取值仅依赖于离原点距离的实值函数,任何满足这种特性的函数就叫径向基函数。一般采用欧氏距离,也可以用其他距离。RBF的中心点确定以后,这种映射关系也就确定了。而隐含层空间到输出空间的映射是线性的,即网络的输出是隐单元输出的线性加权和,此处的权即为网络可调参数。由此可见,从总体上看,网络由输入到输出的映射是非线性的,而网络输出对可调参数而言却又是线性的。这样网络的权就可由线性方程组直接解出,从而大大加快学习速度并避免局部极小问题。

1.2本文研究内容与结构

本文中,我展示了使用matlab用可视化的方法观察准确RBF神经网络的拟合效果。1.m为严格(Exact)径向基网络来实现非线性的函数回归。2.m为RBF网络对同一函数拟合

2 实验数据

当我们在1.m中观察RBF神经网络拟合效果的原始数据

  1. m中产生训练数据

  1. 实验模型与方法

单隐层的前馈神经网络,使用径向基函数作为隐层神经元的激活函数,输出层则是对隐层神经元输出的线性组合(理论上可以设置多个隐层,但一般只设计一个隐层)。所以从输入空间到隐含层空间的变换是非线性的,而从隐含层空间到输出层空间变换是线性的。

根据Cover定理,低维空间不可分的数据到了高维空间会更有可能变得可分。换句话来说,RBF网络的隐层的功能就是将低维空间的输入通过非线性函数映射到一个高维空间,然后再在这个高维空间进行曲线的拟合,它等价于在一个隐含的高维空间寻找一个能最佳拟合训练数据的表面。

当RBF的中心点确定以后,这种映射关系也就确定了。而隐含层空间到输出空间的映射是线性的,即网络的输出是隐单元输出的线性加权和,此处的权即为网络可调参数。由此可见,从总体上看,网络由输入到输出的映射是非线性的,而网络输出对可调参数而言却又是线性的。这样网络的权就可由线性方程组直接解出,从而大大加快学习速度并避免局部极小问题。

从另一个方面也可以这样理解,多层感知器(包括BP神经网络)的隐节点基函数采用线性函数,通过激活函数来增加非线性因素;而RBF网络的隐节点的基函数采用距离函数(如欧氏距离),并使用径向基函数(如Gaussian函数)作为激活函数(bp网络中输入到隐层,隐层到输出都是非线性的,因为都有激活函数)。径向基函数关于n维空间的一个中心点具有径向对称性,而且神经元的输入离该中心点越远,神经元的激活程度就越低(值越小)。

    1.  RBF神经网络的训练

1.卷确定神经元的中心,常用有随机采样,聚类(聚类中心当成径向基函数的h个中心)

2.确定参数和阈值,最小均方误差LMS直接计算得到,或者通过梯度下降来对网络中的参数都进行监督训练优化,代价函数是网络输出和期望输出的均方误差

3.只要有足够多的隐层单元,RBF能以任意精度逼近任意连续函数线性的非线性函数。

    1. 径向基函数网络结构

径向基函数(Radial Basis Function, RBF)神经网络是一种单隐含层的三层前馈神经网络,网络结构如下图所示

 

3.3 实验训练参数及实验环境

(1)可视化拟合 ---1.m%% 网络建立和训练

% 网络建立 输入为[x1;x2],输出为F。Spread使用默认。

net=newrbe([x1;x2],F)

(2)非线性逼近---2.m

%% 产生训练样本(训练输入,训练输出)

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

实验环境为matlab2021a

3.4 RBF神经网络算法

便于分析,记RBF神经网络的输入为m维,隐含层有s1个神经元,输出层有s2个神经元。RBF神经网络隐含神经元的激活函数为如下所示的高斯基函数

 

为第j个隐含层神经元高斯基函数的中心向量, m表示网络输入的x维数,bj为第j个隐含层神经元高斯基函数的宽度。与之前提及的BP神经网络中的sigmod函数不同,高斯基函数只在有限的范围内,输入是非零的,超过一定的范围,其输出则为零。

b j越大,高斯基函数的非零输出区域越大,表明对输入的映射能力越强。

Cj表示非零输出区域的中心位置,输入离中心越近,其输出值会更大,表明高斯基函数对输入更加敏感。

    

  1. 实验结论

4.1采用RBF神经网络逼近非线性函数

可知,采用的RBF神经网络输入和输出层神经元数量都为1,设置隐含层神经元数量为10个。

由于RBF神经网络采用的激活函数在有限区域内输出为非零,因此在设计RBF神经网络的时候,需要根据网络的输入来确定每个隐含层神经元激活函数的参数,合适的网络参数能够提升网络的逼近效果和性能,而不合适的参数会导致神经网络训练失败,或者达不到想要的效果。

通常来说,参数需要与网络的输入相匹配,要保证输入在高斯基函数的有效映射区域内;同样的,根据输入的范围和高斯基函数的中心,来设置一个合适的宽度参数。

4.2神经网络拟合可视化结果

 

%% 网络的效果验证

% 我们将原数据回带,测试网络效果:

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 

4.3神经网络逼近结果

4.3.1 训练过程中收敛情况

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

net=newrb(x,F);

NEWRB, neurons = 0, MSE = 108.563

NEWRB, neurons = 2, MSE = 106.612

NEWRB, neurons = 3, MSE = 106.588

NEWRB, neurons = 4, MSE = 105.692

NEWRB, neurons = 5, MSE = 103.957

NEWRB, neurons = 6, MSE = 103.901

NEWRB, neurons = 7, MSE = 103.661

NEWRB, neurons = 8, MSE = 99.4239

NEWRB, neurons = 9, MSE = 99.3709

NEWRB, neurons = 10, MSE = 98.4437

NEWRB, neurons = 11, MSE = 98.4334

NEWRB, neurons = 12, MSE = 97.0947

NEWRB, neurons = 13, MSE = 97.0662

NEWRB, neurons = 14, MSE = 97.0623

NEWRB, neurons = 15, MSE = 96.9707

NEWRB, neurons = 16, MSE = 96.5273

NEWRB, neurons = 17, MSE = 89.0728

NEWRB, neurons = 18, MSE = 83.7398

NEWRB, neurons = 19, MSE = 82.6886

NEWRB, neurons = 20, MSE = 73.5795

NEWRB, neurons = 21, MSE = 68.2986

NEWRB, neurons = 22, MSE = 64.3154

NEWRB, neurons = 23, MSE = 56.6795

NEWRB, neurons = 24, MSE = 56.2971

NEWRB, neurons = 25, MSE = 48.7566

NEWRB, neurons = 26, MSE = 47.2739

NEWRB, neurons = 27, MSE = 45.9051

NEWRB, neurons = 28, MSE = 45.0112

NEWRB, neurons = 29, MSE = 42.8181

NEWRB, neurons = 30, MSE = 41.491

NEWRB, neurons = 31, MSE = 35.6978

NEWRB, neurons = 32, MSE = 35.0401

NEWRB, neurons = 33, MSE = 31.7462

NEWRB, neurons = 34, MSE = 30.1603

NEWRB, neurons = 35, MSE = 29.2863

NEWRB, neurons = 36, MSE = 28.3875

NEWRB, neurons = 37, MSE = 26.2179

NEWRB, neurons = 38, MSE = 24.2333

NEWRB, neurons = 39, MSE = 21.639

NEWRB, neurons = 40, MSE = 20.144

NEWRB, neurons = 41, MSE = 18.4123

NEWRB, neurons = 42, MSE = 15.9317

NEWRB, neurons = 43, MSE = 14.5087

NEWRB, neurons = 44, MSE = 11.1312

NEWRB, neurons = 45, MSE = 8.44281

NEWRB, neurons = 46, MSE = 6.90717

NEWRB, neurons = 47, MSE = 5.66637

NEWRB, neurons = 48, MSE = 4.84694

NEWRB, neurons = 49, MSE = 4.38789

NEWRB, neurons = 50, MSE = 3.67744

NEWRB, neurons = 51, MSE = 3.51838

NEWRB, neurons = 52, MSE = 3.23929

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RBF神经网络可以用于非线性系统辨识。下面是一个简单的matlab实现步骤: 1. 收集非线性系统的输入输出数据,构建训练集和测试集。 2. 设计RBF神经网络结构。一般包括输入层、隐藏层和输出层。其中,输入层节点数为输入变量的维数,输出层节点数为输出变量的维数,隐藏层节点数根据实际情况设置。 3. 初始化RBF神经网络参数。包括隐层节点的均值向量和方差矩阵,输出层的权重矩阵。 4. 训练RBF神经网络。使用训练集对神经网络进行训练,一般采用误差反向传播算法或者最小二乘法。训练的目标是最小化预测误差。 5. 测试RBF神经网络。使用测试集对神经网络进行测试,计算预测输出与实际输出之间的误差,评估神经网络的性能。 下面是一个简单的matlab代码示例: ```matlab % Load data load nonlinear_system_data % Set up RBF neural network input = X_train'; output = Y_train'; spread = 0.1; hidden = 10; net = newrb(input,output,0,spread,hidden); % Test RBF neural network input_test = X_test'; output_test = Y_test'; y_pred = sim(net,input_test); mse = mean((output_test - y_pred).^2); disp(['MSE on test set: ',num2str(mse)]) ``` 其中,nonlinear_system_data是一个mat文件,包含训练集和测试集的输入输出数据。X_train、Y_train、X_test、Y_test分别是训练集和测试集的输入和输出。spread是RBF神经网络的传播参数,hidden是隐藏层节点数。newrb函数可以自动设置神经网络参数。sim函数用于对测试集进行预测。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值