Adam优化算法

算法内容

Adam算法使用了动量变量 v t v_t vtRMSProp算法中小批量随机梯度按元素平方的指数加权移动平均变量 s t s_t st ,并在时间步0将它们中每个元素初始化为0。给定超参数 0 ≤ β 1 < 1 0≤β_1<1 0β1<1 (默认设为0.9),时间步 t 的动量变量 v t v_t vt 即小批量随机梯度 g t g_t gt 的指数加权移动平均:

v t ← β 1 v t − 1 + ( 1 − β 1 ) g t . (1) v_t←β_1v_{t−1}+(1−β_1)g_t.\tag{1} vtβ1vt1+(1β1)gt.(1)

RMSProp算法中一样,给定超参数 0 ≤ β 2 < 1 0≤β_2<1 0β2<1 (默认设为设为0.999), 将小批量随机梯度按元素平方后的项 g t ⊙ g t g_t\odot g_t gtgt 做指数加权移动平均得到 s t s_t st

s t ← β 2 s t − 1 + ( 1 − β 2 ) g t ⊙ g t . (2) s_t←β_2s_{t−1}+(1−β_2)g_t\odot g_t.\tag{2} stβ2st1+(1β2)gtgt.(2)

由于我们将 v 0 v_0 v0 s 0 s_0 s0 中的元素都初始化为0, 在时间步 t 我们得到 v t = ( 1 − β 1 ) ∑ i = 1 t β 1 t − i g i v_t=(1−β_1)\sum^{t}_{i=1}\beta_1^{t-i}g_i vt=(1β1)i=1tβ1tigi 。将过去各时间步小批量随机梯度的权值相加,得到 ( 1 − β 1 ) ∑ i = 1 t β 1 t − i = 1 − β 1 t (1−β_1) \sum_{i=1}^t β^{t−i}_1=1−β^t_1 (1β1)i=1tβ1ti=1β1t 。需要注意的是,当 t 较小时,过去各时间步小批量随机梯度权值之和会较小。例如,当 β 1 = 0.9 β_1=0.9 β1=0.9 时, v 1 = 0.1 g 1 v_1=0.1g_1 v1=0.1g1 。为了消除这样的影响,对于任意时间步 t ,我们可以将 v t v_t vt 再除以 1 − β 1 t 1−β^t_1 1β1t ,从而使过去各时间步小批量随机梯度权值之和为1。这也叫作偏差修正。在Adam算法中,我们对变量 v t v_t vt s t s_t st 均作偏差修正:

v ^ t ← v t 1 − β 1 t , (3) \hat{v}_t←\frac{v_t}{1−β^t_1},\tag{3} v^t1β1tvt,(3)

s ^ t ← s t 1 − β 2 t . (4) \hat{s}_t←\frac{s_t}{1−β^t_2}.\tag{4} s^t1β2tst.(4)

接下来,Adam算法使用以上偏差修正后的变量 v t v^t vt s t s^t st ,将模型参数中每个元素的学习率通过按元素运算重新调整:

g t ′ ← η v ^ t s ^ t + ϵ , (5) g^′_t←\frac{η\hat{v}_t}{\sqrt{\hat{s}_t}+ϵ,}\tag{5} gts^t +ϵ,ηv^t(5)

其中 η \eta η 是学习率, ϵ \epsilon ϵ 是为了维持数值稳定性而添加的常数,如 1 0 − 8 10^{−8} 108 。和AdaGrad算法、RMSProp算法以及AdaDelta算法一样,目标函数自变量中每个元素都分别拥有自己的学习率。最后,使用 g t ′ g^′_t gt 迭代自变量:

x t ← x t − 1 − g t ′ . (6) x_t←x_{t−1}−g^′_t.\tag{6} xtxt1gt.(6)

算法优化问题

  1. 当优化器更新梯度时,出现nan, 可适当降低学习率。
### 关于Adam优化算法 #### Adam优化算法简介 Adam是一种用于随机优化的方法,在机器学习特别是深度学习领域广泛应用。该方法结合了AdaGrad能够有效处理稀疏梯度的优点以及RMSProp应对在线问题的能力[^1]。 #### 工作原理 Adam通过计算梯度的一阶矩估计(均值)和二阶矩估计(未中心化的方差),来动态调整每个参数的学习率。具体来说,对于时间步$t$处的参数更新规则如下: - 计算一阶矩估计$m_t$ - 计算二阶矩估计$v_t$ 其中,$\beta_1,\ \beta_2\in[0,1)$分别是控制指数衰减率的超参数,默认设置通常为$(\beta_1=0.9,\ \beta_2=0.999)$;而$\epsilon>0$是为了防止除零错误的小常数项,一般取值为$1e^{-8}$。最终参数更新表达式可以写作: ```python m_t = beta1 * m_{t-1} + (1 - beta1) * g_t v_t = beta2 * v_{t-1} + (1 - beta2) * (g_t ** 2) # 偏置校正 m_hat = m_t / (1 - beta1**t) v_hat = v_t / (1 - beta2**t) theta_t = theta_{t-1} - alpha * m_hat / (sqrt(v_hat) + epsilon) ``` 这里`alpha`代表基础学习速率,`g_t`表示当前时刻的目标函数相对于模型参数的梯度向量。 #### 应用场景 由于其良好的收敛性能和较低内存消耗特性,使得Adam非常适合应用于大规模数据集上的神经网络训练过程之中。此外,它也适用于非稳态目标环境下的最优化求解任务。 #### 解读与理解 建立可解释的基础线性或逻辑回归作为对比基准有助于加深对更复杂模型的理解并指导特征工程方向的选择。因此,在实际应用中先尝试简单的基线模型再逐步过渡到像Adam这样的高级技术不失为一种明智的做法[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TransientYear

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值