【机器学习300问】77、什么是梯度消失和梯度爆炸?

发布于:2024-04-23 ⋅ 阅读:(153) ⋅ 点赞:(0)

一、梯度消失(Vanishing gradients)

(1)定义

        在训练深度神经网络时,随着误差梯度从输出层向输入层逐层回传,梯度可能因为连乘效应逐渐减小。当使用激活函数的导数的最大值小于1时,深度网络中越前面的层(靠近输入层的层)在梯度回传过程中梯度变小得越快。如果梯度过小,它会使得网络的权重几乎不更新,从而导致学习过程中先导层训练缓慢,这就是所谓的梯度消失问题。

        梯度下降算法的权重更新公式:

W_{new} = W_{old} - \eta \frac{\partial J}{\partial W}

        其中W是权重,\eta是学习率,\frac{\partial J}{\partial W}是权重的梯度。梯度消失问题表现为\frac{\partial J}{\partial W}接近于0,导致权重的更新量变得非常小。

(2)举例理解

① 比喻举例 

        假设有一场“传话游戏”,有5个人在操场上站成一排,从队列中的最后一个孩子开始,让他们一个接一个地传递给最前面的孩子。在这个过程中,每个孩子只能复述他们听到的内容,且由于各种原因(比如声音太轻、风声干扰、听不清等),每传一次,信息就可能会变得模糊一些。当信息传到队伍前端时,原本清晰的信息可能已经变得难以辨认,甚至完全消失。这就是“信息消失”的现象。

② 具体案例 

        使用Sigmoid激活函数的深层神经网络容易出现梯度消失问题。Sigmoid函数在两端的导数值非常接近零,这意味着当网络层次加深时,反向传播的梯度经过多层Sigmoid函数后,会迅速衰减到几乎为零,使得前几层的权重几乎得不到有效更新。

        假设上面这个图中的神经网络激活函数是线性激活函数g(z)=z,这样一来输出就可以写成:

\hat y=W^{[l]}W^{[l-1]}W^{[l-2]}...W^{[3]}W^{[2]}W^{[1]}x

        如果使用激活函数(如Sigmoid)的导数的最大值小于1时(比如0.5),那么得到的输出是\hat y=\frac{1}{2^L}层数越深,激活函数输出以指数级递减。这样的情况也适用于与层数L相关的导数或梯度函数,也是呈指数级递减。

 

二、梯度爆炸(Exploding gradients)

(1)定义

        在训练深度神经网络时,权重的更新梯度成指数级增长。如此大的梯度值会导致权重的大幅波动,使得网络模型无法稳定下来,或者导致数值计算上溢,变得无法继续学习。梯度爆炸通常在RNNs中较为常见,尤其当时间序列数据非常长的时候。

        梯度下降算法的权重更新公式:

W_{new} = W_{old} - \eta \frac{\partial J}{\partial W}

        其中W是权重,\eta是学习率,\frac{\partial J}{\partial W}是权重的梯度。梯度爆炸则表现为\frac{\partial J}{\partial W}极大,使得更新步长非常大,可能在数值上溢(梯度值超过了计算机浮点数的表示范围)或者导致权重变得非常大以至于模型不稳定。

(2)举例理解

③ 比喻举例 

        假设有5个话筒和5个扬声器喇叭,他们是一对一对的组成5对,现在把他们收尾相连即“(话筒1,喇叭1) > (话筒2,喇叭2)>...>(话筒5,喇叭5)”,当你在第一个话筒处发出声音,声音会被一层层放大,直至超过喇叭的最大输出响度,产生啸叫。

④ 具体案例

        假设上面这个图中的神经网络激活函数是线性激活函数g(z)=z,这样一来输出就可以写成:

\hat y=W^{[l]}W^{[l-1]}W^{[l-2]}...W^{[3]}W^{[2]}W^{[1]}x

        如果使用激活函数(如Sigmoid)的导数的最大值大于1时(比如1.5),那么得到的输出是\hat y=1.5^L层数越深,激活函数输出以指数级递增。这样的情况也适用于与层数L相关的导数或梯度函数,也是呈指数级递增。

三、避免梯度消失和梯度爆炸的方法

(1)避免梯度消失

  • 选择合适的激活函数:使用ReLU激活函数及其变种(如Leaky ReLU, ELU等),它们的导数不会随着输入值的增大而减小,有助于缓解梯度消失问题。
  • 合适的初始化权重:采用He初始化或Xavier/Glorot初始化等策略,可以根据网络中每层的输入和输出尺寸来适当设定权重的初始化值,从而帮助梯度更平稳地流动。

(2)避免梯度爆炸

  • 选择合适的优化算法:如使用具有动量项的SGD或Adam等,以确保梯度在反向传播过程中保持在一个可控范围内,从而使模型能够稳健地学习和优化。
  • 使用梯度裁剪:在反向传播时,如果计算出的梯度超出了某个阈值,就将它限制在这个阈值范围内。这个技术对于防止梯度爆炸尤其有用。

网站公告

今日签到

点亮在社区的每一天
去签到