Radial-Basis Function Networks
RBF神经网络: 将 输入向量与 多个中心点(与输入向量相同维度)(数量可根据设计进行改变)的欧式距离进行计算,排除其他的信息。 对一个中心点距离相同的点,在此神经元中可以看作相同。
如果单纯将欧式距离进行输出,那么距离越近,输出越小;距离越大,输出越大。
但是,我们实际上是希望 越靠近中心点,值越大。因此在选择第一层神经元的激活函数时,应该选用 输出与输入成反比的函数。我们选用 高斯分布,距离为0时,值最大。
我们可以看到 RBF网络中: 第一层我们 将输入
x
⃗
\vec x
x 与 第i个中心点
x
⃗
i
\vec x_i
xi 求欧式距离,然后使用激活函数(高斯分布)得到第一层的输出。第二层则是按权重求和,纯线性关系,激活函数可以根据需要进行选择。也就是说,第二层和 MLP 是一样的,只有第一层是不同的。
因此,我们需要优化的就是第一层的中心点如何设定/更新,以及第二层的权重如何更新。
Exact Interpolation
我们使用 和 数据点相同数目的神经元,然后将每一个数据点都作为中心点。这样子就可以得到完美的拟合。
数学上表达出来:
对于n个数据点,每个数据点的维度是m,
x
i
∈
R
m
,
i
=
1
,
2
,
…
,
n
{x_i \in R^{m},i=1,2, \dots ,n}
xi∈Rm,i=1,2,…,n,想要的输出是
d
i
d_i
di.
那么我们将每一个数据点都作为中心点,在BP神经元的第一层设计n个中心点,分别是
x
j
x_j
xj,那么第一层输出后,到第二层的权重就有
w
j
w_j
wj
我们想要 对于所有的输入点
x
i
x_i
xi,都有输出
d
i
d_i
di.
∑
j
n
w
j
φ
(
x
i
−
x
j
)
=
d
i
\sum_j^{n} w_j \varphi ( x_i-x_j ) = d_i
j∑nwjφ(xi−xj)=di
∑
j
n
w
j
φ
i
j
=
d
i
\sum_j^{n} w_j \varphi_{ij} =d_i
j∑nwjφij=di
那就可以得到矩阵:
ϕ
W
=
d
⃗
\phi W = \vec d
ϕW=d
那么,就可以得到第二层的权重:
W
=
ϕ
−
1
d
⃗
W=\phi^{-1} \vec d
W=ϕ−1d
但是这样子造成overfitting, 范化(generalizaton)会很差;而且对于大量的数据而言,结构也过大。 因此,精确插值不是对于大数据模型不是一种好方法。
Learning
我们可以设置一定数目(
k
k
k个)中心点,将每个中心点随机设置成
x
j
=
{
μ
j
1
,
μ
j
2
,
…
,
μ
j
m
}
x_j=\{ \mu_{j1},\mu_{j2},\dots,\mu_{jm}\}
xj={μj1,μj2,…,μjm},并对每一个中心点设置一个
σ
j
\sigma_j
σj, 另外在输出层设置一个偏置
b
b
b,然后我们就可以得到
f
(
x
)
=
∑
i
=
1
k
w
i
φ
(
∣
∣
x
−
x
i
∣
∣
)
f(x)=\sum_{i=1}^{k}w_i \varphi(||x-x_i ||)
f(x)=∑i=1kwiφ(∣∣x−xi∣∣),其中
φ
(
r
)
=
e
−
r
2
2
σ
2
\varphi(r)=e^{-\frac{r^2}{2\sigma^2}}
φ(r)=e−2σ2r2。
然后我们就可以将
σ
⃗
,
μ
⃗
,
w
⃗
\vec \sigma,\vec \mu, \vec w
σ,μ,w 根据 Steepest Descent Method 进行更新。
Hybrid Method
将第一层寻找中心点 和 第二层确定权重分开,可以简化问题。
find the center points
randomly set k points
我们在数据集中随机选取一定数目的点作为中心点。因为我们随机选择的时候可以随机在不同的位置都选择一些点,因此数据集中的不同类中都可以选中一些点,这些点和实际的聚类点相差不会太大。 因此我们在随机选择的时候不能选择太少的点,不然会没有代表性。
Clustering (k-means)
Find weights in second layers
minimize the error
W = ( ϕ T ϕ ) − 1 ϕ T d ⃗ W=(\phi^{T}\phi)^{-1}\phi^{T}\vec d W=(ϕTϕ)−1ϕTd