Adam论文:https://arxiv.org/pdf/1412.6980.pdf
(一)、什么是Adam算法?
Adam(Adaptive momentum)是一种自适应动量的随机优化方法(A method for stochastic optimization),经常作为深度学习中的优化器算法。
(二)、Adam算法如何实现?
(1). 上图就是Adam优化算法在深度学习应用于梯度下降方法的详细过程,有一些参数要做出说明:
- t t t:更新的步数(steps)
- α \alpha α:学习率,用于控制步幅(stepsize)
- θ \theta θ:要求解(更新)的参数
- f ( θ ) f(\theta) f(θ):带有参数 θ \theta θ的随机目标函数,一般指损失函数
- g t g_t gt:目标函数 f ( θ ) f(\theta) f(θ)对 θ \theta θ求导所得梯度
- β 1 \beta_1 β1:一阶矩衰减系数
- β 2 \beta_2 β2:二阶矩衰减系数
- m t m_t mt:梯度 g t g_t gt的一阶矩,即梯度 g t g_t gt的期望
- v t v_t vt:梯度 g t g_t gt的二阶矩,即梯度 g t 2 g_t^2 gt2的期望
- m t ^ \hat{m_t} mt^: m t m_t mt的偏置矫正,考虑到 m t m_t mt在零初始值情况下向0偏置
- v t ^ \hat{v_t} vt^: v t v_t vt的偏置矫正,考虑到 v t v_t vt在零初始值情况下向0偏置
(2). 在上图的红色方框中显示了while循环实现了整个Adam算法在梯度下降中的优化过程:
- 更新steps
- 计算原目标函数 f ( θ ) f(\theta) f(θ)对参数 θ θ θ的梯度
- 计算梯度的一阶矩(first moment),即过往梯度与当前梯度的平均,类似平滑操作,如上图 m t m_t mt即是 s t e p s = t steps=t steps=t时的梯度一阶矩
- 计算梯度的二阶距(second moment),即过往梯度平方与当前梯度平方的平均,如上图 v t v_t vt即是 s t e p s = t steps=t steps=t时的梯度二阶矩
- 对一阶矩 m t m_t mt进行校正,因为 m t m_t mt初始值为0,所以它会向0偏置,这样处理后会减少这种偏置影响,具体计算公式为: m t ^ = m t / ( 1 − β 1 t ) \hat{m_t}=m_t/(1-\beta_1^t) mt^=mt/(1−β1t),其中 β 1 t \beta_1^t β1t指的是 β 1 \beta_1 β1的 t t t次方
- 对二阶矩 v t v_t vt进行校正,因为 v t v_t vt初始值为0,所以它会向0偏置,这样处理后会减少这种偏置影响,具体计算公式为: v t ^ = v t / ( 1 − β 2 t ) \hat{v_t}=v_t/(1-\beta_2^t) vt^=vt/(1−β2t),其中 β 2 t \beta_2^t β2t指的是 β 2 \beta_2 β2的 t t t次方
- 更新参数 θ t \theta_t θt,注意此时可将 α / ( v t ^ + ϵ ) \alpha/(\sqrt{\hat{v_t}}+\epsilon) α/(vt^+ϵ)看成更新参数 θ t \theta_t θt的学习率, m t ^ \hat{m_t} mt^看成更新参数 θ t \theta_t θt的梯度
(三)、如何理解Adam算法中的一阶矩、二阶矩?
(1). 一阶矩(
m
t
m_t
mt)相当于
E
(
g
t
)
E(g_t)
E(gt),即当前梯度
g
t
g_t
gt的期望,由于当下梯度梯度
g
t
g_t
gt是随机采样得到的估计结果,因此更关注它在统计意义上的期望。
(2). 二阶矩( v t v_t vt)相当于 E ( g t 2 ) E(g_t^2) E(gt2),即当前梯度的平方 g t 2 g_t^2 gt2的期望,它们的物理意义是(考虑四种情况):
- 当 ∣ ∣ m t ∣ ∣ ||m_t|| ∣∣mt∣∣大且 v t v_t vt大时,说明梯度大且稳定,因为 ∣ ∣ m t ∣ ∣ ||m_t|| ∣∣mt∣∣指的是当前梯度的均值的绝对值, v t v_t vt是平方求期望无正负抵消,得到的结果肯定为正,当 v t v_t vt很大时,说明过往大部分的梯度与当前梯度的绝对值都不会太小,若此时 ∣ ∣ m t ∣ ∣ ||m_t|| ∣∣mt∣∣也很大,则说明过往梯度与当前梯度很少有正负抵消,即说明过往梯度与当前梯度一般会同号,导致求出的过往梯度与当前梯度的期望绝对值大,也即说明梯度更新相对稳定,过渡平滑,可以考虑成在梯度下降的过程中遇到一个明显的大坡,梯度下降方向明确。
- 当在 v t v_t vt很大而 ∣ ∣ m t ∣ ∣ ||m_t|| ∣∣mt∣∣却很小时,则说明过往的大部分梯度和当前梯度的绝对值都很大,导致对 g t 2 g_t^2 gt2求期望的结果很大,但由于 ∣ ∣ m t ∣ ∣ ||m_t|| ∣∣mt∣∣很小,则又说明过往的大部分梯度以及当前梯度一般不同号,正负相抵,求解出 g t g_t gt期望的绝对值 ∣ ∣ m t ∣ ∣ ||m_t|| ∣∣mt∣∣自然会很小,这就说明此时梯度更新处于振荡状态,一会正,一会负,但由于 g t 2 g_t^2 gt2的期望 v t v_t vt很大,说明单个梯度的绝对值很大,可以考虑成可能是向下更新到一个局部的波谷,又进行一波反弹(可用Adam算法优化)。
- 当 ∣ ∣ m t ∣ ∣ ||m_t|| ∣∣mt∣∣很大而 v t v_t vt却趋于零时,这种情况不可能出现。
- 当 ∣ ∣ m t ∣ ∣ ||m_t|| ∣∣mt∣∣趋于零且 v t v_t vt也趋于零时,梯度趋于零,可能达到局部最低点,也可能走到一个极度平缓的平地,此时要避免陷入平原(plateau)(可用Adam算法优化)。
(四)、Adam算法有什么优点?
(1). 惯性保持:Adam算法记录了梯度的一阶矩,即过往所有梯度与当前梯度的平均,使得每一次更新时,上一次更新的梯度与当前更新的梯度不会相差太大,即梯度平滑、稳定的过渡,可以适应不稳定的目标函数。
(2). 环境感知:Adam记录了梯度的二阶矩,即过往梯度平方与当前梯度平方的平均,这体现了环境感知能力,为不同参数产生自适应的学习速率。
(3). 超参数,即 α \alpha α, β 1 \beta_1 β1, β 2 \beta_2 β2, ϵ \epsilon ϵ具有很好的解释性,且通常无需调整或仅需很少的微调。