随机向量函数链神经网络(RVFLNN)
函数链神经网络(Functional-link neural network,简称FLNN)的结构如下图。
和深度神经网络结构不同的是,FLNN相当于把隐层放到了输入层中,作为增强结点(Enhancement nodes)。也可以理解成FLNN在输入层就对输入向量进行了非线性变换。作为简洁的扁平网络结构,RVFLNN在监督学习时训练时更快,并且能够在已知有限训练次数内收敛于最优解。
结构分析
假设一个RVFLNN结构有
N
N
N个原输入节点和
J
J
J个增强节点。
其中各个节点的权重为
W
=
[
β
1
,
β
2
,
⋯
,
β
N
,
β
N
+
1
,
⋯
,
β
N
+
J
]
\mathbf{W}=[\beta_1,\beta_2,\cdots,\beta_N,\beta_{N+1},\cdots,\beta_{N+J}]
W=[β1,β2,⋯,βN,βN+1,⋯,βN+J]。
原输入节点经过线性组合加上偏置项作为第
i
i
i个增强节点的输入值
θ
i
=
A
i
X
T
+
b
i
\theta_i=\mathbf{A_iX^\mathsf{T}}+b_i
θi=AiXT+bi;
A
i
,
b
i
\mathbf{A_i},b_i
Ai,bi是以随机方式生成,原则上需要避免激活后的值落在激活函数的饱和区间。
原输入节点和经过激活(非线性变换)的增强节点构成了输入层
d
=
[
δ
1
,
δ
2
,
⋯
,
δ
N
,
δ
N
+
1
,
⋯
,
δ
N
+
J
]
\mathbf{d}=[\delta_1,\delta_2,\cdots,\delta_N,\delta_{N+1},\cdots,\delta_{N+J}]
d=[δ1,δ2,⋯,δN,δN+1,⋯,δN+J]。
在输出为一个标量时, o = W d T o=\mathbf{Wd^\mathsf{T}} o=WdT。(输出为多个标量时同理)
共轭梯度(Conjugate Gradient)训练
训练过程可以定义为让误差最小化: E = 1 2 P ∑ p = 1 P ( t p − W d T p ) 2 E=\frac{1}{2P}\sum_{p=1}^P (t_p-\mathbf{W}\mathbf{d^\mathsf{T}}_p)^2 E=2P1p=1∑P(tp−WdTp)2其中 p p p是训练样本编号, t p t_p tp是第 p p p个训练样本目标值。
将多个训练样本写成矩阵形式,目标值向量
t
=
[
t
1
,
t
2
,
⋯
,
t
P
]
\mathbf{t}=[t_1,t_2,\cdots,t_P]
t=[t1,t2,⋯,tP],输入向量组成了输入矩阵
D
=
[
d
1
,
d
2
,
⋯
,
d
P
]
\mathbf{D}=[\mathbf{d}_1,\mathbf{d}_2,\cdots,\mathbf{d}_P]
D=[d1,d2,⋯,dP],上述式子也可以写成
E
=
1
2
P
(
t
−
W
D
T
)
(
t
−
W
D
T
)
T
E=\frac{1}{2P}(\mathbf{t}-\mathbf{WD^\mathsf{T}})(\mathbf{t}-\mathbf{WD^\mathsf{T}})^\mathsf{T}
E=2P1(t−WDT)(t−WDT)T。
通过求导得到
r
=
∂
E
∂
W
=
−
1
p
(
t
−
W
D
)
D
T
\mathbf{r}=\frac{\partial E}{\partial \mathbf{W}}=-\frac{1}{p}(\mathbf{t}-\mathbf{WD})\mathbf{D}^\mathsf{T}
r=∂W∂E=−p1(t−WD)DT
求解最优解可以使用共轭梯度法避免Zig-Zag问题带来的时间浪费:
W
λ
+
1
=
W
λ
+
η
s
λ
s
λ
=
−
r
λ
+
∣
∣
r
λ
∣
∣
2
∣
∣
r
λ
−
1
∣
∣
2
s
λ
−
1
\mathbf{W}_{\lambda+1}=\mathbf{W}_{\lambda}+\eta \mathbf{s}_\lambda\\\mathbf{s}_\lambda=-\mathbf{r}_\lambda+\frac{||\mathbf{r}_\lambda||^2}{||\mathbf{r}_{\lambda-1}||^2}\mathbf{s}_{\lambda-1}
Wλ+1=Wλ+ηsλsλ=−rλ+∣∣rλ−1∣∣2∣∣rλ∣∣2sλ−1其中
s
0
=
r
0
\mathbf{s}_0=\mathbf{r}_0
s0=r0。
当
λ
=
K
≤
N
+
J
\lambda=K\leq N+J
λ=K≤N+J时,可以得到最优权重矩阵
W
\mathbf{W}
W。
测试
对正弦函数 y = sin ( x ) y=\sin(x) y=sin(x)随机采样
def sin_generation(size=10):
X = np.random.uniform(low=-6.28,high=6.28,size=size)
Y = np.sin(X)
return X,Y
训练结果:
Enhancement Nodes = 300
Epoch=12300
MAError=0.09811056069650284
Time=0:00:00.434139 (用笔记本的CPU训练的,确实很快)
代码:
https://github.com/t170815518/BroadLearningSystemFrame/tree/master/RVFLNN
参考资料
Learning and generalization characteristics of the random vector Functional-link net (1994), Yoh-Han Pao, Gwang-HoonPark and Dejan J. Sobajic