通俗理解深度学习梯度累加(Gradient Accumulation)的原理
首先你得明白什么是梯度,可以看我之前写的一篇博客 :
微分与梯度的概念理解
本质上,梯度是一种方向导数,是一个矢量,因此这里的梯度累加并不是简单的相加,而是类似于初高中物理学的力的合成,梯度作为一种方向导数(矢量)的其累加的效果就是将各个小的梯度合成为一个指向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)的原理相关推荐
- 梯度累加(Gradient Accumulation)
受显存限制,运行一些预训练的large模型时,batch-size往往设置的比较小1-4,否则就会'CUDA out of memory',但一般batch-size越大(一定范围内)模型收敛越稳定效 ...
- ICLR 2020 Spotlight!从梯度信噪比来理解深度学习泛化性能 | AI TIME PhD
AI TIME欢迎每一位AI爱好者的加入! 深度学习在诸多应用领域取得了巨大的成功,但是其背后的基础理论确相对有些滞后.与传统浅层学习模型不同,深度学习所得到的深度神经网络(DNNs)层次更为复杂,然 ...
- 从Image Caption Generation理解深度学习
作者:李理 from: http://geek.csdn.net/news/detail/97193 Part I 从Image Caption Generation理解深度学习(1) 0. 前面的话 ...
- 0基础怎样理解深度学习的工作原理?做个票价预测工具就懂了
原作:Radu Raice 安妮 编译自 Medium 量子位 出品 | 公众号 QbitAI 这篇文章颇!具!人!气! 软件工程专业的学生Radu Raice近日发表了文章<Want to k ...
- 由线性回归来理解深度学习的理论基础
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 这会是一篇比较长的文章,本来应该是分几次来po,但考虑到这个话题的 ...
- 干货合集 | 带你深入浅出理解深度学习(附资源打包下载)
作者:Shashank Gupta 翻译:倪骁然 校对:卢苗苗 本文约2300字,建议阅读10分钟. 本文提供资源帮助你在放置一个conv2d层或者在Theano里调用T.grad的时候,了解到在代码 ...
- 线性Frequency Principle动力学:定量理解深度学习的一种有效模型
关于作者:本文的作者是来自上海交通大学致远学院 08 级理科班的四位研究人员.本文由许志钦执笔,张耀宇修改,罗涛和马征审阅校正.这个小组的研究兴趣主要是深度学习理论. 深度学习的广泛成功吸引了大量的科 ...
- 一份帮助你更好地理解深度学习的资源清单
摘要: 深度学习朝着可解释的方向发展,理解背后的基本原理显得更加重要.本文是一份帮助读者更好地理解深度学习基本过程的清单,便于初学者和部分起步者针对性地补充自己的知识体系. 人工智能和深度学习太火了, ...
- 收藏 | 一文带你深入理解深度学习最新进展
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 本文整合自机器之心.网络资源 AI博士笔记系列推荐 周志华<机 ...
最新文章
- visualstudio发布网站到服务器,发布到网站 - Visual Studio (Windows) | Microsoft Docs
- 009_TreeSet对实现了Comparable接口的对象排序
- 自由自在进口食品最具发展潜力的黄金产业
- Consul etcd ZooKeeper euerka 对比
- saltstack mysql模块_SaltStack工具中MySQL的模块返回值问题解决
- Python第三方包-你了解numpy吗(numpy进阶)
- pjtool用到的数据库----oracle范畴
- 远古VOD存在严重注入漏洞!!
- javascript 调用C++函数
- DTW算法(语音识别)
- 运行maven项目抛出java.lang.OutOfMemeoyError异常
- Discuz! X3.0/X3.1/X3.2通用 Apache伪静态规则
- 14款微信小游戏源码下载
- 超级简单的自动刷新_输入名字,自动生成情侣头像~
- Mysql官方接口中文解释
- android手机空间占用,安卓手机清理数据八种方法教程,解决占用手机空间的烦恼!...
- 微信公众平台-小程序开发工具源码
- python集合和列表、安从小到大的顺序组合成一个字典_第3章 Python容器:列表、元组、字典与集合...
- 淘宝聚划算怎么玩?其实也就是这些营销手段及功能
- win10如何打开计算机窗口,Win10如何打开运行窗口_Win10打开运行窗口快捷键-192路由网...