RBF的直观介绍; c( R- _& D6 ~- U+ ]) i. U. r
RBF具体原理,网络上很多文章一定讲得比我好,所以我也不费口舌了,这里只说一说对RBF网络的一些直观的认识1 W; b* ?- X% d. Z4 a9 `' A' E/ I
H3 ?* V; X) {- ~0 X
1 RBF是一种两层的网络 , w- {( u: n8 w! \! z. O/ m* d是的,RBF结构上并不复杂,只有两层:隐层和输出层。其模型可以数学表示为:, b, x' ?+ L. X
yj=
i=1∑nwijϕ(∥x−
ui∥2),(j=
1,…,p)
* Z3 ?# R2 x7 I( ^8 u 0 A- J( _) Y$ V( ^! f$ P/ F4 ^9 I + y1 x. ~* d+ d! u! i( B2 RBF的隐层是一种非线性的映射 . J! E& y( e; M& R! E; MRBF隐层常用激活函数是高斯函数:0 D3 A( D V V+ w) I( e
" o- o# [* i: o w! X; ~
ϕ(∥x−u∥)=e−σ2∥x−u∥2: V: o5 S3 I: l9 q6 ?
; l$ M6 ~! z1 T2 P
* a, p8 _4 }8 k: P2 ^3 X
+ V- @: \! u3 z3 T, `4 R- m3 RBF输出层是线性的; Z1 Q, ^! Q/ l/ |8 h, t
4 RBF的基本思想是:将数据转化到高维空间,使其在高维空间线性可分 $ W) H7 q; n5 e! k+ kRBF隐层将数据转化到高维空间(一般是高维),认为存在某个高维空间能够使得数据在这个空间是线性可分的。因此啊,输出层是线性的。这和核方法的思想是一样一样的。下面举个老师PPT上的例子:2 F+ r2 L4 V: h& B. {5 @ 7 {6 I6 j( W" |3 \+ X, L. p) c : H+ k2 n! e6 S' e7 j3 s5 F上面的例子,就将原来的数据,用高斯函数转换到了另一个二维空间中。在这个空间里,XOR问题得到解决。可以看到,转换的空间不一定是比原来高维的。 * F8 K, V! V/ L2 @7 L ) |" W, d ^- w6 t) JRBF学习算法0 ?5 L- s! B$ A$ B . c/ Q/ R, V* i
. D7 Y# r6 J- ~: c3 o ! R$ H% }) M0 b+ }对于上图的RBF网络,其未知量有:中心向量ui ,高斯函数中常数σ,输出层权值W。 ) [: n: G! C; S/ `学习算法的整个流程大致如下图:8 j, @8 y$ @3 G$ N
<span class="MathJax" id="MathJax-Element-5-Frame" tabindex="0" data-mathml="W W" role="presentation" style="box-sizing: border-box; outline: 0px; display: inline; line-height: normal; font-size: 19.36px; word-spacing: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; position: relative;">WW- e) [$ {$ r4 r4 Q) t/ g G" ] : M7 | Z c, ]& _+ ` 9 ]! _) G1 k9 H. s# X. ]- {7 E具体可以描述为: 3 E: I$ k/ a, a* t' c0 i, ^7 O ' i0 u# y3 x) p0 D& N1.利用kmeans算法寻找中心向量[color=rgba(0, 0, 0, 0.749019607843137)] ui ( M$ R1 e% O7 ]& }& n U% C# a ], q2 I z
2.利用kNN(K nearest neighbor)rule 计算 σ[color=rgba(0, 0, 0, 0.75)] # X" P$ r3 T3 a2 u, B6 O5 W* mσ# C" w. V- d. @( w( j7 F) S
i=K1k=1∑K∥uk−ui∥2 ! j$ j3 O% h. f' G + J( _# b3 ]6 e6 t) c+ m5 W 2 A$ R; D2 H ?$ l9 v' i7 R . {; L& X* r9 }# [8 I, L1 S1 U
3. [color=rgba(0, 0, 0, 0.75)]W [color=rgba(0, 0, 0, 0.75)]可以利用最小二乘法求得6 g. Q& A# S# k4 F( j' B7 H
6 P" D$ s j1 ?) vLazy RBF; {& ~( w2 | \- @
a+ A, C% t( R1 H
可以看到原来的RBF挺麻烦的,又是kmeans又是knn。后来就有人提出了lazy RBF,就是不用kmeans找中心向量了,将训练集的每一个数据都当成是中心向量。这样的话,核矩阵Φ就是一个方阵,并且只要保证训练中的数据是不同的,核矩阵Φ就是可逆的。这种方法确实lazy,缺点就是如果训练集很大,会导致核矩阵Φ也很大,并且要保证训练集个数要大于每个训练数据的维数。 3 G/ W$ _( b% Q8 ]2 R2 w ; G) d b! \5 Z- L( K5 s$ b% aMATLAB实现RBF神经网络下面实现的RBF只有一个输出,供大家参考参考。对于多个输出,其实也很简单,就是WWW变成了多个,这里就不实现了。. H' _2 ]* q8 m. X# D' o/ m2 J
' I" `) b- {5 R% y
demo.m 对XOR数据进行了RBF的训练和预测,展现了整个流程。最后的几行代码是利用封装形式进行训练和预测。 ; S L5 H- s4 ^7 U; C . s1 E6 ?$ e8 ?: lclc;$ f+ }8 f' U1 r, C* D1 e& _
clear all;5 ~: B+ w7 J( E; c: A) d0 z; Y
close all; + H' r. A. P+ t5 B, G6 K# r( k - u' \8 d9 J3 M: S6 q%% ---- Build a training set of a similar version of XOR5 J+ i8 ]0 n0 w8 M" |
c_1 = [0 0]; 4 G" G# `8 s; G/ ec_2 = [1 1]; % ]7 _: B0 E& S, k2 _, \c_3 = [0 1]; " L3 w. I( ]( K" wc_4 = [1 0];1 w+ T+ Y/ `0 G5 L2 r
% r* k/ o: n3 q4 m u
n_L1 = 20; % number of label 1 4 E; G$ n' j, v" I( o M% gn_L2 = 20; % number of label 23 w/ F* }, R/ {$ Y% B1 }6 u! D