Adam 优化器真的是 RMSprop 加动量吗?如果是,为啥它没有动量参数?

Posted

技术标签:

【中文标题】Adam 优化器真的是 RMSprop 加动量吗?如果是,为啥它没有动量参数?【英文标题】:Is Adam optimizer really RMSprop plus momentum? If yes, why it doesn't have a momentum parameter?Adam 优化器真的是 RMSprop 加动量吗?如果是,为什么它没有动量参数? 【发布时间】:2020-04-23 07:30:58 【问题描述】:

这是张量流优化器的link。你可以看到,RMSprop 将动量作为参数,而 Adam 没有这样做。所以我很困惑。 Adam 优化伪装成具有动量的 RMSprop 优化,如下所示:

亚当 = RMSprop + 动量

但是为什么 RMSprop 确实有动量参数而 Adam 没有呢?

【问题讨论】:

【参考方案1】:

虽然“Adam 是带动量的 RMSProp”这句话确实被广泛使用,但这只是一个非常粗略的简写描述,不应该从表面上理解;已经在原始 Adam paper 中,已明确澄清(第 6 页):

带有动量的 RMSProp 和 Adam 之间有一些重要区别:带有动量的 RMSProp 使用重新缩放梯度上的动量来生成其参数更新,而 Adam 更新是使用梯度的第一和第二矩的运行平均值直接估计的。

有时,作者会明确表示主题表达只是一个松散的描述,例如在(强烈推荐)Overview of gradient descent optimization algorithms(强调添加):

Adam 还保持过去梯度 mt 的指数衰减平均值,类似于与动量。

或Stanford CS231n: CNNs for Visual Recognition(再次强调):

Adam 是最近提出的更新,看起来有点类似于 RMSProp 的动量。

也就是说,其他一些框架确实为 Adam 包含了一个momentum 参数,但这实际上是beta1 参数;这里是CNTK:

动量(浮动、列表、momentum_schedule() 的输出)- 动量时间表。请注意,这是 Adam 论文中的 beta1 参数。如需更多信息,请参阅this CNTK Wiki article。

所以,不要太从字面上理解这一点,也不要因此而失眠。

【讨论】:

以上是关于Adam 优化器真的是 RMSprop 加动量吗?如果是,为啥它没有动量参数?的主要内容,如果未能解决你的问题,请参考以下文章

Pytorch Note20 优化算法6 Adam算法

梯度优化方法:BGD,SGD,mini_batch, Momentum,AdaGrad,RMSProp,Adam

优化算法 - 特点

优化器Optimizer

深度学习与CV教程 | 神经网络训练技巧 (下)

神经网络优化算法 (BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)