问题描述
梯度会累积会有什么影响?
什么时候会用到梯度累积?
为什么累计多个小批次的梯度再进行模型参数更新会达到和直接使用大批量数据得到梯度一样的结果呢?
逐一解答
一、梯度会累积会有什么影响?
在训练神经网络的过程中,如果不在每次反向传播之前清零梯度缓存(即调用 optimizer.zero_grad()),梯度会累积。累积梯度的影响如下:
-
梯度不正确: 如果梯度累积,每次计算出的梯度将包含当前批次数据的梯度和之前所有批次数据的梯度。这将导致梯度值远大于预期值,尤其是在很多批次数据进行多次反向传播后,梯度的数值会变得非常大。如下图所示:
梯度累积=当前梯度+之前累积的梯度
-
梯度爆炸: 梯度累积会导致梯度值不断增大,最终可能会导致梯度爆炸现象。梯度爆炸会使得模型参数更新过大,导致模型参数变得不稳定,训练过程无法收敛。
-
模型训练失败: 由于梯度爆炸,模型参数的更新方向和幅度可能变得随机且过大,从而破坏模型的训练,甚至使得模型性能变得很差。
二、什么时候会用到梯度累积?
梯度累积在以下情况下会被使用:


1万+

被折叠的 条评论
为什么被折叠?



