Adam: 一个随机优化方法
摘要
我们基于低阶矩(lower-order moments)的自适应估计提出Adam算法来解决随机目标函数的基于一阶梯度的优化。该方法易于实现,计算效率高,对内存要求低,不随梯度的对角线重缩放发生改变,非常适合于数据和/或参数较大的问题。该方法也适用于非平稳目标(non-stationary objectives)和梯度非常嘈杂和/或稀疏的问题。Adam的超参数具有非常直观的解释,并且通常需要很少的调整。本文讨论了其他对Adam有启发作用的算法和Adam之间的联系。另外我们还分析了该算法的理论收敛特性,并提供了和在线凸优化框架下最著名结果相媲美的收敛速率的遗憾界(regret bound)。
1. 介绍
基于随机梯度的优化在科学和工程的许多领域中具有核心的实践重要性。这些领域中的许多问题都可以归结为某些标量参数化目标函数的优化,要求对其参数进行最大化或最小化。如果函数对于参数而言是可微的,梯度下降是一个相对高效的优化方法,因为计算所有参数的一阶偏导和直接评估函数的计算量一样。目标函数通常是随机的。比如,很多目标函数都是子函数的和构成的,而这些子函数又都是在数据的不同子样本上评估得到的。在这种情况下,对所有子函数执行梯度迈步(taking gradient steps)可以使得优化更加高效,比如梯度下降或者上升。SGD证明了自身是一个高效、有效的优化方法,成为很多机器学习成功故事的核心,比如深度学习最近的进步(此处省略列举的若干论文)。除数据下采样外,目标函数也有其他噪声源,比如dropout正则。对于所有这些带有噪音的目标函数,高效的随机优化技术成为刚需。本文聚焦随机目标函数在高维参数空间中的优化。在这些例子中,高阶优化都不合适(ill-suited),本文仅限于讨论一阶方法。
我们提出Adam,一个高效的随机优化方法,只需要一阶梯度和少量的内存。该方法根据梯度的第一和第二矩的估计来计算不同参数的个体自适应学习率。Adam这个名字正是从自适应矩估计(adaptive moment estimation)衍生而来的。我们的方法结合了两个近来流行的方法——AdaGrad和RMSProp的优点,前者在稀疏梯度上表现很好,后者在在线(on-line)和非平稳(non-stationary)目标函数上表现很好。第五节将阐述Adam和这些方法的联系以及其他随机优化方法。Adam的一些优点有:(1)参数更新的幅度不会随着梯度的重缩放(rescaling)改变;(2)它的步长(stepsize)大致由stepsize超参数限制;(3)它不需要一个稳定的目标函数;(4)它可以处理稀疏梯度;(5)它可以自然地执行步长退火的形式(a form of step size annealing)。
算法描述 |
---|
Adam,我们提出的随机优化算法,(g^2_t)表示元素级的平方(g_t igodot g_t)。测试的机器学习问题上的不错的默认设置:(alpha=0.001),(eta_1=0.9),(eta_2=0.999),(epsilon=10^{-8})。向量上所有计算都是元素级的。 |
输入:(alpha): 步长stepsize 输入:(eta_1,eta_2 in [0, 1)):矩估计的指数衰减率 输入:(f( heta)):包含参数( heta)的随机目标函数 输入:( heta_0):初始的参数向量 (m_0 leftarrow 0)(初始化第一个矩估计) (v_0 leftarrow 0)(初始化第二个矩估计) (t leftarrow 0)(初始化时间步) 当( heta_t)没有收敛,执行: (t leftarrow t+1) (g_t leftarrow abla_{ heta}f_t( heta_{t-1}))(在时间步t计算梯度) (m_t leftarrow eta_1 cdot m_{t-1} + (1-eta_1)cdot g_t)(更新带有偏置的第一矩估计) (v_t leftarrow eta_2 cdot v_{t-1} + (1-eta_2)cdot g_t^2)(更新带有偏置的原始的第二矩估计) (hat{m}_t leftarrow m_t / (1-eta_1^t))(计算偏置修正的第一矩估计) (hat{v}_t leftarrow v_t / (1-eta_2^t))(计算偏置修正的第二矩估计) ( heta_t leftarrow heta_{t-1} - alpha cdot hat{m}_t / (sqrt{hat{v}_t} + epsilon))(更新参数) 结束循环 返回( heta_t) |
在第2节中我们描述算法和更新规则的属性;在第3节解释我们的初始偏置修正技术(initialization bias correction technique);第4节提供一个Adam在在线收敛编程中收敛的理论分析;第六节,凭经验地,我们的方法在很多模型和数据集上始终比其他方法好。最终,我们展示Adam是一种通用算法,可以扩展到大规模高维的机器学习问题上。
2. 算法
上面展示了我们的算法的伪代码。(f( heta))表示带有噪声的目标函数:一个对参数( heta)可微的随机标量函数。我们的目标是减小函数的期望值(Bbb E[f( heta)])。用(f_1( heta), ..., f_T( heta))表示之后时间步(1, ..., T)对应的随机函数的实现;随机性可能来自于评估时的随机下采样(minibatches)或者来自于固有的函数噪声;用(g_t = abla_ heta f_t( heta))表示(t)时刻的梯度,即(f_t)对( heta)的偏导。
算法更新梯度(m_t)和平方梯度(v_t)的指数移动平均值(exponential moving average),其中超参数(eta_1, eta_2 in [0, 1))控制这些移动平均的指数衰减率。而这些移动平均本身就是梯度的第一矩(均值)和第二矩(未中心化的方差)的估计值。然而,这些移动平均都初始化为零向量,导致矩估计都偏向零,尤其是在初始化时间步和当衰减率很小的时候(比如(eta_2)接近1).好消息时这些初始化偏置可以很容易抵消掉,从而得到偏置修正的估计(hat{m_t})和(hat{v_t}),更多细节见第三节。
注意,算法可以进一步通过调整计算的顺序来提升,这样可能不会很直观,比如,将循环中的最后三行替换为:
2.1 Adam的更新规则
Adam更新规则的一个重要的性质就是步长的选择非常谨慎,假设(epsilon = 0),则t时刻在参数空间中的有效步为
有效的步长有两个上界,如果((1-eta_1) > sqrt{1-eta_2}),则(| Deta_t | leq alpha cdot (1-eta_1) sqrt{1-eta_2});否则,(|Deta_t | leq alpha)。第一种情况只发生在非常严重的稀疏的情况。