人工神经网络——径向基函数(RBF)神经网络

此博客排版不好,重新用Markdown写了一篇,同时附上了代码,戳这里

   本文摘自:《模式识别与智能计算——matlab技术实现第三版》与《matlab神经网络43个案例分析》

【注】蓝色字体为自己的理解部分

     径向基函数神经网络的优点:逼近能力,分类能力和学习速度等方面都优于BP神经网络,结构简单、训练简洁、学习收敛速度快、能够逼近任意非线性函数,克服局部极小值问题。原因在于其参数初始化具有一定的方法,并非随机初始化。

        RBF是具有单隐层的三层前向网络。第一层为输入层,由信号源节点组成。第二层为隐藏层,隐藏层节点数视所描述问题的需要而定,隐藏层中神经元的变换函数即径向基函数是对中心点径向对称且衰减的非负线性函数,该函数是局部响应函数,具体的局部响应体现在其可见层到隐藏层的变换跟其它的网络不同。以前的前向网络变换函数都是全局响应的函数。第三层为输出层,是对输入模式做出的响应。输入层仅仅起到传输信号作用,输入层和隐含层之间可以看做连接权值为1的连接,输出层与隐含层所完成的任务是不同的,因而他们的学习策略也不同。输出层是对线性权进行调整,采用的是线性优化策略,因而学习速度较快;而隐含层是对激活函数(格林函数,高斯函数,一般取后者)的参数进行调整,采用的是非线性优化策略,因而学习速度较慢。对于这句话的理解,从下面的层与层之间的变换可以发现。

       RBF神经网络的基本思想:用RBF作为隐单元的“基”构成隐藏层空间,隐藏层对输入矢量进行变换,将低维的模式输入数据变换到高维空间内,使得在低维空间内的线性不可分问题在高维空间内线性可分。详细一点就是用RBF的隐单元的“基”构成隐藏层空间,这样就可以将输入矢量直接(不通过权连接)映射到隐空间。当RBF的中心点确定以后,这种映射关系也就确定 了。而隐含层空间到输出空间的映射是线性的(注意这个地方区分一下线性映射和非线性映射的关系),即网络输出是因单元输出的线性加权和,此处的权即为网络可调参数

下图是径向基神经元模型      

 《43案例分析》中介绍:径向基函数的激活函数是以输入向量和权值向量(注意此处的权值向量并非隐藏层到输出层的权值,具体看下面的径向基神经元模型结构)之间的距离||dist||作为自变量的。径向基网络的激活函数的一般表达式为。

《模式识别与智能计算》中介绍:径向基网络传递函数是以输入向量与阈值向量之间的距离|| X-Cj ||作为自变量的,其中|| X -Cj ||是通过输入向量和加权矩阵C的行向量的乘积得到。此处的C就是隐藏层各神经元的中心参数,大小为隐层神经元数目*可见层单元数。再者,每一个隐神经元中心参数C都对应一个宽度向量D,使得不同的输入信息能被不同的隐层神经元最大程度地反映出来。

 

得到的这个R就是隐层神经元的值。

随着权值和输入向量之间距离的减少,网络输出是递增的,当输入向量和权值向量一致时,神经元输出为1。图中的b为阈值,用于调整神经元的灵敏度。利用径向基神经元和线性神经元可以建立广义回归神经网络,此种神经网络适用于函数逼近方面的应用。径向基函数和竞争神经元可以建立概率神经网络,此种神经网络适用于解决分类问题

RBF神经网络学习算法需要三个参数:基函数的中心,方差(宽度)以及隐含层到输出层的权值。

RBF神经网络中心选取方法:

       对于RBF神经网络的学习算法,关键问题是隐藏层神经元中心参数的合理确定。常用的方法是从中心参数(或者其初始值)是从给定的训练样本集里按照某种方法直接选取,或者是采用聚类的方法确定。

   ①直接计算法(随机选取RBF中心)

     隐含层神经元的中心是随机地在输入样本中选取,且中心固定。一旦中心固定下来,隐含层神经元的输出便是已知的,这样的神经网络的连接权就可以通过求解线性方程组来确定。适用于样本数据的分布具有明显代表性。

   ②自组织学习选取RBF中心法

      RBF神经网络的中心可以变化,并通过自组织学习确定其位置。输出层的线性权重则是通过有监督的学习来确定的。这种方法是对神经网络资源的再分配,通过 学习,使RBF的隐含层神经元中心位于输入空间重要的区域。这种方法主要采用K-均值聚类法来选择RBF的中心,属于无监督(导师)的学习方法。

  ③有监督(导师)学习选取RBF中心

     通过训练样本集来获得满足监督要求的网络中心和其他权重参数。常用方法是梯度下降法

  ④正交最小二乘法选取RBF中心法

     正交最小二乘法(Orthogoal least square)法的思想来源于线性回归模型。神经网络的输出实际上是隐含层神经元某种响应参数(回归因子)和隐含层至输出层间连接权重的线性组合。所有隐含层神经元上的回归因子构成回归向量。学习过程主要是回归向量正交化的过程。

     在很多实际问题中,RBF神经网络隐含层神经元的中心并非是训练集中的某些样本点或样本的聚类中心,需要通过学习的方法获得,使所得到的中心能够更好地反应训练集数据所包含的信息。

