Adam优化算法详细解析

2023-11-07

本文转载于以下博客地址:http://www.atyun.com/2257.html

如有冒犯,还望谅解!

Adam优化算法是一种对随机梯度下降法的扩展,最近在计算机视觉和自然语言处理中广泛应用于深度学习应用。在引入该算法时,OpenAI的Diederik Kingma和多伦多大学的Jimmy Ba在他们的2015 ICLR发表了一篇名为“Adam: A Method for Stochastic Optimization”的论文,列出了使用亚当在非凸优化问题上的诱人好处,如下:

  • 简单直接的实施
  • 计算上讲究效率
  • 小内存要求
  • 不变量对梯度的对角线重新调节
  • 非常适合于数据和/或参数方面的问题
  • 适合非平稳的目标
  • 适用于非常稀梳梯度的问题。
  • 超参数具有直观的解释,通常需要很少的调谐。

Adam如何工作?

Adam与经典的随机梯度下降法是不同的。随机梯度下降保持一个单一的学习速率(称为alpha),用于所有的权重更新,并且在训练过程中学习速率不会改变。每一个网络权重(参数)都保持一个学习速率,并随着学习的展开而单独地进行调整。该方法从梯度的第一次和第二次矩的预算来计算不同参数的自适应学习速率。

作者描述Adam时将随机梯度下降法两种扩展的优势结合在一起。

具体地说:

自适应梯度算法(AdaGrad)维护一个参数的学习速率,可以提高在稀疏梯度问题上的性能(例如,自然语言和计算机视觉问题)。

均方根传播(RMSProp)也维护每个参数的学习速率,根据最近的权重梯度的平均值(例如变化的速度)来调整。这意味着该算法在线上和非平稳问题上表现良好(如:噪声)。

Adam意识到AdaGrad和RMSProp的好处。与在RMSProp中基于平均第一个时刻(平均值)的参数学习速率不同,Adam也使用了梯度的第二个时刻的平均值(非中心方差)。

具体地说,该算法计算了梯度和平方梯度的指数移动平均值,并且参数beta1和beta2控制了这些移动平均的衰减率。移动平均值和beta1和beta2的初始值接近1.0(推荐值),这导致了估计时间的偏差为0。这种偏差是通过第一次计算偏差估计然后再计算比可用偏差校正估计来克服的。

Adam是有效的

Adam在深度学习领域是一种很受欢迎的算法,因为它能很快取得好的成果。实证结果表明:在实践中,Adam的工作表现良好,并优于其他随机优化方法。

在原论文中,通过实证证明了该方法的收敛性满足了理论分析的期望。

在MNIST的字符识别和IMDB情绪分析数据集上,Adam采用了逻辑回归算法,对MNIST的数据集进行了多层感知器算法,并在CIFAR-10图像识别数据集上进行了卷积神经网络。

他们的结论是:

  “利用大型模型和数据集,我们证明了Adam可以有效地解决实际的深度学习问题。”

对深度学习中Adam优化算法的简单介绍

在斯坦福大学关于计算机视觉的深度学习课程中,Andrej Karpathy等人开发了一种名为“CS231n:卷积神经网络”的课程,这是一种被认为是深度学习应用的默认优化方法。

在实践中,Adam被推荐为使用的默认算法,并且通常比RMSProp稍微好一点。然而,作为一种替代方法,SGD+Nesterov Momentum也值得尝试。

Adam配置参数

  • alpha也被称为学习速率或步长。权重比例被校正(例如001)。更大的值(例如0.3)在速率校正之前会加快初始学习速度。较小的值(例如1.0e-5)在培训期间降低学习速度
  • beta1。第一次估计的指数衰减率(如9)。
  • beta2。第二次估计的指数衰次减率(例如999)。在稀疏梯度问题(例如NLP和计算机视觉问题)上,这个值应该接近1.0。
  • epsilon是一个非常小的数字,可以防止任何在实施中被0划分(例如,10e-8)。

最后,这里推荐一些比较受欢迎的使用默认参数的深度学习库:

  • TensorFlow: learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08.
    Keras: lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0.
  • Blocks: learning_rate=0.002, beta1=0.9, beta2=0.999, epsilon=1e-08, decay_factor=1.
  • Lasagne: learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08
  • Caffe: learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08
  • MxNet: learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8
  • Torch: learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Adam优化算法详细解析 的相关文章

