Adam 优化器是深度学习中应用广泛且高效的优化算法之一。它融合了自适应学习率和动量策略的原理。Adam 代表“自适应矩估计”,它为每个参数计算自适应学习率。实现这一目标的方式是,存储过去梯度平方 的指数衰减平均值(一种常用于自适应学习率的技术)和过去梯度本身的指数衰减平均值(一种融入动量的方法)。
可以把 Adam 看作是集合了 RMSprop 的优点(处理非平稳目标和逐参数学习率)以及动量法的优势(帮助加速沿一致梯度方向的进展并抑制震荡)。
Adam 的工作方式:动量与尺度调整的结合
对于每个正在优化的参数 θ \theta θ ,Adam 维护两个主要内部状态变量。这些本质上是移动平均值:
一阶矩向量 (m m m ): 这是过去梯度的指数衰减平均值。其作用类似于带动量 SGD 中的动量项。它有助于加快收敛并应对崎岖区域。
二阶矩向量 (v v v ): 这是过去梯度平方 的指数衰减平均值。其作用类似于 RMSprop 中的分母项,根据近期梯度的幅度,提供逐参数的自适应学习率。
设 g t g_t g t 为在时间步 t t t 时,目标函数相对于参数 θ \theta θ 的梯度。移动平均值 m t m_t m t 和 v t v_t v t 的更新按以下方式计算:
m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t m t = β 1 m t − 1 + ( 1 − β 1 ) g t
v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2
此处:
m 0 m_0 m 0 和 v 0 v_0 v 0 初始化为零向量。
β 1 \beta_1 β 1 和 β 2 \beta_2 β 2 是超参数,分别控制一阶和二阶矩估计的指数衰减率。它们通常接近 1(常见的默认值是 β 1 = 0.9 \beta_1 = 0.9 β 1 = 0.9 和 β 2 = 0.999 \beta_2 = 0.999 β 2 = 0.999 )。
g t 2 g_t^2 g t 2 表示梯度向量 g t g_t g t 的元素级平方。
针对初始化偏差进行修正
由于 m 0 m_0 m 0 和 v 0 v_0 v 0 初始化为零,可能会出现一个问题。尤其是在最初的时间步,当 β 1 \beta_1 β 1 和 β 2 \beta_2 β 2 接近 1 时,矩估计 m t m_t m t 和 v t v_t v t 将偏向零。Adam 引入了一个偏差修正步骤来抵消这种初始化偏差,这在训练早期作用显著。
经过偏差修正的估计值 m ^ t \hat{m}_t m ^ t 和 v ^ t \hat{v}_t v ^ t 计算方式如下:
m ^ t = m t 1 − β 1 t \hat{m}_t = \frac{m_t}{1 - \beta_1^t} m ^ t = 1 − β 1 t m t
v ^ t = v t 1 − β 2 t \hat{v}_t = \frac{v_t}{1 - \beta_2^t} v ^ t = 1 − β 2 t v t
请注意,随着时间步 t t t 的增加,分母 ( 1 − β 1 t ) (1 - \beta_1^t) ( 1 − β 1 t ) 和 ( 1 − β 2 t ) (1 - \beta_2^t) ( 1 − β 2 t ) 趋近于 1。这表示偏差修正初期作用更大,随后会随时间逐渐减弱。
Adam 更新规则
最后,参数 θ \theta θ 使用偏差修正后的矩估计进行更新。更新规则类似于 RMSprop,但使用的是偏差修正后的一阶矩估计 m ^ t \hat{m}_t m ^ t ,而非原始梯度 g t g_t g t :
θ t + 1 = θ t − α v ^ t + ϵ m ^ t \theta_{t+1} = \theta_t - \frac{\alpha}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t θ t + 1 = θ t − v ^ t + ϵ α m ^ t
这里:
α \alpha α 是学习率(步长),这是另一个超参数。
ϵ \epsilon ϵ 是一个很小的常数(例如 10 − 8 10^{-8} 1 0 − 8 ),添加到分母中以增强数值稳定性,防止在 v ^ t \hat{v}_t v ^ t 可能非常接近零时出现除以零的情况。
实际上,Adam 根据类似动量项的 m ^ t \hat{m}_t m ^ t 计算更新,但凭借存储在 v ^ t \sqrt{\hat{v}_t} v ^ t 中的梯度平方信息,对每个参数的学习率进行单独调整。对于近期梯度较大(方差较高)的参数,其有效学习率会相对基础学习率 α \alpha α 降低;而对于近期梯度较小(方差较低)的参数,其有效学习率则会相对增加。
Adam 的优势与考量
Adam 在实践中通常在各类深度学习任务上表现良好。其主要优势包括:
优点整合: 将自适应学习率与动量法整合。
计算效率高: 仅需一阶梯度,内存开销小。
适用场景: 适用于大数据集、高维参数空间以及存在噪声或稀疏梯度的问题。
良好的默认设置: 推荐的 β 1 \beta_1 β 1 、β 2 \beta_2 β 2 和 ϵ \epsilon ϵ 默认值通常表现良好,尽管学习率 α \alpha α 通常仍需调整。
然而,一些研究表明,在某些情况下,与经过精细调整的带动量 SGD 相比,Adam 可能会收敛到次优解,尽管它在初期通常收敛更快。它仍然是一个非常强大的基准方法,并且常是许多实践者的默认选项。
Adam 是优化算法发展中的一个重要进展,凭借根据梯度历史调整学习过程的能力,为训练深度神经网络提供了有效方法。