Adam的原理

Adam的原理Adam 是从 2 个算法脱胎而来的 AdaGrad 和 RMSProp 它集合了 2 个算法的主要优点 同时也做了自己的一些创新 大概有这么几个卖点 计算高效 方便实现 内存使用也很少 更新步长和梯度大小无关 只和 alpha beta 1 beta 2 有关系

大家好,我是讯享网,很高兴认识大家。

Adam是从2个算法脱胎而来的:AdaGradRMSProp,它集合了2个算法的主要优点,同时也做了自己的一些创新,大概有这么几个卖点:

  1. 计算高效,方便实现,内存使用也很少。
  2. 更新步长和梯度大小无关,只和alpha、beta_1、beta_2有关系。并且由它们决定步长的理论上限。
  3. 对目标函数没有平稳要求,即loss function可以随着时间变化
  4. 能较好的处理噪音样本,并且天然具有退火效果
  5. 能较好处理稀疏梯度,即梯度在很多step处都是0的情况

Adam设计原理

为什么这么设计呢?Andrew Ng在他的公开课中给出了他的解释,他认为Adam其实可以看做是Momentum和RMSProp算法的结合。

Momentum原理

图片描述
讯享网

Momentum通过对梯度mean的估计,使得梯度在纵向上的正负步长逐步抵消,横向上的步长逐步累积,从而减少了震荡,加快了学习速率。

可以认为:对于mean的这种估计,其实是从噪音中提取到了有效信号,因为信号的方向在一段时间内是不会变的。同时抵消了噪音,比如白噪音,它的均值为0,把多个白噪音累加后,它们是正负相互抵消的

当然实际情况噪音可能会非常复杂,如果步长太大,或者衰减太小,还是会出现震荡甚至发散的情况。

RMSProp算法

RMSProp要解决的问题和Momentum类似,但是它是从二阶距入手的。

图片描述

它的思路是这样的,对于波动比较大的梯度,它的方差肯定是很大的,所以它用梯度去除以二阶距的开方,作为梯度下降的梯度,从而也使得它在纵轴上的步长减小了,同时相对的增加了横轴的步长。

这个也是mt和vt的设计来源。同时因为mt和vt涉及了所有历史梯度信息,所以他们都能较好处理梯度稀疏的情况。

Adam的改进

Adam的改进主要体现在2个地方,即伪代码第五、六行的偏置修正,和第七行的梯度计算。

其实最关键的就是第7行了。首先在没有噪音的情况下,m/sqrt(v) 约等于+/- 1,所以步长的上限基本就由alpha决定了。当t比较小的时候,beta1和beta2也会有一些影响,因为此时m、v还是有偏的,需要在5、6行用beta1、beta2做些调整。原文指出:

设步长
当1 - beta1 > sqrt(1 - beta2)时,

其他时候,

所以,正是由于采用了m/sqrt(v)的形式,梯度本身的大小被消除了,假设你在目标函数上乘以k,那么这个k会同时出现在分子分母上,从而在梯度更新时被消除了。

 

转自:https://segmentfault.com/a/68819

小讯
上一篇 2025-02-20 15:08
下一篇 2025-03-13 23:14

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/62502.html