我们什么时候应该使用像 Adam 这样的算法而不是 SGD?

人工智能 机器学习 优化
2021-10-28 03:32:15

据我所知,随机梯度下降是一种优化算法,属于必须预先定义超参数的算法类别。它们在许多情况下都很有用,但在某些情况下,自适应学习算法(如 AdaGrad 或 Adam)可能更可取。

什么时候像 Adam 和 AdaGrad 这样的算法比 SGD 更受欢迎?当我们将自适应算法(如 Adam)与 SGD 等学习算法进行比较时,它们的优缺点是什么?

1个回答

根据经验,我观察到像 Adam 和 RMSProp 这样的算法往往会在(验证数据集)上相对于 SGD 为我提供最终更高的性能(在我的情况下是准确度)。然而,我还观察到 Adam 和 RMSProp 对学习率的某些值(有时还有其他超参数,如批量大小)高度敏感,如果学习率太高,它们可能会灾难性地无法收敛。另一方面,总的来说,SGD 并没有让我达到最高性能,但在我的实验中(即使使用完全不同的超参数)它们并没有发生灾难性的失败(至少与 Adam 和 RMSProp 一样多)。我注意到学习率(和批量大小)是主要影响所有这些算法性能的超参数。

在我的实验中,我使用没有动量的 SGD,并使用了 Adam 和 RMSProp 的 (PyTorch) 默认值。在识别 MNIST 数字这一相对简单的任务上,我只比较了 SGD 与 Adam 和 RMSProp。您可以查看此存储库https://github.com/nbro/comparative-study-between-optimizers,其中包含我用来执行这些实验的代码。你也有执行实验的说明(如果你愿意的话)。