1 什么是优化算法?

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

那什么是优化算法呢?

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

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

2 有哪些优化算法?

首先引用一个贼牛逼的框架,可以将下述所有的优化算法囊括到:
在这里插入图片描述

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

2.1 SGD

2.1.1 思想

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

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

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

2.1.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 图解

在这里插入图片描述
在这里插入图片描述

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 公式

在这里插入图片描述

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

2.5 AdaDelta / / RMSProp

2.5.1 思想

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

2.5.2 公式

在这里插入图片描述
在这里插入图片描述

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

2.6 Adam

2.6.1 思想

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

2.6.2 公式

在这里插入图片描述
在这里插入图片描述

2.6.3 评价

缺点:

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

2.7 Nadam

2.7.1 思想

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

2.7.2 公式

在这里插入图片描述

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的下降方向(含步长)

参考

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