pytorch学习笔记(六)

296 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情

上一篇博客中提到了优化器的选择和使用,本博客主要介绍目前pytorch中集成的几种优化器。先从使用最多的几个开始说起。

1.SGD,随机梯度下降

SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)

2.ASGD,平均随机梯度下降

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

3.AccSGD,加速随机梯度下降

AccSGD(params, lr=0.001, kappa=1000.0, xi=10.0, small_const=0.7, weight_decay=0)

4.Adam,自适应矩估计

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

5.RAdam,引入一个术语来修正自适应学习率的方差。

RAdam(params, lr=0.001, betas=0.9, 0.999, eps=1e-08, weight_decay=0)

6.AdamW,作为Adam的进阶版,目前仅适用于fastai,收敛速度非常快。

AdamW(params,lr=0.001,betas=(0.9,0.999),eps=1e-08,weight_decay=0.01,amsgrad=False)

7.Adamax, 在Adam的基础上给学习率设定了限制值。

Adamax(params, lr=0.002, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)
  1. SparseAdam,对Adam的优化方法,针对稀疏张量的一种“阉割版”Adam优化方法
SparseAdam(params,lr=0.001,betas=(0.9,0.999),eps=1e-08)

9.Adagrad,可以为不同的变量提供不同的学习率。

Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0, initial_accumulator_value=0, eps=1e-10)

10.Adadelta,作为Adagrad的进阶版,可有对学习率进行自适应约束。

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

11.NAdam,Adam将RMSprop和动量结合起来。

NAdam(params, lr=0.002, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, momentum_decay=0.004)

12.LBFGS,经典的优化问题中迭代法的一阶法(梯度下降法),前面SGD、Adam等都是在一阶法的基础上进行改进,加快收敛速率。针对二阶法的这个问题,提出了BFGS算法,再是低存储的L-BFGS算法。

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)

13.RAdam,利用动态整流器根据方差调整 Adam 的自适应动量,并有效提供能够根据当前数据集定制的自动预热机制

RAdam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)

14.Rprop,在 full-batch optimization 中, 一些梯度可能很小, 而另一些梯度可能很大, 故难以寻找一个 global 学习率,可以使用梯度的sign解决这个问题, 保证所有权重更新相同的大小. Rprop 在此基础上又考虑为每个权重单独调整步长, 且这些步长随时间变化而调整。

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

15.RMSprop,RMSprop 中的 RMS 表示的是均方根 (root mean square). Rprop 的主要思想是使用梯度, 同时除以梯度的大小 (sign), RMSprop 的主要思想是将梯度除以均方根的平方, 并且还考虑相邻的mini-batch,主要解决数据集规模很大的情况。

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

16.SWA,随机权重平均

SWA(optimizer,swa_start=None, swa_freq=None, swa_lr=None)

17.Adafactor,基于参数本身规模的参数更新方法

Adafactor(params, lr=None, eps2=1e-30, 0.001, clip_threshold=1.0, decay_rate=- 0.8, beta1=None, weight_decay=0.0, scale_parameter=True, relative_step=True, warmup_init=False)

18.AdamP,在优化器的每个步骤中,去掉径向分量,或标准递增方向。 由于尺度不变性,该方法只改变了有效步长,而不改变有效更新方向,从而保持了GD优化器原有的收敛特性。

AdamP(params, lr=0.001, betas=0.9, 0.999, eps=1e-08, weight_decay=0, delta=0.1, wd_ratio=0.1, nesterov=False)

19.AggMo,结合了多个速度矢量和不同β参数的动量变体,可以有效的抑制震荡。

AggMo(params, lr=0.001, betas=0.0, 0.9, 0.99, weight_decay=0)

20.DiffGrad,基于现在和直接过去梯度之间的差异,对每个参数的步长进行调整,使梯度变化快的参数步长更大,梯度变化小的参数步长更小。

DiffGrad(params, lr=0.001, betas=0.9, 0.999, eps=1e-08, weight_decay=0.0)

21.Lamb,只需很少的超参数调优,性能较好。

Lamb(params, lr=0.001, betas=0.9, 0.999, eps=1e-06, weight_decay=0, clamp_value=10, adam=False, debias=False)

22.NovoGrad,自适应随机梯度下降方法,该方法具有逐层梯度归一化和解耦权值衰减。

NovoGrad(params, lr=0.001, betas=0.95, 0, eps=1e-08, weight_decay=0, grad_averaging=False, amsgrad=False)

23.PID,受比例-积分-微分(PID)控制器在自动控制中取得的显著成功的启发,提出了一种加速深度网络优化的PID方法。

PID(params, lr=0.001, momentum=0.0, dampening=0, weight_decay=0.0, integral=5.0, derivative=10.0)

24.QHAdam,准双曲动量算法。

QHAdam(params, lr=0.001, betas=0.9, 0.999, nus=1.0, 1.0, weight_decay=0.0, decouple_weight_decay=False, eps=1e-08)

25.QHM,准双曲动量算法优化算法。

QHM(params, lr=0.001, momentum=0.0, nu=0.7, weight_decay=0.0, weight_decay_type='grad')

26.SGDP,在优化器的每个步骤中,去掉径向分量,或标准递增方向。 由于尺度不变性,该方法只改变了有效步长,而不改变有效更新方向,从而保持了GD优化器原有的收敛特性。

SGDP(params, lr=0.001, momentum=0, dampening=0, eps=1e-08, weight_decay=0, delta=0.1, wd_ratio=0.1, nesterov=False)

27.SGDW,通过将权衰减从所采取的优化步骤解耦到损失函数,以恢复权衰减正则化的原始公式。

SGDW(params, lr=0.001, momentum=0.0, dampening=0.0, weight_decay=0.0, nesterov=False)

28.Shampoo,维护一组预处理矩阵,每个矩阵在一个维度上操作,在其余维度上收缩。

Shampoo(params, lr=0.1, momentum=0.0, weight_decay=0.0, epsilon=0.0001, update_freq=1)

29.SWATS,当触发条件满足时,从Adam切换到SGD

SWATS(params, lr=0.001, betas=0.9, 0.999, eps=0.001, weight_decay=0, amsgrad=False, nesterov=False)

30.Yogi,控制了有效学习率的提高,在收敛性方面具有相似的理论保证,从而获得了更好的性能。

Yogi(params, lr=0.01, betas=0.9, 0.999, eps=0.001, initial_accumulator=1e-06, weight_decay=0)

本博客搜集了目前可以用到的30个优化器,几乎包含了各个方面,由于篇幅较长,未对每个的使用做详细的介绍,仅在代码层面列出其函数与参数,如果在选择优化器过程中需要了解更详细的特征,可以在本文中复制相关的内容进行搜索,目前这些优化器在网络中均有涉及。

以Adam为例,在进行医学图像配准时,我用了Adam优化器,在训练过程中我打印了其输出,结果如下

image.png

可以对照其函数的参数列表进行查看。每个优化器都有自己的特点,使用时需要仔细的了解其原理和作用,这样有助于帮助网络快速收敛。