马春杰杰博客
致力于深度学习经验分享!

介绍深度学习优化算法:从SGD到NADAM

文章目录
[隐藏]

  深度学习优化算法经历了 SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam 这样的发展历程。我们结合CS231n课程中的讲解来比较一下这些优化算法的优缺点。

1 SGD 随机梯度下降

SGD示意图:

介绍深度学习优化算法:从SGD到NADAM

缺点:

介绍深度学习优化算法:从SGD到NADAM

 SGD最大的缺点是下降速度慢(下降速度固定),而且可能会在沟壑的两边持续震荡,停留在一个局部最小值。当遇到鞍点时,由于梯度为0而无法下降。

2 SGD+Momentum(SGDM) 带动量的SGD

由于加入了速度值,能够更快收敛,在鞍点虽然梯度为0,仍然可以下降。

介绍深度学习优化算法:从SGD到NADAM

SGD还有一个问题是困在局部最优的沟壑里面震荡,因此引入了Nesterov Acceleration来解决这个问题。

3 SGD with Nesterov Acceleration(NAG)

Nesterov Acceleration考虑到了动量的累积,当累积了足够的动量时就可以跳出局部最小点。由于累积动量的存在,NAG有时会忽略陡峭的局部最小值(类似于骑摩托车加速飞跃沟壑)。

以上的几种优化方法都只用到了一阶动量。但是没有考虑到的是,对于经常更新的参数,我们希望学习率低一些,对于不经常更新的参数,我们希望学习率大一些,为此引入了自适应学习率的优化算法。

4 AdaGrad

AdaGrad优化算法记录梯度的累积值,梯度累积越大,学习率越小。

缺点:

因为AdaGrad的学习率是单调递增的,会使得学习率逐渐趋向于0,可能会使得训练过程提前结束,即便后续还有数据也无法学到必要的知识。

5 AdaDelta / RMSProp

由于AdaGrad单调递减的特性导致后期学不到东西,AdaDelta只关注过去一段时间窗口的下降梯度,而不是累积全部的历史梯度。RMSProp在累积梯度的同时持续衰减累积值。这样就避免了二阶动量持续累积、导致训练过程提前结束的问题。

介绍深度学习优化算法:从SGD到NADAM

6 Adam

将以上的一阶动量与二阶动量结合,就产生了Adam优化算法。

Nadam在Adam的基础上加入了一阶动量的累积,即Nesterov + Adam = Nadam。

8 总结

优化算法 Momentum(动量) Nesterov(动量累积) 二阶动量累积
SGD × × ×
SGDM × ×
NAG ×
AdaGrad × × 一直累积
AdaDelta / RMSProp × × 一段时间
Adam ×
Nadam

9 参考资料

CS231n Lecture7 https://www.bilibili.com/video/av13260183/?p=7

http://www.sohu.com/a/226332315_633698

https://blog.csdn.net/shuzfan/article/details/75675568#2-1-batch-gradient-descent-bgd

如果你对这篇文章有什么疑问或建议,欢迎下面留言提出,我看到会立刻回复!

打赏
未经允许不得转载:马春杰杰 » 介绍深度学习优化算法:从SGD到NADAM
蝴蝶PT招人啦

留个评论吧~ 抢沙发 评论前登陆可免验证码!

私密评论
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址(选填,便于回访^_^)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

切换注册

登录

忘记密码 ?

切换登录

注册