从sgd到adam深度学习优化算法概览_第1页
从sgd到adam深度学习优化算法概览_第2页
从sgd到adam深度学习优化算法概览_第3页
从sgd到adam深度学习优化算法概览_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、从 SGD 到 Adam 深度学习优化算法概览 (一 ) 楔子前些日在写计算数学课的期末读书报告,我选择的 主题是分析深度学习中的各个优化算法 。在此前的工作 中,自己通常就是无脑 Adam 大法好,而对算法本身的 内涵不知所以然。一直希望能抽时间系统的过一遍优化算法 的发展历程,直观了解各个算法的长处和短处。这次正好借 着作业的机会,补一补课。本文主要借鉴了 Juliuszh 的 文章 1思路,使用一个 general 的框架来描述各个梯度下降 变种算法。实际上,本文可以视作对 1 的重述,在此基础上, 对原文描述不够详尽的部分做了一定补充,并修正了其中许 多错误的表述和公式。另一主要参考文

2、章是 Sebastian Ruder 的综述 2 。该文十分有名, 大概是深度学习优化算法 综述中质量最好的一篇了。建议大家可以直接阅读原文。本 文许多结论和插图引自该综述。对优化算法进行分析和比较 的文章已有太多,本文实在只能算得上是重复造轮,旨在个 人学习和总结。希望对优化算法有深入了解的同学可以直接 查阅文末的参考文献。引言最优化问题是计算数学中最为重 要的研究方向之一。而在深度学习领域,优化算法的选择也 是一个模型的重中之重。即使在数据集和模型架构完全相同 的情况下,采用不同的优化算法,也很可能导致截然不同的 训练效果。梯度下降是目前神经网络中使用最为广泛的优化算法之一。为了弥补朴素梯

3、度下降的种种缺陷,研究者们发 明了一系列变种算法, 从最初的 SGD ( 随机梯度下降 ) 逐步 演进到 NAdam 。然而,许多学术界最为前沿的文章中,都 并没有一味使用 Adam/NAdam 等公认“好用”的自适应算法, 很多甚至还选择了最为初级的 SGD 或者 SGD with Momentum 等。本文旨在梳理深度学习优化算法的发展历 程,并在一个更加概括的框架之下,对优化算法做出分析和 对比。 Gradient Descent 梯度下降是指,在给定待优化的模 型参数 和目标函数 后,算法通过沿梯度 的相反方向更 新 来最小化 。学习率 决定了每一时刻的更新步长。对 于每一个时刻 ,我

4、们可以用下述步骤描述梯度下降的流程: (1) 计算目标函数关于参数的梯度 (2) 根据历史梯度计算一 阶和二阶动量 (3) 更新模型参数 其中, 为平滑项, 防止 分母为零,通常取 1e-8 。 Gradient Descent 和其算法变种 根据以上框架,我们来分析和比较梯度下降的各变种算法。 Vanilla SGD 朴素 SGD (Stochastic Gradient Descent)最为简单,没有动量的概念,即 这时,更新步骤就是最简 单的 SGD 的缺点在于收敛速度慢,可能在鞍点处震荡。并 且,如何合理的选择学习率是 SGD 的一大难点。 MomentumSGD 在遇到沟壑时容易陷入

5、震荡。为此,可以 为其引入动量 Momentum3 ,加速 SGD 在正确方向的下 降并抑制震荡。 SGD-M 在原步长之上, 增加了与上一时刻 步长相关的 , 通常取 0.9 左右。这意味着参数更新方向 不仅由当前的梯度决定,也与此前累积的下降方向有关。这 使得参数中那些梯度方向变化不大的维度可以加速更新,并 减少梯度方向变化较大的维度上的更新幅度。由此产生了加 速收敛和减小震荡的效果。 图 1(a): SGD 图 1(b): SGD with momentum 从图 1 中可以看出,引入动量有效的加速了梯 度下降收敛过程。 Nesterov Accelerated Gradient 图 2

