【梯度下降】梯度会累积会有什么影响?什么时候会用到梯度累积?为什么累计多个小批次的梯度再进行模型参数更新会达到和直接使用大批量数据得到梯度一样的结果呢?

问题描述

        梯度会累积会有什么影响?

        什么时候会用到梯度累积?

        为什么累计多个小批次的梯度再进行模型参数更新会达到和直接使用大批量数据得到梯度一样的结果呢?

逐一解答

        一、梯度会累积会有什么影响?

        在训练神经网络的过程中,如果不在每次反向传播之前清零梯度缓存(即调用 optimizer.zero_grad()),梯度会累积。累积梯度的影响如下:

  • 梯度不正确: 如果梯度累积,每次计算出的梯度将包含当前批次数据的梯度和之前所有批次数据的梯度。这将导致梯度值远大于预期值,尤其是在很多批次数据进行多次反向传播后,梯度的数值会变得非常大。如下图所示:

    梯度累积=当前梯度+之前累积的梯度

  • 梯度爆炸: 梯度累积会导致梯度值不断增大,最终可能会导致梯度爆炸现象。梯度爆炸会使得模型参数更新过大,导致模型参数变得不稳定,训练过程无法收敛。

  • 模型训练失败: 由于梯度爆炸,模型参数的更新方向和幅度可能变得随机且过大,从而破坏模型的训练,甚至使得模型性能变得很差。

        二、什么时候会用到梯度累积?

        梯度累积在以下情况下会被使用:

1. 小批量训练(Small Batch Training)

        当计算资源有限或者模型太大,无法在显存中放下较大的批量数据(batch),梯度累积可以帮助模拟大批量数据的训练效果。

2. 平衡显存使用和模型更新频率

        在处理超大规模模型时(例如GPT-3),直接使用大批量数据进行训练会超出显存限制。通过梯度累积,可以使用较小的批量数据,累计多个小批次的梯度再进行模型参数更新。这既能减小显存负担,又能保持较高的模型更新频率。

3. 提高训练稳定性

        使用较大的批量数据能提供更平滑的梯度估计,从而提高训练的稳定性和收敛速度。然而,在显存限制的情况下,通过梯度累积可以在多个小批量数据上计算梯度,再进行一次参数更新,达到类似于大批量数据训练的效果。

4. 分布式训练

        在分布式训练中,梯度累积可以用来同步不同设备上的梯度信息。各设备先计算并累积本地梯度,然后再进行梯度平均和参数更新。这种方式有助于在大规模分布式系统中协调和优化训练过程。

        三、为什么累计多个小批次的梯度再进行模型参数更新会达到和直接使用大批量数据得到梯度一样的结果呢?

        梯度累积的原理在于累积多个小批次的梯度再进行模型参数更新,可以近似模拟大批量数据的训练效果。具体原因如下:

1. 梯度的线性性质

        梯度运算是线性的,即损失函数对模型参数的梯度可以分解成每个样本的梯度之和。对于损失函数 L(θ) 和参数 θ,如果我们将数据集划分为多个小批次:

        其中Li​(θ) 是第 i 个样本的损失,那么整体损失函数的梯度是: 

2. 小批次梯度累积

假设我们将数据集分成多个小批次,每个小批次包含 M 个样本,总共有 K 个小批次(即 N=K×M)。梯度累积的过程是:

  • 计算每个小批次的梯度并累积: 

  • 在累积完所有小批次的梯度后,再更新模型参数: 

这样做的效果与直接使用一个大批次包含所有样本的梯度更新是相同的,因为: 

相关链接

 深度学习随笔——优化算法( SGD、BGD、MBGD、Momentum、NAG、Adagrad、RMSProp、AdaDelta、Adam、NAdam)icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/588536166

pytorch骚操作之梯度累加,变相增大batch size_如何把梯度叠加后取平均-CSDN博客文章浏览阅读5.2k次,点赞12次,收藏12次。梯度累加其实是为了变相扩大batch_size,用来解决显存受限问题。有牛x的显卡就不用考虑这骚操作。_如何把梯度叠加后取平均https://blog.csdn.net/weixin_43646592/article/details/121626155 

完结撒花

        又水一篇!

  • 28
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值