PyTorch 学习笔记(七):PyTorch的十个优化器

栏目: Python · 发布时间: 5年前

内容简介:同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流作者 | 余霆嵩

加入极市 专业CV交流群,与 6000+来自腾讯,华为,百度,北大,清华,中科院 等名企名校视觉开发者互动交流!更有机会与 李开复老师 等大牛群内互动!

同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流 点击文末“ 阅读原文 ”立刻申请入群~

作者 | 余霆嵩

来源专栏 | PyTorch学习笔记

https://blog.csdn.net/u011995719/article/details/88988420

本文截取自一个github上千星的火爆教程—— 《PyTorch 模型训练实用教程》 教程内容主要为在 PyTorch 中训练一个模型所可能涉及到的方法及函数的详解等,本文为作者整理的学习笔记(六), 后续会继续更新这个系列,欢迎关注。

项目代码:https://github.com/tensor-yu/PyTorch_Tutorial

系列回顾:

PyTorch 学习笔记(七):PyTorch的十个优化器

PyTorch提供了十种优化器,在这里就看看都有哪些优化器。

1 torch.optim.SGD

class torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)

功能:

可实现SGD优化算法,带动量SGD优化算法,带NAG(Nesterov accelerated gradient)动量SGD优化算法,并且均可拥有weight_decay项。

参数:

params(iterable)- 参数组(参数组的概念请查看 3.2 优化器基类:Optimizer),优化器要管理的那部分参数。

lr(float)- 初始学习率,可按需随着训练过程不断调整学习率。

momentum(float)- 动量,通常设置为0.9,0.8

dampening(float)- dampening for momentum ,暂时不了其功能,在源码中是这样用的:buf.mul_(momentum).add_(1 - dampening, d_p),值得注意的是,若采用nesterov,dampening必须为 0.

weight_decay(float)- 权值衰减系数,也就是L2正则项的系数

nesterov(bool)- bool选项,是否使用NAG(Nesterov accelerated gradient)

注意事项:

pytroch中使用SGD十分需要注意的是,更新公式与其他框架略有不同!

pytorch中是这样的:

v=ρ∗v+g

p=p−lr∗v = p - lr∗ρ∗v - lr∗g

其他框架:

v=ρ∗v+lr∗g

p=p−v = p - ρ∗v - lr∗g

ρ是动量,v是速率,g是梯度,p是参数,其实差别就是在ρ∗v这一项,pytorch中将此项也乘了一个学习率。

2 torch.optim.ASGD

class torch.optim.ASGD(params, lr=0.01, lambd=0.0001, alpha=0.75, t0=1000000.0, weight_decay=0)

功能:

ASGD也成为SAG,均表示随机平均梯度下降(Averaged Stochastic Gradient Descent),简单地说ASGD就是用空间换时间的一种SGD,详细可参看论文: riejohnson.com/rie/stog

参数:

params(iterable)- 参数组(参数组的概念请查看 3.1 优化器基类:Optimizer),优化器要优化的那些参数。

lr(float)- 初始学习率,可按需随着训练过程不断调整学习率。

lambd(float)- 衰减项,默认值1e-4。

alpha(float)- power for eta update ,默认值0.75。

t0(float)- point at which to start averaging,默认值1e6。

weight_decay(float)- 权值衰减系数,也就是L2正则项的系数。

3 torch.optim.Rprop

class torch.optim.Rprop(params, lr=0.01, etas=(0.5, 1.2), step_sizes=(1e-06, 50))

功能:

实现Rprop优化方法(弹性反向传播),优化方法原文《Martin Riedmiller und Heinrich Braun: Rprop - A Fast Adaptive Learning Algorithm. Proceedings of the International Symposium on Computer and Information Science VII, 1992》

该优化方法适用于full-batch,不适用于mini-batch,因而在min-batch大行其道的时代里,很少见到。

4 torch.optim.Adagrad

class torch.optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0, initial_accumulator_value=0)

功能:

