正确的权重初始化有利于网络收敛,权重初始化的目的是防止激活值饱导致梯度不能传播。两种权重初始化方式:Xavier和hekaiming。本文介绍Xavier,论文名:Understanding the difficulty of training deep feedforward neural 。
1 Xavier概述
Xavier初始化是2010年由Xavier提出来的。这篇文章假设条件比较多,模型结构为简单的5层全连阶层,主要用于初始化全连接层,假设激活函数有如下性质:
- 当激活函数是线性激活函数。
- 满足 f ′ ( 0 ) = 1 f'(0)=1 f′(0)=1。
- 激活函数关于原点对称,这样可以使均值为0.
论文首先使用标准的初始化方法
W
i
,
j
W_{i,j}
Wi,j~
U
[
−
1
n
,
1
n
]
U[-\frac{1}{\sqrt n},\frac{1}{\sqrt n}]
U[−n1,n1],使用tanh激活函数,观察激活值(图1.1)、反向梯度(图1.2)和对权重的梯度图。
2 Xavier推导
2.1 前向传播
保证每层激活值的方差相等就可以了。推导过程:
设
z
i
=
w
i
∗
h
i
−
1
z^i=w^i*h^{i-1}
zi=wi∗hi−1、
h
i
=
f
(
z
i
)
h^i=f(z^i)
hi=f(zi),注意本文的公式与论文中的不同。则根据bp推导:
根据
V
a
r
(
h
l
i
)
=
V
a
r
(
h
l
i
+
1
)
Var(h^i_l)=Var(h^{i+1}_l)
Var(hli)=Var(hli+1)可得:
2.2 反向传播
保证反向传播的梯度(损失函数对激活函数的输入值的求导)的方差相等就可以了。
根据
V
a
r
(
∂
C
o
s
t
∂
z
i
)
=
V
a
r
(
∂
C
o
s
t
∂
z
i
+
1
)
Var(\frac{\partial{Cost}}{\partial z^i})=Var(\frac{\partial{Cost}}{\partial z^{i+1}})
Var(∂zi∂Cost)=Var(∂zi+1∂Cost),可得:
根据前向传播和反向传播,取一个中间值:
可得:
V
a
r
(
W
)
=
1
n
Var(W)=\frac{1}{n}
Var(W)=n1
除此之外还可以求得(并未参与其他计算):
3 缺点
- 对激活函数限制太多。
- 只能用于几层的神经网络(论文中为5层)。
注:参考文章