跟李沐学AI-动手学深度学习-数值稳定性+模型初始化和激活函数

目录

数值稳定性

神经网络的梯度

数值稳定性的常见两个问题

例子: MLP

梯度爆炸

 梯度爆炸的问题

梯度消失

梯度消失的问题

总结

让训练更加稳定

让每层的方差是一个常数

 权重初始化

例子:MLP

 正向方差

 反向均值和方差

Xavier初始

 假设线性的激活函数

反向

 检查常用激活函数

 总结


数值稳定性

神经网络的梯度

考虑如下有d层的神经网络

计算损失l关于参数Wt的梯度

跟李沐学AI-动手学深度学习-数值稳定性+模型初始化和激活函数_第1张图片

数值稳定性的常见两个问题

梯度消失梯度爆炸

例子: MLP

加入如下MLP(为了简单省略了偏移)

 

 

梯度爆炸

 使用ReLU作为激活函数。

 梯度爆炸的问题

  •  值超出值域(infinity)

   对于16位浮点数尤为严重(数值区间6e-5 - 6e4)。

  • 对学习率敏感

   如果学习率太大 -> 大参数值 -> 更大的梯度。

   如果学习率太小 -> 训练无进展。

  我们可能需要在训练过程不断调整学习率。

梯度消失

使用sigmoid作为激活函数

跟李沐学AI-动手学深度学习-数值稳定性+模型初始化和激活函数_第2张图片

  的元素值是d-t个小数值的乘积。

梯度消失的问题

  •  梯度值变成0。

        对16位浮点数尤为严重。

  • 训练没有进展。

        不管如何选择学习率。

  • 对于底部层尤为严重。

       仅仅顶部层训练的较好。

       无法让神经网络更深。

总结

  • 当数值过大或者过小时会导致数值问题。
  • 常发生在深度模型中,因为其会对n个数累乘。

让训练更加稳定

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

        例如:[1e-6,1e3]

  • 将乘法变成加法

         例如:ResNet,LSTM。

  • 归一化。

         例如:梯度归一化,梯度裁剪。

  • 合理的权重初始和激活函数。

让每层的方差是一个常数

  • 将每层的输出和梯度都看作随机变量。
  • 让他们的均值和方差都保持一致。

跟李沐学AI-动手学深度学习-数值稳定性+模型初始化和激活函数_第3张图片 ,a,b都是常数。

 权重初始化

  •  在合理值区间里随机初始参数。
  • 训练开始的时候更容易有数值不稳定。

         远离最优解的地方损失函数表面可能很复杂。 

         最优解附近表面会比较平。

  • 使用N(0,0.01)来初始可能对小网络没问题,但不能保证深度神经网络。

例子:MLP

跟李沐学AI-动手学深度学习-数值稳定性+模型初始化和激活函数_第4张图片,i,i.d代表独立同分布。

跟李沐学AI-动手学深度学习-数值稳定性+模型初始化和激活函数_第5张图片

 正向方差

跟李沐学AI-动手学深度学习-数值稳定性+模型初始化和激活函数_第6张图片

 反向均值和方差

  跟李沐学AI-动手学深度学习-数值稳定性+模型初始化和激活函数_第7张图片

Xavier初始

跟李沐学AI-动手学深度学习-数值稳定性+模型初始化和激活函数_第8张图片

跟李沐学AI-动手学深度学习-数值稳定性+模型初始化和激活函数_第9张图片

 假设线性的激活函数

跟李沐学AI-动手学深度学习-数值稳定性+模型初始化和激活函数_第10张图片

反向

 跟李沐学AI-动手学深度学习-数值稳定性+模型初始化和激活函数_第11张图片

 检查常用激活函数

  • 使用泰勒展开

跟李沐学AI-动手学深度学习-数值稳定性+模型初始化和激活函数_第12张图片

  • 调整sigmoid:

 总结

合理的权重初始值和激活函数的选取可以提升数值稳定性。

你可能感兴趣的:(跟李沐学AI-动手学深度学习,神经网络,深度学习,pytorch)