实现Adagrad优化方法(Adaptive Gradient),Adagrad是一种自适应优化方法,是自适应的为各个参数分配不同的学习率。这个学习率的变化,会受到梯度的大小和迭代次数的影响。梯度越大,学习率越小;梯度越小,学习率越大。缺点是训练后期,学习率过小,因为Adagrad累加之前所有的梯度平方作为分母。

详细公式请阅读:Adaptive Subgradient Methods for Online Learning and Stochastic Optimization

John Duchi, Elad Hazan, Yoram Singer; 12(Jul):2121−2159, 2011.

( http://www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf )

5 torch.optim.Adadelta

class torch.optim.Adadelta(params, lr=1.0, rho=0.9, eps=1e-06, weight_decay=0)

功能:

实现Adadelta优化方法。Adadelta是Adagrad的改进。Adadelta分母中采用距离当前时间点比较近的累计项,这可以避免在训练后期,学习率过小。

详细公式请阅读: arxiv.org/pdf/1212.5701

6 torch.optim.RMSprop

class torch.optim.RMSprop(params, lr=0.01, alpha=0.99, eps=1e-08, weight_decay=0, momentum=0, centered=False)

功能:

实现RMSprop优化方法(Hinton提出),RMS是均方根(root meam square)的意思。RMSprop和Adadelta一样,也是对Adagrad的一种改进。RMSprop采用均方根作为分母,可缓解Adagrad学习率下降较快的问题。并且引入均方根,可以减少摆动,详细了解可读: cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf

7 torch.optim.Adam(AMSGrad)

class torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, amsgrad=False)

功能:

实现Adam(Adaptive Moment Estimation))优化方法。Adam是一种自适应学习率的优化方法,Adam利用梯度的一阶矩估计和二阶矩估计动态的调整学习率。吴老师课上说过,Adam是结合了Momentum和RMSprop,并进行了偏差修正。

功能:

amsgrad- 是否采用AMSGrad优化方法,asmgrad优化方法是针对Adam的改进,通过添加额外的约束,使学习率始终为正值。(AMSGrad,ICLR-2018 Best-Pper之一,《On the convergence of Adam and Beyond》)。

详细了解Adam可阅读,Adam: A Method for Stochastic Optimization( Adam: A Method for Stochastic Optimization )。

8 torch.optim.Adamax

class torch.optim.Adamax(params, lr=0.002, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)

功能:

实现Adamax优化方法。Adamax是对Adam增加了一个学习率上限的概念,所以也称之为Adamax。

详细了解可阅读,Adam: A Method for Stochastic Optimization( arxiv.org/abs/1412.6980 )(没错,就是Adam论文中提出了Adamax)。

9 torch.optim.SparseAdam

--

class torch.optim.SparseAdam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08)

功能:

针对稀疏张量的一种“阉割版”Adam优化方法。

only moments that show up in the gradient get updated, and only those portions of the gradient get applied to the parameters

10 torch.optim.LBFGS

class torch.optim.LBFGS(params, lr=1, max_iter=20, max_eval=None, tolerance_grad=1e-05, tolerance_change=1e-09, history_size=100, line_search_fn=None)

**功能:**

实现L-BFGS(Limited-memory Broyden–Fletcher–Goldfarb–Shanno)优化方法。L-BFGS属于拟牛顿算法。L-BFGS是对BFGS的改进,特点就是节省内存。

使用注意事项:

1.This optimizer doesn’t support per-parameter options and parameter groups (there can be only one).

Right now all parameters have to be on a single device. This will be improved in the future.(2018-10-07)

*延伸阅读

点击左下角 阅读原文 ”, 即可申请加入极市 目标跟踪、目标检测、工业检测、人脸方向、视觉竞赛等技术交流群, 更有每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流, 一起来让思想之光照的更远吧~

PyTorch 学习笔记(七):PyTorch的十个优化器

觉得有用麻烦给个在看啦~    PyTorch 学习笔记(七):PyTorch的十个优化器


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Essential PHP Security

Essential PHP Security

Chris Shiflett / O'Reilly Media / 2005-10-13 / USD 29.95

Being highly flexible in building dynamic, database-driven web applications makes the PHP programming language one of the most popular web development tools in use today. It also works beautifully wit......一起来看看 《Essential PHP Security》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换