网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming

梯度消失与梯度爆炸

梯度为偏导数构成的向量。

损失函数收敛至极小值时,梯度为0(接近0),损失函数不再下降。我们不希望在抵达极小值前,梯度就为0了,也不希望下降过程过于震荡,甚至不收敛。梯度消失与梯度爆炸分别对应这2种现象,

梯度消失(vanishing gradients):指的是在训练过程中,梯度(偏导)过早接近于0的现象,导致(部分)参数一直不再更新,整体上表现得像损失函数收敛了,实际上网络尚未得到充分的训练。

梯度爆炸(exploding gradients):指的是在训练过程中,梯度(偏导)过大甚至为NAN(not a number)的现象,导致损失剧烈震荡,甚至发散(divergence)。

由上一节的分析可知,在梯度(偏导)计算中,主要的影响因素来自激活函数的偏导、当前层的输入(前一层的输出)、以及权重的数值等,这些因子连续相乘,带来的影响是指数级的。训练阶段,权重在不断调整,每一层的输入输出也在不断变化,梯度消失和梯度爆炸可能发生在训练的一开始、也可能发生在训练的过程中

因子项中当前层的输入仅出现一次,下面着重看一下激活函数和权重的影响。

激活函数的影响

以Sigmoid和Tanh为例,其函数与导数如下(来自链接),

 

Sigmoid和Tanh,及其导数Sigmoid和Tanh,及其导数

 

两者的导数均在原点处取得最大值,前者为0.25后者为1,在远离原点的正负方向上,两者导数均趋近于0,即存在饱和区。

  • 原点附近:从因子项连乘结果看,Tanh比Sigmoid稍好,其在原点附近的导数在1附近,如果激活函数的输入均在0左右,偏导连续相乘不会很小也不会很大。而sigmoid就会比较糟糕,其导数最大值为0.25,连续相乘会使梯度指数级减小,在反向传播时,对层数越多的网络,浅层的梯度消失现象越明显。
  • 饱和区:一旦陷入饱和区,两者的偏导都接近于0,导致权重的更新量很小,比如某些权重很大,导致相关的神经元一直陷在饱和区,更新量又接近于0,以致很难跳出或者要花费很长时间才能跳出饱和区。

所以,一个改善方向是选择更好的非线性激活函数,比如ReLU,相关激活函数如下图所示,

 

activation functionsactivation functions

 

ReLU只在负方向上存在饱和区,正方向上的导数均为1,因此相对更少地遭遇梯度消失,但梯度爆炸现象仍然存在。

权重矩阵的影响

假设激活函数为线性,就像ReLU的正向部分,导数全为1。则一个简化版本的全连接神经网络如下图所示,

 

a simple 9-layer neural networka simple 9-layer neural network

 

假设权重矩阵均为WW前向传播和反向传播过程均涉及WW(转置)的反复相乘tt步相当于WtWt,若WW有特征值分解W=V diag(λ) V1W=V diag(λ) V−1,简单地,

Wt=(V diag(λ) V1)t=V diag(λ)t V1Wt=(V diag(λ) V−1)t=V diag(λ)t V−1

其中diag(λ)diag(λ)为特征值对角矩阵,如果特征值λiλi不在1附近,大于1经过tt次幂后会“爆炸”,小于1经过tt次幂后会“消失”。

如果网络初始化时,权重矩阵过小或过大,则在网络训练的初始阶段就可能遭遇梯度消失或梯度爆炸,表现为损失函数不下降或者过于震荡。

不良初始化

至此,一些权重不良初始化导致的问题就不难解释了,

  • 过小,导致梯度消失
  • 过大,导致梯度爆炸
  • 全常数初始化,即所有权重WW都相同,则z(2)=W1xz(2)=W1x相同,导致后面每一层的输入和输出均相同,即aazz相同,回到反向传播的公式,每层的偏导相同,进一步导致每层的权重会向相同的方向同步更新,如果学习率只有一个,则每层更新后的权重仍然相同,每层的效果等价于一个神经元,这无疑极大限制了网络的能力。
    反向传播中的偏导计算

     反向传播中的偏导计算

  • 特别地,全0初始化,根据上式,如果激活函数g(0)=0g(0)=0,如ReLU,则初始状态所有激活函数的输入zz和输出aa都为0,反向传播时所有的梯度为0,权重不会更新,一直保持为0;如果激活函数g(0)0g(0)≠0,则初始状态激活层的输入为0,但输出a0a≠0,则权重会从最后一层开始逐层向前更新,改变全0的状态,但是每层权重的更新方向仍相同,同上。

 

全0、常数、过大、过小的权重初始化都是不好的,那我们需要什么样的初始化?

  • 因为对权重ww的大小和正负缺乏先验,所以应初始化在0附近,但不能为全0或常数,所以要有一定的随机性,即数学期望E(w)=0E(w)=0
  • 因为梯度消失和梯度爆炸,权重不易过大或过小,所以要对权重的方差Var(w)Var(w)有所控制
  • 深度神经网络的多层结构中,每个激活层的输出对后面的层而言都是输入,所以我们希望不同激活层输出的方差相同,即Var(a[l])=Var(a[l1])Var(a[l])=Var(a[l−1]),这也就意味不同激活层输入的方差相同,即Var(z[l])=Var(z[l1])Var(z[l])=Var(z[l−1])
  • 如果忽略激活函数,前向传播和反向传播可以看成是权重矩阵(转置)的连续相乘。数值太大,前向时可能陷入饱和区,反向时可能梯度爆炸,数值太小,反向时可能梯度消失。所以初始化时,权重的数值范围(方差)应考虑到前向和后向两个过程

