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

【原理】RBF神经网络-训练原理(中)

作者 : 老饼 发表日期 : 2026-03-13 10:21:20 更新日期 : 2026-05-13 08:44:10
老饼讲解-简单易懂,干货满满,爽过嗦螺!


好了,上节我们说了RBF神经网络是如何使用插值法进行求解的了,这节我们继续来说说它的OLS法,它是插值法的改进,如果说插值法是最基础的算法,那么OLS法就是日常中所使用的方法了,后面我们使用的都是OLS算法。

一、RBF模型求解之-OLS算法

前面我们已经了解了插值法求解RBF神经网络的方法了,它的特点是训练误差一定为0,但同时它也有一个很让人难受的缺点:有多少个样本,就有多少个隐节点!在数据较少时还好,但如果数据稍微多一些,模型就非常庞大了,正是如此,所以就有了OLS算法。

1.1. OLS算法是什么

OLS算法全称为Orthogonal least squares正交最小二乘法,它的提出就是为了解决RBF插值法隐节点过多的问题。其实它的思路也很简单,无非就是插值法的隐节点过多嘛,所以它逐个挑选隐节点添加到模型中,直到误差足够小为止:

RBF神经网络-OLS法-误差下降过程

如图所示,n个样本就生成了n个待选隐节点,然后OLS算法逐个从中挑选能让误差最大下降的隐节点,添加到模型之中,随着隐节点越来越多,模型的误差就越来越小,当全部隐节点都添加时,就与插值法一样了,此时误差就为0了,但实际中,我们会设置一个目标误差goal,当模型的mse  goal时,就停止添加隐节点了。

每次应该选择哪个隐节点才能使模型误差下降最大呢?这就是OLS算法的核心了,这里我们不再展开,因为它的实现略为复杂,但对使用RBF神经网络没太大帮助,如果想了解可以移步《RBF神经网络-自实现代码》,里面有详细原理讲解,以及自写代码复现matlab的newrb的效果。

好了,对于OLS算法,我们大概就知道它是怎么一回事了。

1.2. RBF神经网络-OLS算法-例子

在matlab中,使用newrb来构建RBF神经网络时,调用的就是OLS算法,下面我们使用newrb函数来感受一下OLS算法的效果,具体示例如下:

% 本代码用于展示如何使用newrb构建一个RBF径向基神经网络
% 来自《老饼讲解-RBF神经网络》www.bbblearn.com ,matlab版本:2018a
%--------数据准备----------                              
x   = linspace(-pi,pi,15);                      % 自变量x采样
y   = sin(x);                                   % 函数值y
%--------网络训练----------                              
[net,tr] = newrb(x, y, 0.01,1);                 % 以X,Y建立RBF神经网络,目标误差0.01,RBF宽度参数spread=1
py = sim(net,x);                                % 用建好的网络进行预测,这里的x是要用来进行预测的输入

% -------打印结果----------
disp('------训练过程-------')                   % 标题
train_record = [tr.epoch;tr.perf]               % 训练过程
disp('------训练结果-------')                   % 标题
hn  = size(net.lw{2,1},2);                      % 计算隐节点个数  
mae = mean(abs(py-y));                          % 计算MAE
disp(['隐节点个数:' ,num2str(hn)])              % 打印隐节点个数
disp(['MAE:' ,num2str(mae)])                    % 打印隐节点个数
% 画出拟合曲线
plot(x,y,'*')                                   % 画出样本点
hold on                                         % 先hold on 一下
t= -pi:0.1:pi;                                  % 生成拟合曲线的x
simt = sim(net,t);                              % 拟合的y
plot(t,simt,'r')                                % 画出拟合曲线
title('模型拟合结果')                           % 标题
legend('训练样本点','拟合曲线')                 % 图例

代码运行结果如下:

模型的拟合结果

RBF神经网络训练过程与结果

从训练过程可以看到,没添加隐节点时,mse误差为0.4667,然后逐步添加隐节点,当添加了3个隐节点时,mse为0.007,此时比预设的目标误差0.01更小,因此就退出训练了,最终模型只需3个隐节点,就构建了一个效果不错的RBF神经网络,它已经能较好的拟合sin函数了。

结束语

总的来说,插值法是直接用所有RBF来建模,而OLS法设定一个目标误差,然后在满足目标误差的同时、挑尽量少的RBF来建模。如果把goal设为0时,它的结果就和插值法一样了。在实际使用中我们一般都使用OLS法(newrb函数)来建模,它明显比插值法(newrbe函数)更好用一些。



图标 评论
添加评论