说来惭愧,一直在用的两个经典的优化器,几行代码就完成了参数更新,但是却一直没有深入的了解其中的原理。

improt torch
...
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
...
optimizer.zero_grad()
...
optimizer.step()

首先贴一下pytorch的官方文档

torch.optim — PyTorch 1.8.0 documentation

不同的优化器都采用相同的参数更新步骤,即

1.计算损失函数对于当前参数的梯度: 

2.根据历史梯度计算一阶和二阶动量

3.根据当前时刻的梯度,一阶和二阶动量,学习率计算当前时刻的下降梯度:

4.根据当前时刻的下降梯度更新参数:

其中:  为待优化参数,  为损失函数,  为学习率。

那么我们如何计算一阶和二阶动量呢?

SGD

对于最经典的SGD算法,  ,  。也就是没有用到动量的概念,朴实无华。

对于带动量的SGD,,  。也就是一阶动量不仅要考虑当前时刻的梯度,还考虑到了上一时刻的动量。就像是一辆车,上一时刻在全速向前,这一时刻要刹车,但是不可能立刻停下来。

Adam

Adam算法引入了二阶动量的概念,二阶动量是什么呢,是历史动量的平方和,可以理解为这个参数他更新的频率大小,二阶动量大就说明这个参数经常更新,我们就希望这个经常更新的参数可以慢一点更新,很少更新的参数每次更新的步子就大一点,但是如果选取历史动量的平方和,随着时间的累计这个值会特别大,导致下降梯度近似于0,无法继续训练,于是我们定义如下,在加上之前SGD的一阶动量,就构成了Adam算法的核心。

参考资料:

一个框架看懂优化算法之异同 SGD/AdaGrad/Adam - 知乎 (zhihu.com)

从动量和矩的角度探讨优化理论的内涵(以动量法、AdaGrad和Adam举例) - 知乎 (zhihu.com)

优化算法SGD与Adam相关推荐

  1. 深度学习中常用的优化算法(SGD, Nesterov,Adagrad,RMSProp,Adam)总结

    深度学习中常用的优化算法(SGD, Nesterov,Adagrad,RMSProp,Adam)总结 1. 引言 在深度学习中我们定义了损失函数以后,会采取各种各样的方法来降低损失函数的数值,从而使模 ...

  2. 从动力学角度看优化算法SGD:一些小启示

    作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 在本文中,我们来关心优化算法 SGD(stochastic gradient descent,随机 ...

  3. 优化算法SGD/ASGD/AdaGrad/Adadelta/RMSprop/Adam/Adamax/SparseAdam/L-BFGS/Rprop

    机器学习界有一群炼丹师,他们每天的日常是: 拿来药材(数据),架起八卦炉(模型),点着六味真火(优化算法),就摇着蒲扇等着丹药出炉了. 不过,当过厨子的都知道,同样的食材,同样的菜谱,但火候不一样了, ...

  4. 深度学习优化算法实现(Momentum, Adam)

    目录 Momentum 初始化 更新参数 Adam 初始化 更新参数 除了常见的梯度下降法外,还有几种比较通用的优化算法:表现都优于梯度下降法.本文只记录完成吴恩达深度学习作业时遇到的Momentum ...

  5. 优化算法optimization:Adam

    Adam算法 提出动机 Adam算法在RMSProp算法基础上对小批量随机梯度也做了指数加权移动平均. 算法 给定超参数0≤β1<10 \le \beta_1 < 10≤β1​<1( ...

  6. 优化算法选择:SGD、SGDM、NAG、Adam、AdaGrad、RMSProp、Nadam

    目录 优化算法通用框架 SGD 系列:固定学习率的优化算法 SGD SGD (with Momentum) = SGD-M SGD(with Nesterov Acceleration)= NAG 自 ...

  7. Dropout、梯度消失/爆炸、Adam优化算法,神经网络优化算法看这一篇就够了

    作者 | mantch 来源 | 知乎 1. 训练误差和泛化误差 对于机器学习模型在训练数据集和测试数据集上的表现.如果你改变过实验中的模型结构或者超参数,你也许发现了:当模型在训练数据集上更准确时, ...

  8. 深度学习最常用的学习算法:Adam优化算法

    上海站 | 高性能计算之GPU CUDA培训 4月13-15日 三天密集式学习  快速带你晋级 阅读全文 > 正文共6267个字,30张图,预计阅读时间16分钟. 听说你了解深度学习最常用的学习 ...

  9. 【转】听说你了解深度学习最常用的学习算法:Adam优化算法?

    深度学习常常需要大量的时间和机算资源进行训练,这也是困扰深度学习算法开发的重大原因.虽然我们可以采用分布式并行训练加速模型的学习,但所需的计算资源并没有丝毫减少.而唯有需要资源更少.令模型收敛更快的最 ...

最新文章

  1. 在研究的道路上到底还能走多远
  2. python工作台_FreeCAD二次开发-创建Python工作台,添加菜单栏和工具条,FreeCAD命令
  3. WTL 学习博文地址
  4. 【XXE】XXE漏洞攻击与防御
  5. 【推荐】.NET批量上传控件——HtmlInputFiles
  6. ubuntu使用笔记
  7. Kaggle入门——使用scikit-learn解决DigitRecognition问题
  8. 开放源代码不得不知的一些事情
  9. 计算机串口是232吗,RS232串口简介
  10. 【多元统计分析】10.多元线性回归
  11. mysql 添加一列_如何使用mysql在建好的表中添加一列
  12. ltib常用命令详解
  13. 淘宝Push智能文案生成
  14. 视频号怎么运营?视频号怎么赚钱?零基础玩视频号?创作运营变现,你要的干货都在这了!
  15. 8个可以免费下载3D模型的网站,快收藏起来吧~
  16. 星座查询演示示例代码
  17. linux系统周几的格式是,linux cal命令显示日历信息周几天数差
  18. 台式计算机idc数据排名,2019年电脑销量排行_IDC:2019年中国PC市场预测销量持续走低...
  19. 数组、特殊矩阵、稀疏矩阵、广义表
  20. 一文看懂VPS、原生IP、住宅IP有什么不同

热门文章

  1. 可以升级鸿蒙的荣耀手机,荣耀手机也能升级鸿蒙OS?
  2. POJ 1634 Bridging signals
  3. Puzzle Game HihoCoder - 1634
  4. 【delphi】delphi出现‘尚未调用CoInitialize’异常
  5. EOS中多数据源配置使用示例
  6. Hexo博客yilia主题添加Gitment评论系统
  7. 个人网站一步一步搭建——(6)留言板页面前端
  8. nodeJs对DICOM医学影像文件解析并保存为图片
  9. mysql用函数调用存储过程_mysql 函数 调用 存储过程
  10. 生产力 生产关系 生产工具_10个生产力工具,可让您轻松完成更多工作