深度学习笔记(四)

神经网络中的权值初始化

Posted by Pelhans on April 12, 2019

眼睛看过只是别人的,整理出来并反复学习才是自己的。

概览

那么为什么会有这么多初始化策略呢?深度学习算法的训练通常是迭代的,因此要求使用者给一些开始迭代的初始点,而有些深度模型会受到初始点的影响,使得算法遭遇数值困难,并完全失败。此外初始点可以决定学习收敛的多快,以及是否收敛到一个代价高或低的点,更何况代价相近的点也可能有极大的泛化差别。不同的网络结构和激活函数需要适配不同的初始化方法。目前常用的初始化方法包含随机均匀初始化、正态分布初始化、Xavier初始化、He初始化、预训练等。

随机初始化

随机初始化包含均匀随机初始化和正态随机初始化,在 tensorflow 中对应的代码为:

  • 均匀随机:tf.initializers.random_uniform(-0.1, 0.1)
  • 正态分布:tf.initializaers.random_normal(0, 1),均值为0,方差为1的正态分布。
  • 正态分布带截断:tf.initializers.truncated_normal(0, 1),生成均值为0,方差为1的正态分布,若产生随机数落到2$\sigma$外,则重新生成。

下面以均匀分布为例说明随机初始化的缺点。

首先权重矩阵初始化公式为:

易知该分布的均值为0,方差通过公式$\frac{(b-a)^{2}}{12}$ 得到方差为 $Var(W_{ij}) = \frac{1}{3n}$。

现在把输入记为x,并假设它服从正态分布。并假设W与x独立,则线性隐藏层的输出的方差为:

因此标准初始化的隐层均值为0,方差为常量,和网络的层数无关,这意味着对于 sigmoid 来说,自变量落在有梯度的范围内。但是对于下一层来说情况就发生了变化,这是因为下一层的输入的均值经过sigmoid后不是0了,方差自然也跟着变了,好的性质没有了。输入输出的分布也不一致。

以 tanh做激活函数的神经网络为例,查看激活值状态、参数梯度的各层分布xavier的论文

首先看激活值标准化以后的分布,如下图所示,激活值的方差是逐层递减的。这是因为

其中f是激活函数,$z^{i+1}$是它的输出,$z^{i}$是该层的输入,可以看到z 累计了W的方差,因此逐渐降低:

对于反向传播状态的梯度的方差是逐层增加的,换句话说是在反向传播过程中逐层递减的。如下图所示:

根据公式

可以看到,和前面的原因相似,在反向传播的过程中累计了参数的方差,导致自身越来越小。

对于参数的梯度,它基本上与层数无关,如下图所示:

这是因为:

和层数 i没关系,但和总层数d有关,因此太深的话会更容易出现梯度消失或者爆炸这种问题。

Xavier 初始化

Xavier 作者 Glorot 认为,优秀的初始化应该使得各层的激活值和状态梯度的方差在传播过程中保持一致

为什么会是这样?根据论文Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift,它虽然是探讨BN的,但个人感觉很相近。论文里说,由于前一层的参数更新,所以这一层的输入(前一层的输出)的分布会发生变化,这种现象被称之为ICS。同样,这篇文章的观点认为BN work的真正原因,在与其将数据的分布都归一化到均值为0,方差为1的分布上去。因此,每一层的输入(上一层输出经过BN后)分布的稳定性都提高了,故而整体减小了网络的ICS。那么对于 Xavier 的情况也很类似,它保持在训练过程中各层的激活值和状态梯度的方差不变,也相当于减小了网络的ICS。

根据 Glorot 的假设,有:

其中 $n_{i}$表示该单元的输入的数量,$n_{i+1}$表示输出的数量。但对于同一层来说,输入和输出的数量往往不一致,因此作者取二者的均值作为方差:

根据均匀分布方差公式,反过来求分布的边界即可得到W的分布边界:

假设各层的大小一样,那么就有 $Var(W) = \frac{1}{n}$,再带入状态的梯度和激活值的公式中可以看到这个$\frac{1}{n}$和前面乘积的n抵消了。也就保持方差的不变。

He 初始化

He 初始化的基本思想是,当使用Relu 作为激活函数时, Xavier 的效果不好,这是因为对于 Relu,在训练过程中会有一部分神经元处于关闭状态,导致分布变了。因此作者做出了改进:

对于 ReLU 的初始化方法:

推导过程为:

假设W和x都满足独立同分布 i.i.d。又假设$w_{l}$ 是零均值,w和x相互独立。那么有:

对于 ReLU, $x_{l} = \max(0, y_{l-1}) $,因此它的均值不是0。现在假设w是关于0对称分布且b为0,那么$y_{l-1}$也是0均值的同时分布关于0对称。因此:

那么当到第L层时,我们有:

根据 Xavier中的经验,我们要消除连乘部分,也就是说:

因此,当w为正态分布时,它的分布公式就是 $N[0, \sqrt{\frac{2}{n_{i}}}]$。

对于Leaky ReLU来说,它的初始化公式就是:

其中$\hat{n_{i}} = h_{i}w_{i}d_{i} $,而 $h_{i}$、$w_{i}$表示卷基层中卷积核的高和宽,$d_{i}$是当前卷积核的个数。

参考

Understanding the difficulty of training deep feedforward neural networks
深度学习之参数初始化(一)——Xavier初始化
深度前馈网络与Xavier初始化原理
NMT Tutorial 3扩展c. 神经网络的初始化