参数初始化的理想状态是参数正负各半,期望为0。
如果权值的初始值过大,则会导致梯度爆炸,使得网络不收敛;过小的权值初始值,则会导致梯度消失,会导致网络收敛缓慢或者收敛到局部极小值。
如果权值的初始值过大,则loss function相对于权值参数的梯度值很大,每次利用梯度下降更新参数的时,参数更新的幅度也会很大,这就导致loss function的值在其最小值附近震荡。
而过小的初值值则相反,loss关于权值参数的梯度很小,每次更新参数时,更新的幅度也很小,着就会导致loss的收敛很缓慢,或者在收敛到最小值前在某个局部的极小值收敛了。
最简单的初始化方法就是将权值参数全部初始化为0或者一个常数,但是使用这种方法会导致网络中所有的神经元学习到的是相同的特征。
当网络达到稳定状态时, 参数(权值)在理想情况下应该保持正负各半(此时期望为0)。因此一种看起来简单的方法,干脆将所有参数都初始化为0, 因为这样可以使得初始化全零时参数的期望与网络稳定时参数期望一致。
但是,参数全是零时网络不同神经元的输出必然相同,相同的输出必然导致梯度更新完全一样,这样会令更新后的参数仍然保持一样的状态。换句话说,如果参数进行了全零的参数化,那么网络神经元将无法训练模型。例如,对于 y = W X + b y=WX+b y=WX+b,由于参数W需要和X乘积,因此不能初始化为0,而b可以。
初始化方法由Bengio等人在2010年的论文《Understanding the difficulty of training deep feedforward neural networks》中提出。
它为了保证前向传播和反向传播时每一层的方差一致:在正向传播时,每层的激活值的方差保持不变;在反向传播时,每层的梯度值的方差保持不变。根据每层的输入个数和输出个数来决定参数随机初始化的分布范围,是一个通过该层的输入和输出参数个数得到的分布范围内的均匀分布。
基于上述的准则,初始的权值参数 ( W l ) (W^l) (Wl)( l l l为网络的第 l l l层)要符合以下公式
W [ l ] ∼ N ( μ = 0 , σ 2 = 1 n [ l − 1 ] ) b [ l ] = 0 \begin{aligned} W^{[l]} & \sim \mathcal{N}\left(\mu=0, \sigma^{2}=\frac{1}{n^{[l-1]}}\right) \\ b^{[l]} &=0 \end{aligned} W[l]b[l]∼N(μ=0,σ2=n[l−1]1)=0
其中 n l − 1 n^{l-1} nl−1是第 l − 1 l-1 l−1层的神经元的个数。 也就是说,初始的权值 w w w可以从均值 μ = 0 \mu = 0 μ=0,方差为 σ 2 = 1 n l − 1 \sigma^{2}=\frac{1}{n ^{l-1}} σ2=nl−11的正态分布中随机选取。
正向传播的推导过程:
推导过程中的三个假设:
设 L L L层的权值矩阵为 W W W,偏置为 b b b,其输入为 a a a
z l = w l a l − 1 + b l z^l = w^la^{l-1} + b^l zl=wlal−1+bl
则
V a r ( z l ) = V a r ( ∑ i = 0 n w i l a i l ) = ∑ i = 0 n V a r ( w i l a i l − 1 ) Var(z^l) = Var(\sum_{i=0}^nw_{i}^la_i^l) = \sum_{i=0}^n Var(w_{i}^la_i^{l-1}) Var(zl)=Var(i=0∑nwilail)=i=0∑nVar(wilail−1)
有统计概率的知识可得到:(第一个假设 W W W, x x x相互独立)
V a r ( w i x i ) = E 2 ( w i ) V a r ( w i ) + E 2 ( x i ) V a r ( x i ) + V a r ( w i ) V a r ( x i ) Var(w_ix_i) = E^2(w_i)Var(w_i) + E^2(x_i)Var(x_i) + Var(w_i)Var(x_i) Var(wixi)=E2(wi)Var(wi)+E2(xi)Var(xi)+Var(wi)Var(xi)
由第一第二个假设可知: l l l层输入的均值为0,权值参数 W W W的均值也为0,即: E ( x i ) = 0 , E ( w i ) = 0 E(x_i) = 0,E(w_i) = 0 E(xi)=0,E(wi)=0则有: V a r ( w i x i ) = V a r ( w i ) V a r ( x i ) Var(w_ix_i) = Var(w_i)Var(x_i) Var(wixi)=Var(wi)Var(xi),即
V a r ( z l ) = ∑ i = 0 n V a r ( w i l ) V a r ( x i l − 1 ) Var(z^l) = \sum_{i=0}^nVar(w_i^l)Var(x_i^{l-1}) Var(zl)=i=0∑nVar(wil)Var(xil−1)
设权值矩阵 W W W独立同分布的则有
V a r ( w l ) = V a r ( w 11 l ) = ⋯ = V a r ( W i j l ) Var(w^l) = Var(w_{11}^l) = \cdots = Var(W_{ij}^l) Var(wl)=Var(w11l)=⋯=Var(Wijl)
输入 a l − 1 a^{l-1} al−1也是独立同分布的有:
V a r ( a l − 1 ) = V a r ( a 1 l − 1 ) = ⋯ = V a r ( a i l − 1 ) Var(a^{l-1}) = Var(a_1^{l-1}) = \cdots = Var(a_i^{l-1}) Var(al−1)=Var(a1l−1)=⋯=Var(ail−1)
则有
V a r ( z l ) = n l − 1 V a r ( w l ) V a r ( a l − 1 ) Var(z^l) = n^{l-1}Var(w^l)Var(a^{l-1}) Var(zl)=nl−1Var(wl)Var(al−1)
这里得出了第 l l l层输入到激活函数中的值 z l z^l zl与其输入 a l − 1 a^{l-1} al−1(也就是上一层输出的激活值)的方差之间的关系。但我们假设的是每一层输出的激活值的方差保持不变,也就是说要得到 V a r ( a l ) Var(a^l) Var(al)和 V a r ( a l − 1 ) Var(a^{l-1}) Var(al−1)之间的关系。
设 f f f为激活函数,则有
a l = f ( z l ) a^l = f(z^l) al=f(zl)
Xavier假设的激活函数为tanh,其函数曲线为
其中间的部分可以近似线性linear regime,而在训练的过程就要保证激活值是落在这个线性状体的区间内的,不然就会出现梯度饱和的情况。所以,这里可以近似的有
a l = t a n h ( z l ) a^l = tanh(z^l) al=tanh(zl)
也就是说:
V a r ( a l ) = V a r ( z l ) = n l − 1 V a r ( w l ) V a r ( a l − 1 ) Var(a^l) = Var(z^l) = n^{l-1}Var(w^l)Var(a^{l-1}) Var(al)=Var(zl)=nl−1Var(wl)Var(al−1)
要让每一层的激活值的方差保持不变,则有
V a r ( a l ) = V a r ( a l − 1 ) Var(a^l) = Var(a^{l-1}) Var(al)=Var(al−1)
即有
V a r ( w l ) = 1 n l − 1 Var(w^l) = \frac{1}{n^{l-1}} Var(wl)=nl−11
通常输入神经元和输出神经元的个数不一定总是相同的,这里取两者的均值
∀ i , Var ( W l + 1 ) = 2 n l + n l + 1 \forall i, \operatorname{Var}\left(W^{l+1}\right)=\frac{2}{n_{l}+n_{l+1}} ∀i,Var(Wl+1)=nl+nl+12
对于权值的初始化,Glorot提出两个准则:
在Xavier的推导的过程中,做了以下假设:
但是,对Xavier限制最大的则是,其是基于tanh作为激活函数的。
上述公式的详细推导过程可参见 http://www.deeplearning.ai/ai-notes/initialization/ 。
Xavier的初始化有个假设条件,激活函数关于0对称,且主要针对于全连接神经网络。适用于tanh和softsign。
通过上面的推导,得出权值矩阵的均值为:0,方差为
∀ i , Var ( W l + 1 ) = 2 n l + n l + 1 \forall i, \operatorname{Var}\left(W^{l+1}\right)=\frac{2}{n_{l}+n_{l+1}} ∀i,Var(Wl+1)=nl+nl+12
[ a , b ] [a,b] [a,b] (间的均匀分布的方差为) v a r = ( b − a ) 2 12 var = \frac{(b-a)^2}{12} var=12(b−a)2,设 F i n F_{in} Fin(为输入的神经元个数) F o u t F_{out} Fout为输出的神经元个数
l i m i t = 6 F i n + F o u t limit = \sqrt{\frac{6}{F_{in} + F_{out}}} limit=Fin+Fout6
则权值参数从分布
W ∼ U [ − l i m i t , l i m i t ] → W ∼ U [ − 6 F i n + F o u t , + 6 F i n + F o u t ] W \sim U[-limit,limit] \rightarrow W \sim U\left[-\sqrt{\frac{6}{F_{in} + F_{out}}}, + \sqrt{\frac{6}{F_{in} + F_{out}}}\right] W∼U[−limit,limit]→W∼U[−Fin+Fout6,+Fin+Fout6]
基于正态分布的Xavier初始化从均值为0,方差为 2 F i n + F o u t \sqrt{\frac{2}{F_{in} + F_{out}}} Fin+Fout2的正态分布中随机选取。
W ∼ N ( 0.0 , 2 F i n + F o u t ) W \sim N(0.0,\sqrt{\frac{2}{F_{in} + F_{out}}}) W∼N(0.0,Fin+Fout2)
由何凯明在论文Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification提出,由于Xavier的假设条件是激活函数是关于0对称的,而常用的ReLU激活函数并不能满足该条件。
只考虑输入的个数,MSRA的初始化是一个均值为0,方差为 2 F i n \sqrt{\frac{2}{F_{in}}} Fin2的高斯分布
w ∼ G [ 0 , 2 F i n ] w \sim G\left[0, \sqrt{\frac{2}{F_{in }}}\right] w∼G[0,Fin2]
正向传播的推导过程:
其前半部分的推导和Xavider类似,对于第l层,有如下公式 :
y l = W l x l + b l \mathbf{y}_{l}=\mathbf{W}_{l} \mathbf{x}_{l}+\mathbf{b}_{l} yl=Wlxl+bl
其中
其中 x l x_l xl以及 w l w_l wl都是独立同分布的,(和Xavier相同的假设条件),则有:
Var [ y l ] = n l Var [ w l x l ] \operatorname{Var}\left[y_{l}\right]=n_{l} \operatorname{Var}\left[w_{l} x_{l}\right] Var[yl]=nlVar[wlxl]
设 w l w_l wl的均值为0,即 E ( w l ) = 0 E(w_l)=0 E(wl)=0,则有:
Var ( y l ) = n l ( E ( W l 2 ) ⋅ E ( x l 2 ) − E 2 ( w l ) ⋅ E 2 ( x l ) ) = n l ( E ( W l 2 ) ⋅ E ( x l 2 ) − 0 ⋅ E 2 ( x l ) ) = n l ( E ( W l 2 ) ⋅ E ( x l 2 ) − 0 ⋅ E ( x l 2 ) ) = n l ( E ( W l 2 ) ⋅ E ( x l 2 ) − E 2 ( w l ) ⋅ E ( x l 2 ) ) = n l ( E ( W l 2 ) − E 2 ( w l ) ) ⋅ E ( x l 2 ) = n l Var ( w l ) ⋅ E ( x l 2 ) \begin{aligned} \operatorname{Var}(y_l) & = n_{l}(E(W_l^2) \cdot E(x_l^2) - E^2(w_l) \cdot E^2(x_l)) \\ &= n_{l}(E(W_l^2) \cdot E(x_l^2) - 0 \cdot E^2(x_l)) \\ & = n_{l}(E(W_l^2) \cdot E(x_l^2) - 0 \cdot E(x_l^2)) \\ & = n_{l}(E(W_l^2) \cdot E(x_l^2) - E^2(w_l) \cdot E(x_l^2)) \\ & = n_{l}(E(W_l^2) - E^2(w_l)) \cdot E(x_l^2) \\ & = n_{l} \operatorname{Var}(w_l) \cdot E(x_l^2) \end{aligned} Var(yl)=nl(E(Wl2)⋅E(xl2)−E2(wl)⋅E2(xl))=nl(E(Wl2)⋅E(xl2)−0⋅E2(xl))=nl(E(Wl2)⋅E(xl2)−0⋅E(xl2))=nl(E(Wl2)⋅E(xl2)−E2(wl)⋅E(xl2))=nl(E(Wl2)−E2(wl))⋅E(xl2)=nlVar(wl)⋅E(xl2)
这里有和Xavier一个很大的不同是,这里没有假设输入的值的均值为0。这是由于,使用ReLU的激活函数, x l = m a x ( 0 , y l − 1 ) x_l = max(0,y_{l-1}) xl=max(0,yl−1),每层输出的值不可能均值为0。
上面最终得到
Var ( y l ) = n l Var ( w l ) ⋅ E ( x l 2 ) \operatorname{Var}(y_l) = n_{l} \operatorname{Var}(w_l) \cdot E(x_l^2) Var(yl)=nlVar(wl)⋅E(xl2)
初始化时通常设, w w w的均值为0,偏置 b = 0 b=0 b=0,以及 w w w和 x x x是相互独立的,则有
E ( y l ) = E ( w l x l ) = E ( x l ) ⋅ E ( w l ) = 0 \begin{aligned} \operatorname{E}(y_l) &= \operatorname{E}(w_lx_l) \\ &= \operatorname{E}(x_l) \cdot \operatorname{E}(w_l) \\ &= 0 \end{aligned} E(yl)=E(wlxl)=E(xl)⋅E(wl)=0
也就是说, y l y_l yl的均值为0。
再假设 w w w是关于0对称分布的(均匀分布,高斯分布都符合),则可以得到 y l y_l yl在0附近也是对称分布的。
这样,使用ReLU作为激活函数,则有
x l = m a x ( 0 , y l − 1 ) x_l = max(0,y_{l-1}) xl=max(0,yl−1)
由于只有当 y l − 1 > 0 y_l−1>0 yl−1>0的部分, x l x_l xl才有值,且 y l y_l yl在0附近也是对称分布的,则可以得到
E ( x l 2 ) = 1 2 E ( y l − 1 2 ) = 1 2 ( E ( y l − 1 2 ) − E ( y l − 1 ) ) , ( 由 于 E ( y l − 1 ) = 0 ) = 1 2 Var ( y l − 1 ) \begin{aligned} \operatorname{E}(x_l^2) &=\frac{1}{2} \operatorname{E}(y_{l-1}^2) \\ &= \frac{1}{2}({E}(y_{l-1}^2) - E(y_{l-1})),(由于E(y_{l-1}) = 0)\\ & = \frac{1}{2}\operatorname{Var}(y_{l-1}) \end{aligned} E(xl2)=21E(yl−12)=21(E(yl−12)−E(yl−1)),(由于E(yl−1)=0)=21Var(yl−1)
将得到的
E ( x l 2 ) = 1 2 Var ( y l − 1 ) \operatorname{E}(x_l^2) = \frac{1}{2}\operatorname{Var}(y_{l-1}) E(xl2)=21Var(yl−1)
带入到
Var ( y l ) = n l Var ( w l ) ⋅ E ( x l 2 ) \operatorname{Var}(y_l) = n_{l} \operatorname{Var}(w_l) \cdot E(x_l^2) Var(yl)=nlVar(wl)⋅E(xl2)
则可以得到
Var [ y l ] = 1 2 n l Var [ w l ] Var [ y l − 1 ] \operatorname{Var}\left[y_{l}\right]=\frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right] \operatorname{Var}\left[y_{l-1}\right] Var[yl]=21nlVar[wl]Var[yl−1]
将所有层的方差累加到一起有:
Var [ y L ] = Var [ y 1 ] ( ∏ l = 2 L 1 2 n l Var [ w l ] ) \operatorname{Var}\left[y_{L}\right]=\operatorname{Var}\left[y_{1}\right]\left(\prod_{l=2}^{L} \frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right]\right) Var[yL]=Var[y1](l=2∏L21nlVar[wl])
为了是每一层的方差保持不变,则有:
1 2 n l Var [ w l ] = 1 , ∀ l \frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right]=1, \quad \forall l 21nlVar[wl]=1,∀l
也即得到 权值矩阵的方差应该是
2 / n l \sqrt{2 / n_{l}} 2/nl
和Xavier的方法,也可以使用正态分布或者均匀分布来取得初始的权值矩阵的值。
W ∼ N ( 0.0 , 2 / n l ) W \sim N(0.0,\sqrt{2 / n_{l}}) W∼N(0.0,2/nl)
W ∼ U [ − 6 / n l , 6 / n l ] W \sim U[-\sqrt{6 / n_{l}},\sqrt{6 / n_{l}}] W∼U[−6/nl,6/nl]
正确的初始化方法应该避免指数级地减小或放大输入值的大小,防止梯度“饱和”。 Glorot提出两个准则:
通常初始的权值矩阵的均值为0.
这这些条件的基础上,Glorot 使用(tanh)作为激活函数,并假设输入值的均值为0,提出了Xavier初始化的方法。
而Kaiming使用ReLU作为激活函数,就无法满足数值的均值为0的条件,因此使用Xavier来初始化ReLU作为激活函数的网络,效果也就不是那么理想。其提出了MSRA的初始化方法,来解决该问题。
附
推导时使用的概率公式:
D ( x ) = E ( x 2 ) − E 2 ( x ) D ( x y ) = E ( x 2 y 2 ) − E 2 ( x y ) = E ( x 2 ) E ( y 2 ) − E 2 ( x ) E 2 ( y ) D(x)=E\left(x^{2}\right)-E^{2}(x) \\ D(x y)=E\left(x^{2} y^{2}\right)-E^{2}(x y)=E\left(x^{2}\right) E\left(y^{2}\right)-E^{2}(x) E^{2}(y) D(x)=E(x2)−E2(x)D(xy)=E(x2y2)−E2(xy)=E(x2)E(y2)−E2(x)E2(y)
如果 E ( y ) = 0 E(y) = 0 E(y)=0,则有:
D ( x y ) = D ( y ) E ( x 2 ) D(xy) = D(y)E(x^2) D(xy)=D(y)E(x2)
如果(x,y)是相互独立的,则有
E ( x y ) = E ( x ) E ( y ) E(xy) = E(x)E(y) E(xy)=E(x)E(y)
本文只推导了正向传播的过程,对于反向传播的推导可参考原始论文
[1] Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification
[2] Understanding the difficulty of training deep feedforward neural networksf