Loading [MathJax]/jax/output/CommonHTML/jax.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Adam 优化器

Adam 优化器

作者头像
为为为什么
发布于 2024-01-13 01:58:50
发布于 2024-01-13 01:58:50
1.6K0
举报
文章被收录于专栏:又见苍岚又见苍岚

Adam 是深度学习中常用的优化器,我在使用时遇到了一点问题,弄清楚后记录下来。

Adam

Adam(Adaptive Moment Estimation)优化器是一种广泛使用的优化算法,在深度学习训练中特别流行。它结合了两种不同的优化算法的优点:Momentum 和 RMSprop。下面是 Adam 优化器的工作原理的简要概述:

  1. 动量(Momentum): Adam 优化器计算梯度的指数加权移动平均(也称为一阶矩估计),这有助于加速梯度下降过程中的收敛速度,并帮助克服局部最小值和鞍点。这个概念类似于物理学中的动量,可以使参数更新朝着更一致的方向移动。
  2. RMSprop: Adam 同时计算梯度的平方的指数加权移动平均(二阶矩估计)。这有助于调整学习率,对每个参数进行自适应的学习率调整。参数的更新速度依赖于其梯度的大小,较大的梯度意味着较小的学习率,反之亦然。
  3. 偏差修正: 在初始阶段,由于一阶矩估计和二阶矩估计都被初始化为零向量,Adam 会应用偏差修正来防止估计值在训练初期偏向零,尤其是当衰减率非常高时。
  4. 参数更新: 结合以上两点,Adam 优化器在每次迭代中更新每个参数,使用的是基于一阶矩和二阶矩调整后的梯度。

Adam 优化器的关键优势在于其自适应学习率的特性,这使得它在处理不同参数的更新时更为灵活,尤其是在处理稀疏梯度或不同量级的梯度时。Adam 通常需要更少的手动超参数调整,尤其是学习率。

Adam 优化器的核心公式如下:

公式

用途

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

更新一阶矩估计

$v_t=\beta_2v_{t-1}+(1-\beta_2)g_t^2$

更新二阶矩估计

$\hat{m}_{t}=\frac{m_{t}}{1-\beta_{1}^{t}}$

一阶矩估计的偏差修正

$\hat{v}_{t}=\overline{1-\beta_{2}^{2}}$

二阶矩估计的偏差修正

$\theta_{t+1}=\theta_t-\frac\eta{\sqrt{\hat{v}_t}+\epsilon}\hat{m}_t$

参数更新

其中, 是需要优化的参数, 是在时间步 的梯度, 分别是一阶矩和二阶矩的估计, 是衰减率 (通常设为接近1的值), 是学习率,而 是为了数值稳定性而添加的一个小常数。

理解

概念

理解

动量(一阶矩)

梯度变化带有噪声,我们需要梯度修正保持一定趋势,需要给梯度更新一定的惯性令其克服噪声向正确的方向前进

二阶矩

不是所有参数都适用于相同的学习率,我们需要根据梯度大小自适应调整每个参数的学习率,这是二阶矩的作用

偏差修正

更新初期,一阶矩和二阶矩均为 0,因此它们会被低估——特别是在迭代的早期阶段,因此除一个随着迭代轮数增加更接近 1 的数字可以在更新初期放大一二阶矩的估计值,同时迭代轮数多了不会影响正常的估计进行

问题记录

我在使用 Adam 优化器优化参数时遇到了稍微复杂的情况:

我的优化器 A 同时管理参数 B, C,但是在某一阶段的网络训练中,我确定 C 不会参与梯度回传,需要 A 优化 B

中的参数即可。这是我的需求,目的是更新 B 不更新 C 。

我知道 Adam 有动量的概念,那么直接将 C 的 grad 置零是没用的,因为残留的动量会使得参数更新时重新变化出梯度 grad 来,那么我在开始训练 B 之前将 A 中所有的一二阶矩全部置零,同时将所有梯度 grad 全部置零:

1234567

梯度置零optimizer.zero_grad()# 一二阶矩 置零for param in optimizer.state_dict()'state': if param is param_to_reset: optimizer.state_dict()'state''exp_avg'.zero_() optimizer.state_dict()'state''exp_avg_sq'.zero_()

但是在训练 B 的过程中, C 的参数还是会被更新,当时我没有想通问题出在哪。

问题原因

经过翻查源码,发现 Adam 中集成了正则化 L2 Loss —— weight_decay,该参数将当前需要更新的数据的值直接乘起来加到梯度上,本意是减小参数绝对值,令其更加鲁棒,但是对我的需求便是灭顶之灾,经过多轮训练后所有没有梯度回传的参数都会减小到接近 0.

问题解决