随机推荐

  • warning: #223-D: function “TIM4_Init“ declared implicitly

    stm32编写定时器程序时 出现这样一个警告 虽然不影响烧写程序 但是为了消除这个警告 搜索了一些解决方案 但是仍然不能解决问题 1 网络上提到可能没有把头文件在keil软件路径中包含 但是我包含了仍然有问题 2 网络上提到在调用的时候没有
  • c语言如何快速看懂别人的程序,探究如何快速看懂单片机程序方法

    在现实中 我相信有很多刚刚接触单片机的同学 简直是无从下手 打开一个程序 更会被复杂的结构和密密麻麻的代码吓到 产生退缩的想法 这篇文章带你了解一下单片机程序 我对单片机的总结 单片机其实就是一个芯片 内部有若干寄存器 外部有若干引脚 我们
  • Hyperledger Fabric学习笔记——6.账本存储

    1 账本存储概念 peer节点做账本存储 orderer是临时存储区块 peer节点是账本存储的持久化 会改变世界状态 文件系统 区块是存储为文件的 区块索引 用于查询区块 是用levelDB实现的 状态数据库 一般存放区块链最新状态 数据
  • git push解决办法: ! [remote rejected] master -> master (pre-receive hook declined)

    前天准备上传一个project到GitLab上 但是试了很多次都上传不上去 报错如下 remote rejected master gt master pre receive hook declined 截图 一开始还以为自己用户名和密码错
  • PHP字符串反转

    php自带反转函数strrev可以轻松将 hello world 改写为 dlrow olleh 但如果要自己写一个反转函数应该怎么实现呢 1 function myStrRev str len strlen str res for i 1
  • kobject_uevent_env 内核通知android有状态变化的一种方法

    以下文字来源网络 kernel include
  • 一个奇怪的GCD内存不释放的问题

    这个问题是我的同学提出来的 原帖在http bbs csdn net topics 390933411 大概是这样 pre class objc IBAction touchToCreateThread id sender int i 10
  • qcad编译001

    qcad plugin 报错 pluginclass not name type goetz 2011年2月27日 02 22 qmake s variables are not available in the C preprocesso
  • Linux大全

    奔跑吧Linux内核卷1 基础架构 第2版 https arch arm boot git clone https exports exports PATH pwd和 PWD的联系与区别 https blog csdn net weixin
  • c# .netcore oracle连接工具类

    1 先右键 添加NeGet包 引入Oracle ManagedDataAccess dll 2 将该类加入项目中 工具类 using System using System Collections using System Collecti
  • vue使用高德地图,精确定位&ip定位,获取城市、地区位置

    1 高德地图准备 点进入网址 https lbs amap com api javascript api guide abc prepare 1 注册开发者账号 2 进入控制台 3 申请高德地图key 2 在页面添加 JS API 的入口脚
  • 《Java程序设计》实验报告

    实验内容 面向对象程序设计 1 定一个名为Person的类 其中含有一个String类型的成员变量name和一个int类型的成员变量age 分别为这两个变量定义访问方法和修改方法 另外再为该类定义一个名为speak的方法 在其中输出name
  • 面试利器(一)-------交换排序(冒泡排序和快速排序)

    最近我在找工作 看了一下每一个公司的要求 几乎每个公司都要求我们熟练掌握几种基本的算法 下面我用最简单的语言写写我的理解 抓住关键我们很快就能理解几种基本的算法 全部都以从小到大排列 一 冒泡排序 抓住关键字 交换 两两交换 冒泡 向上浮动
  • 基于SSM+layui实现用户注册新增功能

    注册新增原理 判断用户名与数据表中信息是否相同 相同则返回用户新增失败 反之新增成功 注册用户密码使用md5加密方式存储到数据库 一 实现效果 用户新增界面 二 数据表 user 三 代码实现 1 bean层 UserInfo AllArg
  • 亲测有效,如何用ChatGPT 生成高质量原创视频

    尽管ChatGPT目前缺乏视频生成的能力 但我们可以借助插件实现视频生成 特别是对于那些从事Tiktok海外运营的用户而言 Visla和HeyGen是我目前测试的两款可生成视频的插件 首先登陆您的ChatGPT帐号 并单击邮箱 勾选设置 S
  • CUDA的作用

    显卡中CUDA是什么及作用介绍 CUDA Compute Unified Device Architecture 显卡厂商NVidia推出的运算平台 CUDA是一种由NVIDIA推出的通用并行计算架构 该架构使GPU能够解决复杂的计算问题
  • 联合memcache,repcached,magent,monit四个组件搭建高可用集群方案

    一 基本介绍 1 组件承担的角色 1 memcache负责缓存对象 2 repcached负责单主单从的同步备份 3 magent代理实现N主N备 4 monit监听以上组件的各个实例端口 保证故障自动重启 2 集群思路 1 利用repca
  • Unlock PeopleSoft Objects All at Once

    Change control is used in Application Designer to lock definitions and track history changes for each object Change cont
  • 图解NCHW与NHWC数据格式

    图解NCHW与NHWC数据格式 田海立 CSDN CSDN博客 nchw 流行的深度学习框架中有不同的数据格式 典型的有NCHW和NHWC格式 本文从逻辑表达和物理存储角度用图的方式来理解这两种数据格式 最后以RGB图像为例来加深NHWC和
  • Adam优化算法详细解析

    本文转载于以下博客地址 http www atyun com 2257 html 如有冒犯 还望谅解 Adam优化算法是一种对随机梯度下降法的扩展 最近在计算机视觉和自然语言处理中广泛应用于深度学习应用 在引入该算法时 OpenAI的Die