深度学习 | 优化算法

优化算法有哪些?

  • 1 什么是优化算法?
  • 2 有哪些优化算法?
    • 2.1 SGD
      • 2.1.1 思想
      • 2.1.2 公式
    • 2.2 SGDM
      • 2.2.1 原理
      • 2.2.2 图解
      • 2.2.3 公式
    • 2.3 NAG
      • 2.3.1 思想
      • 2.3.2 公式
    • 2.4 AdaGrad
      • 2.4.1 思想
      • 2.4.2 公式
    • 2.5 AdaDelta / / RMSProp
      • 2.5.1 思想
      • 2.5.2 公式
    • 2.6 Adam
      • 2.6.1 思想
      • 2.6.2 公式
      • 2.6.3 评价
    • 2.7 Nadam
      • 2.7.1 思想
      • 2.7.2 公式
  • 3 其余tips
    • 3.1 到底该用Adam还是SGD?
    • 3.2 组合策略:Adam+SGD
  • 参考

1 什么是优化算法?

深度学习优化算法经历了 SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam 这样的发展历程。

那什么是优化算法呢?

无论是机器学习还是深度学习,训练的目的在于不断更新参数,优化目标函数(比如最小化损失函数),而这个优化的方法可以有很多不同的方式,最经典的就是梯度下降了,之后还衍生出了上述很多种方法!

小结:优化算法就是在优化目标函数的时候采用的不同算法,不同算法在更新参数的时候用到的方法不同,最经典的算法就是SGD,随机梯度下降。

2 有哪些优化算法?

首先引用一个贼牛逼的框架,可以将下述所有的优化算法囊括到:
深度学习 | 优化算法_第1张图片

  • 其中第3和第4步均是一致的,主要区别在于1和2上!

2.1 SGD

2.1.1 思想

即随机梯度下降。传统的梯度下降的时候,每次更新参数用到了所有的样本,而随机梯度下降则是每次随机抽取一个样本来更新参数!所以速度会更快!

其实梯度下降整体来说有三种具体分类:

  • GD。每次全部样本更新参数
  • SGD。每次随机抽取一个样本更新参数
  • MBGD。每次抽取m个样本进行更新参数。

2.1.2 公式

深度学习 | 优化算法_第2张图片

  • SGD最大的缺点下降速度慢,而且可能会在沟壑的两边持续震荡,陷入局部最优,停留在一个局部最优点。

2.2 SGDM

2.2.1 原理

即SGD with Momentum。在随机梯度中引入了动量 Momentum 的概念。

  • SGD+一阶动量
  • SGD的时候每次前进的方向都是负梯度的方向
  • SGDM就是不仅仅考虑负梯度方向,还考虑此时动量的方向(上一步的前进方向的惯性方向),然后将两个方向进行合并,即下一步更新参数的方向!
  • SGDM可以抑制SGD的震荡。下坡的时候,如果发现是陡坡,那就利用惯性跑的快一些。SGDM全称是SGD with momentum,在SGD基础上引入了一阶动量。

2.2.2 图解

深度学习 | 优化算法_第3张图片
深度学习 | 优化算法_第4张图片

2.2.3 公式

在这里插入图片描述
此时没有引入二阶动量的概念,故 V t = I 2 V_t=I^2 Vt=I2

2.3 NAG

2.3.1 思想

  • NAG全称Nesterov Accelerated Gradient,在步骤1进行了改进,即求梯度的时候!
  • 我们知道在时刻t的主要下降方向是由累积动量决定的,自己的梯度方向说了也不算,那与其看当前梯度方向,不如先看看如果跟着累积动量走了一步,那个时候再怎么走

2.3.2 公式

在这里插入图片描述

2.4 AdaGrad

2.4.1 思想

  • SGD+二阶动量
  • 对于经常更新的参数,我们已经积累了大量关于它的知识,不希望被单个样本影响太大,希望学习速率慢一些;对于偶尔更新的参数,我们了解的信息太少,希望能从每个偶然出现的样本身上多学一些,即学习速率大一些。引入二阶动量的概念!即所有梯度的平方和
  • 这一方法在稀疏数据场景下表现非常好。但也存在一些问题,学习率单调递减至0,可能会使得训练过程提前结束,即便后续还有数据也无法学到必要的知识。

2.4.2 公式

深度学习 | 优化算法_第5张图片

  • 即二阶动量的概念引入了,一阶动量=梯度。

2.5 AdaDelta / / RMSProp

2.5.1 思想

  • SGD+二阶动量
  • 引入二阶动量的概念,一阶动量=梯度
  • 但RMSProp和AdaGrad的区别在于,它在二阶动量之间加入了Delta系数,所以被称为AdaDelta!

2.5.2 公式

深度学习 | 优化算法_第6张图片
在这里插入图片描述

  • 可以解决二阶动量持续累积、导致训练过程提前结束的问题了。

2.6 Adam

2.6.1 思想

  • Adam = Adaptive + Momentum
  • 引入了SGDM一阶动量+AdaDelta的二阶动量
  • 两个参数 β 1 、 β 2 \beta_1 、\beta_2 β1β2分别控制一阶动量和二阶动量。

2.6.2 公式

深度学习 | 优化算法_第7张图片
深度学习 | 优化算法_第8张图片

2.6.3 评价

缺点:

  • 可能不收敛
  • 可能错过全局最优解

2.7 Nadam

2.7.1 思想

  • Nesterov(修改梯度计算方式) + Adam = Nadam
  • 集成了Nesterov和Adam两种方法

2.7.2 公式

深度学习 | 优化算法_第9张图片

3 其余tips

3.1 到底该用Adam还是SGD?

  • 理解数据对于设计算法的必要性。优化算法的演变历史,都是基于对数据的某种假设而进行的优化,那么某种算法是否有效,就要看你的数据是否符合该算法的胃口了。

  • 算法固然美好,数据才是根本。

  • 充分理解数据的基础上,依然需要根据数据特性、算法特性进行充分的调参实验,找到自己炼丹的最优解。而这个时候,不论是Adam,还是SGD,于你都不重要了。

3.2 组合策略:Adam+SGD

  • 先用Adam快速下降,再用SGD调优

实现问题有两个问题:

  • Q1:什么时候切换?
  • Q2:学习率如何设置?(因为Adam是二阶动量的学习率,而SGD没有二阶动量的概念)

Q1:当 SGD的相应学习率的移动平均值基本不变的时候。即每次迭代的时候(Adam作为优化器)都计算一下SGD接班人的相应学习率,如果发现基本稳定了,换用SGD。

Q2:SGD在Adam下降方向上的正交投影,应该正好等于Adam的下降方向(含步长)

参考

  • 知乎清华大神:https://zhuanlan.zhihu.com/p/32230623
  • 梯度下降的三种形式:https://blog.csdn.net/qq_27782503/article/details/88778831#_30
  • 评价Adam:https://zhuanlan.zhihu.com/p/32262540
  • 组合策略:https://zhuanlan.zhihu.com/p/32338983
  • 台大 李宏毅老师课件PPT:http://speech.ee.ntu.edu.tw/~tlkagk/courses/ML_2016/Lecture/DNN tip.pdf

你可能感兴趣的:(深度学习,机器学习,优化算法)