Adam优化器
文章目录
- Adam
- 拐点
- 缓坡
- 局部极小值
- 悬崖
- 最值点
- 扩展到三维
Adam
-
同时调节梯度项和学习率项,基于这种想法衍生出来的方法是Adam。
-
Adam表达式
x t + 1 = x t − η v t + ϵ m t v t = β 1 V t − 1 + ( 1 − β 1 ) ∇ 2 f ( x t ) m t = β 2 m t − 1 + ( 1 − β 2 ) ∇ f ( x t ) \begin{aligned} &\mathbf{x}_{t+1} =\mathbf{x}_{t}-\frac{\eta}{\sqrt{v_t} + \epsilon} m_t \\ &v_t = \beta_1 V_{t-1}+(1-\beta_1)\nabla^2 f\left(\mathbf{x}_{t}\right)\\ &m_t = \beta_2 m_{t-1}+(1-\beta_2)\nabla f\left(\mathbf{x}_{t}\right) \end{aligned} xt+1=xt−vt+ϵηmtvt=β1Vt−1+(1−β1)∇2f(xt)mt=β2mt−1+(1−β2)∇f(xt)
注意, m t m_t mt 中的梯度是没有平方的偏差修正
x t + 1 = x t − η v ^ t + ϵ m ^ t v t = β 1 V t − 1 + ( 1 − β 1 ) ∇ 2 f ( x t ) m t = β 2 m t − 1 + ( 1 − β 2 ) ∇ f ( x t ) v ^ t = v t 1 − β 1 t m ^ t = m t 1 − β 2 t \begin{aligned} &\mathbf{x}_{t+1} =\mathbf{x}_{t}-\frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t \\ &v_t = \beta_1 V_{t-1}+(1-\beta_1)\nabla^2 f\left(\mathbf{x}_{t}\right)\\ &m_t = \beta_2 m_{t-1}+(1-\beta_2)\nabla f\left(\mathbf{x}_{t}\right)\\ &\hat{v}_{t} = \frac{v_t}{1-\beta_1^t}\\ &\hat{m}_{t} = \frac{m_t}{1-\beta_2^t}\\ \end{aligned} xt+1=xt−v^t+ϵηm^tvt=β1Vt−1+(1−β1)∇2f(xt)mt=β2mt−1+(1−β2)∇f(xt)v^t=1−β1tvtm^t=1−β2tmt -
观察Adam的表达式,可以看到由于在 v t v_t vt和 m t m_t mt中都用到了指数加权平均,这种计算方法会导致在训练的前几步,无论是 v t v_t vt还是 m t m_t mt的值都会偏小。
例如在缓坡中,缓坡梯度0.001,beta为0.9,梯度的期望应该与斜率一致,mt计算出来的第一步的值仅为斜率的1/10,可能会使训练初期不稳定,造成震荡或收敛困难等问题。
因此通常需要额外对VT和mt进行偏差修正,解决前期估计值偏小的问题,使得即使在前几步vt和mt较小,也能拉回真实的统计量期望。
拐点
- 当来到鞍点时,梯度修正项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影响,正反方向的梯度会进行一定程度的相互抵消,会迅速减小震荡,加速收敛。
扩展到三维
- 多参数下,扩展到三维,在a方向上 m t m_t mt可以减小震荡,加速收敛,B方向受到 v t v_t vt影响,学习率增大,加速下降。同时a、b方向都能自适应的调整学习率大小,使得针对多个参数的训练更加灵活。
- 然而虽然Adam看似具有了很大的优势,但在实际训练中并不一定Adam就是最好的选择。有时候选择标准动量法或RMSprop反而会有更好的效果。Adam是比较常用的,但是不是必须要用的,因为sgd+momentum 效果已经非常好了,Adam不一定有sgd+momentum 好,但是Adam对学习率不敏感,所以实践中还是要多尝试