本文基于台大机器学习技法系列课程进行的笔记总结。

主要内容如下图所示:

首先介绍一下径向基函数网络的Hypothesis和网络的结构,然后介绍径向基神经网络学习算法,以及利用K-means进行的学习,最后通过一个实例加深对RBF神经网络认识和理解。

RBF神经网络的Hypothesis和网络结构

我们从基于Gaussian kernel的support vector machine中在无限维度中进行特征转换来获取一个large margin的边界,这个Gaussian kernel就是一个Radio Basis Function Kernel。其意义呢有两个:一是radio,代表的是x和中心点xm之间的距离,可以是任意衡量距离的某种范数,比如L2范数等;二是Basis,表示要进行联合(combine);于是就可以得到了以下关于RBF神经网络的更加质朴的定义:如下图所示,RBF神经网络实际上就是一些选择出来的radial径向hypothesis的线性组合。

那么为何是神经网络呢?我们看如下图所示的结构对比,从中可以看出两者的隐含层(hidden layer)不同,即RBF神经网络采用的激发函数或者映射是径向基函数(距离+高斯)等,而输出层都一样,是特征转换后的线性融合。

这样就得到了RBF的神经网络的Hypothesis,如下图所示,如果还记得kernel svm的hypothesis的话(representation theory),我们得到的SVM的Hypothesis实际上就是support vector的线性组合,即影响我们最后得到的hypothesis只是与这些“代表”的点有关。类似的,RBF也是如此,我们需要找到一些能够代表数据的中心点( center )。所以我们在进行训练学习的时候要做的就是:给定的径向基函数(RBF)和输出,然后决定这些center和线性组合的系数β。另外一个值得提出的就是从另一个角度来看径向基函数神经网络与其他前馈神经网络的关系,可以参考我的另一篇博文中的总结:神经网络总结(初稿),关键点就是从BP神经网络到径向基函数神经网络,一个明显的特征就是我们不用在对所有全局的链接权重进行训练,而是只对一些重要的影响输出的权重进行调整,这样就能明显提升神经网络的训练速度。

另一个重要的内容就是Gaussian的径向基函数实际上做的就是一种相似度的测量,而且是在原始空间的相似度测量。而特征转换就是距离与中心点的相似度的转换。

Full RBF神经网络

full RBF神经网络实际上就是一个非常lazy的RBF神经网络。之所以lazy讲的它根本不做center,也就是它把所有观测到的数据都作为center,也就是输入size为N,那么center的size也是N。即一种uniform的形式,融合每一个输入数据到所有训练样本点的相似度。如下图所示:

最近邻模型(Nearest neighbor)

思想就是我们对所有经过hypothesis得到的输出进行投票(vote,aggregation),而是选择在相似度上与已知样本点最近的那个点的标签作为输出。这就是典型的最近邻模型。所以这样看上去训练就比较简单了,实际上只用把观测到的数据保存下来就好,但测试过程则比较复杂,因为要对所有的已知标签的样本点进行相似度的计算,然后选出最近邻的那个,并输出该样本的标签。稍微拓展一下,我们还是可以做融合的,我们选出最相似的k个邻居,然后由着k个邻居进行投票,或者线性融合,然后再输出,这样的模型就叫做k最近邻模型。

Regularization

那如果利用full RBF神经网络进行regression呢情况又变成怎样呢,如下图所示:

从中可以看出,经过以上设计进行训练我们将得到Ein=0,这在内插法逼近函数的时候是非常好的,可是我们知道这样好的Ein往往有可能出现overfitting,所以需要进行regularization的设计。常见的方法就是加约束项或惩罚函数。在不同的空间做regularization有着不同的结果。另一中regularization的方法就是限制center的数量,我们用few center进行,而不是full,这样就能在一定程度上降低模型复杂度。那么如何从一堆X中萃取中心点呢?萃取的标准又是什么呢?

于是问题就转向了聚类问题cluster problem。

聚类问题cluster problem(K-means)

聚类问题的数学描述如下图所示,通过优化聚类误差(采用了平方误差)进行。

于是就引出了非常著名的K-means聚类算法,具体内容参看我的另一篇博客K-means算法

把K-means 应用到RBF神经网络中

那么将K-means方法用到RBF神经网络中,就可以得到以下的流程

下面几个就是利用k-means算法流程进行的实验结果

对比了采用regularization的full RBF、采用了few center(K-means)的RBF以及基于nearest neighbor的Full RBF实验效果图,从图中可以看出,虽然full RBF效果可能要比k-means的效果要好,可是一般来讲由于计算复杂度和overfitting的风险等原因一般不常常使用。

*************************************************************************************************************************************

对于径向基函数神经网络,只要抓住它的hypothesis的质朴表示:一堆center的相似度(Gaussian RBF)的线性融合(vote,linear aggregation)就好了。完成的特征转换就是距离到相似度。输出就是相似度的线性组合。

