在开始这个话题之前要告诉大家一个不幸的消息:RBF神经网络无论如何都替代不了传统的向前传播型网络,肯能你马上就要滑走了,但请等等!!!这并不妨碍RBF在如今各行各业中的广泛应用。可以打个比方说RBF是方仲永,那个最终泯然众人的家伙,但是其年幼时的风光、天才的智慧也值得我们来说一说!
资源戳这里:RBF神经网络的实际应用——曲线拟合-机器学习文档类资源-CSDN下载
径向基(RBF)网络是一个三层的网络,除了输入输出之外仅有一个隐藏层。隐藏层中的转换函数是局部响应的高斯函数,而其他向前神经网络,转换函数一般都是全局响应函数,由于这样的不同,要实现同样的功能,RBF神经网络需要更多的神经元,这就是RBF神经网络不能取代标准向前神经网络的原因。但是这也正是RBF优于其他网络的原因,它的网络模型更精简、训练时间更短。同时它对函数的逼近也是最优的,可以以任意精度逼近任意连续函数。隐层中神经元越多,逼近越精确!
RBF是一种两层向前型神经网络,因包含一个具有径向基函数神经元的隐层和一个具有线性神经元的输出层而得名。
径向基神经元的传递函数有各种各样的形式,但最常用的是高斯函数(radbas)。与之前介绍的神经元不同,
如何计算各单元值:
隐单元计算方法如下
更多可以戳这里:RBF神经网络是什么? - 知乎
RBF神经网络的训练可以分为两个阶段:
第一阶段为无监督学习,从样本数据中选择记忆样本/中心点;可以使用聚类算法,也可以选择随机给定的方式。
第二阶段为监督学习,主要计算样本经过RBF转换后,和输出之间的关系/权重;可以使用BP算法计算、也可以使用简单的数学公式计算。
1. 随机初始化中心点
2. 计算RBF中的激活函数值,每个中心点到样本的距离
3. 计算权重,原函数:Y=GW
4. W = G^-1Y
RBF网络能够逼近任意非线性的函数(因为使用的是一个局部的激活函数。在中心点附近有最大的反应;越接近中心点则反应最大,远离反应成指数递减;就相当于每个神经元都对应不同的感知域)。
可以处理系统内难以解析的规律性,具有很好的泛化能力,并且具有较快的学习速度。
有很快的学习收敛速度,已成功应用于非线性函数逼近、时间序列分析、数据分类、模式识别、信息处理、图像处理、系统建模、控制和故障诊断等。
当网络的一个或多个可调参数(权值或阈值)对任何一个输出都有影响时,这样的网络称为全局逼近网络。由于对于每次输入,网络上的每一个权值都要调整,从而导致全局逼近网络的学习速度很慢,比如BP网络。
如果对于输入空间的某个局部区域只有少数几个连接权值影响输出,则该网络称为局部逼近网络,比如RBF网络。
BP神经网络(使用Sigmoid激活函数)是全局逼近;RBF神经网络(使用径向基函数作为激活函数)是局部逼近;
相同点:
不同点:
%%清空环境变量
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神经网络
%采用approximate RBF神经网络,spread为默认值
net=newrb(x,F);
%%建立测试样本
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];
%%使用建立的RBF网络进行模拟,得出网络输出
ty=sim(net,tx);
%%使用图像,画出三维图
%真正的函数图像
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);
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])