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)为所选数据中心之间的最大距离 。
RBF 网的隐节点数对其泛化能力有极大的影响,所以寻找能确定聚类数目的合理方法,是聚类方法设计RBF网时需首先解决的问题。除聚类算法外还有梯度训练方法资源分配网络RAN等。
1. 数据中心的聚类算法
采用K-means聚类算法,得到M个数据中心点和点扩展常数;
采用K-means聚类算法,得到M个数据中心点和点扩展常数;
输入为 X p 时 , 第 j 个隐节点的输出为 φpj = φ( ‖ Xp - cj ‖ ) ,p = 1 , 2 ,… ,P ,j = 1 , 2 ,… ,
M , 则隐层输出矩阵为Φ1 = (φpj )P × M
W = (w1 ,w2 ,… ,w M ) , 则网络输出向量为F(X)= Φ1W
;令网络输出向量等于教师信号 d , 则 W 可用 Φ1的伪逆 Φ+ 求出:
2. 数据中心的监督学习算法
最一般的情况是 , 隐节点 RBF 函数的中心 、扩展常数和输出层权值均采用监督学习算法进行训练 , 即所有参数都经历一个误差修正学习过程 ,其方法采用 BP 算法训练多层感知器的原理类似 。 下面以单输出 RBF 网络为例 , 介绍一种梯度下降算法 。
定义目标函数为:
上式的输出函数中忽略了阈值 。
为使目标函数最小化 , 各参数的修正量应与其负梯度成正比 , 即
上述目标函数是所有训练样本引起的误差的总和 ,导出的参数修正公式是一种批处理式调整 , 即所有样本输入一轮后调整一次 。 目标函数也可定义为瞬时值形式 , 即当前输入样本引起的误差: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 网络使用局部指数衰减的非线性函数(如高斯函数)对非线性输入输出映射进行局部逼近 。 多层感知器(包括 BP 网)的隐节点采用输入模式与权向量的内积作为激活函数的自变量 , 而激活函数则采用 Sigmoid 函数或硬限幅函数 , 因此多层感知器是对非线性映射的全局逼近 。 RBF 网最显著的特点是隐节点采用输入模式与中心向量的距离(如欧氏距离) 作为函数的自变量 , 并使用径向基函数(如 Gaussian 函数)作为激活函数 。径向基函数关于 N 维空间的一个中心点具有径向对称性 , 而且神经元的输入离该中心点越远
, 神经元的激活程度就越低 。 隐节点的这个特性常被称为“局部特性” 。
RBF 网络能够逼近任意的非线性函数 ,可以处理系统内在的难以解析的规律性 , 并且具有很快的学习收敛速度 , 因此 RBF 网络有较为广泛的应用 。 目前 RBF 网络已成功地用于非线性函数逼近 、时间序列分析 、数据分类 、模式识别 、信息处理 、图像处理 、系统建模 、控制和故障诊断等 。
***********************
RBF神经网络学习算法及与多层感知器的比较的更多相关文章
- 神经网络与机器学习 笔记—多层感知器(MLP)
多层感知器(MLP) Rosenblatt感知器和LMS算法,都是单层的并且是单个神经元构造的神经网络,他们的局限性是只能解决线性可分问题,例如Rosenblatt感知器一直没办法处理简单异或问题.然 ...
- "多层感知器"--MLP神经网络算法
提到人工智能(Artificial Intelligence,AI),大家都不会陌生,在现今行业领起风潮,各行各业无不趋之若鹜,作为技术使用者,到底什么是AI,我们要有自己的理解. 目前,在人工智能中 ...
- tensorflow学习笔记——自编码器及多层感知器
1,自编码器简介 传统机器学习任务很大程度上依赖于好的特征工程,比如对数值型,日期时间型,种类型等特征的提取.特征工程往往是非常耗时耗力的,在图像,语音和视频中提取到有效的特征就更难了,工程师必须在这 ...
- Spark Multilayer perceptron classifier (MLPC)多层感知器分类器
多层感知器分类器(MLPC)是基于前馈人工神经网络(ANN)的分类器. MLPC由多个节点层组成. 每个层完全连接到网络中的下一层. 输入层中的节点表示输入数据. 所有其他节点,通过输入与节点的权重w ...
- 4.2tensorflow多层感知器MLP识别手写数字最易懂实例代码
自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1.1 多层感知器MLP(m ...
- TFboy养成记 多层感知器 MLP
内容总结与莫烦的视频. 这里多层感知器代码写的是一个简单的三层神经网络,输入层,隐藏层,输出层.代码的目的是你和一个二次曲线.同时,为了保证数据的自然,添加了mean为0,steddv为0.05的噪声 ...
- 【TensorFlow-windows】(三) 多层感知器进行手写数字识别(mnist)
主要内容: 1.基于多层感知器的mnist手写数字识别(代码注释) 2.该实现中的函数总结 平台: 1.windows 10 64位 2.Anaconda3-4.2.0-Windows-x86_64. ...
- MLPclassifier,MLP 多层感知器的的缩写(Multi-layer Perceptron)
先看代码(sklearn的示例代码): from sklearn.neural_network import MLPClassifier X = [[0., 0.], [1., 1.]] y = [0 ...
- 使用TensorFlow v2.0构建多层感知器
使用TensorFlow v2.0构建一个两层隐藏层完全连接的神经网络(多层感知器). 这个例子使用低级方法来更好地理解构建神经网络和训练过程背后的所有机制. 神经网络概述 MNIST 数据集概述 此 ...
随机推荐
- 42、JDBC数据源案例
一.JDBC数据源案例 1.概述 Spark SQL支持使用JDBC从关系型数据库(比如MySQL)中读取数据.读取的数据,依然由DataFrame表示,可以很方便地使用Spark Core提供的各种 ...
- 2019暑期金华集训 Day6 计算几何
自闭集训 Day6 计算几何 内积 内积不等式: \[ (A,B)^2\le (A,A)(B,B) \] 其中\((A,B)\)表示\(A\cdot B\). (好像是废话?) 叉积 \[ A\tim ...
- 7中漂亮的纯css字体
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 如何手动安装WordPress主题和插件(Linux)
1. 去官网找到你想使用的插件或主题,并复制下载地址 2. cd到WordPress网站目录下的插件或主题目录下 这里以我的为例: 安装插件:cd /var/www/html/wp-content/p ...
- 2019年领航杯 江苏省网络信息安全竞赛 初赛部分writeup
赛题已上传,下载连接:https://github.com/raddyfiy/2019linghangcup 做出了全部的misc和前三道逆向题,排名第10,暂且贴一下writeup. 关卡一 编码解 ...
- Centos7 中查找文件、目录、内容
1.查找文件 find / -name ‘filename’ 2.查找目录 find / -name ‘path’ -type d 3.查找内容 find . | xargs grep -ri ‘co ...
- Tomcat学习四步走:内核、集群、参数及性能
主题简介: 内核实现原理 分布式集群 生产部署关键参数 性能监控和分析 一.内核实现原理 HTTP Web服务器与浏览器之间以HTTP协议通信,浏览器要访问服务器即向服务器发送HTTP请求报文. 如图 ...
- Android智能手机上的音频浅析【转】
本文转载自:https://blog.csdn.net/david_tym/article/details/80903385 手机可以说是现在人日常生活中最离不开的电子设备了.它自诞生以来,从模拟的发 ...
- python socketpool:通用连接池(转)
简介 在软件开发中经常要管理各种“连接”资源,通常我们会使用对应的连接池来管理,比如mysql数据库连接可以用sqlalchemy中的池来管理,thrift连接可以通过thriftpool管理,red ...
- vue 自己编写向左滑动的动画 仿transition
vue 模板代码: <div class="content-wrap clearfix" :class="{slideIn: showIn, slideOut: s ...