对于RBF神经网络的原理已经在我的博文《机器学习之径向基神经网络(RBF
NN)
》中介绍过,这里不再重复。今天要介绍的是常用的RBF神经网络学习算法及RBF神经网络与多层感知器网络的对比。

一、RBF神经网络学习算法

广义的RBF神经网络结构如下图所示:

N-M-L结构对应着N维输入,M个数据中心点centers,L个输出。

RBF 网络常用学习算法



RBF 网络的设计包括结构设计和参数设计。结构设计主要解决如何确定网络隐节点数的问题。参数设计一般需考虑包括3种参数:各基函数的数据中心和扩展常数,以及输出节点的权值 。 当采用Full RBF 网络结构时 ,隐节点数即样本数,基函数的数据中心即为样本本身,参数设计只需考虑扩展常数和输出节点的权值 。当采用广义RBF网络结构时 ,RBF网络的学习算法应该解决的问题包括 :如何确定网络隐节点数 ,如何确定各径向基函数的数据中心及扩展常数
, 以及如何修正输出权值 。



根据数据中心的取值方法 , RBF 网的设计方法可分为两类 。

第一类方法 : 数据中心从样本输入中选取 。 一般来说 , 样本密集的地方中心点可以适当多些 , 样本稀疏的地方中心点可以少些 ; 若数据本身是均匀分布的 ,中心点也可以均匀分布 。 总之 , 选出的数据中心应具有代表性 。 径向基函数的扩展常数是根据数据中心的

散布而确定的 , 为了避免每个径向基函数太尖或太平 , 一种选择方法是将所有径向基函数的扩展常数设为:max(d)/sqrt(2M),M为数据中心点数,max(d)为所选数据中心之间的最大距离 。

第二类方法 : 数据中心的自组织选择。常采用各种动态聚类算法对数据中心进行自组织选择,在学习过程中需对数据中心的位置进行动态调节 。 常用的方法是 K-means 聚类,其优点是能根据各聚类中心之间的距离确定各隐节点的扩展常数。由于
RBF 网的隐节点数对其泛化能力有极大的影响,所以寻找能确定聚类数目的合理方法,是聚类方法设计RBF网时需首先解决的问题。除聚类算法外还有梯度训练方法资源分配网络RAN等。

1. 数据中心的聚类算法

采用K-means聚类算法,得到M个数据中心点和点扩展常数;

采用K-means聚类算法,得到M个数据中心点和点扩展常数;

利用 K-mean 聚类算法得到各径向基函数的中心和扩展常数后 ,混合学习过程的第二步是用有监督学习算法得到输出层的权值 ,常采用最小均方算法(LMS),算法的输入向量即隐节点的输出向量。更简捷的方法是用伪逆法直接计算。设

输入为 X p 时 , 第 j 个隐节点的输出为 φpj = φ( ‖ Xp - cj ‖ ) ,p = 1 , 2 ,… ,P ,j = 1 , 2 ,… ,

M , 则隐层输出矩阵为Φ1 = (φpj )P × M
若 RBF 网络的待定输出权值为
W = (w1 ,w2 ,… ,w M ) , 则网络输出向量为F(X)= Φ1W

;令网络输出向量等于教师信号 d , 则 W 可用 Φ1的伪逆 Φ+ 求出:

2. 数据中心的监督学习算法

最一般的情况是 , 隐节点 RBF 函数的中心 、扩展常数和输出层权值均采用监督学习算法进行训练 , 即所有参数都经历一个误差修正学习过程 ,其方法采用 BP 算法训练多层感知器的原理类似 。 下面以单输出 RBF 网络为例 , 介绍一种梯度下降算法 。

定义目标函数为:


式中 P 为训练样本数 ,ei 为输入第 i 个样本时的误差信号 , 定义为

上式的输出函数中忽略了阈值 。

为使目标函数最小化 , 各参数的修正量应与其负梯度成正比 , 即


上述目标函数是所有训练样本引起的误差的总和 ,导出的参数修正公式是一种批处理式调整 , 即所有样本输入一轮后调整一次 。 目标函数也可定义为瞬时值形式 , 即当前输入样本引起的误差:E
= 0.5e*e。

使上式中目标函数最小化的参数修正式为单样本训练模式 , 即





3. 基于数据中心的监督学习算法的实现