找到原因就好办了,源码中会对优化器管理的参数做一个筛选,如果当前参数没有 grad 信息,那么优化器会将其跳过,所以训练前把所有优化器中参数的 grad 设置为 None(不是置零)即可。

原始论文

参考资料

文章链接: https://cloud.tencent.com/developer/article/2378996

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-1-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
精华 | 深度学习中的【五大正则化技术】与【七大优化策略】
关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第一 【Python】:排名第三 【算法】:排名第四 源 | 数盟 深度学习中,卷积神经网络和循环神经网络等深度模型在各种复杂的任务中表现十分优秀。例如卷积神经网络(CNN)这种由生物启发而诞生的网络,它基于数学的卷积运算而能检测大量的图像特征,因此可用于解决多种图像视觉应用、目标分类和语音识别等问题。 但是,深层网络架构的学习要求大量数据,对计算能力的要求很高。神经元和参数之间的大量连接需要通过梯度下降及其变体以迭代的方式不断调整。此外
昱良
2018/04/08
1.9K0
精华 | 深度学习中的【五大正则化技术】与【七大优化策略】
深度学习最常用的学习算法:Adam优化算法
听说你了解深度学习最常用的学习算法:Adam优化算法?-深度学习世界。 深度学习常常需要大量的时间和机算资源进行训练,这也是困扰深度学习算法开发的重大原因。虽然我们可以采用分布式并行训练加速模型的学习,但所需的计算资源并没有丝毫减少。而唯有需要资源更少、令模型收敛更快的最优化算法,才能从根本上加速机器的学习速度和效果,Adam 算法正为此而生! Adam 优化算法是随机梯度下降算法的扩展式,近来其广泛用于深度学习应用中,尤其是计算机视觉和自然语言处理等任务。本文分为两部分,前一部分简要介绍了 Adam 优化
用户1332428
2018/03/09
10.4K0
深度学习最常用的学习算法:Adam优化算法
超越Adam,从适应性学习率家族出发解读ICLR 2018高分论文
机器之心原创 作者:蒋思源 最近,ICLR 2018 高分论文讨论了 Adam 等适应性学习率算法的收敛性缺点,并提出了一种新的 Adam 变体。为此,我们从 AdaGrad 开始,依次分析了 AdaDelta、RMSProp 和 Adam 等适应性学习率算法家族,并在最后结合该 ICLR 2018 高分论文讨论 Adam 的非收敛性和修正的方法。 随机梯度下降是当前训练深度网络的主流方法,该方法通过在小批量数据上计算损失函数的梯度而迭代地更新权重与偏置项。特别的,SGD 的一类变体通过使用历史梯度某种形式
机器之心
2018/05/10
7720
Adam优化算法「建议收藏」
深度学习常常需要大量的时间和计算机资源进行训练,这也是困扰深度学习算法开发的重大原因。虽然我们可以采用分布式并行训练加速模型的学习,但需要的计算资源并没有丝毫减少。而唯有需要资源更少、令模型收敛更快的最优化算法,才能从根本上加速机器的学习速度和效果,Adam算法正为此而生!
全栈程序员站长
2022/09/16
9710
一文概览深度学习中的五大正则化方法和七大优化策略
选自arXiv 机器之心编译 深度学习中的正则化与优化策略一直是非常重要的部分,它们很大程度上决定了模型的泛化与收敛等性能。本文主要以深度卷积网络为例,探讨了深度学习中的五项正则化与七项优化策略,并重点解释了当前最为流行的 Adam 优化算法。本文主体介绍和简要分析基于南洋理工的概述论文,而 Adam 方法的具体介绍基于 14 年的 Adam 论文。 近来在深度学习中,卷积神经网络和循环神经网络等深度模型在各种复杂的任务中表现十分优秀。例如卷积神经网络(CNN)这种由生物启发而诞生的网络,它基于数学的卷积运
机器之心
2018/05/10
1.1K0
深度学习基础入门篇[三]:优化策略梯度下降算法:SGD、MBGD、Momentum、Adam、AdamW
如果我们定义了一个机器学习模型,比如一个三层的神经网络,那么就需要使得这个模型能够尽可能拟合所提供的训练数据。但是我们如何评价模型对于数据的拟合是否足够呢?那就需要使用相应的指标来评价它的拟合程度,所使用到的函数就称为损失函数(Loss Function),当损失函数值下降,我们就认为模型在拟合的路上又前进了一步。最终模型对训练数据集拟合的最好的情况是在损失函数值最小的时候,在指定数据集上时,为损失函数的平均值最小的时候。
汀丶人工智能
2023/04/06
2.6K0
深度学习基础入门篇[三]:优化策略梯度下降算法:SGD、MBGD、Momentum、Adam、AdamW
Adam
Adam 算法可以看作动量法和 RMSprop 算法的结合,不但使用动量作为参数更新方向,而且可以自适应调整学习率。
hotarugali
2022/03/10
4750
【PyTorch入门】 PyTorch不同优化器的比较
在 PyTorch 中,torch.optim 提供了多种优化器用于神经网络训练。每种优化器背后有不同的更新规则和机制,旨在适应不同的训练需求。以下是五种常见优化器(SGD、Momentum、AdaGrad、RMSprop、Adam)的原理、作用、优缺点及应用场景。
机器学习司猫白
2025/01/21
4180
【PyTorch入门】 PyTorch不同优化器的比较
解决ImportError: cannot import name ‘adam‘ from ‘tensorflow.python.keras.optimizer
在使用TensorFlow进行深度学习时,经常会遇到一些错误。其中一个常见的错误是​​ImportError: cannot import name ‘adam‘ from ‘tensorflow.python.keras.optimizers‘​​。本文将介绍这个错误的原因,并提供解决方案。
大盘鸡拌面
2023/10/31
1.5K0
ADAM优化算法与学习率调度器:深度学习中的关键工具
这里推荐一篇实用的文章:《动态网格图片展示中的自适应逻辑》,作者:【繁依Fanyi】。
小说男主
2024/12/02
5260
ADAM优化算法与学习率调度器:深度学习中的关键工具
【深度学习实验】网络优化与正则化(三):随机梯度下降的改进——Adam算法详解(Adam≈梯度方向优化Momentum+自适应学习率RMSprop)
  目前,研究人员通过大量实践总结了一些经验方法,以在神经网络的表示能力、复杂度、学习效率和泛化能力之间取得良好的平衡,从而得到良好的网络模型。本系列文章将从网络优化和网络正则化两个方面来介绍如下方法:
