【问题标题】:epsilon parameter in Adam opitmizerAdam 优化器中的 epsilon 参数
【发布时间】:2020-01-09 11:55:08
【问题描述】:

使用 pyTorch 和 tensorflow (TF),我好奇 Adam 优化器是如何实现的。而且我不知道我是否错了,但在我看来,这两种实现方式不同,而 pyTorch 的一种是来自https://arxiv.org/pdf/1412.6980.pdf 的原始实现。

我的问题来自 eps 参数。使用 TF 实现似乎会导致此参数的 time-and-b2 依赖,即

q(t+1) = q(t) - \gamma * sqrt[(1-b2^t)]/(1-b1^t) * m(t)/[sqrt[v(t)]+eps]

在原始算法符号中可以重新表述为

 q(t+1) = q(t) - \gamma * mhat(t)/[sqrt[vhat(t)]+ eps/sqrt[(1-b2^t)]]

这指出了 eps 参数的变化,这在原始算法和 pyTorch 实现中都不是这种情况。

我错了吗?还是众所周知? 感谢您的帮助。

【问题讨论】:

    标签: tensorflow pytorch adam


    【解决方案1】:

    您可以从第二个到第一个导出公式,如下所示。所以在tensorflow的实现中,epsilon其实就是这里的epsilon。此外,在 tensorflow 实现中,学习率在以下公式中调整为 alpha'。希望这可以帮助。

    【讨论】:

      【解决方案2】:

      确实,您可以查看in the docs 以了解 TF Adam 优化器。引用相关部分:

      epsilon 的默认值 1e-8 通常可能不是一个好的默认值。例如,在 ImageNet 上训练 Inception 网络时,当前较好的选择是 1.0 或 0.1。请注意,由于 AdamOptimizer 使用的是 Kingma 和 Ba 论文第 2.1 节之前的公式,而不是算法 1 中的公式,因此这里所指的“epsilon”在论文中是“epsilon hat”。

      如果您检查论文中的“2.1 节之前的公式”,它们实际上包括alpha 中的时间依赖性,导致时间依赖性“步长”alpha_t 但固定epsilon。请注意,归根结底,这只是以稍微不同的方式重写/解释参数,并不会改变算法的实际工作方式。但是您需要注意,在 PyTorch 和 TF 实现中选择相同的 epsilon 显然不会导致相同的结果...

      【讨论】:

      • 酷!如果此答案对您有所帮助,请考虑点赞并接受,以便其他人也能看到。
      猜你喜欢
      • 2020-05-18
      • 1970-01-01
      • 2017-10-14
      • 2018-10-02
      • 2018-06-04
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      相关资源
      最近更新 更多