【学习杂记】Xavier初始化


前言:

有时由于数据的稳定性不高,会带来梯度爆炸和梯度消失的问题。解决这样的问题有很多方式,例如让乘法变加(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[hitl]=0,Var[hitl]=b
其中 i i i是当前层第 i i i个元素, t t t是层数。

感觉Batch Norm干的就是这件事情。
这样的意义是,不管网络有多深,每一层的输出和梯度统计上来看都差不多,就会比较好。

假设,我们的模型是MLP, 我们想满足上面的条件,还假设:

  1. w i , j t 是 i . i . d . w^t_{i,j}是i.i.d. wi,jti.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
  2. h i t − 1 h_i^{t-1} hit1 w i , j t w^t_{i,j} wi,jt独立,也就是第 t t t层的输入和权重独立
  3. 假设没有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=Wtht1,WtRnt×nt1
其中 n t , n t − 1 n^t,n^{t-1} nt,nt1是本层输出和输入的维数。

考察第 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[jwi,jthjt1]=(线,wh)jE[wi,jt]E[hjt1]=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[(jwi,jthjt1)2]=E[j(wi,jthjt1)2+j=kwi,jtwi,kthjt1hkt1]=(wi,jiid,0,wh)jE[(wi,jt)2]E[(hjt1)2]=(0)jVar[wi,j]Var[hjt1]=(wγt,t1nt1)nt1γtVar[hjt1]

如果我们要求两层之间方差相等,就要满足:
n t − 1 γ t = 1 n^{t-1}\gamma_t=1 nt1γ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 ht1l=htlht1ht=htlWt

具体到第 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} hit1l=jhitlwi,j
将其记为:
a i t − 1 = ∑ j a i t w i , j a_i^{t-1}=\sum_j a_i^t w_{i,j} ait1=jaitwi,j
所以,和正向传播具有完全相同的形式,只是前面的层数标号是 t − 1 t-1 t1,后面是 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[ait1]=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 nt1γt=1ntγ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(nt1+nt)=1γt=(nt1+nt)2

我们可以找到两种分布来满足这种方差:

  1. 正态分布 N ( 0 , 2 ( n t − 1 + n t ) ) N(0,\frac{2}{(n^{t-1}+n^{t})}) N(0,(nt1+nt)2)
  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((nt1+nt)6 ,(nt1+nt)6 )

这种方式就是Xavier初始化。
  \space  
  \space  

多记一句:对于激活函数,可以采用相似的论证方式,结论是若要保持均值为0方差常数,越接近 y = x y=x y=x的激活函数越好。因此这也解释了为什么ReLU和Tanh的表现略微好于Sigmoid。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值