RBF神经网络学习算法及与多层感知器的比较

对于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

原文地址:https://www.cnblogs.com/huty/p/8519267.html