adam优化_认识 AdaMod: 一个新的有记忆的深度学习优化器

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模式。

v2-25b91a9c918d7f106506f476b5550d4d_b.jpg

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的情况下的表现。

v2-963b293b0b3f23cbdd7c3fa92e54a613_b.jpg

在某些情况下(例如 NLP 的transformer模型) ,Adam 没有warmup根本无法优化,如上图所示。

这个问题的原因与Rectified Adam的研究人员所指出的完全相同ーー训练开始时(没有warmup)学习率的过度变化意味着Adam在开始时可能会做出糟糕的、过度的跳跃,并将自己困在一个无法逃脱的糟糕极小值中。

上面这张Paper上的图片与Rectified Adam paper上的图片非常相似,warmup可以缓解过高的学习率。 在上面的两张图片中,我在0处加了一条红色的中心线,以便更好地突出Adam在warmup中学习率要低得多的事实(这也是为什么如果只使用普通的Adam, warmup是至关重要的。)

虽然Rectified Adam在一开始就控制稳定的学习率,AdaMod也这样做,但如果学习率高于长期记忆或平均,它会继续通过clipping整个训练控制方差。 这有助于收敛,并可能避免 Reddi 指出的一常规 Adam 不收敛的问题。

v2-d2aac747dc2ea7759f11b133965226c1_b.jpg

AdaMod的局限: 虽然AdaMod通常比普通的Adam表现更好,但是在更长的训练条件下,SGDM 仍然可能比AdaMod表现更好。 作者将此作为未来的一项工作。

(请注意,DiffGrad 在类似的测试中确实优于 SGDM,但是 DiffGrad 不能像AdaMod一样好的处理训练方差(即warmup)... 因此我写了个结合了 DiffGrad 和 AdaMod: 的‘ DiffMod’ :)

一个很好的建议是融合AdaMod ,然后运行一些 SGDM 的额外训练,看看是否可以有额外的改进:

v2-45e36df8e7a29ec1b5ec5d0179e58805_b.jpg

v2-6316875b043e3ffb821d7e89f99bd3ea_b.jpg

使用 AdaMod: AdaMod 是Adam的替代品。 唯一的变化是一个新的超参数 B3,或者 Beta3。 这控制了长期clipping平均值的回溯程度。 作者推荐. 999ー. 9999。

v2-9ef15fc32706740ce95f4acd91e83136_b.jpg

请注意,虽然官方代码使用的是带有十进制的 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ー对学习率超参数的敏感性降低(收敛于相似结果)

v2-c526d409de540738eb543c0d31f89e35_b.jpg

3ー由于在整个训练过程中提高了稳定性(通过长期记忆和从中clipping) ,通常在最终结果上优于 Adam。

在一些数据集上用测试 AdaMod 和其它优化器时,我发现 AdaMod 始终是Top 5 的优化器。

供参考,Ranger 和 DeepMemory 也在Top 5中 ,所以AdaMod是一个强有力的竞争者,值得你在深度学习训练中使用!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值