【学习杂记】Xavier初始化

本文探讨了深度学习模型中梯度爆炸和梯度消失问题,以及如何通过权重初始化来解决。Xavier初始化的目标是保持每一层输出和梯度的期望和方差恒定,通过分析正向和反向传播过程,得出初始化权重的策略。最终提出了一种适用于不同特征维度的初始化方法,即使用正态分布或均匀分布,并给出了相应的方差公式。Xavier初始化有助于保持模型稳定性,尤其在使用ReLU和Tanh激活函数时效果更佳。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言:

有时由于数据的稳定性不高,会带来梯度爆炸和梯度消失的问题。解决这样的问题有很多方式,例如让乘法变加(ResNet和LSTM的方式),归一化(比如梯度归一化),再者就是合理地初始化权重和选择激活函数。今天学了一下Xavier初始化,记录一下.


1.缘起

我们将梯度和每一层的输出都看做随机变量。

为了让模型稳定,假如我们期望的事情是让每一层的输出的期望和方差一直保持一致,也就是:
∀i,t:正向时:E[hit]=0,Var[hit]=a反向时:E[∂l∂hit]=0,Var[∂l∂hit]=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
其中iii是当前层第iii个元素,ttt是层数。

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

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

  1. wi,jt是i.i.d.w^t_{i,j}是i.i.d.wi,jti.i.d.,则E[wi,jt]=0,Var[wi,jt]=γtE[w^t_{i,j}]=0,Var[w^t_{i,j}]=\gamma_tE[wi,jt]=0,Var[wi,jt]=γt
  2. hit−1h_i^{t-1}hit1wi,jtw^t_{i,j}wi,jt独立,也就是第ttt层的输入和权重独立
  3. 假设没有activation function,没有bias.

则在第ttt层:
ht=Wtht−1,Wt∈Rnt×nt−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
其中nt,nt−1n^t,n^{t-1}nt,nt1是本层输出和输入的维数。

考察第iii个输出:
E[hit]=E[∑jwi,jthjt−1]=(均值的线性性,w和h独立)∑jE[wi,jt]E[hjt−1]=0E[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]=0E[hit]=E[jwi,jthjt1]=(线,wh)jE[wi,jt]E[hjt1]=0

Var[hit]=E[(hit)2]−E2[hit]=E[(hit)2]=E[(∑jwi,jthjt−1)2]=E[∑j(wi,jthjt−1)2+∑j≠kwi,jtwi,kthjt−1hkt−1]=(wi,j是iid,协方差为0,w和h独立)∑jE[(wi,jt)2]E[(hjt−1)2]=(均值为0)∑jVar[wi,j]Var[hjt−1]=(w方差是γt,t−1层维数为nt−1)nt−1γtVar[hjt−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]

如果我们要求两层之间方差相等,就要满足:
nt−1γt=1n^{t-1}\gamma_t=1nt1γt=1

反向同理:
∂l∂ht−1=∂l∂ht∂ht∂ht−1=∂l∂htWt\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^tht1l=htlht1ht=htlWt

具体到第iii个元素,有如下关系:
∂l∂hit−1=∑j∂l∂hitwi,j\frac{\partial l}{\partial h_i^{t-1}}=\sum_j\frac{\partial l}{\partial h_i^t}w_{i,j}hit1l=jhitlwi,j
将其记为:
ait−1=∑jaitwi,ja_i^{t-1}=\sum_j a_i^t w_{i,j}ait1=jaitwi,j
所以,和正向传播具有完全相同的形式,只是前面的层数标号是t−1t-1t1,后面是ttt,和正向传播的对调了。完全一样的过程,得到:

Var[ait−1]=ntγtVar[ai]Var[a_i^{t-1}]=n^t\gamma_tVar[a_i]Var[ait1]=ntγtVar[ai]

所以反向传播得到的结论是:
ntγt=1n^{t}\gamma_t=1ntγt=1
 \space 

2.Xavier初始化

但是nt−1γt=1且ntγt=1n^{t-1}\gamma_t=1且n^{t}\gamma_t=1nt1γt=1ntγt=1这个条件太强,我们不可能让每一层的特征维数都相同。因此采取一种折中的方式:
γt(nt−1+nt)2=1也即γt=2(nt−1+nt)\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(nt−1+nt))N(0,\frac{2}{(n^{t-1}+n^{t})})N(0,(nt1+nt)2)
  2. 均匀分布U(−6(nt−1+nt),6(nt−1+nt))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=xy=xy=x的激活函数越好。因此这也解释了为什么ReLU和Tanh的表现略微好于Sigmoid。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值