Adam优化器总结

根据李宏毅老师的课程,将梯度下降的常见训练优化思路和Adam的内容做简单的梳理。

请添加图片描述
梯度下降的基本方法是:朝着参数 θ \theta θ的当前梯度 g g g的反方向,以 η \eta η为步长迈出一步。

一个常见的问题就是梯度下降容易落入局部最小值,因此有了Momentum(动量) 的概念。仿照现实世界中物体的惯性,在运动时不仅要看当前这一步往哪里迈,还要考虑之前的运动状态,如果之前的步伐很快,就不应该在一步内急停或者急转弯。这样做的好处是可以跳出一些小坑(局部最小值)。
请添加图片描述

动量的实现方法也不复杂,就是将前一步的步伐 m m m乘上一个参数 λ \lambda λ与当前本来应该走的步伐 − η g -\eta g ηg结合(向量相加),共同决定下一步的走向。 λ \lambda λ相当于惯性大小,大的 λ \lambda λ相当于胖子,运动状态更不容易改变。

梯度下降的另一个问题是超参数 η \eta η很重要但不好定,定小了学习太慢,定大了反复横跳不收敛。
在这里插入图片描述

为了找到最低点,我们一般希望在梯度平缓的方向上,步子可以迈得大一点,在梯度陡峭的地方,步子就收着点。于是我们用 η \eta η除以一个 σ \sigma σ来调整步长,这个 σ \sigma σ对不同的参数是不同的,而且在训练中,是随着iteration更新的。
请添加图片描述
Adagrad中,用的是之前所有梯度的RootMeanSquare(均方根)来计算这个 σ \sigma σ
请添加图片描述

这个思路很直白,就是如果该参数之前的梯度都比较小,那么 σ \sigma σ就比较小,迈出的步子就大,反之亦然。
这种算法的问题是将之前的梯度值都默认为差不多,平缓的一直平缓,陡峭的一直陡峭,但实际不是这样子的,哪怕是同一个参数,同一个梯度方向,它的梯度值也可以骤变,这就导致了对步长的调整不太合理也不及时。

针对这个问题,RMSProp增加了一个超参数 α \alpha α,这种计算梯度均值的方式其实就是指数移动平均(EMA),它更能稳定地反映梯度变化情况,且可以通过 α \alpha α来调节对之前梯度和当前梯度的重视程度。比如当 α \alpha α趋近0的时候,说明 σ \sigma σ的计算只取决于当前的梯度,不考虑之前梯度的影响。此时的 σ \sigma σ就变得很灵敏,遇到梯度骤变的情况就能迅速反应过来了。
请添加图片描述

Adam = RMSProp+Momentum
在这里插入图片描述

另外对学习率 η \eta η可以有一些schedule,一般是各种衰减方式,随着逐渐接近最低点而减小步伐。很多时候我们发现加上WarmUp的技巧效果更好,WarmUp可以理解为一开始先用小的学习率进行探索,先摸清附近的梯度情况,以此获得合理的 σ \sigma σ信息后再加大步伐。

  • 14
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值