具体详见代码如下:
/************************************************************************/
/*
用梯度下降法训练RBF网络,设η=0.001,M=10,初始权值为[-0.1,0.1]内的随机数,
初始数据中心center为[-4,4]内的随机数,初始扩展常数取[0.1,0.3]内的随机数,
目标误差为0.9,最大训练次数为5000。
f(x) = 1.1(1-x+2x*x)exp(-x*x/2)
训练样本这样产生:样本数P=100,xi且服从[-4,4]上的均匀分布,
样本输出为F(xi)+ei,ei为添加的噪声,服从均值为0,标准差为0.1的正态分布。
*/
/************************************************************************/ #include "stdafx.h" #include
#include
#include
#include
#include
#include
#include using namespace std; const int P=100; //输入样本的数量
vector X(P); //输入样本
vector Y(P); //输入样本对应的期望输出
const int M=10; //隐藏层节点数目
vector center(M); //M个Green函数的数据中心
vector delta(M); //M个Green函数的扩展常数
double Green[P][M]; //Green矩阵
vector Weight(M); //权值矩阵
const double eta=0.001; //学习率
const double ERR=0.9; //目标误差
const int ITERATION_CEIL=5000; //最大训练次数
vector error(P); //单个样本引起的误差 /*Hermit多项式函数*/
inline double Hermit(double x){
return 1.1*(1-x+2*x*x)*exp(-1*x*x/2);
} /*产生指定区间上均匀分布的随机数*/
inline double uniform(double floor,double ceil){
return floor+1.0*rand()/RAND_MAX*(ceil-floor);
}
#define M_PI 3.14159265358979323846
/*产生区间[floor,ceil]上服从正态分布N[mu,sigma]的随机数*/
inline double RandomNorm(double mu,double sigma,double floor,double ceil){
double x,prob,y;
do{
x=uniform(floor,ceil);
prob=1/sqrt(2*M_PI*sigma)*exp(-1*(x-mu)*(x-mu)/(2*sigma*sigma));
y=1.0*rand()/RAND_MAX;
}while(y>prob);
return x;
} /*产生输入样本*/
void generateSample(){
for(int i=0;i &vec,double floor,double ceil){
for(int i=0;i0){
if(calTotalError()

二、RBF神经网络与多层感知器网络的比较

RBF
网络与多层感知器都是非线性多层前向网络 , 它们都是通用逼近器 。 对于任一

个多层感知器 , 总存在一个 RBF 网络可以代替它 , 反之亦然 。 但是 , 这两个网络也存在着

很多不同点 。

① RBF 网络只有一个隐层 , 而多层感知器的隐层可以是一层也可以是多层的 。

② 多层感知器的隐层和输出层其神经元模型是一样的 。 而 RBF 网络的隐层神经元和输出层神经元不仅模型不同 , 而且在网络中起到的作用也不一样 。



③ RBF 网络的隐层是非线性的 , 输出层是线性的 。 然而 ,当用多层感知器解决模式分类问题时 , 它的隐层和输出层通常选为非线性的 。 当用多层感知器解决非线性回归问题时 , 通常选择线性输出层 。

④ RBF 网络的基函数计算的是输入向量和中心的欧氏距离 , 而多层感知器隐单元的激励函数计算的是输入单元和连接权值间的内积 。

⑤ RBF 网络使用局部指数衰减的非线性函数(如高斯函数)对非线性输入输出映射进行局部逼近 。 多层感知器(包括 BP 网)的隐节点采用输入模式与权向量的内积作为激活函数的自变量 , 而激活函数则采用 Sigmoid 函数或硬限幅函数 , 因此多层感知器是对非线性映射的全局逼近 。 RBF 网最显著的特点是隐节点采用输入模式与中心向量的距离(如欧氏距离) 作为函数的自变量 , 并使用径向基函数(如 Gaussian 函数)作为激活函数 。径向基函数关于 N 维空间的一个中心点具有径向对称性 , 而且神经元的输入离该中心点越远
, 神经元的激活程度就越低 。 隐节点的这个特性常被称为“局部特性” 。

由于
RBF 网络能够逼近任意的非线性函数 ,可以处理系统内在的难以解析的规律性 , 并且具有很快的学习收敛速度 , 因此 RBF 网络有较为广泛的应用 。 目前 RBF 网络已成功地用于非线性函数逼近 、时间序列分析 、数据分类 、模式识别 、信息处理 、图像处理 、系统建模 、控制和故障诊断等 。



***********************
2015-8-7


RBF神经网络学习算法及与多层感知器的比较的更多相关文章

  1. 神经网络与机器学习 笔记—多层感知器(MLP)

    多层感知器(MLP) Rosenblatt感知器和LMS算法,都是单层的并且是单个神经元构造的神经网络,他们的局限性是只能解决线性可分问题,例如Rosenblatt感知器一直没办法处理简单异或问题.然 ...

  2. "多层感知器"--MLP神经网络算法

    提到人工智能(Artificial Intelligence,AI),大家都不会陌生,在现今行业领起风潮,各行各业无不趋之若鹜,作为技术使用者,到底什么是AI,我们要有自己的理解. 目前,在人工智能中 ...

  3. tensorflow学习笔记——自编码器及多层感知器

    1,自编码器简介 传统机器学习任务很大程度上依赖于好的特征工程,比如对数值型,日期时间型,种类型等特征的提取.特征工程往往是非常耗时耗力的,在图像,语音和视频中提取到有效的特征就更难了,工程师必须在这 ...

  4. Spark Multilayer perceptron classifier (MLPC)多层感知器分类器

    多层感知器分类器(MLPC)是基于前馈人工神经网络(ANN)的分类器. MLPC由多个节点层组成. 每个层完全连接到网络中的下一层. 输入层中的节点表示输入数据. 所有其他节点,通过输入与节点的权重w ...

  5. 4.2tensorflow多层感知器MLP识别手写数字最易懂实例代码

    自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1.1  多层感知器MLP(m ...

  6. TFboy养成记 多层感知器 MLP

    内容总结与莫烦的视频. 这里多层感知器代码写的是一个简单的三层神经网络,输入层,隐藏层,输出层.代码的目的是你和一个二次曲线.同时,为了保证数据的自然,添加了mean为0,steddv为0.05的噪声 ...

  7. 【TensorFlow-windows】(三) 多层感知器进行手写数字识别(mnist)

    主要内容: 1.基于多层感知器的mnist手写数字识别(代码注释) 2.该实现中的函数总结 平台: 1.windows 10 64位 2.Anaconda3-4.2.0-Windows-x86_64. ...

  8. MLPclassifier,MLP 多层感知器的的缩写(Multi-layer Perceptron)

    先看代码(sklearn的示例代码): from sklearn.neural_network import MLPClassifier X = [[0., 0.], [1., 1.]] y = [0 ...

  9. 使用TensorFlow v2.0构建多层感知器

    使用TensorFlow v2.0构建一个两层隐藏层完全连接的神经网络(多层感知器). 这个例子使用低级方法来更好地理解构建神经网络和训练过程背后的所有机制. 神经网络概述 MNIST 数据集概述 此 ...

随机推荐

  1. 生活 RH阴性血 AB型

    这个血型很稀有,外国多些,中国很少. ABO型:A.B.AB.O RH血型系统:阴性,阳性 RH阴性血,被称为熊猫血,估计是稀有吧,阴性血缺抗D,我老婆的血型抗原好像是:ccee,大部分汉族人都有抗D ...

  2. LOJ2434. 「ZJOI2018」历史 [LCT]

    LOJ 思路 第一眼看似乎没有什么思路,试着套个DP上去:设\(dp_x\)表示只考虑\(x\)子树,能得到的最大答案. 合并的时候发现只有\(x\)这个点有可能做出新的贡献,而做出新贡献的时候必然是 ...

  3. JetBrains CLion 2019 for Mac(智能C和C++编辑器)中英文如何切换完整教程

    右键显示包内容,进入目录,contents/lib,删除resources_zh.jar,重启即可. 参考: https://blog.csdn.net/qq_45179462/article/det ...

  4. 【2019.10.30】SDN上机第1次作业

    用字符命令搭建如下拓扑,要求写出命令 题目一: 字符命令如下: 题目二: 字符命令如下: 利用可视化工具搭建如下拓扑 要求支持OpenFlow 1.0 1.1 1.2 1.3,设置h1(10.0.0. ...

  5. 根据字符串从资源中取出对应的资源ResourceManager.GetObject

    ResourceManager.GetObject 根据名称从资源中取出资源 需要:我有25张 五笔图片名称是a b c d ...y 这样组成的 每张图片名字只有一个名字 我想通过字符串a取出a这张 ...

  6. ubuntu之路——day7.3 normalizing input(加快迭代速度)

    输入归一化 1,对每个特征零均值化 2,对每个特征归一化方差 注意:训练集和测试集要使用相同的均值和方差去归一化. 原本狭长的优化函数,要找到最小值,需要设置较小的学习率,并且进行多次迭代:而归一化以 ...

  7. css中的浮动与定位

    传送门:https://www.cnblogs.com/junwuyao/p/7435257.html

  8. 生成uuid 和 检验

    //注意replaceAll前面的是正则表达式 String uuid = UUID.randomUUID().toString().replaceAll("-","&q ...

  9. T-MAX-测试总结

    一.项目相关: 作业相关 具体描述 所属班级 2019秋福大软件工程实践Z班 作业要求 团队作业第五次-项目冲刺 作业正文 T-MAX组--测试总结 团队名称 T-MAX小组 作业目标 将团队的项目做 ...

  10. C前序遍历二叉树Morris Traversal算法

    首先来递归算法,简单易懂: #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef ...