optimizers优化器

0. overview

keywords:SGD, moment, Nesterov, adaptive, ADAM, Weight decay

  1. 优化问题Optimization
    • to minimize目标函数
    • grandient decent
      • gradient
        • numerical:数值法,approx,slow
        • analytical:解析法,exact,fast
      • Stochastic
        • 用minibatch的梯度来approximate全集
        • $\theta_{k+1} = \theta_k - v_{t+1}(x_i,y_i)$
      • classic optimizers:SGD,Momentum,Nesterov‘s momentum
      • adaptive optimizers:AdaGrad,Adadelta,RMSProp,Adam
    • Newton
  • modern optimizers for large-batch
    • AdamW
    • LARS
    • LAMB
  1. common updating steps

    for current step t:

    step1:计算直接梯度,$g_t = \nabla f(w_t)$

    step2:计算一阶动量和二阶动量,$m_t \& V_t$

    step3:计算当前时刻的下降梯度,$\eta_t = \alpha m_t/\sqrt {V_t}$

    step4:参数更新,$w_{t+1} = w_t - \eta_t$

    • 各种优化算法的主要差别在step1和step2上
  2. 滑动平均/指数加权平均/moving average/EMA

    • 局部均值,与一段时间内的历史相关
    • $v_t = \beta v_{t-1}+(1-\beta)\theta_t$,大致等于过去$1/(1-\beta)$个时刻的$\theta$的平均值,但是在起始点附近偏差较大
    • $v_{tbiased} = \frac{v_t}{1-\beta^t}$,做了bias correction
    • t越大,越不需要修正,两个滑动均值的结果越接近
    • 优缺点:不用保存历史,但是近似

  3. SGD

    • SGD没有动量的概念,$m_t=g_t$,$V_t=I^2$,$w_{t+1} = w_t - \alpha g_t$
  • 仅依赖当前计算的梯度
    • 缺点:下降速度慢,可能陷在local optima上持续震荡
  1. SGDW (with weight decay)

    • 在权重更新的同时进行权重衰减
    • $w_{t+1} = (1-\lambda)w_t - \alpha g_t$
    • 在SGD form的优化器中weight decay等价于在loss上L2 regularization
    • 但是在adaptive form的优化器中是不等价的!!因为historical func(ERM)中regularizer和gradient一起被downscale了,因此not as much as they would get regularized in SGDW
  2. SGD with Momentum

    • 引入一阶动量,$m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t$,使用滑动均值,抑制震荡
    • 梯度下降的主要方向是此前累积的下降方向,略微向当前时刻的方向调整
  3. SGD with Nesterov Acceleration

    • look ahead SGD-momentum
    • 在local minima的时候,四周没有下降的方向,但是如果走一步再看,可能就会找到优化方向
    • 先跟着累积动量走一步,求梯度:$g_t = \nabla f(w_t-\alpha m_{t-1}/\sqrt {V_{t-1}})$
    • 用这个点的梯度方向来计算滑动平均,并更新梯度
  4. Adagrad

    • 引入二阶动量,开启“自适应学习率”,$V_t = \sum_0^t g_k^2$,度量历史更新频率
    • 对于经常更新的参数,我们已经积累了大量关于它的知识,不希望被单个样本影响太大,希望学习速率慢一些;对于偶尔更新的参数,我们了解的信息太少,希望能从每个偶然出现的样本身上多学一些,即学习速率大一些
    • $\eta_t = \alpha m_t / \sqrt{V_t}$,本质上为每个参数,对学习率分别rescale
    • 缺点:二阶动量单调递增,导致学习率单调衰减,可能会使得训练过程提前结束
  5. AdaDelta/RMSProp

    • 参考momentum,对二阶动量也计算滑动平均,$V_t = \beta_2 V_{t-1} + (1-\beta_2)g_t^2$
    • 避免了二阶动量持续累积、导致训练过程提前结束
  6. Adam

    • 集大成者:把一阶动量和二阶动量都用起来,Adaptive Momentum
      • SGD-M在SGD基础上增加了一阶动量
      • AdaGrad和AdaDelta在SGD基础上增加了二阶动量
    • 一阶动量滑动平均:$m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t$
    • 二阶动量滑动平均:$V_t = \beta_2 V_{t-1} + (1-\beta_2)g_t^2$
  7. Nadam

    • look ahead Adam
    • 把Nesterov的one step try加上:$g_t = \nabla f(w_t-\alpha m_{t-1}/\sqrt {V_{t-1}})$
    • 再Adam更新两个动量
  8. 经验超参

    • $momentum=0.9$
    • $\beta_1=0.9$
    • $\beta_2=0.999$
    • $m_0 = 0$
    • $V_0 = 0$
    • 上面的图上可以看出,初期的$m_t$和$V_t$会无限接近于0,此时可以进行误差修正:$factor=\frac{1}{1-\beta^t}$
  9. AdamW

    • 在adaptive methods中,解耦weight-decay和loss-based gradient在ERM过程中的绑定downscale的关系
    • 实质就是将导数项后移