参数初始化的意义和目的
深度学习中的各种参数初始化方法都旨在保持正向传播时数据流方差的稳定与反向传播时梯度流方差的稳定,从而缓解梯度消失或梯度爆炸问题。
先前在反向传播这篇文章里介绍过参数初始化对于深度学习的重要性,本文不再赘述。
在该文最后的例子中可以看到好的参数初始化策略确实能使神经网络的训练过程更趋稳定。在例子中,我们直接使用了一个Xavier初始化策略的标准差生成了高斯分布的权重,但没有说明这个标准差是如何得来的,本篇文章将在此基础上做个引申。
我们想使神经网络传播过程每层的数据流或梯度流输出的方差保持不变。
考虑一个非线性无偏置的简单全连接,隐藏层接受 n i n n_{in} nin 个输入并生成 n o u t n_{out} nout 个输出。具体来说,输入数据为 x x x ,共 n i n n_{in} nin 个特征,满足均值为0、方差为 γ 2 \gamma^2 γ2 ;每个神经元的输出为 o i o_i oi ; w i j w_{ij} wij 是输入 x x x 到输出 o i o_i oi 的权重,满足均值为0、方差为 σ 2 \sigma^2 σ2 ,且假设 x j x_j xj 与 w i j w_{ij} wij 相互独立。
对于前向传播, o i o_i oi 可表示为:
o i = ∑ j = 1 n i n w i j x j ( 1 ) o_i=\sum_{j=1}^{n_{in}} w_{ij} x_j \ \ \ \ \ (1) oi=∑j=1ninwijxj (1)
Xavier参数初始化意图使每一层输出的方差接近其输入的方差,即要使输出 o i o_i oi 的方差接近输入 x j x_j xj 的方差。
o i o_i oi 的均值 E ( o i ) E(o_i) E(oi)
由期望的定义及式 ( 1 ) (1) (1) 可得:
E ( w i j ) = 0 ( 2 ) E(w_{ij})=0 \ \ \ \ \ (2) E(wij)=0 (2)
E ( x j ) = 0 ( 3 ) E(x_j)=0 \ \ \ \ \ (3) E(xj)=0 (3)
E ( o i ) = ∑ j = 1 n i n E ( w i j x j ) ( 4 ) E(o_i)=\sum_{j=1}^{n_{in}} E(w_{ij} x_j) \ \ \ \ \ (4) E(oi)=∑j=1ninE(wijxj) (4)
因为
x
j
x_j
xj 与
w
i
j
w_{ij}
wij 相互独立,所以
E
(
w
i
j
x
j
)
=
E
(
w
i
j
)
E
(
x
j
)
E(w_{ij} x_j)=E(w_{ij})E(x_j)
E(wijxj)=E(wij)E(xj) ,代入式
(
4
)
(4)
(4) 可得:
E
(
o
i
)
=
∑
j
=
1
n
i
n
E
(
w
i
j
x
j
)
=
∑
j
=
1
n
i
n
E
(
w
i
j
)
E
(
x
j
)
=
0
(
5
)
\begin{align} E(o_i) & = \sum_{j=1}^{n_{in}} E(w_{ij} x_j) \hspace{100cm} \\ &=\sum_{j=1}^{n_{in}} E(w_{ij})E(x_j) \\ &=0 \ \ \ \ \ (5) \end{align}
E(oi)=j=1∑ninE(wijxj)=j=1∑ninE(wij)E(xj)=0 (5)
E ( w i j x j ) = E ( w i j ) E ( x j ) E(w_{ij} x_j)=E(w_{ij})E(x_j) E(wijxj)=E(wij)E(xj) 的证明
以下证明当随机变量 x 、 y x、y x、y 相互独立时, E ( x y ) = E ( x ) E ( y ) E(xy)=E(x)E(y) E(xy)=E(x)E(y)
E ( x ) E(x) E(x):随机变量 x x x 的期望;
E ( y ) E(y) E(y):随机变量 y y y 的期望;
E ( x y ) E(xy) E(xy):随机变量 x 、 y x、y x、y 乘积的期望。
根据期望的定义可知:
E ( x ) = ∑ i x i P ( x i ) ( 6 ) E(x)=\sum_ix_iP(x_i) \ \ \ \ \ (6) E(x)=∑ixiP(xi) (6)
E ( y ) = ∑ j y j P ( y j ) ( 7 ) E(y)=\sum_jy_jP(y_j) \ \ \ \ \ (7) E(y)=∑jyjP(yj) (7)
E ( x y ) = ∑ i , j x i y j P ( x i , y j ) ( 8 ) E(xy)=\sum_{i,j}x_iy_jP(x_i,y_j) \ \ \ \ \ (8) E(xy)=∑i,jxiyjP(xi,yj) (8)由于 x x x 和 y y y 是相互独立的,有:
P ( x i , y j ) = P ( x i ) P ( y j ) P(x_i,y_j)=P(x_i)P(y_j) P(xi,yj)=P(xi)P(yj)代入式 ( 8 ) (8) (8) ,得:
E ( x y ) = ∑ i , j x i y j P ( x i ) P ( y j ) E(xy)=\sum_{i,j}x_iy_jP(x_i)P(y_j) E(xy)=∑i,jxiyjP(xi)P(yj)
由于 x x x 和 y y y 是独立的,我们可以将求和重新拆组一下:
E ( x y ) = ( ∑ i x i P ( x i ) ) ( ∑ j y j P ( y j ) ) E(xy)=(\sum_{i}x_i P(x_i)) (\sum_{j} y_jP(y_j)) E(xy)=(∑ixiP(xi))(∑jyjP(yj))
由式 ( 6 ) 、 ( 7 ) (6)、(7) (6)、(7) ,可得:
E ( x y ) = E ( x ) E ( y ) E(xy)=E(x) E(y) E(xy)=E(x)E(y)
o i o_i oi 的方差 V a r ( o i ) Var(o_i) Var(oi)
先来证明 V a r ( o i ) = E ( o i 2 ) − ( E ( o i ) ) 2 ( 9 ) Var(o_i)=E(o_i^2)−(E(o_i))^2 \ \ \ \ \ (9) Var(oi)=E(oi2)−(E(oi))2 (9)
证明对于随机变量 o o o , V a r ( o ) = E ( o 2 ) − ( E ( o ) ) 2 Var(o)=E(o^2)−(E(o))^2 Var(o)=E(o2)−(E(o))2
方差定义为随机变量的所有可能取值与其均值之差的平方的加权平均:
V a r ( o ) = ∑ i ( x i − u ) 2 n Var(o)={\sum_i (x_i-u)^2 \over{n}} Var(o)=n∑i(xi−u)2
其中 u u u 是均值、 1 n 1 \over n n1 表示随机变量 o o o 的每一项 x i x_i xi 的概率 p ( x i ) p(x_i) p(xi) ,所以也可以表示为:
V a r ( o ) = ∑ i ( x i − u ) 2 p ( x i ) = E ( ( x i − u ) 2 ) ( 10 ) Var(o)=\sum_i (x_i-u)^2 p(x_i)=E((x_i-u)^2) \ \ \ \ \ (10) Var(o)=∑i(xi−u)2p(xi)=E((xi−u)2) (10)
对于随机变量 o o o 及其均值 E ( o ) = u E(o)=u E(o)=u ,继续推导:
V a r ( o ) = ∑ i ( x i − E ( o ) ) 2 P ( x i ) = ∑ i ( x i 2 + E ( o ) 2 − 2 x i E ( o ) ) P ( x i ) = ∑ i x i 2 P ( x i ) + ∑ i ( E ( o ) ) 2 P ( x i ) − ∑ i 2 x i ( E ( o ) ) P ( x i ) = ∑ i x i 2 P ( x i ) + ( E ( o ) ) 2 ∑ i P ( x i ) − 2 ( E ( o ) ) ∑ i x i P ( x i ) = E ( o 2 ) + ( E ( o ) ) 2 − 2 ( E ( o ) ) 2 = E ( o 2 ) − ( E ( o ) ) 2 \begin{align} Var(o) & = \sum_i(x_i−E(o))^2 P(x_i) \hspace{100cm} \\ &=\sum_i(x_i^2+E(o)^2-2x_i E(o)) P(x_i) \\ &=\sum_i x_i^2 P(x_i) + \sum_i (E(o))^2 P(x_i) - \sum_i 2x_i (E(o)) P(x_i) \\ &=\sum_i x_i^2 P(x_i) + (E(o))^2 \sum_i P(x_i) - 2(E(o)) \sum_i x_i P(x_i) \\ &=E(o^2)+(E(o))^2-2(E(o))^2 \\ &=E(o^2)-(E(o))^2 \end{align} Var(o)=i∑(xi−E(o))2P(xi)=i∑(xi2+E(o)2−2xiE(o))P(xi)=i∑xi2P(xi)+i∑(E(o))2P(xi)−i∑2xi(E(o))P(xi)=i∑xi2P(xi)+(E(o))2i∑P(xi)−2(E(o))i∑xiP(xi)=E(o2)+(E(o))2−2(E(o))2=E(o2)−(E(o))2
其中:E ( o ) = ∑ i x i ⋅ P ( x i ) E(o)=\sum_i x_i⋅P(x_i) E(o)=∑ixi⋅P(xi)
E ( o 2 ) = ∑ i x i 2 ⋅ P ( x i ) E(o^2)=\sum_i x_i^2⋅P(x_i) E(o2)=∑ixi2⋅P(xi)
∑ i P ( x i ) = 1 \sum_i P(x_i)=1 ∑iP(xi)=1
接着式
(
9
)
(9)
(9) 的推导:
V
a
r
(
o
i
)
=
E
(
o
i
2
)
−
(
E
(
o
i
)
)
2
=
∑
j
=
1
n
i
n
E
(
w
i
j
2
x
j
2
)
−
0
=
∑
j
=
1
n
i
n
E
(
w
i
j
2
)
E
(
x
j
2
)
=
∑
j
=
1
n
i
n
E
(
(
w
i
j
−
0
)
2
)
E
(
(
x
j
−
0
)
2
)
=
∑
j
=
1
n
i
n
V
a
r
(
w
i
j
)
V
a
r
(
x
j
)
=
n
i
n
σ
2
γ
2
(
11
)
\begin{align} Var(o_i) & = E(o_i^2)−(E(o_i))^2 \hspace{100cm} \\ &=\sum_{j=1}^{n_{in}} E(w_{ij}^2 x_j^2)-0 \\ &=\sum_{j=1}^{n_{in}} E(w_{ij}^2) E(x_j^2) \\ &=\sum_{j=1}^{n_{in}} E((w_{ij}-0)^2) E((x_j-0)^2)\\ &=\sum_{j=1}^{n_{in}} Var(w_{ij}) Var(x_{j}) \\ &=n_{in} \sigma^2 \gamma^2 \ \ \ \ \ (11) \end{align}
Var(oi)=E(oi2)−(E(oi))2=j=1∑ninE(wij2xj2)−0=j=1∑ninE(wij2)E(xj2)=j=1∑ninE((wij−0)2)E((xj−0)2)=j=1∑ninVar(wij)Var(xj)=ninσ2γ2 (11)
其中:
因为 E ( o i ) = 0 E(o_i)=0 E(oi)=0 ,故 ( E ( o i ) ) 2 = 0 (E(o_i))^2=0 (E(oi))2=0
类比式 ( 10 ) (10) (10) ,且 w i j w_{ij} wij 的均值 E ( w i j ) = 0 E(w_{ij})=0 E(wij)=0 ,可得 V a r ( w i j ) = E ( ( w i j − E ( w i j ) ) 2 ) = E ( ( w i j − 0 ) 2 ) Var(w_{ij})=E((w_{ij}-E(w_{ij}))^2)=E((w_{ij}-0)^2) Var(wij)=E((wij−E(wij))2)=E((wij−0)2)
至此,我们已求出 o i o_i oi 方差的表达式,要使输出 o i o_i oi 的方差接近输入 x j x_j xj 的方差,则要满足:
n i n σ 2 = 1 ( 11 ) n_{in} \sigma^2=1 \ \ \ \ \ (11) ninσ2=1 (11)
式 ( 11 ) (11) (11) 只是前向传播过程中数据流方差不变的条件,同样需要考虑反向传播(反向传播过程和前向传播类似)的梯度流,对于同一个权重 w i j w_{ij} wij ,此时输出 o o o 层变成输入层,相当于 n o u t n_{out} nout 成了 n i n n_{in} nin ,可类比上述过程推导出:
n o u t σ 2 = 1 ( 12 ) n_{out} \sigma^2=1 \ \ \ \ \ (12) noutσ2=1 (12)
为了同时满足式 ( 11 ) 、 ( 12 ) (11)、(12) (11)、(12) ,只需使:
σ = 2 n i n + n o u t \sigma =\sqrt{2 \over{n_{in}}+n_{out}} σ=nin+nout2
这就是使用Xavier参数初始化后权重方差应满足的条件,通常,Xavier初始化从均值为0,方差 σ 2 = 2 n i n + n o u t \sigma^2={2 \over{n_{in}+n_{out}}} σ2=nin+nout2 的高斯分布中采样权重。
再次回看文章开头所述文章反向传播里所提的例子,其所使用的标准差 σ = 1 5 \sigma={1 \over 5} σ=51 正是因为权重矩阵的形状为 ( n i n = 5 , n o u t = 5 ) (n_{in}=5,n_{out}=5) (nin=5,nout=5) ,而 σ = 2 n i n + n o u t = 2 5 + 5 = 1 5 \sigma =\sqrt{2 \over{n_{in}}+n_{out}}={2 \over 5+5}={1 \over 5} σ=nin+nout2=5+52=51
另外,对于均匀分布,使用Xavier参数初始化的标准差应满足:
σ = 6 n i n + n o u t \sigma =\sqrt{6 \over{n_{in}}+n_{out}} σ=nin+nout6
在pytorch中,可使用如下两个方法对权重进行Xavier初始化:
#xavier高斯分布
nn.init.xavier_normal_(w)
#xavier均匀分布
nn.init.xavier_uniform_(w)