【问题标题】: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
【问题描述】:
【问题讨论】:
标签:
machine-learning
keras
neural-network
【解决方案1】:
由于这是一个非常具体的问题,我不会去讨论亚当的任何数学细节。我猜在文章中,it 计算不同参数的个人学习率这行让你失望了。
这是论文https://arxiv.org/pdf/1412.6980.pdf提出的实际Adam算法的截图
Adam 保持过去梯度的指数衰减平均值,因此它的行为就像一个带有摩擦力的重球,这有助于它更快地收敛和稳定。
但是,如果您查看算法,则有一个 alpha(步长),这就是我们提供的 keras 等效于学习率 = 0.001。因此,该算法需要一个步长来更新参数(简单地说,它是权重更新的比例因子)。至于变化的学习率(或更新),你可以看到最后一个方程(它使用 m_t 和 v_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