Adam优化器算法详解及代码实现

这篇具有很好参考价值的文章主要介绍了Adam优化器算法详解及代码实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习率调整与梯度估计修正

在介绍Adam算法之前,先谈谈Adam中两个关键的算法:学习率调整(RMSprop 算法)梯度估计修正

RMSprop 算法

学习率是神经网络优化时的重要超参数。在标准的梯度下降法中,每个参数在每次迭代时都使用相同的学习率,但是学习率如果过大就不会收敛,如果过小则收敛速度太慢。

RMSprop 算法是 Geoff Hinton 提出的一种自适应学习率的方法【RMSprop】,可以在有些情况下避免 AdaGrad 算法中学习率不断单调下降以至于过早衰减的缺点。

RMSprop 算法首先计算每次迭代梯度 𝒈𝑡 平方的指数衰减移动平均𝐺𝑡 :
adam优化器,深度学习,机器学习,深度学习,Adam,优化器

其中,β为自定义衰减率(例如0.9)。

然后,根据指数衰减移动平均𝐺𝑡 计算参数更新差值Δ𝜃𝑡 :
adam优化器,深度学习,机器学习,深度学习,Adam,优化器
其中, 𝛼 是初始的学习率,𝜖 是为了保持数值稳定性而设置的非常小的常数。

动量法

在随机(小批量)梯度下降法中,如果每次选取样本数量比较小,损失会呈现振荡的方式下降.也就是说,随机梯度下降方法中每次迭代的梯度估计和整个训练集上的最优梯度并不一致,具有一定的随机性。一种有效地缓解梯度估计随机性的方式是通过使用最近一段时间内的平均梯度来代替当前时刻的随机梯度来作为参数更新的方向,从而提高优化速度。

动量法用之前积累动量来替代真正的梯度,在第 𝑡 次迭代时,计算负梯度的“加权移动平均”作为参数的更新方向:
adam优化器,深度学习,机器学习,深度学习,Adam,优化器
其中, 𝜌 为动量因子,通常设为 0.9,𝛼 为学习率。

动量法将每个参数的实际更新差值表示为最近一段时间内梯度的加权平均值。在迭代前期,梯度方向都一致,动量法加速参数更新幅度;在迭代后期,剃度方向会不一致,在收敛值附近振荡,动量法会降低参数更新幅度。

类比于物理学,动量法把当前梯度看做当前时刻受理参数的加速度,为了计算当前时刻的速度,应当考虑前一时刻速度和当前加速度共同作用的结果,因此参数的更新直接依赖于前一时刻的更新量和当前时刻的梯度,而不仅仅是当前梯度。另外,𝜌 扮演了阻力的作用。

Adam

Adam是由 OpenAI 的 Diederik Kingma 和多伦多大学的 Jimmy Ba于2015年提出的一种随机优化方法。
adam优化器,深度学习,机器学习,深度学习,Adam,优化器

原文链接:ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION:https://arxiv.org/pdf/1412.6980.pdf%5D

Adam算法结合RMSprop 算法和动量法,不但使用动量作为参数更新方向,而且可以自适应调整学习率来改进梯度下降。

  1. 计算梯度平方 g𝑡 平方的指数加权平均(RMSprop );
    adam优化器,深度学习,机器学习,深度学习,Adam,优化器
g[:] = beta2 * s + (1 - beta2) * torch.mul(p.grad, p.grad)
  1. 计算梯度 g𝑡 的指数加权平均(动量法);
    adam优化器,深度学习,机器学习,深度学习,Adam,优化器
    其中, 𝛽1 和 𝛽2 分别为两个移动平均的衰减率,在Adam原文中取值为 𝛽1 = 0.9, 𝛽2 = 0.999。
m[:] = beta1 * v + (1 - beta1) * p.grad
  1. 对偏差进行修正
    adam优化器,深度学习,机器学习,深度学习,Adam,优化器
m_bias_corr = m / (1 - beta1 ** hyperparams['t'])
g_bias_corr = g / (1 - beta2 ** hyperparams['t'])
  1. 计算参数更新差值
    adam优化器,深度学习,机器学习,深度学习,Adam,优化器
p[:] -= hyperparams['lr'] * m_bias_corr / (torch.sqrt(g_bias_corr) + eps)

在Adam论文原文中,对Adam的算法描述如下:

adam优化器,深度学习,机器学习,深度学习,Adam,优化器

下面给出Adam的简单实现:

def adam(params, states, hyperparams):
    beta1, beta2, eps = 0.9, 0.99, 1e-6
    for p, (m, g) in zip(params, states):
        with torch.no_grad():
            m[:] = beta1 * m + (1 - beta1) * p.grad
            g[:] = beta2 * g + (1 - beta2) * torch.mul(p.grad, p.grad)
            m_bias_corr = m / (1 - beta1 ** hyperparams['t'])
            g_bias_corr = g / (1 - beta2 ** hyperparams['t'])
            p[:] -= hyperparams['lr'] * m_bias_corr / (torch.sqrt(g_bias_corr) + eps)
        p.grad.data.zero_()
    hyperparams['t'] += 1

