目录

说明

SGD参数

params

lr

momentum

dampening

weight_decay

nesterov

举例(nesterov为False)

第1轮迭代

第2轮迭代


说明

模型每次反向传导都会给各个可学习参数p计算出一个偏导数,用于更新对应的参数p。通常偏导数不会直接作用到对应的可学习参数p上,而是通过优化器做一下处理,得到一个新的,处理过程用函数F表示(不同的优化器对应的F的内容不同),即,然后和学习率lr一起用于更新可学习参数p,即

SGD参数

SGD是随机梯度下降(stochastic gradient descent)的首字母。

torch.optim.SGD(params,lr=<required parameter>,momentum=0,dampening=0,weight_decay=0,nesterov=False)

params

模型里需要被更新的可学习参数。

lr

学习率。

momentum

动量值,通过上一次的v和当前的偏导数g,得到本次的v,即,这个就是上述的函数F。

动量是物理中的概念,它使v具有惯性,这样可以缓和v的抖动,有时候还可以帮助跳出局部盆地。比如上一次计算得到的v是10,参数更新后,本次的偏导数g是0,那么使用momentum=0.9后,最终用于更新可学习参数的v是10*0.9+0=9,而不是0,这样参数仍会得到较大的更新,就会增大离开当前局部盆地的可能性。

dampening

dampening是乘到偏导数g上的一个数,即:。注意:dampening在优化器第一次更新时,不起作用。

weight_decay

weight_decay的作用是用当前可学习参数p的值修改偏导数,即:,这里待更新的可学习参数p的偏导数就是。然后再使用上述公式,计算得到

nesterov

对应的文献还没看,从pytorch源码来看,当nesterov为False时,使用上述公式计算得到

当nesterov为True时,在上述得到的的基础上,最终的,即又使用了一次momentum和

