问题
Bradley发现反向传播的梯度从输出层往输入层逐层递减,通过研究以线性函数为激活函数的深度网络,Bradley发现从输出层往输入层方向,反向传播梯度的方差逐级递减,可以理解为出现了梯度消失,为了解决梯度消失,Xavier Glorot, Yoshua Bengio提出了xavier初始化
解决方案
问题突破口
从Bradley的研究出发,可以得出反向传播梯度的方差逐级递减将导致梯度消失,一个很自然的想法便是,能否让每层反向传播梯度的方差一致?这便是Xavier初始化的出发点
Xavier初始化
问题假设
- 反向传播同一层神经元的梯度独立同分布
- 同一层神经元的权重独立同分布
- 同一层神经元的输入与权重相互独立
- 初始时,激活函数的输出近似y=x,对于sigmoid、tanh函数而言,即初始时刻,激活函数的输入位于0附近
- 前向传播同一层神经元的输入独立同分布
除去最后两点,其余假设是我自己加进去的,论文中并未说明
符号表
符号 | 含义 |
---|---|
c o s t cost cost | 损失函数值 |
Z i Z^i Zi | 第 i i i层输入 |
W i W^i Wi | 第 i i i层权重 |
b i b^i bi | 第 i i i层偏移 |
s i s^i si | 第 i i i层输出 |
n i n^i ni | 第 i i i层神经元个数 |
若 x x x表示 [ x 1 x 2 . . . . x n ] \begin{bmatrix} x_1\\ x_2\\ ....\\ x_n \end{bmatrix} ⎣⎢⎢⎡x1x2....xn⎦⎥⎥⎤,第i层的激活函数向量 f i ( x ) f^i(x) fi(x)表示为 [ f ( x 1 ) f ( x 2 ) . . . . f ( x n ) ] \begin{bmatrix} f(x_1)\\ f(x_2)\\ ....\\ f(x_n) \end{bmatrix} ⎣⎢⎢⎡f(x1)f(x2)....f(xn)⎦⎥⎥⎤, f ( x ) f(x) f(x)为激活函数, ( f i ( x ) ) ′ (f^i(x))' (fi(x))′表示为 [ ∂ f ( x 1 ) ∂ x 1 ∂ f ( x 2 ) ∂ x 2 . . . . ∂ f ( x n ) ∂ x n ] \begin{bmatrix} \frac{\partial{f(x_1)}}{{\partial x_1}}\\ \frac{\partial{f(x_2)}}{{\partial x_2}}\\ ....\\ \frac{\partial{f(x_n)}}{{\partial x_n}} \end{bmatrix} ⎣⎢⎢⎢⎡∂x1∂f(x1)∂x2∂f(x2)....∂xn∂f(xn)⎦⎥⎥⎥⎤
推导
前向传播
基于假设,对于前向传播,我们有
Z
i
+
1
=
f
(
W
i
+
1
Z
i
+
b
i
)
=
W
i
+
1
Z
i
+
b
i
Z^{i+1}=f(W^{i+1}Z^i+b^i)=W^{i+1}Z^i+b^i
Zi+1=f(Wi+1Zi+bi)=Wi+1Zi+bi
z
j
i
+
1
z^{i+1}_j
zji+1表示向量
Z
i
+
1
Z^{i+1}
Zi+1第
j
j
j个维度的值,
w
d
j
i
+
1
w^{i+1}_{dj}
wdji+1表示矩阵
W
i
+
1
W^{i+1}
Wi+1第
i
i
i行第
j
j
j列的值,由于前向传播同一层神经元的输入同分布,即有
V
a
r
(
Z
i
+
1
)
=
V
a
r
(
Z
1
i
+
1
)
=
V
a
r
(
Z
2
i
+
1
)
=
.
.
.
.
.
=
V
a
r
(
Z
n
i
i
+
1
)
Var(Z^{i+1})=Var(Z^{i+1}_1)=Var(Z^{i+1}_2)=.....=Var(Z^{i+1}_{n^i})
Var(Zi+1)=Var(Z1i+1)=Var(Z2i+1)=.....=Var(Znii+1)
而
Z
1
i
+
1
=
w
11
i
+
1
z
1
i
+
w
12
i
+
1
z
2
i
+
.
.
.
.
.
.
+
w
1
n
i
i
+
1
z
n
i
i
Z^{i+1}_1=w^{i+1}_{11}z_1^i+w^{i+1}_{12}z_2^i+......+w^{i+1}_{1{n^i}}z_{n^i}^i
Z1i+1=w11i+1z1i+w12i+1z2i+......+w1nii+1znii,由于同一层神经元的输入与权重相互独立,同一层神经元的权重同分布,则有
V
a
r
(
Z
i
+
1
)
=
V
a
r
(
Z
1
i
+
1
)
=
V
a
r
(
w
11
i
+
1
z
1
i
)
+
V
a
r
(
w
12
i
+
1
z
2
i
)
+
.
.
.
.
.
.
+
V
a
r
(
w
1
n
i
i
+
1
z
n
i
i
)
=
V
a
r
(
w
11
i
+
1
)
V
a
r
(
z
1
i
)
+
V
a
r
(
w
12
i
+
1
)
V
a
r
(
z
2
i
)
+
.
.
.
.
.
.
+
V
a
r
(
w
1
n
i
i
+
1
)
V
a
r
(
z
n
i
i
)
=
n
i
V
a
r
(
W
i
+
1
)
V
a
r
(
Z
i
)
\begin{aligned} Var(Z^{i+1})&=Var(Z_1^{i+1})\\ &=Var(w^{i+1}_{11}z_1^i)+Var(w^{i+1}_{12}z_2^i)+......+Var(w^{i+1}_{1{n^i}}z_{n^i}^i)\\ &=Var(w^{i+1}_{11})Var(z_1^i)+Var(w^{i+1}_{12})Var(z_2^i)+......+Var(w^{i+1}_{1{n^i}})Var(z_{n^i}^i)\\ &=n_{i}Var(W^{i+1})Var(Z^i) \end{aligned}
Var(Zi+1)=Var(Z1i+1)=Var(w11i+1z1i)+Var(w12i+1z2i)+......+Var(w1nii+1znii)=Var(w11i+1)Var(z1i)+Var(w12i+1)Var(z2i)+......+Var(w1nii+1)Var(znii)=niVar(Wi+1)Var(Zi)
因此,我们有
V
a
r
(
Z
i
+
1
)
=
n
i
V
a
r
(
W
i
+
1
)
V
a
r
(
Z
i
)
(式1)
\begin{aligned} Var(Z^{i+1})=n_{i}Var(W^{i+1})Var(Z^i) \end{aligned}\tag{式1}
Var(Zi+1)=niVar(Wi+1)Var(Zi)(式1)
反向传播
反向传播时,由于激活函数的输出近似y=x,每层的梯度为
∂
c
o
s
t
∂
Z
i
=
(
W
i
+
1
)
T
∗
∂
c
o
s
t
∂
Z
i
+
1
☉
(
f
i
(
S
i
n
i
)
)
′
=
(
W
i
+
1
)
T
∗
∂
c
o
s
t
∂
Z
i
+
1
\begin{aligned} \frac{\partial cost}{\partial Z^i} &=(W^{i+1})^T*\frac{\partial cost}{\partial Z^{i+1}} ☉ (f^{i}(S_{in}^i))'\\ &=(W^{i+1})^T*\frac{\partial cost}{\partial Z^{i+1}} \end{aligned}
∂Zi∂cost=(Wi+1)T∗∂Zi+1∂cost☉(fi(Sini))′=(Wi+1)T∗∂Zi+1∂cost
由于反向传播同一层神经元的梯度同分布并且同一层神经元的权重同分布,和前向传播一样,我们有
V
a
r
(
∂
c
o
s
t
∂
Z
i
)
=
n
i
+
1
V
a
r
(
W
i
+
1
)
V
a
r
(
∂
c
o
s
t
∂
Z
i
+
1
)
(式2)
\begin{aligned} Var(\frac{\partial cost}{\partial Z^i})=n^{i+1}Var(W^{i+1})Var(\frac{\partial cost}{\partial Z^{i+1}} ) \end{aligned}\tag{式2}
Var(∂Zi∂cost)=ni+1Var(Wi+1)Var(∂Zi+1∂cost)(式2)
Xavier初始化
对于前向传播,为了让信息从底层网络流向高层网络,我们往往希望
V
a
r
(
Z
i
+
1
)
=
V
a
r
(
Z
i
)
Var(Z^{i+1})=Var(Z^i)
Var(Zi+1)=Var(Zi)
为什么要保证底层网络信息能很好的流向高层网络呢?论文并没有做出解答,但是实践表明这么做往往是有利的。
对于反向传播,为了不让梯度的方差逐渐变小,我们往往希望
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)
因此对于式1、2,我们希望
n
i
+
1
V
a
r
(
W
i
+
1
)
=
1
n
i
V
a
r
(
W
i
+
1
)
=
1
\begin{aligned} n^{i+1}Var(W^{i+1})&=1\\ n^{i}Var(W^{i+1})&=1 \end{aligned}
ni+1Var(Wi+1)niVar(Wi+1)=1=1
一般情况下,权重的方差无法同时满足上述两个等式,由于相邻两层的神经元个数一般相差不大,因此我们有
V
a
r
(
W
i
+
1
)
=
2
n
i
+
n
i
+
1
Var(W^{i+1})=\frac{2}{n^i+n^{i+1}}
Var(Wi+1)=ni+ni+12
满足上述方差条件的分布有很多,xavier建议使用均匀分布,因此,权重初始化分布为
W
W
W ~
U
[
−
6
n
i
+
n
i
+
1
,
6
n
i
+
n
i
+
1
]
U[-\frac{\sqrt6}{\sqrt{n^i+n^{i+1}}},\frac{\sqrt6}{\sqrt{n^i+n^{i+1}}}]
U[−ni+ni+16,ni+ni+16]
实验结果
论文对xavier初始化与标准初始化
W
W
W ~
U
[
−
1
n
,
1
n
]
U[-\frac{1}{\sqrt {n}},\frac{1}{\sqrt {n}}]
U[−n1,n1](n为前一层神经元的个数)进行了对比,对于标准初始化,假设每层的神经元个数均为n,可知
V
a
r
(
W
i
+
1
)
=
1
3
n
Var(W^{i+1})=\frac{1}{3n}
Var(Wi+1)=3n1
将其代入式2,可得
V
a
r
(
∂
c
o
s
t
∂
Z
i
)
=
1
3
V
a
r
(
∂
c
o
s
t
∂
Z
i
+
1
)
(式2)
\begin{aligned} Var(\frac{\partial cost}{\partial Z^i})=\frac{1}{3}Var(\frac{\partial cost}{\partial Z^{i+1}} ) \end{aligned}\tag{式2}
Var(∂Zi∂cost)=31Var(∂Zi+1∂cost)(式2)
因此,使用标准初始化的BP神经网络必然会出现梯度消失,对于使用标准初始化的前向传播而言,则有
V
a
r
(
Z
i
+
1
)
=
1
3
V
a
r
(
Z
i
)
(式1)
\begin{aligned} Var(Z^{i+1})=\frac{1}{3}Var(Z^i) \end{aligned}\tag{式1}
Var(Zi+1)=31Var(Zi)(式1)
因此,从输入层到输出层,使用标准初始化的BP神经网络的激活函数方差逐渐下降
为了验证上述分析,论文给出了训练的初始阶段,两种初始化方法对应的激活函数值、反向传播梯度值的归一化直方图,如下:
可见反向传播梯度以及激活函数值基本满足标准正态分布,而方差越小,标准正态分布就越瘦高,上述情况验证了理论分析,由于反向传播梯度的方差一致,也就不会出现梯度消失的情况
Xavier初始化的思考
Xavier是否完全解决了梯度消失的问题?显然不是,随着参数的跟新,Xavier的假设将不再成立,权重与输入值将不再独立,激活函数也将不会呈现线性状态,只能说在训练初期,Xavier可以很好的抵抗梯度消失