对于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. 常见的 eslint 基本报错信息

    Missing semicolon 缺少分号 Missing space before opening brace 左大括号前缺少空格 Trailing spaces not allowed 不允许尾 ...

  2. UOJ73 【WC2015】未来程序

    题目描述:给出输入和暴力程序,求输出.共10个测试点. 测试点1: 输入\(a,b,c\),求\(a\times b \ \mathrm{mod} \ c\) \(a,b,c\)属于long long ...

  3. C语言的柔性数组的实现及应用

    c编程的时候数组长度一般都是固定好的,实际上c还能实现变长数组.其实c99中确实是有变长数组的说法,C99中通过允许结构体中的最后一个成员是长度未知的数组实现变长数组,其定义格式如下: typedef ...

  4. 小程序弹框wx.showModal的使用

    if (!logined) { wx.showModal({ title: '提示', content: '您还没登录登录车掌柜, 是否前往登录', confirmText: '前往登录', conf ...

  5. mysql集群高可用架构

    前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能 ...

  6. 2019SDN课程阅读作业(2)

    1.过去20年中可编程网络的发展可以分为几个阶段?每个阶段的贡献是什么? 分为三个阶段,第一个阶段是主动网络(从20世纪90年代中期到21世纪初),它在网络中引入了可编程功能,以实现更大的创新:第二个 ...

  7. legend3---21、查问题或者查插件的时候请搜索对关键词

    legend3---21.查问题或者查插件的时候请搜索对关键词 一.总结 一句话总结: 比如要查移动端的js图片裁剪插件,直接搜就“移动端的js图片裁剪插件” 千万记得问题和找资料都搜索对关键词(搜索 ...

  8. Java实现视频网站的视频上传、视频转码、及视频播放功能(ffmpeg)

    视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...

  9. 模型稳定性指标—PSI

    由于模型是以特定时期的样本所开发的,此模型是否适用于开发样本之外的族群,必须经过稳定性测试才能得知.稳定度指标(population stability index ,PSI)可衡量测试样本及模型开发 ...

  10. 阿里云EDAS功能简介

    尊敬的 EDAS 用户: 您好!为了给您带来更好的服务和使用体验,EDAS 产品团队将对 EDAS 标准版(含按量付费和包年包月)进行一轮调整,包括按量付费标准版价格和免费额度的更新,以及标准版套餐的 ...