6、: Nesterov update 更进一步的,人们希望下降的过程更加智 能:算法能够在目标函数有增高趋势之前,减缓更新速率。 NAG 即是为此而设计的,其在 SGD-M 的基础上进一步改 进了步骤 1 中的梯度计算公式: 参考图 2,SGD-M 的步 长计算了当前梯度(短蓝向量)和动量项 (长蓝向量)。然 而,既然已经利用了动量项来更新 ,那不妨先计算出下一 时刻 的近似位置 (棕向量),并根据该未来位置计算梯度 (红向量),然后使用和 SGD-M 中相同的方式计算步长 (绿 向量)。这种计算梯度的方式可以使算法更好的“预测未来”, 提前调整更新速率。 AdagradSGD 、 SGD-M

7、和 NAG 均是 以相同的学习率去更新 的各个分量。而深度学习模型中往 往涉及大量的参数,不同参数的更新频率往往有所区别。对 于更新不频繁的参数 (典型例子: 更新 word embedding 中 的低频词),我们希望单次步长更大,多学习一些知识;对 于更新频繁的参数,我们则希望步长较小,使得学习到的参数更稳定, 不至于被单个样本影响太多。 Adagrad4 算法即 可达到此效果。 其引入了二阶动量: 其中, 是对角矩阵, 其元素 为参数第 维从初始时刻到时刻 的梯度平方和。 此时,可以这样理解:学习率等效为 。对于此前频繁更新 过的参数,其二阶动量的对应分量较大,学习率就较小。这 一方法在

8、稀疏数据的场景下表现很好。 RMSprop 在 Adagrad 中, 是单调递增的,使得学习率逐渐递减至0,可能导致训练过程提前结束。为了改进这一缺点,可以考虑 在计算二阶动量时不累积全部历史梯度,而只关注最近某一 时间窗口内的下降梯度。根据此思想有了 RMSprop 。记 为 ,有 其二阶动量采用指数移动平均公式计算,这样即 可避免二阶动量持续累积的问题。 和 SGD-M 中的参数类似, 通常取 0.9 左右。 Adadelta 待补充 AdamAdam5 可以认 为是前述方法的集大成者。 和 RMSprop 对二阶动量使用指 数移动平均类似, Adam 中对一阶动量也是用指数移动平均 计算

9、。 此外,对一阶和二阶动量做偏置校正, 再进行更 新, 可以保证迭代较为平稳。 NAdam 待补充可视化分析图 3: SGD optimization on loss surface contours图 4: SGDoptimization on saddle point 图 3 和图 4 两张动图直观的 展现了不同算法的性能。 (Image credit: Alec Radford) 图 3 中,我们可以看到不同算法在损失面等高线图中的学习过程, 它们均同同一点出发,但沿着不同路径达到最小值点。其中Adagrad 、Adadelta 、RMSprop 从最开始就找到了正确的方 向并快速收敛;

10、 SGD 找到了正确方向但收敛速度很慢; SGD-M 和 NAG 最初都偏离了航道,但也能最终纠正到正 确方向, SGD-M 偏离的惯性比 NAG 更大。图 4 展现了 不同算法在鞍点处的表现。这里, SGD 、SGD-M 、NAG 都 受到了鞍点的严重影响,尽管后两者最终还是逃离了鞍点; 而 Adagrad 、 RMSprop 、 Adadelta 都很快找到了正确的方 向。关于两图的讨论,也可参考 2 和6 。可以看到,几种自 适应算法在这些场景下都展现了更好的性能。讨论、选择策 略读书报告中的讨论内容较为杂乱,该部分待整理完毕后再 行发布。 References1 Adam 那么棒,为什么还对 SGD 念 念不忘 (1) 一个框架看懂优化算法 2 An overview of gradient descent optimization algorithms3 On the momentum term in gradient descent learning algorithms4 Adaptive

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论