前言:
有时由于数据的稳定性不高,会带来梯度爆炸和梯度消失的问题。解决这样的问题有很多方式,例如让乘法变加(ResNet和LSTM的方式),归一化(比如梯度归一化),再者就是合理地初始化权重和选择激活函数。今天学了一下Xavier初始化,记录一下.
1.缘起
我们将梯度和每一层的输出都看做随机变量。
为了让模型稳定,假如我们期望的事情是让每一层的输出的期望和方差一直保持一致,也就是:
∀
i
,
t
:
正
向
时
:
E
[
h
i
t
]
=
0
,
V
a
r
[
h
i
t
]
=
a
反
向
时
:
E
[
∂
l
∂
h
i
t
]
=
0
,
V
a
r
[
∂
l
∂
h
i
t
]
=
b
\forall i,t:\\正向时:E[h_i^t]=0,Var[h_i^t]=a\\ 反向时:E[\frac{\partial l}{\partial h_i^t}]=0,Var[\frac{\partial l}{\partial h_i^t}]=b\\
∀i,t:正向时:E[hit]=0,Var[hit]=a反向时:E[∂hit∂l]=0,Var[∂hit∂l]=b
其中
i
i
i是当前层第
i
i
i个元素,
t
t
t是层数。
感觉Batch Norm干的就是这件事情。
这样的意义是,不管网络有多深,每一层的输出和梯度统计上来看都差不多,就会比较好。
假设,我们的模型是MLP, 我们想满足上面的条件,还假设:
- w i , j t 是 i . i . d . w^t_{i,j}是i.i.d. wi,jt是i.i.d.,则 E [ w i , j t ] = 0 , V a r [ w i , j t ] = γ t E[w^t_{i,j}]=0,Var[w^t_{i,j}]=\gamma_t E[wi,jt]=0,Var[wi,jt]=γt
- h i t − 1 h_i^{t-1} hit−1和 w i , j t w^t_{i,j} wi,jt独立,也就是第 t t t层的输入和权重独立
- 假设没有activation function,没有bias.
则在第
t
t
t层:
h
t
=
W
t
h
t
−
1
,
W
t
∈
R
n
t
×
n
t
−
1
\bm h^t=\bm W^t \bm h^{t-1},\quad \bm W^t\in \textbf{R}^{n^t\times n^{t-1}}
ht=Wtht−1,Wt∈Rnt×nt−1
其中
n
t
,
n
t
−
1
n^t,n^{t-1}
nt,nt−1是本层输出和输入的维数。
考察第
i
i
i个输出:
E
[
h
i
t
]
=
E
[
∑
j
w
i
,
j
t
h
j
t
−
1
]
=
(
均
值
的
线
性
性
,
w
和
h
独
立
)
∑
j
E
[
w
i
,
j
t
]
E
[
h
j
t
−
1
]
=
0
E[h_i^t]=E[\sum_j w^t_{i,j}h^{t-1}_j]\\ =(均值的线性性,w和h独立)\sum_jE[w^t_{i,j}]E[h^{t-1}_j]=0
E[hit]=E[j∑wi,jthjt−1]=(均值的线性性,w和h独立)j∑E[wi,jt]E[hjt−1]=0
V a r [ h i t ] = E [ ( h i t ) 2 ] − E 2 [ h i t ] = E [ ( h i t ) 2 ] = E [ ( ∑ j w i , j t h j t − 1 ) 2 ] = E [ ∑ j ( w i , j t h j t − 1 ) 2 + ∑ j ≠ k w i , j t w i , k t h j t − 1 h k t − 1 ] = ( w i , j 是 i i d , 协 方 差 为 0 , w 和 h 独 立 ) ∑ j E [ ( w i , j t ) 2 ] E [ ( h j t − 1 ) 2 ] = ( 均 值 为 0 ) ∑ j V a r [ w i , j ] V a r [ h j t − 1 ] = ( w 方 差 是 γ t , t − 1 层 维 数 为 n t − 1 ) n t − 1 γ t V a r [ h j t − 1 ] Var[h_i^t]=E[(h_i^t)^2]-E^2[h_i^t]=E[(h_i^t)^2]\\ =E[(\sum_j w^t_{i,j}h^{t-1}_j)^2]\\ =E[\sum_j( w^t_{i,j}h^{t-1}_j)^2+\sum_{j\ne k}w^t_{i,j}w^t_{i,k}h^{t-1}_jh^{t-1}_k]\\ =(w_{i,j}是iid,协方差为0,w和h独立)\sum_j E[(w^t_{i,j})^2]E[(h^{t-1}_j)^2]\\ =(均值为0)\sum_j Var[w_{i,j}]Var[h^{t-1}_j]\\ =(w方差是\gamma_t,t-1层维数为n^{t-1})n^{t-1}\gamma_tVar[h^{t-1}_j] Var[hit]=E[(hit)2]−E2[hit]=E[(hit)2]=E[(j∑wi,jthjt−1)2]=E[j∑(wi,jthjt−1)2+j=k∑wi,jtwi,kthjt−1hkt−1]=(wi,j是iid,协方差为0,w和h独立)j∑E[(wi,jt)2]E[(hjt−1)2]=(均值为0)j∑Var[wi,j]Var[hjt−1]=(w方差是γt,t−1层维数为nt−1)nt−1γtVar[hjt−1]
如果我们要求两层之间方差相等,就要满足:
n
t
−
1
γ
t
=
1
n^{t-1}\gamma_t=1
nt−1γt=1
反向同理:
∂
l
∂
h
t
−
1
=
∂
l
∂
h
t
∂
h
t
∂
h
t
−
1
=
∂
l
∂
h
t
W
t
\frac{\partial l}{\partial \bm h^{t-1}}=\frac{\partial l}{\partial \bm h^{t}}\frac{\partial \bm h^{t}}{\partial \bm h^{t-1}}=\frac{\partial l}{\partial \bm h^{t}}\bm W^t
∂ht−1∂l=∂ht∂l∂ht−1∂ht=∂ht∂lWt
具体到第
i
i
i个元素,有如下关系:
∂
l
∂
h
i
t
−
1
=
∑
j
∂
l
∂
h
i
t
w
i
,
j
\frac{\partial l}{\partial h_i^{t-1}}=\sum_j\frac{\partial l}{\partial h_i^t}w_{i,j}
∂hit−1∂l=j∑∂hit∂lwi,j
将其记为:
a
i
t
−
1
=
∑
j
a
i
t
w
i
,
j
a_i^{t-1}=\sum_j a_i^t w_{i,j}
ait−1=j∑aitwi,j
所以,和正向传播具有完全相同的形式,只是前面的层数标号是
t
−
1
t-1
t−1,后面是
t
t
t,和正向传播的对调了。完全一样的过程,得到:
V a r [ a i t − 1 ] = n t γ t V a r [ a i ] Var[a_i^{t-1}]=n^t\gamma_tVar[a_i] Var[ait−1]=ntγtVar[ai]
所以反向传播得到的结论是:
n
t
γ
t
=
1
n^{t}\gamma_t=1
ntγt=1
\space
2.Xavier初始化
但是
n
t
−
1
γ
t
=
1
且
n
t
γ
t
=
1
n^{t-1}\gamma_t=1且n^{t}\gamma_t=1
nt−1γt=1且ntγt=1这个条件太强,我们不可能让每一层的特征维数都相同。因此采取一种折中的方式:
γ
t
(
n
t
−
1
+
n
t
)
2
=
1
也
即
γ
t
=
2
(
n
t
−
1
+
n
t
)
\frac{\gamma_t(n^{t-1}+n^{t})}{2}=1\\ 也即\gamma_t=\frac{2}{(n^{t-1}+n^{t})}
2γt(nt−1+nt)=1也即γt=(nt−1+nt)2
我们可以找到两种分布来满足这种方差:
- 正态分布 N ( 0 , 2 ( n t − 1 + n t ) ) N(0,\frac{2}{(n^{t-1}+n^{t})}) N(0,(nt−1+nt)2)
- 均匀分布 U ( − 6 ( n t − 1 + n t ) , 6 ( n t − 1 + n t ) ) U(-\sqrt{\frac{6}{(n^{t-1}+n^{t})}},\sqrt{\frac{6}{(n^{t-1}+n^{t})}}) U(−(nt−1+nt)6,(nt−1+nt)6)
这种方式就是Xavier初始化。
\space
\space
多记一句:对于激活函数,可以采用相似的论证方式,结论是若要保持均值为0方差常数,越接近 y = x y=x y=x的激活函数越好。因此这也解释了为什么ReLU和Tanh的表现略微好于Sigmoid。