冰冰点灯,照亮我家门前~
欢迎进入nnetinfo
用户名:
密码:
深圳学习数据分析,数据挖掘,请联系yahushuxue@163.com~
nnetinfo : 本网发布神经网络相关的学习与研讨内容。
当前位置:教学区
一篇文章读懂径向基神经网络原理(下)
作者:梁小h   日期:2015-11-03 15:36:33.0

       续上文 :  一篇文章读懂径向基神经网络原理(上)

      前面已经介绍了径向基神经网络基础与精确径向基神经网络原理,本文接着介绍几种常用的径向基模型和径向基的宽

度大小的选择方法.

 

      在之前对径向基神经网络原理的学习基础上,接下来了解几种具有特色的网络:

一.径向基神经网络原理(matlab里的newrb)

        精确径向基的误差虽然为0,但隐节点非常的多(有多少个样本,就有多少个隐节点)。我们企图在误差允许范围

内,找尽量少的隐节点。

       Matlab神经网络工具箱采取了这样的方法:先初始化一个没有任何隐节点的径向基神经网络,然后逐个往网络添加隐

节点,误差达到要求时,停止添加节点。为了使隐节点尽量的少,每次都会选择能使误差下降最多的节点作为新节点.

具体算法过程如下:

         1. 初始化网络

         2. 预估加入以哪个样本为中心的径向基作为隐节点,才能使误差减少最多

         3. 选用以该样本为中心的径向基作为新的隐节点,。

         4. 用最小二乘法计算,各个径向基的高为什么值时,使拟合原始数据的误差最小。

         5. 计算新网络的新误差。

         6. 误差是否达到要求,否则返回2.

 

   通过这样的算法,就能用较少的神经网络,获得较高的准确率。

   更具体的算法原理有更多的细节,只能在代码的实现中讲述,具体的算法与代码请参考:

   若果调用matlab神经网络工具箱,请参考文章:径向基(matlab工具箱)

 

二 . 广义回归神经网络原理(matlab里的grnn)

       广义回归神经网络是最简单的网络,不需要计算,就能将网络设计出来。它在(1)式的基础上,作了2点改动,

      1 . 隐层到输出层的权重w1,w2,w3均直接采用输出 y(1) ,y(2), y(3).

      2 . 径向基要作归一化。另外,隐层到输出层没有阈值(也可以认为阈值是0).

      详细请直接对比下式与(1)式的差异:

      三个训练样本的广义回归神经网络数学表达式:

 

                                                            式(2)

    这里的Esum是各个隐节点的和:

    

     到这里,我们已经一目了然了。构成一个广义神经网络,是不需要任何计算的,只需要记录训练数据的输入和输出

就可以了。来了一个新数据,代入式(2),就可以得到网络的预测值。广义回归神经网络的计算量主要在网络的使用上。

 

       为了加深广义回归神经网络原理的理解,我们分步解释一下式2的计算过程,当来了一个新数据,网络将如下计算:

       1.计算各个隐节点的输出:计算它到各个训练样本的距离,再将距离乘以扩展系数,再套到径向基函数上,这样就

          得到隐节点的输出。

       2.隐节点归一化:将各个隐节点/所有隐节点的和

       3.得到最后输出:将隐节点乘以权重,即得到最终的输出。

 

      我们也可以从概率的角度去理解这个表达式,我们再次分解它的计算过程,当来了一个新数据,网络将如下预测:

      1.计算新输入到各个训练样本的距离。

      2.根据距离,计算新输入属于各个训练样本的概率。

     3.根据概率和各个样本的输出,求新输入对应的期望输出。

 

      想自己用代码实现广义回归神经网络,请参考:

      若果调用matlab神经网络工具箱,请参考文章:广义回归神经网络(matlab工具箱)

三 . 概率神经网络原理(matlab里的pnn)

       概率神经网络与广义回归神经网络很像,只不过概率神经网络用于做分类,做过分类的同学都知道,分类的输出

