机器学习——RBF神经网络

2023-11-15

RBF神经网络

本文部分资料与案例来源:《MATLAB神经网络43个案例分析》

RBF神经网络简述

再介绍RBF神经网络之前我们先来看一下径向基函数(RBF),在百度百科上,RBF定义如下:

径向基函数是一个取值仅仅依赖于离原点距离的实值函数,也就是Φ(x)=Φ(‖x‖),或者还可以是到任意一点c的距离,c点称为中心点,也就是Φ(x,c)=Φ(‖x-c‖)。

简单来说,RBF就是一个表示空间中一点到中心点距离的函数,常用的RBF主要有以下几种:
RBF
而采取径向基函数作为激活函数的神经网络就是RBF神经网络,RBF神经网络是一种前向神经网络(信号一直向前传递不会返回),是一种三层的前向网络。RBF神经网络的第一层为输入层,由信号源节点组成;第二层为隐藏层,隐藏层中神经元变换函数即为径向基函数;第三层是输出层,它对模式输入做出响应。
上面这些文字可能有一些抽象,接下来我们以下图为例讲一讲RBF神经网络大概是个什么东西:
下图是一个简单的径向基神经网络模型:
在这里插入图片描述

从图中可以看到,径向基神经网络的激活函数是以输入向量和权值向量之间的距离作为自变量的。即输入隐藏层的数据为输入变量 X ⃗ = [ x 1 , x 2 , … , x m ] \vec X=[x_1,x_2,\dots,x_m] X =[x1,x2,,xm]与权值向量 W ⃗ = [ w 1 , w 2 , … , w m ] \vec W=[w_1,w_2,\dots,w_m] W =[w1,w2,,wm]的距离,一般取 ∣ ∣ d i s t ∣ ∣ = ∑ i = 1 m ( x i − w i ) 2 ||dist||=\sqrt{\sum_{i=1}^m{(x_i-wi)^2}} ∣∣dist∣∣=i=1m(xiwi)2 。图中的b为阈值,当 ∣ ∣ d i s t ∣ ∣ ||dist|| ∣∣dist∣∣的值小于b时,将不会激活神经网络,用于调节神经网络的灵敏度;而权值向量 W ⃗ \vec W W 就是我们找到的数据中心。

隐藏层的激活函数一般取高斯函数: f ( x ) = e − 1 2 σ 2 x 2 f(x)=e^{- \frac 1{2\sigma^2}x^2} f(x)=e2σ21x2,其中 σ \sigma σ
高斯函数的方差,是一个常数。隐藏层每个节点的输出就是输入的 ∣ ∣ d i s t ∣ ∣ ||dist|| ∣∣dist∣∣通过激活函数变换后的函数值。

至于输出y,由于这个模型只有一输出,隐藏层也只有一个结点,因此 y = e − 1 2 σ 2 ∣ ∣ d i s t ∣ ∣ 2 y=e^{- \frac 1{2\sigma^2}||dist||^2} y=e2σ21∣∣dist2

对于更为复杂一点的径向基神经网络,其隐藏层具有多个结点,其结构如下所示:
在这里插入图片描述
此时隐藏层有多个向输出层的输出,而输出层的输出则是隐藏层输出的线性加权平均,为了区别输入层的权值向量,我们用 w i 2 w^2_i wi2表示第i个隐藏层结点的权值,于是输出层的输出为 y = o u t p u t ( ∑ i = 1 n w i 2 R B F ( X ⃗ , W ⃗ i ) ) y=output(\sum_{i=1}^nw^2_iRBF(\vec X,\vec W_i)) y=output(i=1nwi2RBF(X ,W i)), W ⃗ i \vec W_i W i为第i个隐藏层结点的中心点向量,output()函数则需要根据不同的场景使用不同的函数,例如二分分类我们则可以使用sign()函数。
更为一般的神经网络结构则是隐藏层输出层都含有多个结点的结构,原理与上面的简单结构相差不大,这里就不在介绍。

在这里插入图片描述

RBF神经网络算法步骤

RBF神经网络学习算法需要求解的参数有三个:基函数的中心向量 W ⃗ \vec W W 、方差 σ \sigma σ以及隐含层到输出层的权值。根据选取的径向基函数中心的方法不同,RBF神经网络有不同的学习方式。下面将介绍自组织选取中心的RBF神经网络学习法。该方法由两个阶段组成:一是自组织学习阶段,此阶段为无导师学习过程,求解隐藏层基函数的中心向量与方差;二是有导师学习阶段,此阶段求解隐藏层到输出层之间的权值。