权重的随机初始化过程可以看成是从某个概率分布随机采样的过程,常用的分布有高斯分布、均匀分布等,对权重期望和方差的控制可转化为概率分布的参数控制,权重初始化问题也就变成了概率分布的参数设置问题

在上回中,我们知道反向传播过程同时受到权重矩阵和激活函数的影响,那么,在激活函数不同以及每层超参数配置不同(输入输出数量)的情况下,权重初始化该做怎样的适配?这里,将各家的研究成果汇总如下,

 

weight initializationweight initialization

 

其中,扇入faninfan_in和扇出fanoutfan_out分别为当前全连接层的输入和输出数量,更准确地说,1个输出神经元与faninfan_in个输入神经元有连接(the number of connections feeding into the node),1个输入神经元与fanoutfan_out个输出神经元有连接(the number of connections flowing out of the node),如下图所示(来自链接),

 

MW33zn.png

 

对于卷积层而言,其权重为nnc×h×wc×h×w大小的卷积核,则一个输出神经元与c×h×wc×h×w个输入神经元有连接,即fanin=c×h×wfan_in=c×h×w,一个输入神经元与n×h×wn×h×w个输出神经元有连接,即fanout=n×h×wfan_out=n×h×w

期望与方差的相关性质

接下来,首先回顾一下期望与方差计算的相关性质。

对于随机变量XX,其方差可通过下式计算,

Var(X)=E(X2)(E(X))2Var(X)=E(X2)−(E(X))2

若两个随机变量XXYY,它们相互独立,则其协方差为0,

Cov(X,Y)=0Cov(X,Y)=0

进一步可得E(XY)=E(X)E(Y)E(XY)=E(X)E(Y),推导如下,

Cov(X,Y)=E((XE(X))(YE(Y)))=E(XY)E(X)E(Y)=0Cov(X,Y)=E((X−E(X))(Y−E(Y)))=E(XY)−E(X)E(Y)=0

两个独立随机变量和的方差,

Var(X+Y)=E((X+Y)2)(E(X+Y))2=E(X2+Y2+2XY)(E(X)+E(Y))2=(E(X2)+E(Y2)+2E(XY))((E(X))2+(E(Y))2+2E(X)E(Y))=(E(X2)+E(Y2)+2E(X)E(Y))((E(X))2+(E(Y))2+2E(X)E(Y))=E(X2)(E(X))2+E(Y2)(E(Y))2=Var(X)+Var(Y)Var⁡(X+Y)=E((X+Y)2)−(E(X+Y))2=E(X2+Y2+2XY)−(E(X)+E(Y))2=(E(X2)+E(Y2)+2E(XY))−((E(X))2+(E(Y))2+2E(X)E(Y))=(E(X2)+E(Y2)+2E(X)E(Y))−((E(X))2+(E(Y))2+2E(X)E(Y))=E(X2)−(E(X))2+E(Y2)−(E(Y))2=Var⁡(X)+Var⁡(Y)

两个独立随机变量积的方差,

Var(XY)=E((XY)2)(E(XY))2=E(X2)E(Y2)(E(X)E(Y))2=(Var(X)+(E(X))2)(Var(Y)+(E(Y))2)(E(X))2(E(Y))2=Var(X)Var(Y)+(E(X))2Var(Y)+Var(X)(E(Y))2Var⁡(XY)=E((XY)2)−(E(XY))2=E(X2)E(Y2)−(E(X)E(Y))2=(Var⁡(X)+(E(X))2)(Var⁡(Y)+(E(Y))2)−(E(X))2(E(Y))2=Var⁡(X)Var⁡(Y)+(E(X))2Var⁡(Y)+Var⁡(X)(E(Y))2

全连接层方差分析

在初始化阶段,将每个权重以及每个输入视为随机变量,可做如下假设和推断,

  • 网络输入的每个元素x1,x2,x1,x2,…独立同分布
  • 每层的权重随机初始化,同层的权重wi1,wi2,wi1,wi2,…独立同分布,且期望E(w)=0E(w)=0
  • 每层的权重ww和输入aa随机初始化且相互独立,所以两者之积构成的随机变量wi1a1,wi2a2,wi1a1,wi2a2,…亦相互独立,且同分布;
  • 根据上面的计算公式,同层的z1,z2,z1,z2,…独立同分布,同层的a1,a2,a1,a2,…也为独立同分布

需要注意的是,上面独立同分布的假设仅在初始化阶段成立,当网络开始训练,根据反向传播公式,权重更新后不再相互独立。

tanh下的初始化方法

为了避免梯度消失和梯度爆炸,最好保持这个系数为1。

需要注意的是,上面的结论是在激活函数为恒等映射的条件下得出的,而tanh激活函数在0附近可近似为恒等映射,即tanh(x)xtanh(x)≈x

Lecun 1998

Xavier 2010

test error

 

论文还有更多训练过程中的权重和梯度对比图示,这里不再贴出,具体可以参见论文。

ReLU/PReLU下的初始化方法

 

activation functions

He 2015 for ReLU

 

 

He initialization

 

使用Xavier和He初始化,在激活函数为ReLU的情况下,test error下降对比如下,22层的网络,He的初始化下降更快,30层的网络,Xavier不下降,但是He正常下降。

 

Xavier vs He

 

He 2015 for PReLU

对于PReLU激活函数,负向部分为f(x)=axf(x)=ax,如下右所示,

 

ReLU and PReLU

ReLU and PReLU

小结

至此,对深度神经网络权重初始化方法的介绍已告一段落。虽然因为BN层的提出,权重初始化可能已不再那么紧要。但是,对经典权重初始化方法经过一番剖析后,相信对神经网络运行机制的理解也会更加深刻。

以上。

参考

 

 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
原文地址:https://www.cnblogs.com/jins-note/p/12753717.html