全国免费咨询热线

13988889999

工作时间:周一到周六 AM8:30

四方资讯

NEWS

四方资讯

你的位置: 首页 > 四方资讯

联系我们

CONTACT

手机:13988889999
电话:0898-88889999
QQ:88889999
邮箱:admin@eyoucms.com
地址:海南省海口市玉沙路58号

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

时间:2024-02-28 00:34:04    点击量:

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

基于梯度下降的优化方法中,最朴素的 SGD 优化器采用的优化策略如下: \	heta=\	heta - \\mu \\cdot \
abla J(\	heta)

其他优化方法均基于对学习率 \\mu 的改造。


Keywords:momentum, 全局学习率

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

momentum(动量)的引入可以直观地较好处理这个问题,其在计算当前时刻的更新向量 v_t 时,引入了上一次更新向量 v_{t-1} ,具体如下:

v_t=\\gamma v_{t-1}+ \\eta \
abla_\	heta J(\	heta) ( \\gamma 一般为0.9)

\	heta=\	heta - v_t

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

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

我们知道,动量将 \\gamma v_{t-1} 引入了参数 \	heta 的更新,因此 \	heta - \\gamma v_{t-1} 可以作为下一次更新后的参数的近似预估。据此计算梯度,是一种为参数更新引入前瞻性优化方法。具体为:

v_t=\\gamma v_{t-1}+ \\eta \
abla_\	heta J(\	heta - \\gamma v_{t-1}) ( \\gamma 一般为0.9)

\	heta=\	heta - v_t

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

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

g_{t,i} 表示时刻 t 参数 \	heta_i 的梯度: g_{t,i}=\
abla_{\	heta_i}J(\	heta_{t,i})

则 SGD 对每个参数的更新为: \	heta_{t+1,i}=\	heta_{t,i}- \\eta \\cdot g_{t,i}

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

\	heta_{t+1,i}=\	heta_{t,i}- \\frac{\\eta}{\\sqrt{G_{t,ii}+ \\epsilon}}\\cdot   g_{t,i}\\epsilon 一般为1e-8)

G_t 是一个对角矩阵,其对角元素 i 是参数 \	heta_i 截止时刻 t 的所有梯度的均方和。

Adagrad的最大优势是初始学习率(一般为0.01)设定后不用管,其可以为不同参数自适应地调整学习率。但同时,随着训练进行 G_t 是一个不断增长的过程,注定了其学习率是一个不断减小直至小到网络无法学习到新信息的过程。

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

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

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

为进一步简化存储 w 个梯度的空间消耗,梯度和被递归地定义为之前所有梯度平方的均值的衰减,时刻 t 的梯度平方的均值被定义为:

E[g^2]_t=\\gamma E[g^2]_{t-1}+ (1 - \\gamma)g^2_t ( \\gamma 一般取0.9)

因此参数更新向量为:

\\Delta \	heta_t=- \\frac{\\eta}{\\sqrt{E[g^2]_t + \\epsilon}}g_t

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

\\Delta \	heta_t=- \\frac{\\eta}{RMS[g]_t}g_t

本方法的作者进一步提出了更新单元不匹配的问题,时刻 t 的参数更新向量的平方的均值为:

E[\\Delta \	heta^2]_t=\\gamma E[\\Delta \	heta^2]_{t-1}+ (1 - \\gamma)\\Delta \	heta^2_t

有:

RMS[\\Delta \	heta]_t=\\sqrt{E[\\Delta \	heta^2]_t + \\epsilon}

由于时刻 tRMS[\\Delta \	heta]_t 未知,因此采用前一时刻即 t-1 时刻的值来近似。则参数更新过程为:

\\Delta \	heta_t=- \\frac{RMS[\\Delta \	heta]_{t-1}}{RMS[g]_t}g_t

\	heta_{t+1}=\	heta_t + \\Delta \	heta_t

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

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

E[g^2]_t=0.9 E[g^2]_{t-1}+ 0.1 g^2_t

\	heta_{t+1}=\	heta_t - \\frac{\\eta}{\\sqrt{E[g^2]_t+\\epsilon}}g_t ( \\eta 一般为0.001)

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

m_t=\\beta_1 m_{t-1}+ (1 - \\beta_1) g_t

v_t=\\beta_2 v_{t-1}+ (1- \\beta_2)g^2_t\\beta_1 一般为0.9, \\beta_2 一般为0.999)

由于 m_t , n_t 初始化为0,且 \\beta_1 , \\beta_2 均接近1,更新过程中尤其是初始阶段m_t , n_t倾向于0。

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

\\hat{m}_t=\\frac{m_t}{1-\\beta^t_1}

\\hat v_t=\\frac{v_t}{1-\\beta^t_2}

参数更新过程为:

\	heta_{t+1}=\	heta_t - \\frac{\\eta}{\\sqrt{\\hat{v}_t}+\\epsilon}\\hat{m}_t

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

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

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

地址:海南省海口市玉沙路58号 电话:0898-88889999 手机:13988889999

Copyright © 2012-2018 首页-四方娱乐-注册登录站 ICP备案编:琼ICP备88889999号

友情链接: 大唐金牛九天凯旋

平台注册入口