一、概念

Pytorch中优化器的目的:将损失函数计算出的差值Loss减小。
优化过程:优化器计算网络参数的梯度,然后使用一定的算法策略来对参数进行计算,用新的参数来重新进行训练,最终降低Loss。
其中官网提供了13种优化算法,其中主要的有5种:SGD(stochastic gradient descent 随机梯度下降),Adagrad(自适应梯度算法),Adam(Adaptive Moment Estimation 自适应矩估计),RMSprop(Root Mean Square Prop 均方根),LBFGS(Limited-memory Broyden–Fletcher–Goldfarb–Shanno 有限内存中进行BFGS算法),其他均为改进算法,比如Adadelta是Adagrad的改进算法。
其中还有很多算法细节可能后续会慢慢补充。

二、介绍和示例

2.1 SGD算法

SGD算法可实现随机梯度下降(可选动量)。
torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)
params:可迭代参数以优化或定义参数组。
lr:初始学习率,可随着训练过程不断调整学习率。
momentum:动量,通常设置为0.9,0.8。momentum又称为动量梯度下降。
dampening:动量阻尼,默认为0。
weight_decay:权值衰减系数,即L2正则化。
nesterov:启用牛顿动量。Nesterov是Momentum的变种,就是梯度的计算方法有所不同,先用当前的速度v更新一遍权重θ,然后用更新参数p计算梯度g。
动量法:

nesterov:

learning_rate = 1e-2
optim = torch.optim.SGD(wzh.parameters(), lr=learning_rate, momentum=0.9, weight_decay=1e-2)# 优化器调优
optim.zero_grad()
loss.backward()
optim.step()

2.2、Adagrad

Adagrad算法可以自适应的给所有的参数分配学习率,学习率的大小与梯度的大小成反比。
torch.optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0, initial_accumulator_value=0, eps=1e-10)
lr_decay:学习率衰减因子,默认为0。
eps :将其添加到分母以提高数值稳定性,默认值为1e-10,其主要的作用是避免分母为0.

optim1 = torch.optim.Adagrad(wzh.parameters(), lr=learning_rate, lr_decay=0, weight_decay=0.01,initial_accumulator_value=0, eps=1e-10)

2.3 RMSprop

RMSprop算法是Adagrad的改进形式,特点是使用指数衰减滑动平均来更新梯度平方,以避免Adagrad累计梯度平方导致学习率过小的缺点。
torch.optim.RMSprop(params, lr=0.01, alpha=0.99, eps=1e-08, weight_decay=0, momentum=0, centered=False)
alpha:平滑常数,默认为0.99。
centered:如果为真,计算中心 RMSProp,梯度通过其方差的估计进行归一化。

由官网给出的公式可以看出,用α的值来更新梯度平方。

optim2 = torch.optim.RMSprop(wzh.parameters(), lr=learning_rate, alpha=0.99, eps=1e-8, weight_decay=0.01,momentum=0, centered=False)

2.4 Adam

Adam算法结合了RMSProp和Momentum的算法思路,由公式可以看出,分别用m和v两个动量来对梯度进行计算,可以说是目前应用相当广泛的优化器算法。
betas:用于计算梯度及其平方的运行平均值的系数,默认值为(0.9, 0.999)。
amsgrad:是否使用论文 On the Convergence of Adam and Beyond 中该算法的 AMSGrad 变体,默认值为false。

optim3 = torch.optim.Adam(wzh.parameters(), lr=learning_rate, betas=(0.9, 0.999), eps=1e-8, weight_decay=0.01,amsgrad=False)

2.5 LBFGS

LBFGS是BFGS四位大佬一起开发的一个算法,可以有效节省系统内存,缩小BFGS算法迭代产生的n维D矩阵,只保留部分步数。
pytorch中也可以使用改算法,但需要注意:
1:此优化器不支持每个参数选项和参数组(只能有一个)。
2:现在所有参数都必须在一个设备上。
3:这是一个非常占用内存的优化器(它需要额外的 param_bytes * (history_size + 1) 字节)。 如果它不适合内存尝试减少历史记录大小,或使用不同的算法。
torch.optim.LBFGS(params, lr=1, max_iter=20, max_eval=None, tolerance_grad=1e-07, tolerance_change=1e-09, history_size=100, line_search_fn=None)
max_iter:每个优化步骤的最大迭代次数,默认值20。
max_eval:每个优化步骤的最大函数评估次数,默认值max_iter * 1.25.
tolerance_grad:一阶最优性的终止容限,默认值1e-5。
tolerance_change:函数值/参数更改的终止容差,默认值1e-9。
history_size:更新历史大小 。
line_search_fn:“strong_wolfe”或“None” 。
详细原理部分可见:
一文读懂L-BFGS算法

