优化器(SGD、SGDM、Adagrad、RMSProp、Adam等)

本文详细介绍了几种常用的深度学习优化器,包括SGD、SGDM、Adagrad、RMSProp和Adam,分析了它们的优势和不足,并探讨了如何选择合适的优化器。实验结果显示,优化器的选择对模型性能有很大影响,例如在CV任务中SGDM和Adam各有优势,而在NLP任务中Adam通常更快收敛。此外,还讨论了一些优化器的变种,如SWATS、AMSGrad、AdaBound等,以及它们的特点和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 SGD

SGD全称Stochastic Gradient Descent,随机梯度下降,1847年提出。每次选择一个mini-batch,而不是全部样本,使用梯度下降来更新模型参数。它解决了随机小批量样本的问题,但仍然有自适应学习率、容易卡在梯度较小点等问题。
在这里插入图片描述

1.2 SGDM

SGDM即为SGD with momentum,它加入了动量机制,1986年提出。
在这里插入图片描述
在这里插入图片描述
如上所示,当前动量V由上一次迭代动量,和当前梯度决定。第一次迭代时V0=0,由此可得到前三次迭代的动量
在这里插入图片描述

由此可见t迭代的动量,其实是前t-1迭代的梯度的加权和。λ为衰减权重,越远的迭代权重越小。从而我们可以发现,SGDM相比于SGD的差别就在于,参数更新时,不仅仅减去了当前迭代的梯度,还减去了前t-1迭代的梯度的加权和。由此可见,SGDM中,当前迭代的梯度,和之前迭代的累积梯度,都会影响参数更新。

在这里插入图片描述

SGDM相比SGD优势明显,加入动量后,参数更新就可以保持之前更新趋势,而不会卡在当前梯度较小的点了。
在这里插入图片描述

美中不足的是,SGDM没有考虑对学习率进行自适应更新,故学习率的选择很关键。
 

1.3 Adagrad

它利用迭代次数和累积梯度,对学习率进行自动衰减,2011年提出。从而使得刚开始迭代时,学习率较大,可以快速收敛。而后来则逐渐减小,精调参数,使得模型可以稳定找到最优点。其参数迭代公式如下

在这里插入图片描述

与SGD的区别在于,学习率除以 前t-1 迭代的梯度的平方和。故称为自适应梯度下降。

Adagrad有个致命问题,就是没有考虑迭代衰减。极端情况,如果刚开始的梯度特别大,而后面的比较小,则学习率基本不会变化了,也就谈不上自适应学习率了。这个问题在RMSProp中得到了修正


1.4 RMSProp

它与Adagrad基本类似,只是加入了迭代衰减,2013年提出,如下
在这里插入图片描述

观察上式和Adagrad的区别,在于RMSProp中,梯度累积不是简单的前t-1次迭代梯度的平方和了,而是加入了衰减因子α。简单理解就是学习率除以前t-1次迭代的梯度的加权平方和。加入衰减时make sense的,因为与当前迭代越近的梯度,对当前影响应该越大。另外也完美解决了某些迭代梯度过大,导致自适应梯度无法变化的问题。

1.5 Adam


Adam是SGDM和RMSProp的结合,它基本解决了之前提到的梯度下降的一系列问题,比如随机小样本、自适应学习率、容易卡在梯度较小点等问题,2015年提出。如下

在这里插入图片描述

由上可见,mt即为动量,根号vt即为自适应学习率。加入了两个衰减系数β1和β2。刚开始所需动量比较大,后面模型基本稳定后,逐步减小对动量的依赖。自适应学习率同样也会随迭代次数逐渐衰减。𝜀则是防止除数为0,仅仅是数学计算考虑。

2 怎么选择优化器


五大优化器其实分为两类,SGD、SGDM,和Adagrad、RMSProp、Adam。使用比较多的是SGDMAdam

在这里插入图片描述

如上所示,SGDM在CV里面应用较多,而Adam则基本横扫NLP、RL、GAN、语音合成等领域。所以我们基本按照所属领域来使用就好了。比如NLP领域,Transformer、BERT这些经典模型均使用的Adam,及其变种AdamW。

3 优化器对比
CV任务实验

有人研究过几大优化器在一些经典任务上的表现。如下是在图像分类任务上,不同优化器的迭代次数和ACC间关系。
SGD > Adam?? Which One Is The Best Optimizer: Dogs-VS-Cats Toy Experiment(https://shaoanlu.wordpress.com/2017/05/29/sgd-all-which-one-is-the-best-optimizer-dogs-vs-cats-toy-experiment/

在这里插入图片描述

训练集上

在这里插入图片描述

验证集上

可见:

优化器对ACC影响也挺大的,比如上图Adam比SGD高了接近3个点。故选择一个合适的优化器也很重要。
Adam收敛速度很快,SGDM相对要慢一些,但最终都能收敛到比较好的点
训练集上Adam表现最好,但验证集上SGDM最好。可见SGDM在训练集和验证集一致性上,比Adam好。

NLP任务实验


LSTM模型上,可见Adam比SGDM收敛快很多。最终结果SGDM稍好,但也差不多。

SGDM和Adam对比

在这里插入图片描述
SGDM训练慢,但收敛性更好,训练也更稳定,训练和验证间的gap也较小。而Adam则正好相反。

4 SGDM和Adam优化
4.1 SWATS


结合了SGDM和Adam,刚开始使用Adam,使得模型快速收敛。然后使用SGDM,使模型收敛稳定。如下

在这里插入图片描述

4.2 AMSGrad


对Adam的改进在于,学习率衰减Vt变为了取max,如下。

 在这里插入图片描述

优点为

学习率可以随迭代次数单调递减,不会在某些迭代突然变大
去掉了没什么信息含量的梯度,也就是较小的梯度

4.3 AdaBound

AMSGrad处理了较大的学习率,而AdaBound则将学习率限制在一定范围内

在这里插入图片描述


4.4 Cyclical LR

针对于SGDM收敛过慢,且没有使用自适应学习率的问题,Cyclical LR提出了让学习率在一定范围内变大和变小的方法,如下

在这里插入图片描述
4.5 SGDR


和Cyclical LR类似,但增大时为阶跃增大,如下

在这里插入图片描述


4.6 RAdam

2020最新文章,

 在这里插入图片描述

 
4.7 Lookahead


参数迭代n步后,再退回来一步。以新的起点重新开始迭代,这样可以增加收敛稳定性,防止跑飞。

在这里插入图片描述
4.8 Nesterov accelerated gradient (NAG)

往future看几步,保证模型训练稳定

 在这里插入图片描述

4.9 Nadam


Adam的future版本

在这里插入图片描述
4.10 加入L2正则

 在这里插入图片描述

4.11 加入weight decay


和加入正则类似,但不同的是它加入的是weight decay。Huging Face的预训练模型广泛应用了AdamW作为优化器,需要重点掌握。

在这里插入图片描述
4.12 优化总结


总结下来,SGDM和Adam两大阵营的各种优化后的optimizer如下

 在这里插入图片描述

optimizer优化主要有四种方法:

让模型探索更多的可能,包括dropout、加入Gradient noise、样本shuffle等
让模型站在巨人肩膀上,包括warn-up、curriculum learning、fine-tune等
归一化 normalization,包括batch-norm和layer-norm等
正则化,惩罚模型的复杂度


原文链接:https://blog.csdn.net/u013510838/article/details/108268525

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值