深度学习常用优化器汇总整理

2021-09-12 14:59:46 浏览数 (1)

1. 背景

为机器学习项目选择好的优化器不是一项容易的任务。流行的深度学习库(如 PyTorch 或 TensorFLow)提供了多种优化器选择,它们各有优缺点。并且,选择不合适的优化器可能会对机器学习项目产生很大的负面影响。这使得选择优化器成为构建、测试和部署机器学习模型过程中的关键一环。

2. 常用优化器

文中用 w 代表参数,g 代表梯度,α为每个优化器的全局学习率,t 代表时间步(time step)。

2.1 SGD 随机梯度下降

w_{t 1}=w_t-a·g_t

在随机梯度下降算法(SGD)中,优化器基于小批量估计梯度下降最快的方向,并朝该方向迈出一步。由于步长固定,因此 SGD 可能很快停滞在平稳区(plateaus)或者局部最小值上。

2.2 带动量的SGD momentum

v_{t 1}=beta·v_t g_t
w_{t 1}=w_t-a·v_{t 1}

其中β<1。当带有动量时,SGD 会在连续下降的方向上加速(这就是该方法被称为「重球法」的原因)。这种加速有助于模型逃脱平稳区,使其不易陷入局部极小值。

2.3 AdaGrad

G_t=sum^t_{i=1}g_i·g_i^T
w_{t 1}=w_t-a·diag(G)^{frac{1}{2}}·g_t

AdaGrad 是首批成功利用自适应学习率的方法之一。AdaGrad 基于平方梯度之和的倒数的平方根来缩放每个参数的学习率。该过程将稀疏梯度方向放大,以允许在这些方向上进行较大调整。结果是在具有稀疏特征的场景中,AdaGrad 能够更快地收敛。

2.4 RMSprop

v_{t 1}=beta·v_t (1-beta)·g_t^2
w_{t 1}=w_t-frac{a}{sqrt{v_{t 1}} e} ·g_t

RMSprop其理念类似于 AdaGrad,但是梯度的重新缩放不太积极:用平方梯度的移动均值替代平方梯度的总和。RMSprop 通常与动量一起使用,可以理解为 Rprop 对小批量设置的适应。

2.5 Adam

m_{t 1}=beta_1·m_t (1-beta_1)·g_t
v_{t 1}=beta_2·v_t (1-beta_2)·g_t^2
m_{t 1}=frac{m_{t 1}}{1-beta_1^t}
w_{t 1}=w_t-(frac{a}{sqrt{v_{t 1}} e}·m_{t 1} lambda·w_t)

Adam 将 AdaGrad、RMSprop 和动量方法结合到一起。下一步的方向由梯度的移动平均值决定,步长大小由全局步长大小设置上限。此外,类似于 RMSprop,Adam 对梯度的每个维度进行重新缩放。

Adam 和 RMSprop(或 AdaGrad)之间一个主要区别是对瞬时估计 m 和 v 的零偏差进行了矫正。Adam 以少量超参数微调就能获得良好的性能著称。

2.6 AdamW

Loshchilov 和 Hutter 在自适应梯度方法中确定了 L2 正则化和权重下降的不等式,并假设这种不等式限制了 Adam 的性能。然后,他们提出将权重衰减与学习率解耦。实验结果表明 AdamW 比 Adam(利用动量缩小与 SGD 的差距)有更好的泛化性能,并且对于 AdamW 而言,最优超参数的范围更广。

2.7 LARS

LARS 是 SGD 的有动量扩展,可以适应每层的学习率。LARS 最近在研究界引起了关注。这是由于可用数据的稳定增长,机器学习的分布式训练也变得越来越流行。这使得批处理大小开始增长,但又会导致训练变得不稳定。有研究者(Yang et al)认为这些不稳定性源于某些层的梯度标准和权重标准之间的不平衡。因此他们提出了一种优化器,该优化器基于「信任」参数η<1 和该层梯度的反范数来重新调整每层的学习率。

2.8 FTRL

w_{t 1}=arg min_w left ( g_{1:t}cdot w frac{1}{2}sum_{s=1}^t sigma_s ||w-w_s||_2^2 lambda_1||w||_1 right )

主要用于CTR预测的在线训练,成千上万维度导致大量稀疏特征。一般希望模型参数更加稀疏,但是简单的L1正则无法真正做到稀疏,一些梯度截断方法(TG)的提出就是为了解决这个问题,在这其中FTRL是兼备精度和稀疏性的在线学习方法。

FTRL的基本思想是将接近于0的梯度直接置零,计算时直接跳过以减少计算量。

这里给出工程上的伪代码,里面的四个参数是可调的。

权声明:本文为CSDN博主「蕉叉熵」的原创文章,遵循CC 4.0 BY-

3. 总结

如果数据是稀疏的,就用自适用方法,即 Adagrad, Adadelta, RMSprop, Adam。

RMSprop, Adadelta, Adam 在很多情况下的效果是相似的。

Adam 就是在 RMSprop 的基础上加了 bias-correction 和 momentum,

随着梯度变的稀疏,Adam 比 RMSprop 效果会好。

整体来讲,Adam 是最好的选择

很多论文里都会用 SGD,没有 momentum 等。SGD 虽然能达到极小值,但是比其它算法用的时间长,而且可能会被困在鞍点

如果需要更快的收敛,或者是训练更深更复杂的神经网络,需要用一种自适应的算法。

Ref

https://www.cnblogs.com/guoyaohua/p/8542554.html

https://mp.weixin.qq.com/s/WjwkYzZpBGGKGfmGvwNi4Q

https://cloud.tencent.com/developer/article/1118673

https://zhuanlan.zhihu.com/p/58236906

0 人点赞