在 PyTorch 中使用带有自调整优化器的调度器

Use of scheduler with self-ajusting optimizers in PyTorch

在PyTorch中,权重调整策略由优化器决定,学习率由调度器调整。当优化器是 SGD 时,只有一个学习率,这很简单。当使用 Adagrad、Adam 或任何类似的优化器时,它们会在每个参数的基础上固有地调整学习率,有什么特别需要注意的吗?由于算法会调整自己的学习率,我可以完全忽略调度程序吗?我是否应该以与使用 SGD 时截然不同的方式对其进行参数化?

您为 ADAM 等优化器定义的学习率是上限。您可以在第 2.1 节的 paper 中看到这一点。论文中的步长α是学习率。

The effective magnitude of the steps taken in parameter space at each are approximately bounded by the stepsize setting α

也是直接用这个stepsize α乘以step size correction,这是学习到的。所以改变学习率,例如减少它会降低所有个体的学习率并降低上限。这在训练 "end" 期间可能会有所帮助,可以减少整体步长,因此只会出现较小的步长,并且可能有助于网络在损失函数中找到最小值。

我在一些使用 ADAM 的论文中看到了学习率衰减,我自己使用了它,它确实有帮助。我发现你应该比例如慢与新加坡元。对于一个模型,我只是每 10 个时期将其乘以 0.8。所以这是一个渐进的衰减,我认为它比更激烈的步骤更有效,因为你没有 "invalidate" 估计的动量太多。但这只是我的理论。