首先你得明白什么是梯度,可以看我之前写的一篇博客 :

微分与梯度的概念理解

本质上,梯度是一种方向导数,是一个矢量,因此这里的梯度累加并不是简单的相加,而是类似于初高中物理学的力的合成,梯度作为一种方向导数(矢量)的其累加的效果就是将各个小的梯度合成为一个指向Loss function 最终优化方向的梯度。

这里结合代码理解一下:

正常训练的过程

for i, (images, labels) in enumerate(train_data):# 1. forwared 前向计算outputs = model(images)loss = criterion(outputs, labels)# 2. backward 反向传播计算梯度optimizer.zero_grad()loss.backward()optimizer.step()

梯度累加的训练过程

# 梯度累加参数
accumulation_steps = 4for i, (images, labels) in enumerate(train_data):# 1. forwared 前向计算outputs = model(imgaes)loss = criterion(outputs, labels)# 2.1 loss regularization loss正则化loss += loss / accumulation_steps# 2.2 backward propagation 反向传播计算梯度loss.backward()# 3. update parameters of netif ((i+1) % accumulation)==0:# optimizer the netoptimizer.step()optimizer.zero_grad() # reset grdient

以上代码来自:

https://www.zhihu.com/question/435093513/answer/2302992975

可以看出,梯度累加的训练过程中,每次反向传播都会计算出一个梯度,但是并不会使用optimizer.step() 更新参数,直到达到设定的累计次数后,才一次性的将参数依据累积的梯度进行更新。(殊途同归,每次计算出来的梯度可以看作是一个具有微弱方向变化的矢量,不断叠加,最终合成一个具有特定方向的矢量。每次变化一点点,和将每次一点点的变化累积起来形成一个最终的变化方向,这在效果上是没有太大差异的),梯度累积可以实现和使用大的Batch Size 接近的效果,但是消耗的GPU显存却不会显著增加,这在GPU显存有限的情况下,是一种较为不错的训练方法。

通俗理解深度学习梯度累加(Gradient Accumulation)的原理相关推荐

  1. 梯度累加(Gradient Accumulation)

    受显存限制,运行一些预训练的large模型时,batch-size往往设置的比较小1-4,否则就会'CUDA out of memory',但一般batch-size越大(一定范围内)模型收敛越稳定效 ...

  2. ICLR 2020 Spotlight!从梯度信噪比来理解深度学习泛化性能 | AI TIME PhD

    AI TIME欢迎每一位AI爱好者的加入! 深度学习在诸多应用领域取得了巨大的成功,但是其背后的基础理论确相对有些滞后.与传统浅层学习模型不同,深度学习所得到的深度神经网络(DNNs)层次更为复杂,然 ...

  3. 从Image Caption Generation理解深度学习

    作者:李理 from: http://geek.csdn.net/news/detail/97193 Part I 从Image Caption Generation理解深度学习(1) 0. 前面的话 ...

  4. 0基础怎样理解深度学习的工作原理?做个票价预测工具就懂了

    原作:Radu Raice 安妮 编译自 Medium 量子位 出品 | 公众号 QbitAI 这篇文章颇!具!人!气! 软件工程专业的学生Radu Raice近日发表了文章<Want to k ...

  5. 由线性回归来理解深度学习的理论基础

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 这会是一篇比较长的文章,本来应该是分几次来po,但考虑到这个话题的 ...

  6. 干货合集 | 带你深入浅出理解深度学习(附资源打包下载)

    作者:Shashank Gupta 翻译:倪骁然 校对:卢苗苗 本文约2300字,建议阅读10分钟. 本文提供资源帮助你在放置一个conv2d层或者在Theano里调用T.grad的时候,了解到在代码 ...

  7. 线性Frequency Principle动力学:定量理解深度学习的一种有效模型

    关于作者:本文的作者是来自上海交通大学致远学院 08 级理科班的四位研究人员.本文由许志钦执笔,张耀宇修改,罗涛和马征审阅校正.这个小组的研究兴趣主要是深度学习理论. 深度学习的广泛成功吸引了大量的科 ...

  8. 一份帮助你更好地理解深度学习的资源清单

    摘要: 深度学习朝着可解释的方向发展,理解背后的基本原理显得更加重要.本文是一份帮助读者更好地理解深度学习基本过程的清单,便于初学者和部分起步者针对性地补充自己的知识体系. 人工智能和深度学习太火了, ...

  9. 收藏 | 一文带你深入理解深度学习最新进展

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 本文整合自机器之心.网络资源 AI博士笔记系列推荐 周志华<机 ...

最新文章

  1. visualstudio发布网站到服务器,发布到网站 - Visual Studio (Windows) | Microsoft Docs
  2. 009_TreeSet对实现了Comparable接口的对象排序
  3. 自由自在进口食品最具发展潜力的黄金产业
  4. Consul etcd ZooKeeper euerka 对比
  5. saltstack mysql模块_SaltStack工具中MySQL的模块返回值问题解决
  6. Python第三方包-你了解numpy吗(numpy进阶)
  7. pjtool用到的数据库----oracle范畴
  8. 远古VOD存在严重注入漏洞!!
  9. javascript 调用C++函数
  10. DTW算法(语音识别)
  11. 运行maven项目抛出java.lang.OutOfMemeoyError异常
  12. Discuz! X3.0/X3.1/X3.2通用 Apache伪静态规则
  13. 14款微信小游戏源码下载
  14. 超级简单的自动刷新_输入名字,自动生成情侣头像~
  15. Mysql官方接口中文解释
  16. android手机空间占用,安卓手机清理数据八种方法教程,解决占用手机空间的烦恼!...
  17. 微信公众平台-小程序开发工具源码
  18. python集合和列表、安从小到大的顺序组合成一个字典_第3章 Python容器:列表、元组、字典与集合...
  19. 淘宝聚划算怎么玩?其实也就是这些营销手段及功能
  20. win10如何打开计算机窗口,Win10如何打开运行窗口_Win10打开运行窗口快捷键-192路由网...

热门文章

  1. 【电影推荐】20部生存启示录—灾难大片
  2. IBM ServerGuide 8.50
  3. HTML+CSS+JS的基础知识笔记
  4. EOE上的LISTVIEW分组
  5. ubuntu16.04纯净系统配置安装集锦
  6. 读书 | 互联网思维到底是什么
  7. 字节java岗位一面(凉面)
  8. 看了下李航的《统计学习方法》
  9. tf.saved_model.save报错解决
  10. postgresql java驱动_PostgreSQL的JDBC驱动和URL