各种优化器Optimizer原理:从SGD到AdamOptimizer

在这里插入图片描述

(一)优化器Optimizer综述:

优化器是神经网络训练过程中,进行梯度下降以寻找最优解的优化方法。不同方法通过不同方式(如附加动量项,学习率自适应变化等)侧重于解决不同的问题,但最终大都是为了加快训练速度。

对于这些优化器,有一张图能够最直接地表现它们的性能:
在这里插入图片描述

这里就介绍几种常见的优化器,包括其原理、数学公式、核心思想及其性能;

这些优化器可分为三大类:

  1. 基本梯度下降法,包括标准梯度下降法(GD, Gradient Descent),随机梯度下降法(SGD, Stochastic Gradient Descent)及批量梯度下降法(BGD, Batch Gradient Descent);
  2. 动量优化法,包括标准动量优化方法(MomentumOptimizer)、牛顿加速梯度动量优化方法(NAG, Nesterov accelerated gradient)等;
  3. 自适应学习率优化算法,包括AdaGrad算法,RMSProp算法,Adam算法等;

(二)基本梯度下降法

2.0 核心思想:

即针对每次输入的训练数据,计算输出预测与真值的Loss的梯度;

2.1 标准梯度下降法(GD,Gradient Descent)

2.1.1 数学公式:

在这里插入图片描述
参数解析:

  1. 其中 Wt 表示当前时刻网络中的变量(包括权重weights、偏置biases和卷积核等),即参与梯度下降的变量;Wt+1 表示更新后的变量;
  2. ηt 表示学习率;
  3. J是损失函数(即所有样本X的预测值与真实值的Loss),则 ΔJ(Wt) 表示损失函数 J 对 Wt 中的变量的偏导;

从表达式来看,网络中参数的更新,是不断向着最小化Loss函数的方向移动的:
在这里插入图片描述

2.1.2 优缺点:

标准梯度下降法(Gradient Descent)最大的优点就是简单易懂,即对于相应的最优解(这里认为是Loss的最小函数),每次变量更新都是沿着局部梯度下降最快的方向,从而最小化损失函数。

扫描二维码关注公众号,回复: 8538756 查看本文章

缺点就是:

  1. 如上图所示,局部梯度下降最大的方向,并非一定是最优解的方向,并且每次训练都要遍历所有样本,导致训练速度较慢;
  2. 容易陷入局部最优点,即落入鞍点;此时每次计算时,梯度都为0或者是一个很小的数,导致被困在局部最优点,而不能到达全局最优点;
  3. 注意有的文章认为,由于输入变量的维度一般较高,很少存在或者说很少能够陷入每一维都是局部最优点构成的鞍点,因此这里存疑;

在这里插入图片描述

2.2 批量梯度下降法(BGD, Batch Gradient Descent)

2.2.1 数学公式:

在这里插入图片描述
不同于标准梯度下降法(Gradient Descent)一次计算所有数据样本的Loss并计算相应的梯度,批量梯度下降法(BGD, Batch Gradient Descent)每次只取一个小批次的数据及其真实标签进行训练,称这个批次为mini-batch;

其中:

  1. X(i),Y(i) 是一个mini-batch 的输入数据和真实标签;
  2. ΔJ(Wt) 是这个 mini-batch 的数据的Loss;

2.2.2 优缺点:

缺点是随机梯度下降法的 batch size 选择不当可能导致模型难以收敛;

优点是:

  1. 每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。
  2. 由于矩阵的并行计算,训练速度并不会比每次训练单个样本慢;
  3. 加快模型收敛速度;

2.3 随机梯度下降法(SGD,Stochastic Gradient Descent)

2.3.1 数学公式:

在这里插入图片描述
其中 gt 是单个样本对权重等参数的偏导;

即训练时,每次只从一批训练样本中随机选取一个样本进行梯度下降;对随机梯度下降来说,只需要一次关注一个训练样本,一点点把参数朝着全局最小值的方向进行修改了。

2.3.2 优缺点:

缺点是:

  1. 梯度下降速度比较慢,而且每次梯度更新时往往只专注与局部最优点,而不会恰好指向全局最优点;
  2. 单样本梯度更新时会引入许多噪声(跟训练目标无关的特征也会被归为该样本分类的特征);

优点是:

当处理大量数据时,比如SSD或者faster-rcnn等目标检测模型,每个样本都有大量候选框参与训练,这时使用随机梯度下降法能够加快梯度的计算。

在这里插入图片描述

(三)动量优化法

3.0 核心思想:

动量优化方法是在梯度下降法的基础上进行的改变,具有加速梯度下降的作用;

