Adam如何自适应学习率的?

Adam是一种优化算法,通过结合一阶动量和二阶动量来实现自适应学习率调整。它利用指数滑动平均来平滑梯度估计,避免频繁更新的参数受单个异常样本的影响,同时确保稀疏更新的参数能从少量信息中学习。一阶动量mt记录了过去梯度的加权平均,二阶动量vt则考虑了梯度的平方和,动态调整学习率,使得更新更稳定且适应不同参数的特性。这种机制使Adam在深度学习中成为广泛应用的优化器。
摘要由CSDN通过智能技术生成

Adam是如何做到自适应学习率的?

  • 优化算法统一公式

    • 待优化参数: w t w_t wt​;
    • 优化目标: f ( w t ) f(w_t) f(wt);
    • 当前参数梯度: g t = ∇ f ( w t ) g_t=\nabla{f(w_t)} gt=f(wt);
    • 一阶动量和二阶动量: η t = α ⋅ m t / v t \eta_t=\alpha· m_t/\sqrt{v_t} ηt=αmt/vt ​;
    • 统一的更新公式为: w t + 1 = w t − η t w_{t+1}=w_t-\eta_t wt+1=wtηt;​​
  • Adam时如何自适应调整学习率的?

    • 首先,介绍SGD和带动量的SGD。SGD的更新公式如下: w t + 1 = w t − α ⋅ g t w_{t+1}=w_t-\alpha·g_t wt+1=wtαgt​,相当于 m t = g t m_t=g_t mt=gt​, v t = I 2 v_t=I^2 vt=I2​。但由于其更新只依赖于当前的数据,使得其难以跳出局部最优。为利用历史的更新方向的趋势,使得其更新方向按照历史的 趋势进行,命 m t = β 1 ⋅ m t − 1 + ( 1 − β 1 ) g t m_t=\beta_1·m_{t-1}+(1-\beta_1)g_t mt=β1mt1+(1β1)gt​,这样有 β 1 \beta_1 β1​比例的方向由历史方向决定,因此 w t + 1 = w t − α ⋅ m t w_{t+1}=w_t-\alpha·m_t wt+1=wtαmt​;

    • 使用SGD更新参数时,其参数的学习率是对于每一个 g t g_t gt都是相同的,即无论 g t g_t gt中的内容是大还是小,都是采用同样的步长进行更新,但我们希望对经常更新的参数不至于被单个样本影响太大,希望学习缓慢一些,对于偶尔更新的参数,模型了解的信息太少,希望梯度小的学习率大一些,以便于我们能够从少量信息中获取到信息。因此,引入二阶动量 v t = ∑ τ = 1 t g t 2 v_t=\sum_{\tau=1}^{t}g_t^2 vt=τ=1tgt2,将其作为学习率 α \alpha α的分母,可以动态调整学习率的大小,得到新的学习率 α / v t + ϵ \alpha/\sqrt{v_t+\epsilon} α/vt+ϵ ,更新频率越大的则学习率越小,更新频率越小的,学习率越大。引入二阶动量的梯度更新法则之后, v t v_t vt可能很快就累积到很大。借鉴 m t m_t mt利用当前时间端前一段时间的梯度信息,使用指数滑动平均,得到 v t = β 1 ⋅ v t − 1 + ( 1 − β 1 ) g t 2 v_t=\beta_1·v_{t-1}+(1-\beta_1)g_t^2 vt=β1vt1+(1β1)gt2,因此最终引入二阶动量的参数更新公式为: w t + 1 = w t − α ⋅ g t / v t + ϵ w_{t+1}=w_t-\alpha·g_t/{\sqrt{v_t+\epsilon}} wt+1=wtαgt/vt+ϵ ;​

    • 结合两个动量的更新就是Adam算法了: w t + 1 = w t − α ⋅ m t / v t + ϵ w_{t+1}=w_t-\alpha·m_t/{\sqrt{v_t+\epsilon}} wt+1=wtαmt/vt+ϵ ​;

      从上述可以看出,Adam自适应调整学习率是从二阶动量 v t v_t vt上进行的,目的是为了避免经常更新的参数被单个异常样本影响,同时能够学习到出现较少的样本信息。

参考:

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Adam自适应学习率是一种优化算法,它结合了梯度下降和动方法。Adam的自适应原理是根据统计对梯度进行修正,但仍然需要设置学习率。如果学习率设置过大,会导致模型发散,收敛较慢或陷入局部最小值点。因此,一开始通常不会设置过大的学习率,而是根据不同的任务进行选择。通常默认的学习率设置为1e-3。\[1\] 与传统机器学习相比,深度学习学习率设置要小得多。这是因为神经网络的损失函数通常不是凸函数,而梯度下降法等优化方法主要针对凸函数。如果学习率设置过高,Adam优化器只会矫正梯度,而不会影响初始学习率,导致模型的Loss出现较大的波动,无法收敛。因此,深度学习中的学习率需要设置得更小。\[2\] 另外,Adadelta是一种改进的优化算法,它针对Adagrad学习率分母的累加问题进行了改进。Adadelta将分母的累加替换为均值,使得学习率相对稳定。类似于Batch Normalization对均值和方差使用滑动平均来近似训练集的均值和方差,Adagrad也使用滑动平均来近似参数梯度的均值。从Pytorch源码中可以看到,Adadelta使用了两次滑动平均。\[3\] 综上所述,Adam自适应学习率需要根据具体任务进行学习率的设置,通常需要选择一个适当的学习率来保证模型的收敛性和性能。 #### 引用[.reference_title] - *1* *2* [(Note)优化器Adam的学习率设置](https://blog.csdn.net/qq_40728667/article/details/125921684)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [基于Pytorch源码对Adagrad、Adadelta、RMSProp、Adam等自适应学习率进行学习](https://blog.csdn.net/MacKendy/article/details/106772624)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值