神经网络杂文

【Demo】径向基神经网络-Matlab代码Demo

作者 : 老饼 发表日期 : 2022-06-09 15:09:20 更新日期 : 2023-05-09 06:23:06
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com



径向基神经网络由J.Moody和C.Darken在20世纪80年代末提出

它是一种基于数学原理的神经网络,可以逼近任意曲线

本文讲解matlab神经网络工具箱使用径向基神经网络的Demo

以及入参说明(基本参考于matlab2014b函数newrb的官方说明)



  01. newrb-简单Demo  



matlab工具箱建立径向基神经网络(newrb)的Demo代码

(2014b版matlab实测已跑通)


%代码说明:径向基newrb的matlab工具箱使用Demo
%来自《老饼讲解神经网络》www.bbbdata.com ,matlab版本:2014b
%-----------------------------------------------------
%----数据准备----
x1  = 1:0.2:10;
x2  = -5:0.2:4;
X   = [x1;x2];              % 输入数据,注意中间是分号
Y   = sin (X(1,:))+X(2,:);  % 输出数据

%----网络训练----
net = newrb(X, Y, 0, 2);    % 以X,Y建立径向基网络,目标误差为0,径向基的spread=2
simY = sim(net, X);         % 用建好的网络拟合原始数据

%----结果对比----
figure(1);
t = 1:size(Y,2);
plot(t,Y,'*',t,simY,'r')  
✍️补充:为什么newrb不需要训练
 
有些同学会非常奇怪,
为什么径向基神经网络不需要调用train来训练网络(像BP神经网络就需要train)
这是因为matlab工具箱在调用newrb建立径向基神经网络的时候,
就已经使用正交最小二乘(OLS)优选算法对神经网络的权重阈值求得最优解了,
所以之后不再需要对网络进行训练





  02. newrb工具箱说明  


本节翻译matlab给出的doc newrb文档

帮助大家更进一步使用newrb

为方便大家理解,笔者作了些少改动


语法:


net = newrb(P,T,goal.spread,MN,DF)



描述:


径向基神经网络可以用于拟合函数
newrb会不断向径向基网络的隐层添加神经元,直到网络达到指定的均方误差目标
net=newrb(P,T,goal.spread,MN,DF) 至少需要2个入参
返回一个新的径向基神经网络



入参说明:


 P: R行Q列的输入矩阵,R个输入变量,Q个样本
 T: S行Q列的目标输出矩阵,S个输出变量,Q个样本
 goal: 均方误差目标(默认=0.0)
 spread: 径向基函数的扩展系数(默认=1.0)
 MN :隐层神经元的最大个数(默认是Q)
 DF: 每添加DF个神经元,在command窗口打印一次当前结果(文档说默认是25,本人试了,默认是50)
其中,扩展系数spread 越大,拟合的函数越平滑
太大的扩展系数,对于拟合迭宕起伏的函数,
会需要非常多的神经元;太小的扩展系数,
在拟合平滑的函数时会需要很多神经元,而且泛化能力不好
 
Too large a spread means a lot of neurons are required to fit a fast-changing function. 
Too small a spread means many neurons are required to fit a smooth function, 
and the network might notgeneralize well.

对于给定的问题,通过设置不同的扩展系数调用newrb,来找到最好的扩展系数



     例子   



对于给定的输入 P和目标T,你可以设计一个径向基神经网络如下:

P = [1 2 3];
T = [2.0 4.1 5.9];
net = newrb(P,T);

下面网络拟合一个新的输入

P = 1.5;
Y = sim(net,P)





   03. newrb的网络结构与构建逻辑   


本节讲解newrb神经网络的结构

并简单描述newrb神经网络是如何构建出来的


     newrb的网络结构    


newrb的结构
 
 newrb创建一个三层的神经网络
   👉 
第一层是输入层    了   
 
👉 第二层是径向基隐神经元
 
👉 第三层是输出层        

网络的运算
 
  输入层到隐层的计算
 
 用dist来计算"输入层到隐层的权重"与输入       
 用netprod计算隐层阈值                      
  

 隐层到输出层的计算
 
 用dotprod计算隐层激活值与隐层到输出层的权重 
用netsum计算输出层的阈值                  





    newrb的生成逻辑   


刚初始化的径向基层没有神经元,
不断的重复下面的步骤直到神经网络的均方误差达到目标

1)以所有样本建立径向基,作为隐节点池                                                   
2)找到令网络预测误差下降最多的隐节点,添加到网络                              
3)重新计算网络误差                                                                                 
4)检测是否达到终止条件(误差达到目标或没有可用隐节点),否则重复2、3






  End  





联系老饼