Pytorch框架学习(9)——权值初始化

1. 梯度消失与梯度爆炸

不恰当的权值初始化可能会引起梯度消失或者梯度爆炸。
我们从一个例子中来理解梯度消失与梯度爆炸。,下图给出一个两层网络,我们来计算一下W2W_2的梯度。
Pytorch框架学习(9)——权值初始化
Pytorch框架学习(9)——权值初始化
从计算过程中可以看到,当H1H_1趋近于0时,会导致W2W_2的梯度趋近于0,造成梯度消失;当H1H_1趋近于无穷时,会导致W2W_2的梯度趋近于无穷,造成梯度爆炸。
因此,要避免梯度消失或者梯度爆炸,就要控制网络输出层的值的尺度范围,也就是每一层网络输出值不能过大或者太小。

2. Xavier方法与Kaiming方法

2.1 Xavier初始化

  • 方差一致性:保持数据尺度维持在恰当范围,通常方差为1(尽量让每个网络层输出的方差等于1)
  • **函数:饱和函数,如Sigmoid, Tanh
    Pytorch框架学习(9)——权值初始化
    nin_i是输入层的神经元个数,ni+1n_{i+1}表示输出层神经元的个数,权值w的初始化值可按照上述公式推导方法得到。

2.2 Kaiming初始化

参考文献《Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification》

  • 方差一致性:保持数据尺度维持在恰当范围,通常方差为1
  • **函数:ReLU及其变种

3. 常用初始化方法

  1. Xavier均匀分布
  2. Xavier标准正态分布
  3. Kaiming均匀分布
  4. Kaiming标准正态分布
  5. 均匀分布
  6. 正态分布
  7. 常数分布
  8. 正交矩阵初始化
  9. 单位矩阵初始化
  10. 稀疏矩阵初始化
  • nn.init.calculate_gain
    • 功能:计算方法变化尺度:输入数据的方差除以经过**函数之后输出数据的方差。
    • 主要参数
      • nonlinearity:**函数名称
      • param:**函数的参数,如leaky ReLU的negative_slop