【问题标题】:How does the Keras Adam optimizer learning rate hyper-parameter relate to individually computed learning rates for network parameters?Keras Adam 优化器学习率超参数与单独计算的网络参数学习率有何关系?
【发布时间】:2020-03-26 16:28:51
【问题描述】:

因此,通过我对 Adam 的有限了解(主要是通过这篇文章:https://towardsdatascience.com/adam-latest-trends-in-deep-learning-optimization-6be9a291375c),我了解到 Adam 优化器会为网络中的每个参数计算单独的学习率。

但在 Keras 文档 (https://keras.io/optimizers/) 中,Adam 优化器采用学习率参数。

我的问题是 Adam 对象采用的学习率参数与这些计算的学习率有何关联?据我所知,链接的帖子中没有提到这一点(或者是,但它超出了我的想象)。

【问题讨论】:

    标签: machine-learning keras neural-network


    【解决方案1】:

    由于这是一个非常具体的问题,我不会去讨论亚当的任何数学细节。我猜在文章中,it 计算不同参数的个人学习率这行让你失望了。

    这是论文https://arxiv.org/pdf/1412.6980.pdf提出的实际Adam算法的截图

    Adam 保持过去梯度的指数衰减平均值,因此它的行为就像一个带有摩擦力的重球,这有助于它更快地收敛和稳定。

    但是,如果您查看算法,则有一个 alpha(步长),这就是我们提供的 keras 等效于学习率 = 0.001。因此,该算法需要一个步长来更新参数(简单地说,它是权重更新的比例因子)。至于变化的学习率(或更新),你可以看到最后一个方程(它使用 m_tv_t,这些在循环中更新)但是 alpha 在整个算法中保持不变。这是我们必须提供的 keras 学习率。

    由于 alpha 保持不变,我们有时必须使用学习率调度,实际上我们会在几个 epoch 后降低学习率。还有其他一些变化,我们先提高学习率然后降低。

    【讨论】:

      【解决方案2】:

      只是想添加这个,以防一维中的实现/示例阐明任何内容:

      import numpy as np
      import matplotlib.pyplot as plt
      from math import sqrt
      
      eps = 1e-6
      delta = 1e-6
      MAX_ITER = 100000
      def f(x):
          return  (np.square(x) / 10) - 2*np.sin(x)
      
      
      def df(x):
          return (f(x) - f(x - delta))/delta
      
      def main():
          x_0 = -13 # initial position
          a = 0.1 # step size / learning rate
          x_k = x_0
          B_1 = 0.99 # first decay rate
          B_2 = 0.999 # second decay rate
          i = 0
          m_k = df(x_k)
          d_k = df(x_k)**2
          while True:
              # update moment estimates and parameters
              m_k = B_1 * m_k + (1 - B_1) * df(x_k)
              d_k = B_2 * d_k + (1 - B_2) * (df(x_k)**2)
              x_k = x_k - a * m_k / sqrt(d_k + eps)
      
              # termination criterion
              if abs(df(x_k)/df(x_0)) <= eps:
                  break
              if i > MAX_ITER:
                  break
      
              i = i+1
      

      【讨论】:

        猜你喜欢
        • 2021-09-25
        • 1970-01-01
        • 2020-10-22
        • 2020-10-16
        • 2020-10-22
        • 1970-01-01
        • 1970-01-01
        • 2017-09-17
        • 1970-01-01
        相关资源
        最近更新 更多