BP神经网络是一种全局逼近网络,学习速度慢,本次介绍一种结构简单,收敛速度快,能够逼近任意非线性函数的网络——径向基函数网络。(Radial Basis Function, RBF)是根据生物神经元有局部响应的原理而将基函数引入到神经网络中。

为什么RBF网络学习收敛得比较快?当网络的一个或多个可调参数(权值或阈值)对任何一个输出都有影响时,这样的网络称为全局逼近网络。由于对于每次输入,网络上的每一个权值都要调整,从而导致全局逼近网络的学习速度很慢。BP网络就是一个典型的例子。

RBF是由三层构成的前向网络,第一层为输入层,节点个数等于输入的维数;第二层为隐含层,节点个数由问题复杂度而决定,第三层为输出层,节点数等于输出数据维度。

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

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

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

RBF与多层感知器不同,不同层之间有不同的作用。隐藏层为采用径向基函数作为响应函数,从而将原本的输入空间转换到隐含空间,将线性不可分问题变得线性可分,输出层是线性的。

径向基神经网络可以分为正则化网络和广义网络,两种差别不大,工程中常用的是广义网络,

 

径向基函数

所谓径向基函数 (Radial Basis Function 简称 RBF), 就是某种沿径向对称的标量函数。 通常定义为空间中任一点x到某
一中心xc之间欧氏距离的单调函数 ,可记作 k(||x-xc||), 其作用往往是局部的 , 即当x远离xc时函数取值很小。

最常用的径向基函数是高斯核函数 ,形式为 k(||x-xc||)=exp{- ||x-xc||^2/((2*σ)^2)) } 其中x_c为核函数中心,σ为函数的宽度参数 , 控制了函数的径向作用范围。如果x和x_c很相近那么核函数值为1,如果x和x_c相差很大那么核函数值约等于0。由于这个函数类似于高斯分布,因此称为高斯核函数,也叫做径向基函数(Radial Basis Function 简称RBF)。它能够把原始特征映射到无穷维。

核函数有很多种,如线性核、多项式核、Sigmoid 核和 RBF(Radial Basis function)核。

可以证明一定条件下,径向基函数几乎可以逼近所有的函数。

径向基函数本身内容也十分丰富,有兴趣的话可以自己多多查阅。

 

为什么RBF可以拟合任意函数呢

 之所以RBF能够拟合任意函数,可以从内插法的角度去理解。要拟合一个曲线,我们可以通过内插法获得这个曲线的表达函数,譬如:多项式插值、拉格朗日插值等。RBF 插值是一系列精确插值方法的组合;即表面必须通过每一个测得的采样值。

  对于RBF插值,其特点即为,在输入数据集中,与中心点距离近的点对映射函数的贡献最大。  

  完全内插法即要求所有插值点都经过曲面,由于RBF内插对于每个x都有用到,所以是一种完全内插的形式,存在的问题就是当样本中包含噪声时,神经网络将拟合出一个错误的曲面,从而使泛化能力下降。另外,若样本x的数据远大于非线性函数φ,该求解变得不稳定,即为解超定方程。因此需要引入正则化方法,正则化的方法即通常加上正则化项。

 

正则化径向基函数网络

由三层组成,第一层由输入节点组成,其个数等于输入向量的维度;第二层为隐含层,一个隐含节点对应一个训练数据,所以其个数等于训练数据点的个数,其激活函数为径向基函数,所以其输出为:Xi为基函数中心;输出层是线性单元,其个数为输出向量的维度。

 

注意,输入层到隐含层的权值都为1,即所有的输入数据都完全输入隐含层中。这里面是并没有设置权值w的。

正则化RBF网络的性质:

  • 是一个通用逼近器,只要有足够的隐藏节点,可以以任意精度逼近任意函数。
  • 给定一个未知的非线性函数F,总可以找到元组系数,使得网络对F的逼近最优
  • 若想要获得优秀性能,则隐含层神经元个数要很多,即需要很多训练数据,会导致很大的计算量,
  • 而一个矩阵越大,那么病态矩阵出现的概率也越大,所以求解方面出现极大地困难。

 

广义网络

正则化网络中,隐含层节点个数等于输入训练样本个数,所以如果选了样本个数很多,计算量很大。

而一个矩阵越大,那么病态矩阵出现的概率也越大,所以求解方面出现极大地困难。

所以用Galerkin方法来减少隐含层神经网络单元的个数,此时求得的是较低维度上的次优解。

 

RBF学习算法

求解的参数有3个:基函数的中心、方差以及隐含层到输出层的权值。(由不同层的作用选择不同的调整策略,隐含层根据非线性准则,输出层根据线性最优准则)

根据基函数中心选取的不同,常见的有以下几种学习算法:

(1)随机选取固定中心

此种方法中,中心和标准差都固定了,唯一需要学习的是隐含层与输出层之间的权值。

中心随机的从输入样本数据中选取且固定不变(当输入数据比较典型有代表性时,这是一种简单可行的方法)