基于高斯核的RBF神经网络拓扑结构

      第一层输入层:由信号源节点构成,仅起到数据信息的传递作用,对输入信息不做任何变换

      第二层隐含层:节点数视需要而定。隐含层神经元核函数(作用函数)是高斯函数,对输入信息进行空间映射的变换。

      第三层输出层,对输入模式做出响应。输出层神经元的作用函数为线性函数,对隐含层神经元输出的信息进行线性加权后输出,作为整个神经网络的输出结果。

径向基网络传递函数是以输入向量与阈值向量之间的距离|| X-Cj ||作为自变量的。其中|| X-Cj ||是通过输入向量和加权矩阵C的行向量的乘积得到的。径向基神经网络传递参数可以取多种形式。常见的有:

①Gaussian函数(高斯函数)

②Reflected sigmoidal函数(反常S型函数)

③逆Multiquadric函数(逆 畸变校正函数

较为常用的还是Gaussian函数,本文采用Gaussian函数:

当输入自变量为0时,传递函数取得最大值1,。随着权值和输入向量间的距离不断减小,网络输出是递增的。也就是说,径向基函数对输入信号在局部产生响应。函数的输入信号X靠近函数的中央范围时,隐含层节点将产生较大的输出。由此可以看出这种网络具有局部逼近能力。

         当输入向量加到网络输入端时,径向基层每个神经元都会输出一个值,代表输入向量与神经元权值向量之间的接近程度。如果输入向量关于权值向量相差很多,则径向基层输出接近于0,;如果输入向量与权值向量很接近,则径向基层的输出接近于1,经过第二层(隐含层)的线性神经元,输出值就靠近第二层权值。在这个过程中,如果只有一个径向基神经元的输出为1,而其他神经元输出均为0或者接近0,那么线性神经元的输出就相当于输出为1的神经元对应的第二层(隐含层)权值的值。

RBF网络训练:

训练的目的是求两层的最终权值Cj、Dj和Wj。

训练的过程分为两步:第一步是无监督学习,训练确定输入层与隐含层间的权值Cj、Dj;第二步是有监督学习,训练确定隐含层与输出层间的权值Wj。

训练前提供输入向量X、对应的目标输出向量Y和径向基函数的宽度向量Dj。

在第 l 次输入样品(l=1,2,...,N)进行训练时,各个参数的表达及计算方法如下:

(1)确定参数

确定输入向量X:

,n是输入层单元数

确定输出向量Y和希望输出向量O

,q是输出层单元数

③初始化隐含层至输出层的连接权值

其中p是隐藏层单元数,q是输出层单元数。

参考中心初始化的方法给出隐藏层到输出层的权值初始化方法:

其中mink是训练集中第k个输出神经元中所有期望输出的最小值;maxk是训练集中第k个输出神经元中所有期望输出的最大值。

④初始化隐含层各神经元的中心参数。不同隐含层神经元的中心应有不同的取值,并且与中心的对应宽度能够调节,使得不同的输入信息特征能被不同的隐含层神经元最大的反映出来。在实际应用中,一个输入信息总是包含在一定的取值范围内。不失一般性,将隐含层各神经元的中心分量的初值,按从小到大等间距变化,使较弱的输入信息在较小的中心附近产生较强的响应。间距的大小可由隐藏层神经元的个数来调节。好处是能够通过试凑的方法找到较为合理的隐含层神经元数,并使中心的初始化尽量合理,不同的输入特征更为明显地在不同的中心处反映出来,体现高斯核的特点。

基于上述四项,RBF神经网络中心参数的初始值为:

(p为隐含层神经元总个数,j=1,2,...,p)

mini是训练集中第i个特征所有输入信息的最小值,maxi为训练集中第i 个特征所有输入信息的最大值。

⑤初始化宽度向量。宽度向量影响着神经元对输入信息的作用范围:宽度越小,相应隐含层神经元作用函数的形状越窄,那么处于其他神经元中心附近的信息在该神经元出的响应就越小。计算方法:

df为宽度调节系数,取值小于1,作用是使每个隐含层神经元更容易实现对局部信息的感受能力,有利于提高RBF神经网络的局部响应能力。

(2)计算隐含层第j 个神经元的输出值zj

Cj是隐含层第 j 个神经元的中心向量,由隐含层第j个神经元对应于输入层所有神经元的中心分量构成,;Dj为隐含层第j个神经元的宽度向量,与Cj相对应,,Dj越大,隐含层对输入向量的影响范围就越大,且神经元间的平滑度也比较好;||.||为欧式范数。

(3)计算输出层神经元的输出

其中为输出层第k个神经元与隐含层第 j 个神经元间的调节权重。

(4)权重参数的迭代计算

RBF神经网络权重参数的训练方法在这里取为梯度下降法。中心、宽度和调节权重参数均通过学习来自适应调节到最佳值,迭代计算如下:

 为第k个输出神经元与第j个隐含层神经元之间在第t 次迭代计算时的调节权重。

为第j 个隐含层神经元对于第i个输入神经元在第t 次迭代计算时的中心分量;

为与中心对应的宽度

η为学习因子

E为RBF神经网络评价函数:

其中,Olk为第k 个输出神经元在第l个输入样本时的期望输出值;ylk为第k个输出神经元在第l个输入样本时的网络输出值。

综上所述,给出RBF神经网络的学习算法:

① 按(1)确定参数的五个步骤对神经网络参数进行初始化,并给定η和α的取值及迭代终止精度ε 的值。

②按下式计算网络输出的均方根误差RMS 的值,若RMS≤ε ,则训练结束,否则转到第③步

③按照(4)权重迭代计算,对调节权重,中心和宽度参数进行迭代计算。

④返回步骤②

 

此处有一个利用Kmean初始化中心点和随机初始化中心点的,使用TensorFlow2.0搭建RBF神经网络层的代码:https://github.com/PetraVidnerova

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于RBF简单的matlab手写识别

GetFeature.m %将图像分为25块,计算每一块的空白部分所占比例 function dataGetFeature(I) [row,col]find(I0); %返回数字的上下左右的边界 II(min(row):max(row),min(col):max(col)); %截取手写数字图像,使其紧包含数字边界&…

李宏毅机器学习课程-Transfer Learning

深度学习 -> 强化学习 ->迁移学习(杨强教授报告) 李宏毅机器学习课程-Transfer Learning 迁移学习-吴恩达 freeze 待处理的 理解深层神经网络中的迁移学习及TensorFlow实现 Transfer Learning模式 Similar domain, different task…

matlab实现RBF的相关函数

摘自《matlab神经网络43个案例分析》 (1)newrb() 该函数可以用来设计一个近似径向基网络(approximate RBF)。调用格式为: [net,tr]newrb(P,T,GOAL,SPREAD,MN,DF) 其中P为Q组输入向量组成的R*Q位矩阵,T为Q组目标分类向量组成的S*Q维矩阵。GOAL为均方误…

李宏毅机器学习课程-Structured Learning

Simple structured learning framework for python pystruct-github Slides for explaining structured prediction and PyStruct -github 一、Structured Learning-Unifed Framework 之前的input and output 都是vectors Training阶段就是找一个F来评估&#xff…

MATLAB GPU编程基础

原文地址:http://blog.sina.com.cn/s/blog_863f5cf90102uyrh.html 从Matlab2013版本开始,matlab将可以直接调用gpu进行并行计算,而不再需要安装GPUmat库。这一改动的好处是原有的matlab内置函数都可以直接运用,只要数据格式是gpuA…

matlab之norm函数

简单点说就是用来计算范数的一个函数。 假设A是一个矩阵,那么norm(A)或者norm(A,2)计算的就是A的2范数;同理norm(A,1)计算的就是1范数了. 2范数:计算步骤是先计算A*A‘(这里A’代表转置,也就是原矩阵*(原…

word_cloud

word_cloud word_cloud wordcloud_server

matlab之reshape函数

简单来说,reshape(A,m,n)就是用来把原矩阵的元素,按照列读取排成一行,然后按照指定的m*n矩阵再按列放好。比如原矩阵为 A 1 2 3 4 5 6 7 8 9 10 11 12 我们先给他按列拍成一排(变相说…

matlab之unwrap函数

网上的说法: 要计算一个系统相频特性,就要用到反正切函数,计算机中反正切函数规定,在一、二象限中的角度为0~pi,三四象限的角度为0~-pi。 若一个角度从0变到2pi,但实际得到的结果是…

画图网页http://weavesilk.com/

画图网页 http://weavesilk.com/

matlab之bsxfun函数

<span style"font-size:18px;color:#ff0000;">简单的调用方法&#xff1a;</span> bsxfun(plus&#xff0c;A&#xff0c;B)&#xff0c;其中plus代表的是加法&#xff0c;还可以换成减法minus&#xff0c;乘法times等&#xff0c;可以参考matlab里面的帮…

Python xrange与range的区别

xrange 与 range xrange 用法与 range 完全相同&#xff0c;所不同的是生成的不是一个list对象&#xff0c;而是一个生成器。 要生成很大的数字序列的时候&#xff0c;用xrange会比range性能优很多&#xff0c;因为不需要一上来就开辟一块很大的内存空间。 xrange 和 range 这…

受限玻尔兹曼机准备知识——蒙特卡洛方法

先了解几个基本概率知识&#xff0c;不急着看蒙特卡洛方法的定义&#xff0c;具体的MC方法参考网上各种资料。 两个比较好的学习MC方法的文章&#xff1a;蒙特卡洛方法入门 (结合了实例)和 蒙特卡洛方法 (推荐&#xff0c;非常详细) 更新日志&#xff1a;2016-11-19&#xff…

Google Colab 免费GPU服务器使用教程

Google Colab免费使用GPU服务器教程 Google Colab Free GPU Tutorial Colaboratory 相关查询命令!/opt/bin/nvidia-smi!pip install !apt-get install !pip install -q keras import keras !apt-get install libnvrtc8.0 !pip install mxnet-cu80 import mxnet as mx import te…

受限玻尔兹曼机准备知识——MCMC方法和Gibbs采样

先点明几个名词 MCMC方法&#xff1a;马尔可夫链-蒙特卡洛方法 (千万别叫成梅特罗波利斯蒙特卡罗方法了) Metropolis-Hastings采样&#xff1a;梅特罗波利斯-哈斯廷斯采样 Gibbs采样&#xff1a;吉布斯采样 还是介绍一下学习MCMC和Gibbs采样比较好的一个资料&#xff1a;随机采…

受限玻尔兹曼机——简单证明

花了很久看了一下玻尔兹曼机&#xff0c;感觉水有点深&#xff0c;总之一步一步来嘛~~~~ 先说一下一个非常好的参考资料&#xff1a; 受限玻尔兹曼机&#xff08;RBM&#xff09;学习笔记 &#xff0c;有兴趣的可以再看看这篇文章的参考文献或者博客&#xff0c;写的也非常好&…

受限玻尔兹曼机RBM实现及能量值思考——matlab实现

网址&#xff1a;http://www.cs.toronto.edu/~hinton/MatlabForSciencePaper.html 这个代码主要是在mnist上做手写数字识别的代码&#xff0c;贴出来的目的主要是想研究一下在迭代过程中能量的变化情况。 1. 标准能量函数 标准的能量函数的表达式为&#xff1a; 那么就将这个…

Cheat_Sheet ---Keras、Matlab、Matplotlib、Numpy、Pandas、Scikit-Learn、SciPy

Cheat_Sheet ---KerasCheat_Sheet ---MatlabCheat_Sheet ---MatplotlibCheat_Sheet ---NumpyCheat_Sheet ---PandasCheat_Sheet ---Scikit-LearnCheat_Sheet ---SciPy参考文献 http://ddl.escience.cn/f/IDkq#path%2F8215264

WPF中DataContext的绑定技巧-粉丝专栏

&#xff08;关注博主后&#xff0c;在“粉丝专栏”&#xff0c;可免费阅读此文&#xff09; 先看效果&#xff1a; 上面的绑定值都是我们自定义的属性&#xff0c;有了以上的提示&#xff0c;那么我们可以轻松绑定字段&#xff0c;再也不用担心错误了。附带源码。 …

matlab实现unix时间戳到标准时间的转换

【注】给定时间精确到小时的情况下的转换 函数&#xff1a; function [ date ] ConvertDate( x ) %将unix时间戳转换为标准时间 % date datestr(1426406400/86400 datenum(1970,1,1)); date datestr((x-3600*248*3600)/86400 70*36519datenum(1900,1,0)); end结果&#…