深度学习中的Adam优化算法

一、前言

    前面的文章 Momentum算法 和 具有学习率自适应调整的 RMSprop算法,今天来讲一下Adam优化算法,它也是一种可以自适应优化算法。很多人认为Adam算法是 AdaGrad 和 RMSprop 的结合,但是从梯度更新公式来看,本人更倾向于认为它是 Momentum 和 RMSprop 的结合体, 吴恩达老师的观点也是如此。 

 

二、随机变量的距

    Adam算法涉及到了统计学中距的概念,在此给出一些说明。给定随机变量 x,一些距的定义如下:

一阶原点距定义为 E[x],等于 x 的期望;

二阶原点矩定义为 E[x^2]可以理解为均值为 0 情况下的二阶中心距

二阶中心距定义为 E[(x-E[x])^2],等价于 x 的方差;

t 

三、Adam算法

     下面,结合Adam论文中的算法描述,并结合距的概念,一起深入理解一下Adam里面放的是什么大招。下图是Adam算法的伪代码:

输入:  学习率 \alpha,分别作为梯度的一阶和二阶指数移动加权衰减率 \beta _1 和 \beta _2,模型参数 \theta,损失函数 f(\theta )\varepsilon表示数值计算稳定性参数,一般取一个很小的浮点数,为了防止分母为0

第1-3行,初始化梯度 g_t 的一阶指数移动加权平均 m_t 和二阶指数移动加权平均 v_tm_t 是对到目前为止 g_t 的一阶原点距 E[g_t] 的有偏估计,v_t 是对到目前为 g_t 的二阶原点距估计 E[g^2_t] 的有偏估计。

解释: m_t 估计了到目前为止 g_t 各分量的均值,v_t 估计了到目前为止 g_t 各分量的平方的均值。

第4-11行,不断进行梯度下降,直到参数 \theta _t 收敛:

第5-6行, 计算第 t 轮迭代的梯度 g_t

第 7 行, 更新 g_t 的一阶指数移动加权平均 m_t

第 8 行, 更新 g_t 的二阶指数移动加权平均 v_t

第9-10行,在迭代初期,m_t 对E[g_t] 的估计以及 v_t 对 E[g^2_t] 的估计都是有偏的,需要进行偏差修正,修正系数分别是 \frac{1}{1-\beta^t_1} 和 \frac{1}{1-\beta^t_2}随着迭代的进行,估计逐渐变为无偏估计,修正强度逐渐降低为1。

第11行,更新模型参数 \theta _t,分子表示 g_t 在过去一段时间内各分量的平均值,即梯度更新的大致走向,分母表示 g_t 在过去一段时间内各分量的平均大小相当于分两步走,第一步是确定一个合适的下降方向(即分子项),第二步,对这个选定的方向上的各个子方向做一下微调(分母项),这样,推进较快的子方向会慢下来,推进较慢的子方向会加快速度,动态调整了各个子方向的学习率。因此,Adam结合了Momentum和RMSprop两种算法的优点。

知乎上对Adam算法的优秀总结:

梯度是一个随机变量,一阶矩表示梯度均值,二阶矩表示其方差,一阶矩来控制模型更新的方向,二阶矩控制步长(学习率)。用moveing average来对一阶矩和二阶矩进行估计。偏差修正是为了缓解初始一阶矩和二阶矩初始为0带来的moving average的影响。



作者:带你飞
链接:https://www.zhihu.com/question/323747423/answer/679051127
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

 

四、算法优点

1、计算高效,仅执行有限次乘除法;

2、节省内存,每一个时间点仅需要保存 m_t 和 v_t 即可,无需保留每一步的梯度;

3、对梯度尺度不敏感,如将 \hat{m_t} 和 \hat{v_t} 同时缩放一定的倍数 c,计算结果不受影响;

4、特别适合参数稀疏或者高度复杂的模型的优化;

 

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值