Meet AdaMod: a new deep learning optimizer with memory by Less Wright
https://medium.com/@lessw/meet-adamod-a-new-deep-learning-optimizer-with-memory-f01e831b80bd
AdaMod 是一个基于 Adam 的新的深度学习优化器,但它提供了自动warmup heuristic和长期学习率缓冲。 从最初的测试来看,AdaMod 是top 5的优化器,很容易击败或超过普通的 Adam,且对学习率超参数不那么敏感,训练曲线更平滑,不需要warmup模式。
AdaMod是Ding, Ren, Lou 和 Sun在"An Adaptive and Momental Bound Method for Stochastic Learning"论文中提出的。
AdaMod工作原理: AdaMod保持了自适应学习率自身的指数长期平均值,并在整个训练过程中用这个值来clip任何过高的适应率。 结果改善了收敛性,不需要warmup,对实际学习率选择的敏感性较低。 记忆的程度由一个新的参数 Beta3控制。
这种长期记忆和从中的clipping,解决了许多自适应优化器(如Adam)的主要问题ーー缺乏长期记忆可能会导致不收敛,因为优化器由于自适应学习率的尖刺而陷入糟糕的局部最优中。 Reddi,Kale,Kumar (2018)提出的这个不收敛的问题,引起了对优化器的一些改进
不需要warmup: 非常类似Rectified Adam,AdaMod能够从训练开始就控制自适应学习率的方差,从而确保训练开始阶段的稳定。 AdaMod的研究人员做了几个实验来展示warmup对Adam的影响,同时也展示了AdaMod在没有warmup的情况下的表现。
在某些情况下(例如 NLP 的transformer模型) ,Adam 没有warmup根本无法优化,如上图所示。
这个问题的原因与Rectified Adam的研究人员所指出的完全相同ーー训练开始时(没有warmup)学习率的过度变化意味着Adam在开始时可能会做出糟糕的、过度的跳跃,并将自己困在一个无法逃脱的糟糕极小值中。
上面这张Paper上的图片与Rectified Adam paper上的图片非常相似,warmup可以缓解过高的学习率。 在上面的两张图片中,我在0处加了一条红色的中心线,以便更好地突出Adam在warmup中学习率要低得多的事实(这也是为什么如果只使用普通的Adam, warmup是至关重要的。)
虽然Rectified Adam在一开始就控制稳定的学习率,AdaMod也这样做,但如果学习率高于长期记忆或平均,它会继续通过clipping整个训练控制方差。 这有助于收敛,并可能避免 Reddi 指出的一常规 Adam 不收敛的问题。
AdaMod的局限: 虽然AdaMod通常比普通的Adam表现更好,但是在更长的训练条件下,SGDM 仍然可能比AdaMod表现更好。 作者将此作为未来的一项工作。
(请注意,DiffGrad 在类似的测试中确实优于 SGDM,但是 DiffGrad 不能像AdaMod一样好的处理训练方差(即warmup)... 因此我写了个结合了 DiffGrad 和 AdaMod: 的‘ DiffMod’ :)
一个很好的建议是融合AdaMod ,然后运行一些 SGDM 的额外训练,看看是否可以有额外的改进:
使用 AdaMod: AdaMod 是Adam的替代品。 唯一的变化是一个新的超参数 B3,或者 Beta3。 这控制了长期clipping平均值的回溯程度。 作者推荐. 999ー. 9999。
请注意,虽然官方代码使用的是带有十进制的 B3,但是我对 github repo 做了一个小小的改动,对其使用了一些 AdaMod 变体(结合 DiffGrad + AdaMod DiffMod) ,因此你可以将总批数传递给 B3常量,称为“len_memory”。 即1,000(与0.999相同)或10,000(与0.9999相同) ,但更易记忆及追踪。 这样你也可以更容易的用5000或2500等测试。
len_memory = b3 是更容易使用的格式。 指定memory len 为500,计算 b3。
AdaMod视频 ー我近期发布一个涵盖 AdaMod 和在 FastAI上快速使用它的视频。
你可以使用的AdaMod源代码:
1ー官方 Github repo (PyTorch) : https://Github.com/lancopku/adamod
2ー非官方的 AdaMod 和可选的 DiffMod 变体(PyTorch,FastAI) : https://github.com/lessw2020/best-deep-learning-optimizers/tree/master/AdaMod
概要: AdaMod 代表了深度学习优化器的更进一步,因为它提供了三个改进
1ー无须warmup(类似Rectified Adam)
2ー对学习率超参数的敏感性降低(收敛于相似结果)
3ー由于在整个训练过程中提高了稳定性(通过长期记忆和从中clipping) ,通常在最终结果上优于 Adam。
在一些数据集上用测试 AdaMod 和其它优化器时,我发现 AdaMod 始终是Top 5 的优化器。
供参考,Ranger 和 DeepMemory 也在Top 5中 ,所以AdaMod是一个强有力的竞争者,值得你在深度学习训练中使用!