Class11数值稳定性

Class11数值稳定性

在这里插入图片描述
一.神经网络的梯度计算

假设你有一个输入,比如图像的像素、文本的词向量等等。
然后神经网络中有多层神经元,每层做一次变换。
在这里插入图片描述
其中h指的就是隐藏层

第层的输出是:
在这里插入图片描述
其中,是第 层的激活函数或线性变换等

网络的最终输出:
在这里插入图片描述
这里的ℓ是损失函数,也就是每一层的损失函数作用于原始的X。

加上损失函数,神经网络才有一个标准,指导什么是好的结果。

损失函数

衡量的是神经网络预测结果和真实标签之间的差距。

作用是:告诉模型预测得好不好,指导模型如何更新参数变得更好。

在这里插入图片描述
我们现在要计算:
在这里插入图片描述
这个梯度告诉我们:

如果我稍微改动 ,损失会变大还是变小?
那我们就可以顺着“减小损失”的方向去调节参数

在这里插入图片描述
把梯度通过链式法则一层一层传回来,最终乘到第层的参数上。

在这里插入图片描述

二.梯度爆炸和梯度消失

出现原因
在深度网络中,反向传播梯度是通过链式法则传播的:
在这里插入图片描述
其中只要每一层的导数稍微变化一点,乘积起来就会发生巨大变化。

梯度爆炸
反向传播时,梯度越来越大,最后变得无穷大,导致数值不稳定、权重发散、损失为 NaN。

如果每一层的导数都 > 1:
在这里插入图片描述

梯度消失
反向传播时,梯度越来越小,最后小到接近 0,导致参数更新停滞,网络无法有效学习。

如果每一层的导数都 < 1:
在这里插入图片描述
三.加入MLP
在这里插入图片描述

当前层的输出等于前一层的输出通过线性变换(乘以权重)再经过非线性激活函数

在这里插入图片描述

表示在反向传播过程中,第层对前一层的导数表达式

在这里插入图片描述

从第层一直反传到第层的链式梯度总乘积

左侧:
是一个链式法则的乘积,从第层一直到第层

右侧:
在这里插入图片描述
在这里插入图片描述
梯度爆炸
如果使用ReLU作为激活函数:

在这里插入图片描述
在这里插入图片描述
如果d-t很大,这个连乘可能会非常大
当你连续乘很多个矩阵,而这些矩阵中有些值略大于1,那么整体乘积会随着层数增多呈指数增长,导致梯度爆炸。

梯度爆炸的问题

值超出值域

因为16位浮点数的数值区间只在(6e-5到6e4)之间,所以值很容易就超出范围

对学习率敏感

学习率乘以梯度控制者更新步长

如果学习率太大 --> 参数值大 --> 梯度增大
如果学习率太小 --> 导致训练几乎无进展

梯度消失
在这里插入图片描述
同理:
在这里插入图片描述
如果d-t很小,这个连乘可能会非常小
当你连续乘很多个矩阵,而这些矩阵中有些值略小于1,那么整体乘积会随着层数增多而近似等于0,导致梯度消失。

梯度消失的问题

梯度值变为0

训练没有进展

仅仅是让的顶部层训练的较好,无法让神经网络更深

因为靠近输出层的参数接收到的梯度还没来得及变小,更新还算正常,但是越往底层,梯度被乘得越小,甚至趋于 0。

总结
在这里插入图片描述

你可能感兴趣的:(深度学习,深度学习,人工智能,pytorch)