不要只是“把 Adam 扔过去”:误解 Adam 会让你付出代价

您对导入进行了“振动编码”。了解 Adam 的优化动态,为什么它会严重失败,以及如何解决它。不要只是“把 Adam 扔进去”:误解 Adam 会让你付出代价,这篇文章首先出现在《走向数据科学》上。

来源:走向数据科学

关于一个特别困难的强化学习问题。研究表明类似的智能体可以学习类似的任务。然而我们的模型已经死在水中了。

我简化了架构。我添加了图层。我去掉了图层。我将 LSTM 换成了 Transformer,增加了注意力,然后将其删除。我重建了至少 20 次输入功能。我什至尝试了奇异的内存架构。 我在病态超参数搜索模式下花费了数千个小时的 GPU 时间,但无法得到结果。

纳达。

当我最终找到它时,修复方法是令人羞辱的:我将 β2 从 0.999 更改为 0.95,并将 β₁ 从 0.9 减少到 0.5。

# 实际有效的“羞辱性”修复:

优化器 = optim.AdamW(

模型.参数(),

lr=3e-4,

betas=(0.5, 0.95), # 神奇数字

eps=1e-4 # 防止 RL 中被零除

)

大多数深度学习工程师,包括我自己,只需执行以下操作:

只需使用 AdamW 和默认参数,并将学习率设置为 3e-4。

我不会出于个人喜好对深度学习模型进行振动编码。如果您这样做,您肯定会将此视为优化器选择和学习率。

事实上,我们来测试一下 GPT 5.6,提示是:“为深度学习模型创建训练脚本”

不出所料,GPT 高兴地吐出:

  • 配置 = {
  • “lr”:3e-4,
  • “权重衰减”:1e-5,
  • ...

  • }....优化器 = optim.AdamW(模型.参数(),lr=配置[“lr”],weight_decay=CONFIG["weight_decay"])我们信任卡帕蒂。不。这个危险假设的问题在于,工程师忽视了训练的这个非常重要的方面,将方程的这一部分视为已解决。你也许能够摆脱它,因为它提供了一个合理的默认值,但从长远来看,特别是当遇到非平稳或困难的优化环境时,你将会失败。难的。在本文中,我将介绍:Adam 实际上是如何工作的Adam 惨败的地方修改默认值背后的直觉这不是对参数优化的另一次一般回顾。RMSProp