举例(nesterov为False

def test_sgd():#定义一个可学习参数w,初值是100w = torch.tensor(data=[100], dtype=torch.float32, requires_grad=True)#定义SGD优化器,nesterov=False,其余参数都有效optimizer = torch.optim.SGD(params=[w], lr=0.1, momentum=0.9, dampening=0.5, weight_decay=0.01, nesterov=False)#进行5次优化for i in range(5):y = w ** 2 #优化的目标是让w的平方,即y尽可能小optimizer.zero_grad() #让w的偏导数置零y.backward() #反向传播,计算w的偏导数optimizer.step() #根据上述两个公式,计算一个v,然后作用到wprint('grad=%.2f, w=%.2f' % (w.grad, w.data)) #查看w的梯度和更新后的值'''
输入日志如下:
grad=201.00000, w=79.90000
grad=160.59900, w=53.78005
grad=108.09791, w=24.86720
grad=49.98307, w=-3.65352
grad=-7.34357, w=-28.95499
'''

第1轮更新

的导数是,此时,因此。这里w就是可学习参数p

首先使用weight_decay:

然后使用momentum(第一次更新不使用dampening):。这里

最后更新w:

第2轮更新

的导数是,此时,因此。这里w就是可学习参数p

首先使用weight_decay:

然后使用momentum和dampening:,即:,这里用到的是在SGD类中缓存的。

最后更新w:

pytorch优化器详解:SGD相关推荐

  1. pytorch优化器详解:RMSProp

    说明 模型每次反向传导都会给各个可学习参数p计算出一个偏导数,用于更新对应的参数p.通常偏导数不会直接作用到对应的可学习参数p上,而是通过优化器做一下处理,得到一个新的值,处理过程用函数F表示(不同的 ...

  2. pytorch优化器详解:Adam

    目录 说明 Adam原理 梯度滑动平均 偏差纠正 Adam计算过程 pytorch Adam参数 params lr betas eps weight_decay amsgrad 说明 模型每次反向传 ...

  3. 深度学习各类优化器详解(动量、NAG、adam、Adagrad、adadelta、RMSprop、adaMax、Nadam、AMSGrad)

    深度学习梯度更新各类优化器详细介绍 文章目录 <center>深度学习梯度更新各类优化器详细介绍 一.前言: 二.梯度下降变形形式 1.批量归一化(BGD) 2.随机梯度下降(SGD) 3 ...

  4. 【深度学习】优化器详解

    优化器 深度学习模型通过引入损失函数,用来计算目标预测的错误程度.根据损失函数计算得到的误差结果,需要对模型参数(即权重和偏差)进行很小的更改,以期减少预测错误.但问题是如何知道何时应更改参数,如果要 ...

  5. Pytorch优化器全总结(一)SGD、ASGD、Rprop、Adagrad

    目录 写在前面 一. torch.optim.SGD 随机梯度下降 SGD代码 SGD算法解析 1.MBGD(Mini-batch Gradient Descent)小批量梯度下降法 2.Moment ...

  6. Keras深度学习实战(3)——神经网络性能优化技术详解

    Keras深度学习实战(3)--神经网络性能优化技术详解 0. 前言 1. 缩放输入数据集 1.1 数据集缩放的合理性解释 1.2 使用缩放后的数据集训练模型 2. 输入值分布对模型性能的影响 3. ...

  7. Pytorch优化器全总结(三)牛顿法、BFGS、L-BFGS 含代码

    目录 写在前面 一.牛顿法 1.看图理解牛顿法 2.公式推导-三角函数 3.公式推导-二阶泰勒展开 二.BFGS公式推导 三.L-BFGS 四.算法迭代过程 五.代码实现 1.torch.optim. ...

  8. 【GAN优化】详解GAN中的一致优化问题

    GAN的训练是一个很难解决的问题,上期其实只介绍了一些基本的动力学概念以及与GAN的结合,并没有进行过多的深入.动力学是一门比较成熟的学科,有很多非常有用的结论,我们将尝试将其用在GAN上,来得到一些 ...

  9. 【GAN优化】详解SNGAN(频谱归一化GAN)

    今天将和大家一起学习具有很高知名度的SNGAN.之前提出的WGAN虽然性能优越,但是留下一个难以解决的1-Lipschitz问题,SNGAN便是解决该问题的一个优秀方案.我们将先花大量精力介绍矩阵的最 ...

最新文章

  1. 如何上传webshell后改回原来的webshell的格式
  2. html游戏禁止微信浏览器下拉,如何用电脑模拟微信浏览器浏览禁止PC打开的微网站...
  3. 轻量在线人工客服系统 支持多商家+自动适配移动端
  4. java开发工程师简历项目经验怎么写?应该注意哪些事项?
  5. 我的世界 java错误_我的世界error错误信息 应用程序错误解决方法
  6. 锐浪报表,用脚本处理字段
  7. 服务器的部署与Web项目的发布
  8. 非淡泊无以明志,非宁静无以致远。
  9. 人生百味-10:顺势而为(外圆)与自我坚持(内方)
  10. 多屏互动技术研究(三)之Airplay研究
  11. 【BIB文献管理】LATEX使用bib
  12. 音乐学院计算机考试内容,全国艺术院校(音乐类)专业设置及考试内容(8)
  13. gprMax中任意不规则形状建模与模拟
  14. word里公式后面标号怎么对齐_如何使Word中公式与文字对齐
  15. 抖音上二次元虚拟主播直播方案
  16. 介绍一点怎么样在网页建设中用到的非常实用方法
  17. 分数化成有限小数的方法_判断分数能否化成有限小数的方法.ppt
  18. 3d武侠端游二次开发
  19. 人工智能真正的意义是什么?
  20. 怎么用php编写论坛,php编写简单论坛总结

热门文章

  1. 微信小程序访问后端服务器
  2. java 集合封装树形结构
  3. 计算机网络(一)——网络编程
  4. 【数据结构与算法】冒泡排序算法(BubbleSort)
  5. 后渗透篇:COM劫持及加载技术
  6. html自适应导航栏怎么写,网站简单兼容简洁的自适应导航栏代码
  7. 使用tarjan算法和fleury算法求解中国邮递员问题
  8. 二, 大数据基础架构Hadoop-HDFS入门和基本操作(基本组成, Shell操作, API操作, 读写流程) hf
  9. STM32 外部中断详解(原理+配置代码)
  10. STM32外部中断的关闭和打开