关于机器学习:SDGADAMLookAheadLion等优化器的对比介绍

29次阅读

共计 3989 个字符,预计需要花费 10 分钟才能阅读完成。

本文将介绍了最先进的深度学习优化办法,帮忙神经网络训练得更快,体现得更好。有很多个不同模式的优化器,这里咱们只找最根底、最罕用、最无效和最新的来介绍。

优化器

首先,让咱们定义优化。当咱们训练咱们的模型以使其体现更好时,首先应用损失函数,训练时损失的缩小表明咱们的模型运行良好。而优化是用来形容这种缩小损失技术的术语。

“损失函数”是什么意思?

多个变量的值被映射成一个实数,该实数直观地示意应用损失函数与事件相干的一些“老本”。

理论值与模型预测值之间的差值被加起来被称作损失,而计算这种差值的函数被称作损失函数。

Σ (y_actual — y_predicted)/n (from i=1 to n {n = Number of samples})

这是一种掂量算法对它所应用的数据建模的好坏的办法。如果你的预测不精确,你的损失函数将产生更大的值。数字越低,阐明模型越好。

理论的 Y 值由下面例子中的绿色点示意,拟合的直线由蓝色线示意(由咱们的模型预测的值)。

让咱们开始介绍优化技术来加强咱们模型并尽可能减少后面提到的损失函数

梯度降落法 Gradient Descent

术语“梯度”指的是当函数的输出产生轻微变动时,函数的输入会产生多大的变动。

应用微积分,梯度降落迭代调整参数值,以在定义初始参数值后最小化所提供的老本函数。这是依据反复直到收敛办法实现的。

