老饼讲解:一步一步上手学习
前面我们了解了RBF神经网络的思想与模型,并用matlab工具箱训练了RBF神经网络,有的同学就会问了,模型中的参数到底是怎么训练出来的?这节我们就抛开matlab工具箱,详细说说这些参数是怎么搞出来的。
前面我们借助了matlab的newrbe函数来训练RBF神经网络,并看了它们效果,好了,那RBF神经网络的模型参数是怎么得到的呢?事实上,RBF神经网络的训练常见的有三种方法:
【1】插值法
【2】OLS法
【3】Kmeans法
插值法是最基本的方法,而OLS则是它的改进,kmeans是结合kmeans聚类算法来求解的一种方法。在matlab中,使用newrbe函数时,用的就是插值法,而用newrb则是使用OLS法,特别地,matlab不提供kmeans方法。
好了,不管怎么样,我们先来把最基本的插值法搞清楚,在它的基础上,其它算法的意图也就容易理解了。
RBF神经网络的求解,其实要比我们想象的更加简单,下面我们看完插值法的原理,就会非常清楚了。
先来看隐层阈值b,它一般是通过设置spread参数来间接设定的,因此它不用求解。
spread参数与b的关系如下:
公式的意义可以参考:《RBF神经网络-spread参数》
好了,接下来是隐层的权重W,对于插值法很简单,它直接以每个样本点作为RBF中心,有多少个样本点就生成多少个RBF,因此,实际W就是我们的输入样本,即:
为什么要将X转置呢?因为X每列代表一个样本,而W则是每行代表一个中心,所以要将X转置,才是W。
所以,在用插值法求解RBF模型时,其实只有输出层权重、阈值是真正需要求解的,事实上,它也很简单。
注意到,隐层的是已知的,因此隐层的输出值也是已知的:
如上,直接把W和b代进去,就能计算出H的值了。值得注意的是,这里的H最后是的矩阵,这是因为每个样本就有n个隐节点,所以n个样本就是了。
所以,剩下的问题是,求一组,使得模型输出与y一致,即:
更一般地,可以写为如下形式:
可以看到,它就只是一个线性方程组,直接求解出就可以了。
为了照顾一些同学,我们不妨把它展开为如下形式:
注意到待解参数个数大于方程个数,因此上述方程必有解,且是精确解,也就是说,RBF神经网络在训练数据上的预测误差必为0,这就是插值法求解RBF神经网络的特点了。
matlab中的newrbe函数就是new-rbf-exact的意思,代表新建一个精确求解的RBF神经网络。
最后,我们来整理一下插值法求解RBF神经网络的流程。
RBF神经网络算法流程(插值法)如下:
一、生成输出层权重、阈值W,b
,
二、计算隐层输出值H
三、求解输出层权重、阈值
四、输出模型:
插值法的求解就是这么的简单,它就是matlab中newrbe函数的代码逻辑了,这里我们就不展示代码的实现了,如果要具体代码,可以移步《RBF神经网络-自实现代码》,里面会展示实现代码,以及相关原理。
好了,这节我们就讲解了RBF神经网络用插值法求解的原理,它是RBF神经网络最原始的求解算法,其实说了那么多,总结起来就两句话:隐层阈值靠设置、输出层阈值就是一个线性方程求解,就这么简单。
评论