Qomolangma
2024/07/30
5570
【深度学习实验】网络优化与正则化(三):随机梯度下降的改进——Adam算法详解(Adam≈梯度方向优化Momentum+自适应学习率RMSprop)
神经网络优化器
皮大大
2023/08/25
2740
深度学习优化策略-从经典算法到前沿创新
今日推荐:用CompletableFuture,品怨种码生,写线上BUG,拿C+绩效
一键难忘
2024/12/03
4540
Pytorch中常用的四种优化器SGD、Momentum、RMSProp、Adam。
很多人在使用pytorch的时候都会遇到优化器选择的问题,今天就给大家介绍对比一下pytorch中常用的四种优化器。SGD、Momentum、RMSProp、Adam。
ShuYini
2019/08/21
24.5K0
Pytorch中常用的四种优化器SGD、Momentum、RMSProp、Adam。
中国博士生提出最先进AI训练优化器,收敛快精度高,网友亲测:Adam可以退休了
但是鱼和熊掌不可兼得。Adam、RMSProp这些算法虽然收敛速度很快,当往往会掉入局部最优解的“陷阱”;原始的SGD方法虽然能收敛到更好的结果,但是训练速度太慢。
量子位
2019/08/19
8250
中国博士生提出最先进AI训练优化器,收敛快精度高,网友亲测:Adam可以退休了
【知识】PyTorch中不同优化器的特点和使用
小锋学长生活大爆炸
2025/04/09
4310
聊聊神经网络的优化算法
优化算法主要用于调整神经网络中的超参数,使得训练数据集上的损失函数尽可能小。其核心逻辑是通过计算损失函数对参数的梯度(导数)来确定参数更新方向。
Ryan_OVO
2023/12/19
2430
聊聊神经网络的优化算法
腾讯二面,差一点。。。
这几天,社群有位同学在基础机器学习算法岗工作了两年后,想要跳槽。最近面试了大概有20天左右时间了。
Python编程爱好者
2024/06/04
2270
腾讯二面,差一点。。。
深度学习优化器总结
每次更新我们需要计算整个数据集的梯度,因此使用批量梯度下降进行优化时,计算速度很慢,而且对于不适合内存计算的数据将会非常棘手。批量梯度下降算法不允许我们实时更新模型。
用户1332428
2018/07/26
1.3K0
深度学习优化器总结
[机器学习基础二] 深度学习优化器一览
Hello大家好,本期将和大家一起分享和讨论一下深度学习中的一个基础组件:Optimizer,也就是优化器。这是一个在炼丹过程中容易被忽视,但其实又非常重要的组件。接下来几分钟里,让我们重温优化器的发展和应用,希望对大家有所帮助。本期是机器学习基础三篇中的第二篇,希望大家多多支持~
朴素人工智能
2021/01/12
8900
[机器学习基础二] 深度学习优化器一览
推荐阅读
相关推荐
精华 | 深度学习中的【五大正则化技术】与【七大优化策略】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档