optim3 = torch.optim.LBFGS(wzh.parameters(), lr=1, max_iter=20, max_eval=None, tolerance_grad=1e-07, tolerance_change=1e-09, history_size=100, line_search_fn=None)

三、参考文章

通俗易懂理解(梯度下降)优化算法:Momentum、AdaGrad、RMSProp、Adam

Pytorch基础(十)——优化器(SGD,Adagrad,RMSprop,Adam,LBFGS等)相关推荐

  1. 妈耶,讲得好详细,十分钟彻底看懂深度学习常用优化器SGD、RMSProp、Adam详解分析

    深度学习常用优化器学习总结 常用优化器 SGD RMS Prop Adam 常用优化器 SGD 基本思想:通过当前梯度和历史梯度共同调节梯度的方向和大小 我们首先根据pytorch官方文档上的这个流程 ...

  2. pytorch学习十 ---- 优化器

    1.什么是优化器? 首先我们回忆一下机器学习的五大模块:数据.模型.损失函数.优化器.迭代训练 在损失函数中我们会得到一个loss值,即真实标签与预测标签的差异值,对于loss我们通常会采用pytor ...

  3. Pytorch框架之优化器 Optimizer

    Pytorch框架之优化器 Optimizer 基本用法 优化器主要是在模型训练阶段对模型可学习参数进行更新, 常用优化器有 SGD,RMSprop,Adam等 优化器初始化时传入传入模型的可学习参数 ...

  4. 各种优化器SGD,AdaGrad,Adam,LBFGS都做了什么?

    文章目录 各种优化器SGD,AdaGrad,Adam,LBFGS都做了什么? 1. SGD: 2. SGD+Momentum: 3. NAG(Nesterov Accelerated Gradient ...

  5. 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)

    深度学习笔记(一):logistic分类  深度学习笔记(二):简单神经网络,后向传播算法及实现  深度学习笔记(三):激活函数和损失函数  深度学习笔记:优化方法总结  深度学习笔记(四):循环神经 ...

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

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

  7. pytorch adagrad_【学习笔记】Pytorch深度学习—优化器(二)

    点击文末 阅读原文,体验感更好哦! 前面学习过了Pytorch中优化器optimizer的基本属性和方法,优化器optimizer的主要功能是 "管理模型中的可学习参数,并利用参数的梯度gr ...

  8. 深度学习基础之优化器(optimizer)的介绍

    文章目录 前言 SGD(随机梯度下降法) Momentum AdaGrad RMSprop Adam MNIST手写数据集四种方法对比 总结 参考 前言 神经网络的学习的目的是找到使损失函数的值尽可能 ...

  9. pytorch 7 optimizer 优化器 加速训练

    pytorch 7 optimizer 优化器 加速训练 import torch import torch.utils.data as Data import torch.nn.functional ...

  10. 一文详解Pytorch中的优化器Optimizer

    本文将结合源码与代码示例详细解析Optimizer的五大方法. 1. 前言 优化器主要用在模型训练阶段,用于更新模型中可学习的参数.torch.optim提供了多种优化器接口,比如Adam.RAdam ...

最新文章

  1. 批处理解决“易语言难题”
  2. 1.4 Matplotlib:绘图
  3. 设计模式(面向对象)设计的七大原则
  4. 三维网格精简算法java版_ISMAR 2020 | 商汤提出手机端实时单目三维重建系统
  5. 【Microsoft Azure学习之旅】测试消息队列(Service Bus Queue)是否会丢消息
  6. 算法入门经典-第七章 例题7-2 八皇后问题
  7. oracle ogg trail 空间,查找OGG trail file中是否存在相关记录的命令
  8. 队列:先进先出的线性表,如何实现增删查?
  9. 华为BIOS系统升级
  10. from PyQt4 import QtGui,QtCore出错
  11. picpick尺子像素大小精度不够准确_谈谈“精度”与“分辨率”,很多人容易混淆的问题。...
  12. QuickFlow-如何通过QFD and ExecuteCode获取其他列表数据
  13. 闯关H5小游戏制作推荐,教你快速上手TOM闯关游戏H5
  14. 计数排序CountingSort
  15. 新的GSMA报告强调“智联万物”在全球的作用
  16. 作业Android自我介绍
  17. [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.4
  18. ImageWatch无法显示图像
  19. Y - 区域内点的个数
  20. 从源码看 Activity 生命周期(上篇)

热门文章

  1. 并行编程2——多核体系架构
  2. Win10还原被Windows Defender隔离的文件
  3. 大数据项目中的QA需要迎接新的挑战
  4. MySQL触发器(转载)
  5. Angular 路由守卫
  6. 调用异步服务时的超时处理
  7. quick cocos2d-x 精灵大小(宽高)获取
  8. JavaScript URL参数读取
  9. 八、开发者工具和指南(四) Orchard dependencies and libraries
  10. UNION ALL returning wrong results?