Adam优化器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Adam优化器相关的知识,希望对你有一定的参考价值。

参考技术A (1)SGD

(2)mini-batch SGD

这种算法能够带来很好的训练速度,但是在到达最优点的时候并不能够总是真正到达最优点,而是在最优点附近徘徊;

另一个缺点就是这种算法需要我们挑选一个合适的学习率:当我们采用小的学习率的时候,会导致网络在训练的时候收敛太慢;当我们采用大的学习率的时候,会导致在训练过程中优化的幅度跳过函数的范围,也就是可能跳过最优点。

(3)Momentum(动量)

优点:网络在优化的时候网络的损失函数有一个很好的收敛速度同时又不至于摆动幅度太大。

Momentum 通过加入 ,可以加速 SGD, 并且抑制震荡

超参数设定值:  一般 γ 取值 0.9 左右。

可以使得梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,这样就可以加快收敛并减小震荡。

(4)Nesterov Accelerated Gradient

再基础上,在计算梯度时,不是在当前位置,而是未来的位置上

超参数设定值:  一般 γ 取值 0.9 左右。

(5)AdaGrad

AdaGrad与SGD的核心区别在于计算更新步长时,增加了分母:梯度平方累积和的平方根。此项能够累积各个参数gt_i的历史梯度平方,频繁更新的梯度,则累积的分母项逐渐偏大,那么更新的步长(stepsize)相对就会变小,而稀疏的梯度,则导致累积的分母项中对应值比较小,那么更新的步长则相对比较大。

AdaGrad能够自动为不同参数适应不同的学习率(平方根的分母项相当于对学习率α进进行了自动调整,然后再乘以本次梯度),大多数的框架实现采用默认学习率α=0.01即可完成比较好的收敛。

优势:在数据分布稀疏的场景,能更好利用稀疏梯度的信息,比标准的SGD算法更有效地收敛。

缺点:主要缺陷来自分母项的对梯度平方不断累积,随之时间步地增加,分母项越来越大,最终导致学习率收缩到太小无法进行有效更新。

(6)RMSProp

root mean square prop

优势:能够克服AdaGrad梯度急剧减小的问题,在很多应用中都展示出优秀的学习率自适应能力。

(7)Adam

这个算法是另一种计算每个参数的自适应学习率的方法。相当于 RMSprop + Momentum

除了像RMSprop存储了过去梯度的平方 vt 的指数衰减平均值 ,也像 momentum 一样保持了过去梯度 mt 的指数衰减平均值

β一般为0.999

由于m0/v0初始化为0,会导致mt/vt偏向于0,尤其在训练初期阶段,所以,此处需要对梯度均值mt/vt进行偏差纠正,降低偏差对训练初期的影响。

默认学习率η=0.001

完毕。

Pytorch中adam优化器的参数问题

之前用的adam优化器一直是这样的:

alpha_optim = torch.optim.Adam(model.alphas(), config.alpha_lr, betas=(0.5, 0.999),
                                   weight_decay=config.alpha_weight_decay)

没有细想内部参数的问题,但是最近的工作中是要让优化器中的部分参数参与梯度更新,其余部分不更新,由于weight_decay参数的存在,会让model.alphas都有所变化,所以想要真正部分参数

参与更新,则要关掉weight_decay

以上是关于Adam优化器的主要内容,如果未能解决你的问题,请参考以下文章

Adam优化器

Keras 中 Adam 优化器的衰减参数

Tensorflow:如何正确使用 Adam 优化器

Adam 优化器真的是 RMSprop 加动量吗?如果是,为啥它没有动量参数?

Pytorch中adam优化器的参数问题

使用 Adam 优化器在 FashionMNIST 上训练逻辑回归时出错