目录
老饼讲解:一步一步上手学习

【模型】一篇入门-RBF径向基神经网络

作者 : 老饼 发表日期 : 2025-12-16 23:51:21 更新日期 : 2026-05-10 20:18:56
老饼讲解-简单易懂,干货满满,爽过嗦螺!


RBF神经网络(Radial Basis Function Neural Network)起源于RBF插值,它是一种以RBF函数作为激活函数的神经网络,一般可以用来解决任意的数值拟合问题,这节我们就一起来看看RBF神经网络是个什么东西,并看看在matlab如何实现一个RBF神经网络,用来解决数值拟合问题。

一、RBF神经网络

由于RBF神经网络就是基于RBF函数的一种神经网络,所以我们先来看看RBF函数,再来说RBF神经网络。

1.1. RBF函数

RBF函数,也就是径向基函数(Radial Basis Function),它是一种形态为钟形的函数,如下:

RBF径向基函数

我们也不讲RBF函数的具体定义是什么了,大家应该都能get到它的特点,就是像一个古钟一样。

好了,最常见的RBF函数就是高斯函数,如下:

其中,当都取为0时,,此时它以0为中心,可以认为它是标准形态的RBF,进一步地,加入参数后,则是对标准形态进行平移和拉伸。

当x为多维时,高斯函数则进一步表示为:

其中,代表向量的二范数,也就是所有元素的平方和再开根号

知道了RBF函数,我们就可以开始了解RBF神经网络了。

1.2. RBF神经网络

我们以"2个输入、3个RBF、1个输出"的RBF神经网络为例,RBF神经网络的拓扑结构如下:

RBF神经网络-拓扑结构

如图所示,RBF神经网络由输入层、RBF层(隐层)和输出层构成,所以它是一个三层的神经网络。

我们先来看它外层的结构,也就是输出层与RBF层的关系,如下:

也就是说,输出y就是各个RBF之和,然后再加上一个阈值。其中,代表第i个输出与第j个RBF的连接权重,代表第i个输出的阈值,总的来说,RBF神经网络,其实就是由一堆RBF函数组成的模型。

进一步地,各个就是输入层到RBF层的运算了,也就是把输入映射为一个一个的RBF。

 RBF神经网络-输入层到隐层

好了,那各个RBF具体又是什么呢?使用不同的RBF函数,就会有不同的表示,但一般来说,我们都是使用高斯函数来作为RBF函数,也就是:

其中,代表输入层与第i个RBF的权重,实际它代表了第i个RBF的中心          

代表输入层与第i个RBF的阈值,实际它代表了第i个RBF的宽度

二、RBF神经网络-具体计算

好了,我们直接拉点数据出来,说说RBF神经网络是怎么计算的吧,这样就具体多了。

2.1. 模型的参数

以2个输入,3个隐节点,2个输出的RBF神经网络为例,设模型的权重、阈值如下:

1. 隐层的权重、阈值为:

  

备注:的第i行代表第i个隐节点(RBF)的权重和阈值。

2. 输出层的权重、阈值为:

  

备注:的第i行代表第i个输出节点的权重和阈值

2.2. 模型的计算过程

假设模型的输入为,则RBF神经网络的输出如下计算:

Step-1. 计算隐层激活值(也就是径向基的值): 


  


Step-2.计算输出值


 


仔细看一遍上面的计算过程,就可以非常具体的了解RBF神经网络的结构细节了~

三、RBF神经网络的训练

RBF神经网络一般有三种训练方法:

1. 插值法               :matlab的工具箱中的newrbe函数 

2. OLS法               :matlab的工具箱中的newrb函数

3. K-means聚类法 :matlab不提供该方法      

下面我们来说说这三种方法分别是什么。

3.1. RBF训练-插值法

插值法是训练RBF神经网络的一种最基础的方法,它会以每个样本为中心,各自生成一个RBF,然后再求解最外层的参数,从而使模型的输出与样本的真实y完全一致。

在matlab的工具箱中,可以通过newrbe函数,就会使用插值法来构建一个RBF神经网络。

3.2. RBF训练-OLS法

插值法虽然能够让模型的输出与真实y完全一致,但它为每个样本都生成一个RBF,这使得模型非常庞大,而且容易过拟合,而OLS法则是在插值法的基础上,逐个添加RBF,直到模型误差小于目标值。

OLS训练的过程

在matlab的工具箱中,可以通过newrb函数,就会使用插值法来构建一个RBF神经网络。

3.3.RBF训练- kmeans法

kmeans法是指,先用kmeans对样本聚类,再以聚类中心来生成RBF,进一步求解最外层的参数。在matlab的RBF神经网络工具箱中不提供kmeans法。

三种方法中,一般都使用OLS法,它使用较少的隐节点的同时,又能保证训练精度。

四、RBF神经网络-代码实现

好了,下面我们就使用matlab的newrb函数,实现一个RBF神经网络拟合样本数据。

 具体代码实现如下:

% 本代码用于展示如何用matlab构建一个RBF神经网络
% 本代码来自《老饼讲解-神经网络》www.bbblearn.com ,matlab版本:2018a
close all 
x  = [-2 -1 0 1 2];                    % 输入数据
y  = [3 2 3 1 2];                      % 输出数据
[net,tr] = newrb(x, y, 0.01, 0.5);     % 用X,y构建RBF神经网络,目标误差0.01,宽度参数0.5
simY = sim(net,x)                      % 用建好的网络拟合原始数据
perf = tr.perf                         % 误差下降记录
t    = -2:0.1:2;                       % 生成拟合曲线的x
simt = sim(net,t);                     % 拟合曲线的y
plot(x,y,'*',t,simt ,'r')              % 画出拟合曲线

可以看到,在代码中我们使用了newrb来构建RBF神经网络,也就是使用OLS法,所以它会逐个添加隐节点来构建RBF神经网络,直到最后的误差满足我们的要求。

代码运行结果如下:

RBF神经网络的拟合结果

从拟合曲线图可以看到,训练的RBF神经网络基本能拟合我们的训练样本。

RBF神经网络的预测结果

perf展示了逐个添加隐节点时,模型误差的下降情况,也就是没有任何隐节点时,模型误差为0.56,添加了一个隐节点后,误差为0.4255,由于我们设置的目标误差为0.01,所以它会继续添加下去,直到添加了4个隐节点,最后误差为0。

总结

总的来说,RBF神经网络就是一种以RBF作为隐层节点的三层神经网络,训练方法主要有插值法、OLS法、kmeans法,但一般都使用OLS法,它在保障满足误差精度的前提下,使用尽量少的隐节点来构建模型,划算极了。



图标 评论
添加评论