Keras Adam优化器学习率超参数与网络参数的单独计算学习率有何关系?

时间:2020-03-26 16:28:51

标签: machine-learning keras neural-network

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

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

我的问题是,由Adam对象获取的学习率参数如何与这些计算出的学习率相关?据我所知,链接的帖子中没有涉及(或者是,但这超出了我的脑袋)。

2 个答案:

答案 0 :(得分:1)

由于这是一个非常具体的问题,因此我不会讨论亚当的任何数学细节。我猜在这篇文章中,行可以计算出不同参数的单独学习率,让您脱颖而出。

这是https://arxiv.org/pdf/1412.6980.pdf论文中提出的实际亚当算法的屏幕截图

enter image description here

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

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

因为,alpha保持不变,所以有时我们必须使用学习率调度,实际上是在几个时期之后我们实际上降低了学习率。还有其他一些变化,我们先提高学习率,然后降低。

答案 1 :(得分:1)

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

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