【机器学习】RBF神经网络原理与Python实现
一、RBF神经网络原理
1. RBF神经网络结构与RBF神经元
RBF神经网络的结构图如上图所示,其结构与简单的BP神经网络相同都是三层网络结构:输入层、隐含层和输出层。不同的是,RBF神经网络的隐含层节点的激活函数为径向基(RBF)函数。
假设训练数据集为 X = { x 1 , x 2 , ⋯   , x m } X = \left\{ {
{x^1},{x^2}, \cdots ,{x^m}} \right\} X={
x1,x2,⋯,xm},其中第i个训练样本为 x i = { x 1 i , x 2 i , ⋯   , x n i } {x^i} = \left\{ {x_1^i,x_2^i, \cdots ,x_n^i} \right\} xi={
x1i,x2i,⋯,xni},也就是说样本数为m,特征数为n,所以输入层的节点个数为n。假设隐含层节点个数为s,第i个训练样本 x i {x^i} xi从隐含层的第j个节点( j = 1 , 2 , ⋯   , s j = 1,2, \cdots ,s j=1,2,⋯,s)的输出为:
G ( x i , c j ) = exp ( − 1 2 ( σ j ) 2 ∥ x i − c j ∥ ) G\left( { {x^i},{c^j}} \right) = \exp \left( { - \frac{1}{ {2{ {\left( { {\sigma ^j}} \right)}^2}}}\left\| { {x^i} - {c^j}} \right\|} \right) G(xi,cj)=exp(−2(σj)21∥∥xi−cj∥∥)
其中 c j {c^j} cj和 σ j {\sigma ^j} σj分别是RBF神经网络第j个隐含层RBF激活函数的中心参数和宽度参数【参考资料1】。
隐含层输出通过权重矩阵映射到输出层的输入,本博文中输出层节点的激励函数为线性函数( y = x y = x y=x)。
RBF神经网络的数据流向为:训练样本—RBF隐含层—权重矩阵—输出层
2. RBF神经网络求解
RBF神经网络是BP神经网络的特殊形式,因此求解过程也与BP神经网络相同,分为两个部分:正向传播计算误差和反向传播调整参数。
2.1 正向传播:计算误差
对于样本 x i {x^i} xi,RBF神经网络的输出为 y i {y^i} yi:
y ^ i = ∑ j = 1 s w j G ( x i , c j ) { {\hat y}^i} = \sum\limits_{j = 1}^s { {w_j}G\left( { {x^i},{c^j}} \right)} y^i=j=1∑swjG(xi,cj)
样本标签为 { y 1 , y 2 , ⋯   , y m } \left\{ { {y^1},{y^2}, \cdots ,{y^m}} \right\} { y1,y2,⋯,ym},RBF神经网络的损失函数为:
L o s s = 1 2 ∑ i = 1 m e i 2 = 1 2 ∑ i = 1 m ( y i − y ^ i ) 2 = 1 2 ∑ i = 1 m (