一般写成向量形式,例如2个种类,属于第二种,那么输出就是[0 1]这样表示,即会有2个输出。

       那么,依广义神经网络,若果新的输入X,可以计算每个输出的计算结果:

    

        上面两个式子等号右边只有y的上标不同;  这里代表第3个训练样本第2个输出的值;   Esum和广义回归神经网

络一样。由于训练样本的输出要么是0要么是1,所以y1和y2可以理解为X属于第1类和第2类的概率,这也就是为什么这种

网络叫概率神经网络,它的第i个输出实际就是输入属于第i类的概率。

         最终输出概率最大的那类,例如计算结果是[0.8,0.2],我们就输出[1,0].(Matlab用竞争比较函数:compte([0.8 0.2])

就能得到[1 0])。

         备注:实际上,在计算y1,y2时,等式右边统一不除以Esum,不会影响后面的竞争比较结果。所以,实际计算中,可

以不计算Esum这一项。

       

        想自己用代码实现概率神经网络,请参考:概率神经网络(matlab工具箱)

        若果调用matlab神经网络工具箱,请参考文章:

 

last . 关于钟型函数宽度的选择:

       径向基神经网络的主体思想就是用钟型函数去逼近目标函数.自然而然可知,钟型函数的肥瘦选择非常重要.

       下面给出一张图,让大家感受一下钟型函数肥瘦对拟合效果的影响.

                                  

        钟型函数(红色)较瘦的时候,它们之间互不影响,因此叠加出来的曲线(绿色)跌宕起伏。随着钟型函数宽度增大,

钟型函数之间会有重叠,因些曲线会渐渐平滑。当钟型函数非常肥大的时候,会近似一条横线,要使它们叠出数据点

所在的曲线,将会需要使用非常大的系数,这时很容易引起数值问题。

        对一般的径向基神经网络来说,尽量要让径向基肥一些,这样最后叠加出来的函数会滑些,但是也不要太肥,因

为太肥会使隐层到输出层的权值非常的大,可能会带来数值问题。      

        一般来说,钟型函数的宽度要与拟合数据点之间的距离保持一个数量级,再尝试增大或减小宽度,比较不同的宽度下,

网络效果的差异,最后得到最适当的宽度 (怎么衡量网络效果?可以预留检验数据,在网络训练好后检验网络的泛化能力,

或者其他方法,这不在本文的讨论范围内,请参考其他文章).

 

     怎么调整钟型函数的宽度?我们再次贴出式(1):

                                                        

       其中a就是影响钟型函数的宽度的参数了,相信读到这里的人都有不错的数学基础,从a与x的关系可以知道,a越小,钟

型函数越肥,a越大,钟型函数越瘦.只要调整a,就能改变网络的径向基宽度.

       这里需要特别提到, 对于newrb模型,因为我们希望用尽量少的隐节点去达到更小的误差。若果拟合的函数比较平

滑,我们会选用较宽的径向基(若果选用瘦的径向基会需要很多隐节点),若果拟合的函数比较跌宕起伏,我们则会用

较瘦的径向基(若果选用宽的径向基会需要很多隐节点)。

       我们知道,a与RBF的宽度成反比,这样有些别扭.因此matlab在径向基神经网络工具箱里,用来代替a,这

样参数spread(扩展系数)就与RBF的宽度成正相关了.为什么分子要用?输入x为1,spread也为1时,我们希望

径向基的输出是0.5,然后就可以倒推出分子要用了.

 

结束语:

     在众多神经网络中,径向基神经网络原理算是比较容易理解的,虽然以前就学习了径向基,但这次重新整理径向基的内容,

从读原码到完成这张文章还是花了小编不少时间,归根到底,学习算法想到彻底理解原理,必须亲自编写一次代码,给出自己对

算法的理解,并多做试验,验证猜想的结果.