1、通过计算函数的一阶导数 (y = mX + c {m = 斜率,c = 截距) 来确定函数的梯度或斜率

2、斜率将从以后地位晋升一个等于 eta(学习率)倍的量到部分最小值,这是通过与梯度方向相同的方向挪动来进行的

学习率: 梯度降落向部分最小值降落所采取的步骤的大小,较大的步长是由高学习率产生的,但也有超过最小值的危险。低学习率还表明步长较小,这升高了操作效率,但提供了更高的准确性,并且有时无奈逃出部分最小值,所以学习率是一个很重要的超参数。

随机梯度降落

通过一次加载 n 点的整个数据集来计算损失函数的导数,SGD 办法不是在每次迭代中应用整个数据集,而是通过随机抉择大量样本来计算导数,从而升高了计算强度。

SGD 的毛病是,一旦它靠近最小值,它就不会稳定下来,而是到处反弹,给咱们一个很好的模型性能值,但不是最好的值。这能够通过扭转模型参数来解决。

应用 SGD 是大型数据集的现实抉择。然而当数据集较小或中等时,最好利用 GD 来取得更优的解决方案

小批量的梯度降落

小批量梯度将大数据集划分为小批量,并别离更新每个批量,这样既解决了 GD 的计算耗费问题,也解决了 SGD 达到最小值的门路问题,这也就是咱们在训练时设置 batch size 参数的作用。

也就是说:

  • 梯度降落(GD): 在整个训练集之后,训练的参数会被批改
  • 随机梯度降落(SGD): 在每一个样本训练之后更新参数
  • 小批量的梯度降落 (Mini Batch Gradient Descent): 每批实现后,更新参数

带动量的梯度降落 Momentum Stochastic Gradient

为了平滑更新,思考到以前的梯度。它不是更新权重,而是计算前几次迭代的梯度平均值。

比传统的梯度降落办法更快。动量通过用指数加权均匀去噪梯度来解决这个噪声问题,放慢了在正确方向上的收敛,减缓了在谬误方向上的稳定。这个动量超参数用符号“γ”示意。

权重由 θ = θ−γ(t)更新,动量项通常设置为 0.9 或相似的值,所有以前的更新,计算 t 时刻的动量,给予最近的更改比旧的更新更多的权重。这导致收敛减速并更快地达到最小值。

如果你应用 pytorch,有一个 momentum 参数,就是这个了。

Adaptive Gradient Descent (AdaGrad)

AdaGrad 打消了手动调整学习率的须要,在迭代过程中一直调整学习率, 并让指标函数中的每个参数都别离领有本人的学习率。利用低学习率的参数链接到频繁产生的特色,并应用高学习率的参数链接到很少产生的特色。它适宜用于稠密数据。

每个权重以不同的速率 (η) 学习。

在每次迭代中,每个权重的不同学习率用 alpha(t)示意,η = 常数,Epsilon = 正整数(以防止除 0 误差)

Adagrad 的一个长处是不须要手动调优速率,大多数将其放弃在默认值 0.01。随着反复次数的减少,alpha(t)会变得相当大,后果 ηt’会更快地变动。因而以前的权重将简直等于新的权重,这可能导致收敛速度较慢。

Adagrad 也一些毛病,因为每一个额定的项都是正的,梯度的平方的累积和,分母中的 alpha(t)在训练过程中不断扩大,导致学习率降落,最终变得无限小,会导致梯度隐没的问题另外就是它是枯燥降落的学习速率。必须应用初始全局学习率来设置它。

AdaDelta

Adadelta 是 Adagrad 的更牢靠的加强,它依据梯度更新的挪动窗口来调整学习率,而不是通过取指数衰减平均值来累加所有先前的梯度(累积和)。在工夫步 t 影响 E[g2]t 的运行平均值的惟一因素是先前的平均值和以后梯度。

这有助于在迭代次数十分大时避免低收敛率并导致更快的收敛。即便在进行了屡次降级之后,Adadelta 仍以这种形式学习。与 Adagrad 不同,咱们不须要为 Adadelta 抉择初始学习率。

Adaptive Moment Estimation (ADAM)

Adam 的优化办法联合了偏差校对、RMSprop 和 带动量 SGD。

所以咱们没有独自介绍 RMSprop

1、RMSProp:通过应用“指数挪动平均值”来进步性能,这是平方梯度的平均值。

在 mt & vt 计算中,增加的表达式 (1-β)[∂L/∂Wt] 和 (1-β)[∂L/∂Wt]² 别离用于偏差校对,m 和 v 初始化为 0

用于 mt 和 vt 的超参数 β(别离为 β1 和 β2)在 mt 的状况下默认为 0.9,在 vt 的状况下默认为 0.999。它们的惟一作用是管制这些挪动平均线的指数率。因为这里的 α 为 0.001,ε 为 10⁻⁷。

还记得 ADAM 的默认值吗,就是这俩了,对吧。

2、Momentum:与下面的带动量的梯度降落一样,对梯度进行“指数加权均匀”,以减速梯度降落算法的收敛到最小值。它是对第一个矩 (均值) 的预计。

上面的截图是来自钻研论文“ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION”的图表显示了试验反对的理由,为什么 ADAM 是训练老本最低的最佳优化技术

在 Adam 的根底上还呈现了 Nadam,AdamW,RAdam 等变体,这里就不具体介绍了

ADAM 自从公布以来就变为了咱们最罕用的默认优化器,在没有抉择的时候咱们间接应用它就能够了,当然下面的变体能够试试,这里举荐试试 RAdam,我自测成果不错。

Lookahead

Lookahead 是 Adam 的作者在 19 年公布的一个办法,尽管它不能算做一个优化器,然而它能够和任何优化器组合应用,所以咱们这里要着重的介绍一下。

Lookahead 算法与已有的办法齐全不同,它迭代地更新两组权重。直观来说,Lookahead 算法通过提前察看另一个优化器生成的「fast weights」序列,来抉择搜寻方向。

它能够进步基于梯度的优化办法 (如随机梯度降落(SGD) 及其变体)的收敛速度和泛化性能。

Lookahead 背地的思维是在以后梯度更新的方向上迈出一步,而后应用一组额定的权重 (称为“慢权重”) 在同一方向上迈出一步,但工夫范畴更长。与原始权重相比,这些慢权重更新的频率更低,无效地创立了对优化过程将来的“瞻望”。

在训练期间,Lookahead 计算两个权重更新: 疾速权重更新,它基于以后的梯度并利用于原始权重,以及慢速权重更新,它基于之前的慢速权重并利用于新的权重集。这两个更新的组合给出了最终的权重更新,用于更新原始权重。应用慢权重提供了一种正则化成果,有助于避免过拟合并进步泛化性能。此外,这种前瞻机制有助于优化器更无效地回避部分最小值和鞍点,从而导致更快的收敛。

Lookahead 已被证实在一系列深度学习工作 (包含图像分类、语言建模和强化学习) 上优于 Adam 和 SGD 等其余优化算法。他的应用形式也很简略,咱们能够将它与任何优化器相结合:

 base_optim=RAdam(model.parameters(),lr=0.001) 
 optimizer=  Lookahead(base_optim, k=5, alpha=0.5)

而后取得的这个 optimizer 就像以前的优化器一样应用就能够了

LION

最初咱们再介绍一个 google 在 2 月最新公布的 主动搜寻优化器 论文的名字是《Symbolic Discovery of Optimization Algorithms》,作者说通过数千 TPU 小时的算力搜寻并联合人工干预,失去了一个更省显存的优化器 Lion(EvoLved Sign Momentum),能看的进去,为了凑 LION 这个名字作者也是殚精竭虑。

所以这里咱们不介绍 Lion 的具体算法,因为作者说了数千 TPU 小时的算力搜寻 这个咱们没法评判,这里只介绍一些性能的比照。

作者在论文中与 AdamW 进行比照:

并且在 imagenet 上训练了各种模型来取得

从上图看出 Lion 还是有所提高的。然而从下图能够看到,大批次的 lion 体现得更好

总结

优化器是深度学习训练的根底,有很多的优化器能够抉择,然而咱们能够看到,最根底的 SGD 为咱们提供了优化器工作的实践根底,而 Adam 的呈现使得咱们失去了一个在训练时默认的抉择(或者能够间接试试 RAdam)。在这之上,如果你只想通过设置优化器的形式来进一步提高模型性能的话,能够应用 Lookahead。如果想试试最新的那么 Lion 应该还好,然而具体的成果还须要实地的测试。

https://avoid.overfit.cn/post/f7ed65f0a24a41ba942df18598f17e5c

还是那句话:“没有银弹”,先做个 baseline,再进行测试,抉择适宜我的项目的优化器来应用才是最佳的计划。

作者:Tavleen Bajwa

正文完
 0