date: 2018/04/10

update: 2020/03/22

時雨 - 川嶋あい:喜欢川岛爱的忧柔,说起来川岛爱也是“撑起华语乐坛半边天”的日本歌手


参考:


常见的加速训练技术:


常见优化器

传统梯度下降(Stochastic Gradient Descent, SGD)

参考:《机器学习-吴恩达 - 绪论、线性回归与逻辑回归 - 梯度下降算法 | Hey~YaHei!

固定的下降速度


动量法(Momentum)

论文:《Some methods of speeding up the convergence of iteration methods(1964)

Momentum其实不该称为“优化器”,而是一种利用一阶动量信息加速训练过程的方法、思路。

主要思想:参数更新时在一定程度上保留之前更新的方向,同时又利用当前batch的梯度微调最终的更新方向,简言之就是通过积累之前的动量来加速当前的梯度。

引入新的超参数 与先前的 相乘,以继承先前的动量,并防止动量过快增长;

SGD可以看作是的情形;

动量法相当于对参数的更新量做了平滑累积,每次迭代的更新量都包含了前几次更新量的效应。


记第次迭代中,则有,展开有

考虑,则

时,,梯度下降速度为SGD的倍。


时为完全摩擦(退化为传统梯度下降);

时为完全光滑;

通常来说取,此时梯度下降速度理论上变为传统梯度下降的10倍。


涅斯捷罗夫加速梯度(Nesterov Accelerated Gradient, NAG)

论文:《A method of solving a convex programming problem with convergence rate O(1/k^2)(1983)

  1. 首先按照之前的动量
  2. 得到一个近似的更新后的参数
  3. 在那个近似的更新后参数上计算梯度,作为实际更新方向的修正值
  4. 在原始动量上增加一个修正项nesterov项,也就变成了

NAG是动量法的变体,比动量法更快,而且振荡更小;

11.3Nesterov.png


AdaGrad

论文:《Adaptive Subgradient Methods for Online Learning and Stochastic Optimization(2011)

主要思想:对低频的参数做较大的更新,对高频的做较小的更新。相比于考虑一阶动量的优化器,二阶动量的优化器相当于把损失平面拉成一个曲面,可以有效的避开鞍点。

通常取来防止的情况;

本质是为学习率增加一个感知损失累积效应的因子来动态调整学习率,训练前期较小,等效学习率较大,训练速度比较快;随着训练过程的推进,逐渐增大,等效学习率降低,减小振荡的出现,便于找到局部最优点。


考虑两权重梯度差异显著的情况(如图,平缓陡峭),

传统的梯度下降,会在陡峭的上很快到达一个比较的位置,而平缓的方向上梯度下降缓慢;

而AdaGrad能够响应这种特殊情况,从而加速梯度下降。

11.3AdaGrad.png


RMSProp

该优化器由eoffrey Hinton在其课堂上提出,而没有形成正式的论文,研究者通常用 slide 29 in lecture 6 来引用它, 幻灯片  视频 

RMSProp是AdaGrad的变体,在AdaGrad的基础上增加了一个指数平滑平均的效果(通常取),解决了AdaGrad学习率衰减偏快的问题。


Adam

论文:《ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION(2015)

参考:《Adam那么棒,为什么还对SGD念念不忘 (2)—— Adam的两宗罪 | 知乎, Juliuszh

分别是对梯度的一阶动量和二阶动量,是对的无偏估计;

通常,取


Adam集成了动量法和RMSProp的思想,但也并非完美无缺的,事实上有不少吐槽Adam的论文以及改进思路:

  1. On the Convergence of Adam and Beyond (ICLR2018)》指出,与固定学习率的SGD、动量法、NAG和二阶动量单调递增的AdaGrad不同,RMSProp和Adam的二阶动量时大时小,有可能出现振荡突变的情况,从而使学习率发生振荡致使模型无法收敛。并提出改进思路,迫使二阶动量单调递增;

    

  1. The Marginal Value of Adaptive Gradient Methods in Machine Learning (NIPS2017)》指出,AdaGrad、RMSProp、Adam等自适应学习率优化器有可能在训练早期对特征过拟合,后期出现的特征难以纠正前期的拟合结果
  2. Improving Generalization Performance by Switching from Adam to SGD (2017)》指出Adam有可能在训练后期学习率太低,影响了有效的收敛,但可以通过为Adam的等效学习率设置下限来避免。同时也提出采用Adam+SGD的方法,在前期用Adam较快收敛,后期用SGD做细致的训练,至于何时切换优化器、如何确定SGD的学习率,作者也给出了一些操作方法。
  3. 但这些论文都是基于某些特定的、相对极端的例子提出质疑,事实上在实操中多数情况下Adam都能工作的不错。我们可以在模型设计和验证的初期采用Adam优化器,到了真正需要细致调整的阶段,再改用稳定的NAG优化器或者Adam+SGD的方式进行训练。


总结比较

SGD

动量

AdaGrad

NAG

RMSProp

Adam

       

注意:除了SGD以外的优化器都需要保存上一次迭代的某一个状态,其数量等于模型的参数数量,这在训练过程中将是一笔不可忽视的额外内存开销。


参考:《An overview of gradient descent optimization algorithms


Jacobian优化 & Hessian优化

以上讨论都是基于一次偏导的Jacobian矩阵,实际上用基于二次偏导的Hessian矩阵可以取得更好的优化效果。

但这很难应用到DNN上,因为每层都会输出个Hessian矩阵(如果是Jacobian,只需要n个),其中n是参数数量,而DNN参数数量大的惊人,所以基于Hessian的优化反而会因为计算大量的Hessian矩阵而速度下降并且需要大量的空间来进行计算。


学习计划(Learning Schedules)

如图,当学习率太低时训练过慢,学习率太高时不容易得到最优解;

可以在开始训练时给一系列不同的学习率跑一小段时间,比较它们的loss曲线,来确定一个比较合适的学习率;

11.3learning_rate.png


学习率衰减

    

为迭代次数,是人工设置的超参数,学习率每步衰减一次


通常取,有点类似Exponential scheduling,但衰减速度稍微慢一些


论文《AN EMPIRICAL STUDY OF LEARNING RATES IN DEEP NEURAL NETWORKS FOR SPEECH RECOGNITION(2013) 》比较了一些主流的学习计划——

在语音识别任务中使用动量法优化的前提下,

  1. Performance Scheduling和Exponential Scheduling都表现的很好
  2. 但是Exponential Scheduling容易实现、容易调整、收敛更快


周期性学习率挖坑待填