常用优化器的详细解析请参考此文章:

  1. 通俗理解 Adam 优化器
  2. #深度解析# 深度学习中的SGD、BGD、MBGD、Momentum、NAG、Adagrad、Adadelta,RMSprop、Adam优化器

1. Adam 和 MSGD

Adam和MSGD作为当今最优秀的两种深度学习优化器,分别在效率和精度上有着各自的优势,下面我们将分析两种优化器各自优势的原因,两边的两张图分别是 几种常见的优化器在猫狗分类数据集上的分类准确率曲线,第一个是训练集,第二个是测试集
在这里插入图片描述
在这里插入图片描述
以下两张图是某个NLP任务中,几种模型的准确率和困惑度指标变换曲线
在这里插入图片描述

在这里插入图片描述

通过上边两幅图片可知:

  1. Adam在训练集上的准确率较高,MSGD在测试集上的准确率较高
  2. Adam的速度更快,但MSGD能够得到好的效果

第一个结论可以用下边这个图来解释:
在这里插入图片描述
虽然测试集和训练集都来自同一数据集,但是测试集和训练集在数据分布上还是有着些许偏差(或者说参数的最优值存在细微偏差);同一个损失函数可能包含多个最优解,而这些最优解又可以分为 Flat Minimum 和 Sharp Minimum,其中测试集和训练集上 Flat Minimum 重合的几率较大,Sharp Minimum 重合的几率较小(如上图所示);因此在训练集上得到的是 Flat Minimum,那么在测试集也能得到 Minimum 值得概率会很大,我们要尽可能的得到 Flat Minimum

Adam 得到最优解多数时候是 Sharp Minimum,而 MSGD 得到往往是Flat Minimum,这也就解释了为什么MSGD在测试集上能够得到更好的效果

至于第二个结论,原因是 Adam 在 MSGD的基础上增加了自适应学习率机制,能够使Adam针对不同的参数分配不同的学习率,从而增加优化速度

2. SWATS

通过上述分析我们得知,Adam在前期优化速度较快,SGDM在后期优化精度较高;SWATS算法在提出在前期使用Adam算法,后期使用SGDM算法,从而在保证算法精度的同时,提高了算法的速度,但此算法存在两个问题:何时切换和如何切换两种算法,因为原作者并并没有针对这两个问题给出确切的解决方案,因此SWATS算法的应用并不是很广泛
在这里插入图片描述

3. Adam + warm-up

首先我们看一下Adam 在使用 warm-up前后的区别。
下图横轴代表模型中参数中梯度的绝对值大小,纵轴代表迭代次数,高度代表当前迭代次数下当前梯度大小的参数数量
在这里插入图片描述
通过上图可知,没有使用warm-up的Adam算法,在算法初期(图二)梯度大小分布较为复杂(梯度数值跨度较大),而使用warm-up的Adam梯度值分布较为集中

4. Lookahead(k step forward,1 step back)

Lookahead(k step forward,1 step back)本质上是一种在各种优化器上层的一种优化器方法,内部可以使用任何形式的优化器,用作者的话说就是:universal wrapper for all optimizers
Lookahead 的就是:没使用优化器向前走k步,就对当前的第1步和第k步做一个加权平均(忽略中间的k-2步);以下图为例,蓝色线是优化器走的k步路径,然后将蓝线的起始点连接(图中红线),然后在红线上取一点作为k+1步的值(根据 α 而定)

在这里插入图片描述
Lookahead 的伪代码如下:
在这里插入图片描述
其中 optim() 为任意优化器得到的值

5. AdamW 和 SGDWM

在神经网络中,为了提高网络的泛化性我们一般会在损失函数中增加 L2 正则,这种网络使用Adam和SGDM优化器会出现问题

下图是三种优化器计算权重更新值的过程(损失函数中包含L2正则):
在这里插入图片描述
我们得到的 m t m_t mt v t v_t vt都多出了一个 γ θ t − 1 γθ_{t-1} γθt1,为了解决这个问题,2017年提出了 AdamW 和 SGDWM 优化器,这两种优化器将 γ θ t − 1 γθ_{t-1} γθt1 放到了 m t m_t mt v t v_t vt 外,AdamW 和 SGDWM 优化器的公式如下:
在这里插入图片描述
注:著名的Bert模型(PyTorch)中使用的 Adam优化器就是 AdamW优化器

6. SGDM 和 Adam 应用

SGDM 和 Adam 应用请参考下表:
在这里插入图片描述

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