其核心思想就是,使当前训练数据的梯度受到之前训练数据的梯度的影响,其中之前的梯度乘上一个权重值λ(λ<1),就成为动量项(注意这里把梯度看作了有方向的向量)。而且随着迭代次数的增加,越往前的梯度对当前梯度的影响就越小。

不使用动量优化时,每次训练的梯度下降方向,都是按照当前批次训练数据计算的,可能并不能代表整个数据集,并且会有许多噪声,下降曲线波动较大:
在这里插入图片描述

添加动量项之后,能够有效减小波动,从而加快训练速度:
在这里插入图片描述

3.1 标准动量优化方法(MomentumOptimizer)

3.1.1 数学公式:

在这里插入图片描述
Vt 的计算如图,是上一次训值练的 Vt-1 × 衰减率α + 学习率η × 损失函数的偏导;

其中 Vt 是 t 时刻权重更新的值,即 Wt+1 = Wt - Vt;衰减率α通常取0.9;

用向量图表示为:
在这里插入图片描述

3.1.2 优缺点:

优点:

  1. 通过动量更新,参数向量会在有持续梯度的方向上增加速度;
  2. 使梯度下降时的折返情况减轻,从而加快训练速度;

缺点:

如果数据集分类复杂,会导致 Vt-1t时刻梯度 向量方向相差较大;在进行向量求和时,得到的 Vt 会非常小,反而使训练速度大大下降甚至模型难以收敛。

3.2 牛顿加速梯度动量优化方法(NAG, Nesterov accelerated gradient)

在这里插入图片描述

3.2.1 数学公式:

在这里插入图片描述
这里与Momentum梯度动量优化法不同的是,在计算参数梯度之前,会超前一个动量单位,即图中计算的是损失函数对 Wt - α×Vt-1的偏导,相当于对于Momentum多了一个本次梯度相对上次梯度的变化量。
在这里插入图片描述

3.2.2 优缺点:

在这里插入图片描述
如图,蓝色的是Momentum梯度动量优化法的下降方向,即如果多次梯度累计方向大致相同,会导致最终下降步幅过大;

故NAG可以有效利用损失函数的近似二阶导,从而加快收敛速度。

更详细的解读看这里:知乎《比Momentum更快:揭开Nesterov Accelerated Gradient的真面目》

(四)自适应学习率优化算法

4.0 核心思想:

自适应学习率优化算法针对于机器学习模型的学习率,采用不同的策略来调整训练过程中的学习率,从而大大提高训练速度。

4.1 Adam算法(Adaptive moment estimation)

4.1.1 数学公式:

在这里插入图片描述
其中,mt和vt分别为一阶动量项和二阶动量项。β1,β2为动力值大小(通常分别取0.9和0.999);

m^ t,v^ t分别为各自的修正值。Wt表示t时刻即第t迭代模型的参数;

gt表示t次迭代代价函数关于WW的梯度大小;

ϵ是一个取值很小的数(一般为1e-8,为了避免分母为0);

4.1.2 优缺点:

优点:

  1. 计算高效;
  2. 梯度平滑、稳定的过渡,可以适应不稳定的目标函数;
  3. 调参相对简单,默认参数就可以处理绝大部分的问题

4.2 AdaGrad算法(Adaptive Gradient Algorithm)

4.2.1 数学公式:

在这里插入图片描述

AdaGrad的核心思想是,缩放每个参数反比于其所有梯度历史平均值总和的平方根。具有代价函数最大梯度的参数相应地有较大的学习率,而具有小梯度的参数又较小的学习率。

式中,i表示第i个分类,t表示第t迭代同时也表示分类i累计出现的次数。η0表示初始的学习率取值(一般为0.01)。

4.2.3 优缺点:

优点是:

  1. AdaGrad算法能够随着训练过程自动减小学习率;
  2. 对于分布稀疏或者不均衡的数据集,AdaGrad算法在学习率上有很好的适应性;

缺点是:

随着迭代次数增多,学习率会越来越小,最终会趋近于0;

4.3 RMSProp算法

4.3.1 数学公式:

在这里插入图片描述

RMSProp算法修改了AdaGrad的梯度积累为指数加权的移动平均。

如图,E[g2]t 表示前 t 次的梯度平方的均值,其余参数跟上面的类似。

4.3.2 优缺点:

优点:

由于取了个加权平均,避免了学习率越来越低的的问题,而且能自适应地调节学习率。

(五)各种优化器的可视化比较:

(示例一)

在这里插入图片描述

(示例二)

在这里插入图片描述

(示例三)

在这里插入图片描述

发布了58 篇原创文章 · 获赞 117 · 访问量 6791

猜你喜欢

转载自blog.csdn.net/weixin_44936889/article/details/103797860