adam优化算法_从 SGD 到 Adam —— 6大常见优化算法总结

本文是对gradient descent优化算法的总结,包括SGD、Momentum、Nesterov accelerated gradient、Adagrad、Adadelta、RMSprop和Adam。文章详细介绍了每个算法的工作原理,如Momentum通过动量解决局部最优点的收敛问题,Adagrad提供自适应学习率,Adadelta和RMSprop缓解学习率衰减问题,而Adam结合了动量和偏差校正。在实际应用中,Adam通常成为首选优化器。
摘要由CSDN通过智能技术生成

4a070c7202de323153fbb9bdec48d584.png

论文 An overview of gradient descent optimization algorithms 的个人总结。

基于梯度下降的优化方法中,最朴素的 SGD 优化器采用的优化策略如下:

equation?tex=%5Ctheta+%3D+%5Ctheta+-+%5Cmu+%5Ccdot+%5Cnabla+J%28%5Ctheta%29

其他优化方法均基于对学习率

equation?tex=%5Cmu 的改造。

1. Momentum

Keywords:momentum, 全局学习率

如下图图 a 所示,当一个维度比另一个维度下降地明显更加急促时(经常是局部最优点),朴素 SGD 容易存在收敛极慢的问题。

31dbd5f13fcf1a6a8c79a530db27b099.png

momentum(动量)的引入可以直观地较好处理这个问题,其在计算当前时刻的更新向量

equation?tex=v_t 时,引入了上一次更新向量
equation?tex=v_%7Bt-1%7D ,具体如下:

equation?tex=v_t+%3D+%5Cgamma+v_%7Bt-1%7D+%2B+%5Ceta+%5Cnabla_%5Ctheta+J%28%5Ctheta%29 (
equation?tex=%5Cgamma 一般为0.9)

equation?tex=%5Ctheta+%3D+%5Ctheta+-+v_t

2. Nesterov accelerated gradient

Keywords:momentum, 全局学习率,前瞻性预估

在momentum基础上,Nesterov accelerating 提供了一种颇有前瞻性的参数更新预估。

我们知道,动量将

equation?tex=%5Cgamma+v_%7Bt-1%7D 引入了参数
equation?tex=%5Ctheta 的更新,因此
equation?tex=%5Ctheta+-+%5Cgamma+v_%7Bt-1%7D 可以作为下一次更新后的参数的近似预估。据此计算梯度,是一种为参数更新引入前瞻性优化方法。具体为:

equation?tex=v_t+%3D+%5Cgamma+v_%7Bt-1%7D+%2B+%5Ceta+%5Cnabla_%5Ctheta+J%28%5Ctheta+-+%5Cgamma+v_%7Bt-1%7D%29+ (
equation?tex=%5Cgamma 一般为0.9)

equation?tex=%5Ctheta+%3D+%5Ctheta+-+v_t

3. Adagrad

Kerwords: 不同参数自适应学习率,总体学习率不断衰减

Adagrad 为每个参数提供自适应的学习率,它可以为频率低的参数每次提供更大更新、为频率高的参数每次提供更小更新。正因为此,它十分适用于处理稀疏数据。

equation?tex=g_%7Bt%2Ci%7D 表示时刻
equation?tex=t 参数
equation?tex=%5Ctheta_i 的梯度:
equation?tex=g_%7Bt%2Ci%7D+%3D+%5Cnabla_%7B%5Ctheta_i%7D+J%28%5Ctheta_%7Bt%2Ci%7D%29

则 SGD 对每个参数的更新为:

equation?tex=%5Ctheta_%7Bt%2B1%2Ci%7D+%3D+%5Ctheta_%7Bt%2Ci%7D+-+%5Ceta+%5Ccdot+g_%7Bt%2Ci%7D

Adagrad对每个参数有自适应的学习率,其参数更新过程为:

equation?tex=%5Ctheta_%7Bt%2B1%2Ci%7D+%3D+%5Ctheta_%7Bt%2Ci%7D+-+%5Cfrac%7B%5Ceta%7D%7B%5Csqrt%7BG_%7Bt%2Cii%7D+%2B+%5Cepsilon%7D%7D+%5Ccdot+++g_%7Bt%2Ci%7D
equation?tex=%5Cepsilon 一般为1e-8)

equation?tex=G_t 是一个对角矩阵,其对角元素
equation?tex=i 是参数
equation?tex=%5Ctheta_i 截止时刻
equation?tex=t 的所有梯度的均方和。

Adagrad的最大优势是初始学习率(一般为0.01)设定后不用管,其可以为不同参数自适应地调整学习率。但同时,随着训练进行

equation?tex=G_t 是一个不断增长的过程,注定了其学习率是一个不断减小直至小到网络无法学习到新信息的过程。

Adadelta针对性地解决了Adagrad学习率过度衰减的问题。

4. Adadelta

Keywords: 自适应学习率,解决Adagrad学习率衰减过小的问题

Adadelta解决了Adagrad过度激进地衰减学习率的问题,不同于累加过去所有梯度的平方,它限制了累加的过去的梯度到一个固定窗口宽度

equation?tex=w

为进一步简化存储

equation?tex=w 个梯度的空间消耗,梯度和被递归地定义为之前所有梯度平方的均值的衰减,时刻
equation?tex=t 的梯度平方的均值被定义为:

