网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming 梯度消失与梯度爆炸 Sigmoid和Tanh,及其导数 activation functions a simple 9-layer neural network 不良初始化 期望与方差的相关性质 全连接层方差分析 tanh下的初始化方法 ReLU/PReLU下的初始化方法 ReLU and PReLU 小结 参考  

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

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

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

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

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

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

激活函数的影响

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

 

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 Sigmoid和Tanh,及其导数

 

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

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

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

 

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 activation functions

 

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

权重矩阵的影响

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

 

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 a simple 9-layer neural network

 

假设权重矩阵均为W=V diag(λ) V−1,简单地,

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

其中t次幂后会“消失”。

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

不良初始化

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

  • 过小,导致梯度消失
  • 过大,导致梯度爆炸
  • 全常数初始化,即所有权重

     反向传播中的偏导计算

  • 特别地,全0初始化,根据上式,如果激活函数a≠0,则权重会从最后一层开始逐层向前更新,改变全0的状态,但是每层权重的更新方向仍相同,同上。

 

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

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

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

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

 

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 weight initialization

 

其中,扇入链接),

 

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 

 

对于卷积层而言,其权重为fan_out=n×h×w

期望与方差的相关性质

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

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

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

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

Cov(X,Y)=0

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

Cov(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⁡(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

全连接层方差分析

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 

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

  • 网络输入的每个元素x1,x2,…独立同分布
  • 每层的权重随机初始化,同层的权重E(w)=0
  • 每层的权重wi1a1,wi2a2,…亦相互独立,且同分布;
  • 根据上面的计算公式,同层的a1,a2,…也为独立同分布

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

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 

tanh下的初始化方法

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 

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

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

Lecun 1998

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 

Xavier 2010

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 

 

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

ReLU/PReLU下的初始化方法

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
  

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 

He 2015 for ReLU

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 

 网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 

 

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 

 

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

 

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 

 

He 2015 for PReLU

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

 

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 

ReLU and PReLU

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming
梯度消失与梯度爆炸
Sigmoid和Tanh,及其导数
activation functions
a simple 9-layer neural network
不良初始化
期望与方差的相关性质
全连接层方差分析
tanh下的初始化方法
ReLU/PReLU下的初始化方法
ReLU and PReLU
小结
参考
 

小结

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

以上。

参考

 

 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!