然后中间涉及到的三个比较重要的内容就是:1. 最近邻思想;2. K-means算法;3. alternating optimization的思想。能够掌握上面三个重要内容就非常好了。

机器学习之径向基神经网络(RBF NN)的更多相关文章

  1. RBF径向基神经网络——乳腺癌医学诊断建模

    案例描述 近年来疾病早期诊断越来越受到医学专家的重视,从而产生了各种疾病诊断的新方法.乳癌最早的表现是患乳出现单发的.无痛性并呈进行性生长的小肿块.肿块位于外上象限最多见,其次是乳头.乳晕区和内上象限 ...

  2. 径向基(RBF)神经网络python实现

    from numpy import array, append, vstack, transpose, reshape, \ dot, true_divide, mean, exp, sqrt, lo ...

  3. RBF(径向基)神经网络

    只要模型是一层一层的,并使用AD/BP算法,就能称作 BP神经网络.RBF 神经网络是其中一个特例.本文主要包括以下内容: 什么是径向基函数 RBF神经网络 RBF神经网络的学习问题 RBF神经网络与 ...

  4. RBF高斯径向基核函数【转】

    XVec表示X向量.||XVec||表示向量长度.r表示两点距离.r^2表示r的平方.k(XVec,YVec) = exp(-1/(2*sigma^2)*(r^2))= exp(-gamma*r^2) ...

  5. 径向基网络(RBF network)

    来源:http://blog.csdn.net/zouxy09/article/details/13297881 1.径向基函数 径向基函数(Radical Basis Function,RBF)方法 ...

  6. 径向基函数(RBF)神经网络

    RBF网络能够逼近任意的非线性函数,可以处理系统内的难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近.时间序列分析.数据分类.模式识别.信息处理.图像处理.系统 ...

  7. 广义径向基网络(RBF网络)

  8. 深度学习框架PyTorch一书的学习-第四章-神经网络工具箱nn

    参考https://github.com/chenyuntc/pytorch-book/tree/v1.0 希望大家直接到上面的网址去查看代码,下面是本人的笔记 本章介绍的nn模块是构建与autogr ...

  9. MATLAB——径向基网络拟合曲线和分类

    1.:.:; rand('state',pi); %指定状态,产生相同的随机数 T=sin(*P)+rand(,length(P)); % 给正弦函数加噪声 plot(P,T,'o') % net=n ...

随机推荐

  1. 目录——创建、切换、pwd、删除、复制、剪切

    1.创建目录: (1)在已经存在的目录下新建一个目录: 可以看出在创建1997目录后,在tmp中能够顺利找到. (2)在一个不存在的目录下新建一个目录: 直接在tmp目录下新建一个a目录,再在a目录下 ...

  2. cube.js 学习(四)cube.js cube 说明

      cube 是cube.js data schema 的核心,里面定义了生成sql 的说明 一个比较全的schema 例子 cube(`Users`, { sql: `select * from u ...

  3. GSS3 C - Can you answer these queries III

    //在gss1的基础上加了修改操作,一样的做法,加一个modify函数就可以了 #include<iostream> #include<cstdio> #include< ...

  4. javascript练习题

    function Vertex(city, x) { this.name = city; this.num = x; } var node0 = new Vertex("邯郸", ...

  5. Fluent当中的通配符【翻译】

    本文翻译自fluent帮助手册 可以在TUI当中使用通配符指定特定区域的名称,一些例子如下: 通配符*等同于"所有区域"例如: -/display/boundary-grid * ...

  6. Easytrader踩坑之旅(二)

    快速阅读 用的是THSTrader进行的调试,同花须必须用8.0的. 在新的机子重新安装requirements已经调用同花顺查股票余额. 继续昨天的话费. 昨天到最后,虽然显示了余额,但是和自己帐户 ...

  7. 反编译pyinstaller打包的exe安装包

    PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译 在这里分享一些技巧和经验给大家.辛苦撰文分享,转载或引用请保留本文作者信息及文章链接. 作者的环境: win ...

  8. 深度学习面试题03:改进版梯度下降法Adagrad、RMSprop、Momentum、Adam

    目录 Adagrad法 RMSprop法 Momentum法 Adam法 参考资料 发展历史 标准梯度下降法的缺陷 如果学习率选的不恰当会出现以上情况 因此有一些自动调学习率的方法.一般来说,随着迭代 ...

  9. 利用pgAgent创建定时任务

    使用Postgresql自带的pgAgent,可以很方便地创建定时执行任务.现在网上的资料都比较旧,Postgresql版本更新得比较快,导致网上的一些教程都不合用了,现在我写分享一下自己的经验. P ...

  10. js插件---弹出层sweetalert2(总结)

    js插件---弹出层sweetalert2(总结) 一.总结 一句话总结: sweetalert2的效果非常好,效果比较Q萌,移动端适配也比较好,感觉比layer.js效果好点 1.SweetAler ...