equation?tex=E%5Bg%5E2%5D_t+%3D+%5Cgamma+E%5Bg%5E2%5D_%7Bt-1%7D+%2B+%281+-+%5Cgamma%29g%5E2_t (
equation?tex=%5Cgamma 一般取0.9)

因此参数更新向量为:

equation?tex=%5CDelta+%5Ctheta_t+%3D+-+%5Cfrac+%7B%5Ceta%7D+%7B%5Csqrt%7BE%5Bg%5E2%5D_t+%2B+%5Cepsilon%7D%7D+g_t

其分母为均方根(root mean squared, RMS),因此也常写作:

equation?tex=%5CDelta+%5Ctheta_t+%3D+-+%5Cfrac+%7B%5Ceta%7D+%7BRMS%5Bg%5D_t%7D+g_t

本方法的作者进一步提出了更新单元不匹配的问题,时刻

equation?tex=t 的参数更新向量的平方的均值为:

equation?tex=E%5B%5CDelta+%5Ctheta%5E2%5D_t+%3D+%5Cgamma+E%5B%5CDelta+%5Ctheta%5E2%5D_%7Bt-1%7D+%2B+%281+-+%5Cgamma%29%5CDelta+%5Ctheta%5E2_t

有:

equation?tex=RMS%5B%5CDelta+%5Ctheta%5D_t+%3D+%5Csqrt%7BE%5B%5CDelta+%5Ctheta%5E2%5D_t+%2B+%5Cepsilon%7D

由于时刻

equation?tex=t
equation?tex=RMS%5B%5CDelta+%5Ctheta%5D_t 未知,因此采用前一时刻即
equation?tex=t-1 时刻的值来近似。则参数更新过程为:

equation?tex=%5CDelta+%5Ctheta_t+%3D+-+%5Cfrac%7BRMS%5B%5CDelta+%5Ctheta%5D_%7Bt-1%7D%7D%7BRMS%5Bg%5D_t%7Dg_t

equation?tex=%5Ctheta_%7Bt%2B1%7D+%3D+%5Ctheta_t+%2B+%5CDelta+%5Ctheta_t

可以看出,Adadelta事实上不需要设定初始学习率。


5. RMSprop

RMSprot 和 Adadelta 都是为了解决Adagrad的学习率消失问题而提出的。有趣的是,二者被独立提出,却殊途共归。RMSprop的参数更新过程为:

equation?tex=E%5Bg%5E2%5D_t+%3D+0.9+E%5Bg%5E2%5D_%7Bt-1%7D+%2B+0.1+g%5E2_t

equation?tex=%5Ctheta_%7Bt%2B1%7D+%3D+%5Ctheta_t+-+%5Cfrac%7B%5Ceta%7D%7B%5Csqrt%7BE%5Bg%5E2%5D_t%2B%5Cepsilon%7D%7Dg_t (
equation?tex=%5Ceta 一般为0.001)

6. Adam

Adaptive Moment Estimation(Adam)是另一个为每个参数动态调整学习率的方法。正如其名,它同时估计了梯度的 first moment(mean,

equation?tex=m_t ) 和 second moment(variance,
equation?tex=v_t ):

equation?tex=m_t+%3D+%5Cbeta_1+m_%7Bt-1%7D+%2B+%281+-+%5Cbeta_1%29+g_t

equation?tex=v_t+%3D+%5Cbeta_2+v_%7Bt-1%7D+%2B+%281-+%5Cbeta_2%29g%5E2_t
equation?tex=%5Cbeta_1 一般为0.9,
equation?tex=%5Cbeta_2 一般为0.999)

由于

equation?tex=m_t ,
equation?tex=n_t 初始化为0,且
equation?tex=%5Cbeta_1 ,
equation?tex=%5Cbeta_2 均接近1,更新过程中尤其是初始阶段
equation?tex=m_t ,
equation?tex=n_t倾向于0。

为解决这一问题,moment estimation 做了 bias-correct:

equation?tex=%5Chat%7Bm%7D_t+%3D+%5Cfrac%7Bm_t%7D%7B1-%5Cbeta%5Et_1%7D+

equation?tex=%5Chat+v_t+%3D+%5Cfrac%7Bv_t%7D%7B1-%5Cbeta%5Et_2%7D

参数更新过程为:

equation?tex=%5Ctheta_%7Bt%2B1%7D+%3D+%5Ctheta_t+-+%5Cfrac%7B%5Ceta%7D%7B%5Csqrt%7B%5Chat%7Bv%7D_t%7D%2B%5Cepsilon%7D+%5Chat%7Bm%7D_t

Finally,how to choose optimizer?

稀疏数据则选择自适应学习率的算法;而且,只需设定初始学习率而不用再调整即很可能实现最好效果。

Adagrad, Adadelta, RMSprop, Adam可以视为一类算法。RMSprop 与 Adadelta本质相同,都是为了解决Adagrad的学习率消失问题。Adam 可视为添加了 bias-correction 和 momentum的 RMSprop。事实上,Adadelta, RMSprop, Adam在相似场景下表现也很相似。bias-correction 帮助 Adam 在优化后期略优于 RMSprop,因为此时梯度已经很稀疏。

目前来看,无脑用 Adam 似乎已经是最佳选择。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值