标准差: Dmax是选取中心之间的最大距离,n为隐含节点的个数,这样选取是为了防止径向基函数出现太尖或太平的情况。由此得到了基函数:

 

 

 

 

(2)自组织选取中心学习方法:

  第一步:无监督学习过程,求解隐含层基函数的中心与方差

  第二步:有监督学习过程,求解隐含层到输出层之间的权值

  首先,选取h个中心做k-means(具体K-means见机器学习)聚类,对于高斯核函数的径向基,方差由公式求解:

  cmax为所选取中心点之间的最大距离。

  隐含层至输出层之间的神经元的连接权值可以用最小二乘法直接计算得到,即对损失函数求解关于w的偏导数,使其等于0,可以化简得到计算公式为:

  或者权值可以通过直接求伪逆,和随机选取固定中心法相同

  

(3)有监督选取中心

  中心,方差,及权值都是通过误差来修正学习过程,可以很方便的采用梯度下降法。

(4)正交最小二乘法(还没弄懂,后续更新)

 

总结:由专家大量实验得出,中心位置采用无监督学习,输出权值采用监督学习的径向基函数网络推广能力不如多层感知器,而中心位置与权值均采用有监督学习的广义RBF网络优于多层感知机。

所以对于RBF算法一般考虑用有监督选取中心方法作为其学习方法。

 

RBF与多层感知器比较

任意一个RBF都可以找到对应替代他的RBF,任意RBF也都可以找到替代他的多层感知器。

  • RBF是三层网络只有一个隐含层,而多层感知器可以有多个隐含层
  • RBF隐含层和输出层完全不同,隐含层采用非线性径向基函数作为基函数,而输出采用线性函数,两者作用不同。而多层感知器则一般度采用非线性函数。
  • RBF的基函数计算的是输入向量与基函数中心的欧式距离,使用局部指数衰减的非线性函数进行局部逼近,因此要达到同样的精度,径向基函数所需参数比多层感知机少得多。而多层感知器的隐藏单元计算输入向量与权值内积。
  • BP使用Sigmoid激励函数,输入有很大的可见域,RBF采用基函数,输入可见域很小,当输入值偏离基函数中心是,输出逐渐减小,并且很快趋于0,这一点符合神经元响应基于感受域这一理论基础。但是由于感受域很小,所以需要很多的径向基神经元。
  • BP神经网络的隐节点采用输入模式与权向量的内积作为激活函数的自变量,而激活函数采用Sigmoid函数。各调参数对BP网络的输出具有同等地位的影响,因此BP神经网络是对非线性映射的全局逼进,RBF神经网络的隐节点采用输入模式与中心向量的距离(如欧式距离)作为函数的自变量,并使用径向基函数(如Gaussian函数)作为激活函数。神经元的输入离径向基函数中心越远,神经元的激活程度就越低(高斯函数)。RBF网络的输出与部分调参数有关,譬如,一个wij值只影响一个yi的输出(参考上面第二章网络输出),RBF神经网络因此具有“局部映射”特性。所谓局部逼近是指目标函数的逼近仅仅根据查询点附近的数据。而事实上,对于径向基网络,通常使用的是高斯径向基函数,函数图象是两边衰减且径向对称的,当选取的中心与查询点(即输入数据)很接近的时候才对输入有真正的映射作用,若中心与查询点很远的时候,欧式距离太大的情况下,输出的结果趋于0,所以真正起作用的点还是与查询点很近的点,所以是局部逼近;而BP网络对目标函数的逼近跟所有数据都相关,而不仅仅来自查询点附近的数据。

 

  • 使用RBF的训练速度快,一方面是因为隐含层较少,另一方面,局部逼近可以简化计算量。对于一个输入x,只有部分神经元会有响应,其他的都近似为0,对应的w就不用调参了。
  •  Poggio和Girosi已经证明,RBF网络是连续函数的最佳逼近,而BP网络不是。

 

RBF神经网络与SVM的区别

SVM等如果使用核函数的技巧的话,不太适应于大样本和大的特征数的情况,因此提出了RBF。

  另外,SVM中的高斯核函数可以看作与每一个输入点的距离,而RBF神经网络对输入点做了一个聚类。RBF神经网络用高斯核函数时,其数据中心C可以是训练样本中的抽样,此时与svm的高斯核函数是完全等价的,也可以是训练样本集的多个聚类中心,所以他们都是需要选择数据中心的,只不过SVM使用高斯核函数时,这里的数据中心都是训练样本本身而已。

 

高斯核函数映射到高维空间

   首先给出高斯核函数的定义公式:

  实际上,可以化简为:

  当然通过幂级数展开:

  可以看到,其中X向量会生成类似多项式核展开的形式,譬如原来的参数有x1,x2。映射后,参数包含了x1*x1 ,x1*x2,x2*x2将原来2维映射到3维上了。

 

本文参考:https://www.cnblogs.com/pinking/p/9349695.html