梯度下降、梯度消失、梯度爆炸

发布时间 2023-11-14 11:37:16作者: 黑逍逍

https://www.3blue1brown.com/lessons/gradient-descent

梯度下降:

成本函数:当网络自信地正确地对这个图像进行分类时,成本很小,但当它不知道自己在做什么时,成本就很大。

最小化成本函数:找到训练成本的最小值

  微积分,有时可以通过求解斜率为零时来明确地计算出最小值。然而,对于真正复杂的函数来说,这并不总是可行的。

  另一种想法,检查每个点的新斜率并重复执行此操作,即可接近函数的局部最小值。

  有两个输入和一个输出的函数。您可以将输入空间视为 xy 平面,类似小球滑倒底谷

  

 

梯度:

高维空间中,将“斜率”作为一个单一的数字来谈论是没有意义的。相反,我们需要使用向量来表示最陡峭的上升方向。

熟悉多变量微积分,这个向量被称为“梯度”,它告诉你应该朝哪个方向迈进才能最快地增加函数

梯度下降:

找到最小成本函数,这是一种告诉计算机的方法,让他来调整模型的参数和权重的。例如:“不,糟糕的计算机,输出层应该有激活,大多数神经元的激活是 0,但第三个神经元的激活是 1。你给我的完全是垃圾

 

 经典的梯度消失到梯度爆炸!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

梯度消失

定义:

  梯度消失是指在神经网络训练过程中,由于链式法则的多次相乘,导致某些梯度变得非常小,甚至趋近于零。这可能导致网络无法学习到某些参数的更新,从而影响整个网络的性能。

原因:

  因为某些激活函数(如 sigmoid 或 tanh)在输入较大或较小的情况下,导数的值趋于零,因此反向传播时,梯度也会趋于零,从而引发梯度消失问题

表现:

  损失函数变得很缓慢,无法从模型中学习到新的内容

解决:

  换激活函数

梯度爆炸

定义:  

  通常发生在反向传播过程中。当神经网络的权重更新过大,导致梯度急剧增加(陡峭),进而权重的更新也变得非常大,这可能导致模型训练不稳定甚至无法收敛。

表现:

  损失函数的值变得非常大,模型在训练数据上无法收敛

  训练过程不收敛: 如果损失函数在训练过程中不收敛,或者波动幅度很大,这也可能是梯度爆炸的迹象

解决:

  1. 权重初始化: 使用合适的权重初始化方法,如Xavier/Glorot初始化,以确保权重的初始值不会过大。这有助于防止在初始阶段就出现梯度爆炸。

  2. 梯度裁剪: 设置一个梯度阈值,如果梯度的范数超过这个阈值,就将梯度裁剪到阈值以内。这有助于防止梯度爆炸传播到整个网络。

  3. 使用梯度正则化: 在损失函数中引入梯度正则化项,类似于权重正则化(L1或L2正则化),以限制梯度的增长。

  4. 调整学习率: 适当的学习率对于防止梯度爆炸非常重要。如果梯度爆炸发生,可以尝试减小学习率,或者使用自适应学习率算法,如Adam。

  5. 使用梯度归一化技术: Batch Normalization可以帮助在每一层的输入分布上保持稳定性,有助于缓解梯度爆炸问题。