深度学习:Adam Optimizer 中的 beta_1 和 beta_2 如何影响它的学习?

机器算法验证 机器学习 优化 深度学习
2022-03-05 00:51:36

我的印象是 beta1 和 beta2 会影响 adam 优化器“记住”它之前的动作的程度,我的猜测是,如果训练表现不佳,这些值应该减少,对吗?

但是,在决定是否调整这些参数或改变这些值多少时,应该有什么直觉?

2个回答

Adam的超参数是在估计梯度的第一和第二矩时使用的初始衰减率,它们在每个训练步骤(批次)结束时(以指数方式)相乘。根据我对论文中算法 1 的阅读,减小会使学习变慢,所以如果训练进行得太快,这可能会有所帮助。β1β2β1β2

使用 Adam 的人可能会将设置为较高的值(高于 0.9),因为它们在训练期间会自行相乘(即指数地)。和/或设置为低于 0.5 将导致随着训练步骤/批次数量的增加而急剧下降。β1β2β1β2

我的经验是绝对是可以调整的,并且可以通过贝叶斯优化进行调整。为此,我使用Optuna并发现它们都需要设置为低于最佳 MNIST 分类的默认值(基于最大化测试数据分类准确度),深度网络在训练数据中的 3,833 个样本(随机选择)上训练对其余部分进行设置和验证(我在这个问题中解释了我选择该训练集大小的原因)。β1β2

我使用 Adam 对 MNIST 进行分类的实验(不允许amsgrad)显示,在 500 次试验后,以下设置最大限度地提高了测试数据(10,000 张图像,从未用于训练或验证)的分类准确度。在这项研究中,我在前 100 次试验后实施了中值修剪,并允许每个试验最多 500 个时期收敛(定义为 50 个时期的耐心,没有大于 0.0001 的验证分类交叉熵减少),或者在修剪开始后,在该点之前击败所有试验的中值验证,然后按上述定义收敛。

  • 单个隐藏层后跟单个最大池化层
  • 方核大小 2
  • 批量大小 1024
  • 初始 Adam 学习率 ~ 0.026
  • β1~ 0.28
  • β2~ 0.93

我已经发布了复制我的实验所需的更新演示代码;请复制并发布您的结果是否相似。注意,我目前正在测试Adabelief是否会胜过 Adam……该代码也已发布,以及 Adam 和 Adabelief 的代码,它们在研究的第一次试验中尝试为连续超参数实施 Jeffreys 先验(并且未能在亚当的情况下击败了 Optuna 的本地人trial.suggest

简单地说,Beta 用于平滑收敛路径,也提供一些动力来跨越局部最小值或鞍点。现在它如何影响可以被认为是 Beta 默认值 0.9 只是平均前 10 个批次的梯度或(梯度的平方),由 1/(1-0.9) 计算,这意味着它代表我们来自最后的方式减少损失时减少 10 个批次。因此,您可以随时调整批量大小,而不是调整,它将产生几乎相同的影响!