Skip to content

Lesson-14

数值稳定性

当我们计算损失函数的梯度的时候,会遇到下面这种情况:

\[\frac{\partial l }{\partial W^t} = \frac{\partial l }{\partial h^d}\frac{\partial h^d}{\partial h^{d-1}}...\frac{\partial h^t}{\partial W^t}\]

中间有很多梯度的连续相乘积,会遇到下面两种情况: alt text 梯度爆炸会带来的问题:

  • 值超出值域,这对于16位浮点数尤为严重
  • 对学习率很敏感,需要在训练过程中不断调整学习率

梯度消失带来的问题:

  • 梯度值变为0,训练没有进展
  • 对于底部层更加严重

让训练更加稳定

  • 目标:让梯度在合理的范围内

方法如下:

  • 将乘法变成加法:ResNet、LSTM...
  • 归一化,梯度剪裁
  • 合理的权重初始化和激活函数

我们希望做到每层的输出和梯度都保持均值和方差一致 权重初始化:要在合适的区间内随机初始化参数