我们以高斯函数作为径向基神经网络的激活函数,则激活函数可以表示为:
R ( X ⃗ p − W ⃗ i ) = e − ∣ ∣ X ⃗ p − W ⃗ i ∣ ∣ 2 2 σ 2 R(\vec X^p-\vec W^i)=e^{-\frac {||\vec X^p-\vec W^i||^2}{2\sigma^2}} R(X pW i)=e2σ2∣∣X pW i2
w i 为高斯函数中心 ∣ ∣ x i − w i ∣ ∣ 为欧式范数 σ 为高斯函数方差 X ⃗ p = [ x 1 p , x 2 p , … , x m p ] 为第 p 个输入样本 W ⃗ i = [ w 1 i , w 2 i , … , w m i ] 为第 i 个隐藏层结点径向基函数的中心向量 p = 1 , 2 , … , P , P 为样本总数 w_i为高斯函数中心\\||x_i-w_i||为欧式范数\\\sigma为高斯函数方差\\\vec X^p=[x^p_1,x^p_2,\dots,x^p_m]为第p个输入样本\\\vec W^i=[w^i_1,w^i_2,\dots,w_m^i]为第i个隐藏层结点径向基函数的中心向量\\p=1,2,\dots,P,P为样本总数 wi为高斯函数中心∣∣xiwi∣∣为欧式范数σ为高斯函数方差X p=[x1p,x2p,,xmp]为第p个输入样本W i=[w1i,w2i,,wmi]为第i个隐藏层结点径向基函数的中心向量p=1,2,,PP为样本总数

径向神经网络的输出为:
y j = ∑ i = 1 h w i j 2 e − ∣ ∣ X ⃗ p − W ⃗ i ∣ ∣ 2 2 σ 2 y_j=\sum_{i=1}^hw^2_{ij}e^{-\frac {||\vec X^p-\vec W^i||^2}{2\sigma^2}} yj=i=1hwij2e2σ2∣∣X pW i2
w i j 2 为隐藏层第 i 个结点到输出层第 j 个结点的权值 i = 1 , 2 , … , h 为隐含层节点数 y j 为神经网络的第 j 个输出结点的实际输出。 w^2_{ij}为隐藏层第i个结点到输出层第j个结点的权值\\i=1,2,\dots,h为隐含层节点数\\y_j为神经网络的第j个输出结点的实际输出。 wij2为隐藏层第i个结点到输出层第j个结点的权值i=1,2,,h为隐含层节点数yj为神经网络的第j个输出结点的实际输出。
算法得具体步骤如下:
步骤1:基于K-均值聚类方法求取基函数中心:

  1. 网络初始化:随机选取h个训练样本作为聚类中心 c i ( i = 1 , 2 , … , h ) c_i(i=1,2,\dots,h) ci(i=1,2,,h);
  2. 将输入的训练样本集合按最近邻规则分组:即按照样本 X ⃗ p \vec X^p X p与已选择得聚类中心之间的欧氏距离将样本分配到不同的集合 ϱ i ( i = 1 , 2 , … , h ) 中 \varrho_i(i=1,2,\dots,h)中 ϱi(i=1,2,,h)
  3. 重新调整聚类中心:计算各个集合中训练样本得平均值,将这些均值作为新的聚类中心,如果新的聚类中心不在发生变化,则所得到的 c i c_i ci即为神经网络的最终的基函数中心 W i W^i Wi,否则返回2进行下一轮中心求解。
    步骤二:求解方差 σ \sigma σ:
    高斯函数的方差计算公式如下:
    σ = W m a x 2 h \sigma=\frac {W_{max}}{\sqrt{2h}} σ=2h Wmax
    W m a x 为选取的聚类中心之间的最大距离, h 为隐藏层结点个数 W_{max}为选取的聚类中心之间的最大距离,h为隐藏层结点个数 Wmax为选取的聚类中心之间的最大距离,h为隐藏层结点个数
    步骤3:计算隐藏层和输出层之间的权值:
    w i j = e h c m a x 2 ∣ ∣ X ⃗ p − W ⃗ i ∣ ∣ 2 , i = 1 , 2 , … , h ; p = 1 , 2 , … , P w_{ij}=e^{\frac h{c^2_{max}}||\vec X^p-\vec W^i||^2},i=1,2,\dots,h;p=1,2,\dots,P wij=ecmax2h∣∣X pW i2i=1,2,,h;p=1,2,,P
    从上式中我们可以看出j=p,即输入样本数目等于输出结果数目。

使用RBF神经网络进行曲线拟合

其相关函数可以查阅Matlab文档:
newrb(P,T,goal,spread,MN,DF);
net = newrbe(P,T,spread);
A = radbas(N,FP);
代码如下:

%% Matlab神经网络43个案例分析
 
%% 清空环境变量
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);

%% 建立测试样本

% generate the testing data
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);

%% 使用图像,画出3维图

% 真正的函数图像
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])


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习——RBF神经网络 的相关文章