Adam记录梯度的一阶矩,即过去梯度与当前梯度的平均,体现了惯性保持;还记录了梯度的二阶矩,即过去过去梯度平方与当前梯度平方的平均,体现了环境感知能力,为不同参数产生自适应的学习速率。

因此,Adam优化器具有以下优点:

  • 实现简单,计算高效,内存占有量少;

  • 适合解决含大规模数据和参数的优化问题

  • 适用于不稳定的目标函数

  • 适用于解决包含很高噪声或稀疏梯度的问题

  • 超参数可以很直观地解释,并且基本上只需极少量的调参

  • 自然地调整学习率文章来源地址https://www.toymoban.com/news/detail-783454.html

到了这里,关于Adam优化器算法详解及代码实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 神经网络基础-神经网络补充概念-49-adam优化算法

    Adam(Adaptive Moment Estimation)是一种优化算法,结合了动量梯度下降法和RMSProp的优点,用于在训练神经网络等深度学习模型时自适应地调整学习率。Adam算法在深度学习中广泛应用,通常能够加速收敛并提高模型性能。 Adam算法综合了动量(momentum)和均方梯度的移动平均(RMS

    2024年02月12日
    浏览(33)
  • 利用Adam优化算法进行语音识别任务:提升模型准确率

    作者:禅与计算机程序设计艺术 语音识别是人工智能领域中的一个重要应用,近年来随着深度学习算法的快速发展,语音识别技术也取得了长足的进步。在语音识别任务中,训练模型需要大量的数据和计算资源,而且模型的准确性也是至关重要的。因此,如何提高模型的准确

    2024年02月09日
    浏览(54)
  • 改善神经网络——优化算法(mini-batch、动量梯度下降法、Adam优化算法)

    优化算法可以使神经网络运行的更快,机器学习的应用是一个高度依赖经验的过程,伴随着大量迭代的过程,你需要训练诸多模型,才能找到合适的那一个,所以,优化算法能够帮助你快速训练模型。 其中一个难点在于,深度学习没有在大数据领域发挥最大的效果,我们可以

    2024年02月12日
    浏览(49)
  • 机器学习 day26(多标签分类,Adam算法,卷积层)

    1. 多标签分类 多标签分类:对于单个输入特征,输出多个不同的标签y 多类分类:对于单个输入特征,输出单个标签y,但y的可能结果有多个 2. 为多标签分类构建神经网络模型 我们可以构建三个不同的神经网络模型来分别预测三个不同的标签y,但这种方法很低效。 另一种方

    2024年02月15日
    浏览(38)
  • Adam优化器(通俗理解)

    网上关于Adam优化器的讲解有很多,但总是卡在某些部分,在此,我将部分难点解释进行了汇总。理解有误的地方还请指出。 Adam,名字来自: Adaptive Moment Estimation ,自适应矩估计。是2014年提出的一种万金油式的优化器,使用起来非常方便,梯度下降速度快,但是容易在最优

    2024年01月23日
    浏览(38)
  • Adam优化器及其变种的原理

    本文将从SGD开始介绍Adam优化器的原理以及其变种的提出背景。 SGD(随机梯度下降法)是基于 最速梯度下降 法的原理,假设我们存在损失函数,其中是要学习参数,定义如下的优化路径 ,使得损失函数值最小。这是一个不断更新迭代参数的过程,其中表示其中某一更新步,

    2024年02月04日
    浏览(38)
  • SGD,Adam,AdamW,LAMB优化器

    一. SGD,Adam,AdamW,LAMB优化器 优化器是用来更新和计算影响模型训练和模型输出的网络参数,使其逼近或达到最优值,从而最小化(或最大化)损失函数。 1. SGD 随机梯度下降是最简单的优化器,它采用了简单的梯度下降法, 只更新每一步的梯度,但是它的收敛速度会受到学习

    2023年04月16日
    浏览(40)
  • 优化器SGD、Adam和AdamW的区别和联系

    优化器是用来更新和计算影响模型训练和模型输出的网络参数,使其逼近或达到最优值,从而最小化(或最大化)损失函数。 随机梯度下降 是最简单的优化器,它采用了简单的梯度下降法,只更新每一步的梯度,但是它的收敛速度会受到学习率的影响。 优点: 简单性,在优化

    2023年04月09日
    浏览(39)
  • Pytorch-Adam算法解析

    关注B站可以观看更多实战教学视频:肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com) Hi,兄弟们,这里是肆十二,今天我们来讨论一下深度学习中的Adam优化算法。 Adam算法是一种在深度学习中广泛使用的优化算法,它的名称来源于适应性矩估计(Adaptive Moment

    2024年02月20日
    浏览(41)
  • SDG,ADAM,LookAhead,Lion等优化器的对比介绍

    本文将介绍了最先进的深度学习优化方法,帮助神经网络训练得更快,表现得更好。有很多个不同形式的优化器,这里我们只找最基础、最常用、最有效和最新的来介绍。 首先,让我们定义优化。当我们训练我们的模型以使其表现更好时,首先使用损失函数,训练时损失的减

    2023年04月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包