Machine learning Keras Adam optimizer学习率超参数与单独计算的网络参数学习率之间的关系如何?

Machine learning Keras Adam optimizer学习率超参数与单独计算的网络参数学习率之间的关系如何?,machine-learning,keras,neural-network,Machine Learning,Keras,Neural Network,因此,通过我对Adam的有限理解(主要是通过这篇文章:),我收集到Adam优化器计算网络中每个参数的个体学习率 但是在Keras文档()中,Adam优化器采用了一个学习率参数 我的问题是Adam对象采用的学习速率参数与这些计算的学习速率有何关联?据我所知,这篇文章并没有涉及到(或者说是的,但它超出了我的理解范围)。因为这是一个非常具体的问题,我不会谈论亚当的任何数学细节。我猜在这篇文章中,这一行计算了不同参数的个人学习率 这是本文提出的实际Adam算法的屏幕截图 Adam保持过去梯度的指数衰减

因此,通过我对Adam的有限理解(主要是通过这篇文章:),我收集到Adam优化器计算网络中每个参数的个体学习率

但是在Keras文档()中,Adam优化器采用了一个学习率参数


我的问题是Adam对象采用的学习速率参数与这些计算的学习速率有何关联?据我所知,这篇文章并没有涉及到(或者说是的,但它超出了我的理解范围)。

因为这是一个非常具体的问题,我不会谈论亚当的任何数学细节。我猜在这篇文章中,这一行计算了不同参数的个人学习率

这是本文提出的实际Adam算法的屏幕截图

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

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


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

因为这是一个非常具体的问题,我不想谈论亚当的任何数学细节。我猜在这篇文章中,这一行计算了不同参数的个人学习率

这是本文提出的实际Adam算法的屏幕截图

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

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


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

只是想补充一下,以防1-D中的实现/示例澄清了任何问题:

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
将numpy导入为np
将matplotlib.pyplot作为plt导入
从数学导入sqrt
eps=1e-6
δ=1e-6
最大温度=100000
def f(x):
返回(np.平方(x)/10)-2*np.正弦(x)
def df(x):
返回(f(x)-f(x-delta))/delta
def main():
x_0=-13#初始位置
a=0.1#步长/学习率
x_k=x_0
B_1=0.99#第一衰减率
B_2=0.999#秒衰减率
i=0
m_k=df(x_k)
d_k=df(x_k)**2
尽管如此:
#更新矩估计和参数
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)
#终止标准
如果abs(df(x_k)/df(x_0))最大值:
打破
i=i+1

我只是想添加这一点,以防1-D中的实现/示例澄清了任何问题:

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
将numpy导入为np
将matplotlib.pyplot作为plt导入
从数学导入sqrt
eps=1e-6
δ=1e-6
最大温度=100000
def f(x):
返回(np.平方(x)/10)-2*np.正弦(x)
def df(x):
返回(f(x)-f(x-delta))/delta
def main():
x_0=-13#初始位置
a=0.1#步长/学习率
x_k=x_0
B_1=0.99#第一衰减率
B_2=0.999#秒衰减率
i=0
m_k=df(x_k)
d_k=df(x_k)**2
尽管如此:
#更新矩估计和参数
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)
#终止标准
如果abs(df(x_k)/df(x_0))最大值:
打破
i=i+1