随机推荐

  • springboot (2.0) 设置监听器,过滤器,拦截器

    springboot 2 0 设置监听器 过滤器 拦截器 github springboot2 0 项目名 springboot filter 1 项目结构和配置顺序 1 1配置顺序 listener WebListener声明为liste
  • 自己总结的数据库系统概论笔记,需要的拿去用

    1 绪论 1 1 概念 数据库系统包含 数据库 数据库管理系统 数据库管理员 应用系统 数据库 数据库是长期存储在计算机内 有组织的 可共享的大量数据的集合 数据库中的数据按照一定的数据模型 组织 描述和储存 具有较小的冗余度 较高的数据独
  • Angular --官方文档使用 Angular CLI创建项目

    1 在node环境下 标配 node v npm v 指令在命令窗口查看两个的版本号 node高于6 9 3 npm版本高于3 0 0 如果你是新安装的话 就不要考虑这个问题了 2 全局安装 Angular CLI npm install
  • Java线程池的使用(简单实现)

    一 线程池的概念 创建Java线程需要给线程分配堆栈内存以及初始化内存 还需要进行系统调用 频繁地创建和销毁线程会大大降低系统的运行效率 采用线程池来管理线程有以下好处 提升性能 线程池能独立负责线程的创建 维护和分配 线程管理 每个Jav
  • Navicat 连接Oracle时提示oracle library is not loaded的问题解决

    Navicat 连接Oracle时提示oracle library is not loaded的问题解决 笔者使用的Navicat Premium 12启动界面截屏 请注意是64位的 笔者win7 64位系统 连接Oracle时提示 ora
  • Eclipse报错-The selection cannot be launched,and there are no recent launches

    Eclipse报错 报错 The selection cannot be launched and there are no recent launches 怎么解决 解决办法 1 检查分号 2 检查main函数 3 检查main函数后面括
  • 【buildroot】buildroot使用总结

    文章目录 一 buildroot使用步骤 1 构建图形配置界面 2 配置Target options 3 配置Build options 4 配置Toolchain 5 配置 System configuration 6 配置 Filesy
  • 运用顺序表实现多项式相加

    本题要求输入两个一元多项式 然后输出它们的和 相加后得到的一元多项式 输入格式 输入一个整数n 表示输入组数 然后依次输入每一组数据 输入一个整数A 表示多项式的项数 小于100 然后输入A对整数 每一对整数表示对应项的指数和系数 输出格式
  • 通配符

    1 通配符 用来匹配文件名或目录 匹配文件内容用正则表达式 匹配任意一个字符 匹配0个或任意多个字符 也就是可以匹配任何内容 匹配括号中的任意一个字符 eg abc 匹配一个字符 或a 或b 或c 匹配括号中任意一个字符 代表一个范围 eg
  • 词向量的运算与Emoji生成器

    本文参考参考 没有对框架内容进行学习 旨在学习思路和方法 1 词向量运算 之前学习RNN和LSTM的时候 输入的语句都是一个向量 比如恐龙的名字那个例子就是将一个单词中的字母按顺序依次输入 这对于一个单词的预测是可行的 但是对于想让机器学习
  • Qt - MVC模型/视图编程

    MVC模型 视图编程 Qt中的模型 视图架构用来实现大量的数据存储 处理及显示 MVC Model View Controller 包括了3个组件 模型 Model 是应用对象 用来表示数据 视图 View 是模型的用户界面 用来显示数据
  • mac安装eclipse报错:Failed to create the Java Virtual Machine

    目录 1 报错场景 2 解决办法 1 查看本机安装的JAVA环境 2 修改info plsit文件 1 报错场景 macosx安装Eclipse的时候报错 Failed to create the Java Virtual Machine
  • @InitBinder解析和@ModelAttribute参数注入分析

    当我们请求 hello时 传参数u username如何注入到user中的username 样例 Controller public class HelloController RequestMapping hello public Str
  • Activiti7与SpringBoot整合开发

    SpringBoot 整合 Activti7 的具体步骤大概包括以下4步 1 添加 SpringBoot 整合 Activti7 的相关jar包 2 添加 SpringSecurity 安全框架的整合配置信息 3 使用 Activti7 新
  • 用递归解决八皇后问题

    单纯用递归解决该问题 就是利用一个一维数组表示出每种解 例如arry n i 其中n表示第n行的棋子 而 i 表示该 行的棋子所在列的位置 该问题可以用贪心算法进行优化 这是针对初学者练习递归时的一种解决办法 该代码并不是为了优化解决问题
  • flutter 开发踩坑集

    一 TextField设置高度后 文字无法居中 解决方案 TextField style TextStyle decoration InputDecoration prefixIcon ImageUtils getImage search
  • 区块链技术发展现状与展望 论文阅读摘要(袁勇、王飞跃)

    阅读摘要
  • 前端代码审查和测试

    检查代码的概念和过程 来自百度回答 https zhidao baidu com question 499002410583455364 html 1 代码检查法 1 桌面检查 这是一种传统的检查方法 由程序员检查自己编写的程序 程序员在程
  • GPT带我学-设计模式-命令模式

    1 你知道设计模式的命令模式吗 是的 我知道设计模式中的命令模式 命令模式是一种行为型设计模式 它将请求封装成一个对象 从而允许使用不同的请求 队列或日志来参数化其他对象 命令模式还支持撤销操作 并且可以提供事务的实现 在命令模式中 有四个
  • 机器学习——RBF神经网络

    RBF神经网络 本文部分资料与案例来源 MATLAB神经网络43个案例分析 RBF神经网络简述 再介绍RBF神经网络之前我们先来看一下径向基函数 RBF 在百度百科上 RBF定义如下 径向基函数是一个取值仅仅依赖于离原点距离的实值函数 也就