1.Xaiver初始化
1.1 目标
每一层输出的方差应该尽量相等,每一层的梯度的方差也应该保持相同。那么,每一层的权重应该满足哪种条件。
1.2 结论
权重的方差应该满足:
∀i,Var[Wi]=2nin+nout
∀
i
,
V
a
r
[
W
i
]
=
2
n
i
n
+
n
o
u
t
。其中,
nin
n
i
n
表示输入维度(
n=channel×kernelh×kernelw
n
=
c
h
a
n
n
e
l
×
k
e
r
n
e
l
h
×
k
e
r
n
e
l
w
),
nout
n
o
u
t
表示输出维度。
设计一个用于初始化参数的概率分布,这里使用均匀分布进行参数初始化。假设随机变量服从范围为
[a,b]
[
a
,
b
]
的均匀分布,那么它的方差为:
σ=(b−a)212
σ
=
(
b
−
a
)
2
12
。可以求得,最终把参数初始化成
W→U[−6√nin+nout√,6√nin+nout√]
W
→
U
[
−
6
n
i
n
+
n
o
u
t
,
6
n
i
n
+
n
o
u
t
]
范围内的均匀分布。
2.MSRA初始化
2.1 目标
和Xavier初始化方法类似,只不过Xavier初始化方法假设激活函数是线性的,显然我们目前常用的ReLU和PReLU并不满足这一条件。
2.2 结论
MSRA初始化是高斯分布: W→G[0,4nin+nout−−−−−−√] W → G [ 0 , 4 n i n + n o u t ]
3.应用
3.1结论
- sigmoid激活函数 + 均值0,方差1的高斯分布的权重初始化。
- ReLU激活函数 + xavier权重初始化/MSRA权重初始化。
- PReLU激活函数 + xavier权重初始化/MSRA权重初始化。
3.2 理由
sigmoid函数能够控制数据的幅度,在深层模型中,保证数据幅度不会太大。但sigmoid存在梯度消失问题,反向传播上有劣势。
ReLU函数不能控制数据的幅度,在深层模型中,数据的幅度有可能产生一定的不平衡,最终会影响模型的表现。但ReLU在反向传播方面可以把梯度传给后面的参数,优化效果更好。通过Xavier和MSRA的权重初始化,可以解决数值范围不稳定的问题。