当前位置: 首页 > news >正文

Adam 和 RMSprop优化算法

Adam 和 RMSprop 是两种广泛使用的优化算法,它们在处理非凸优化问题时,特别是在训练深度神经网络中,表现出优异的性能。这两种方法都利用了梯度的一阶矩(均值)和二阶矩(未平方的方差)来调整学习速率,但在细节实现上有所不同。下面是对这两种算法的详细介绍和对比:

RMSprop

RMSprop(Root Mean Square Propagation)是由 Geoff Hinton 提出的,主要是为了解决 Adagrad 算法学习率急剧下降的问题。RMSprop 通过引入衰减系数来调整历史梯度的累积方式,使其能够在训练过程中维持一个合适的、非递减的学习速率。

核心思想

  • 对每个参数使用不同的学习速率,这些学习速率是基于最近梯度的大小调整的。
  • 计算梯度的均方根,并使用该值来调整每个参数的学习速率。

更新规则

  • v t = β v t − 1 + ( 1 − β ) ∇ θ J ( θ ) v_t = \beta v_{t-1} + (1 - \beta) \nabla_{\theta} J(\theta) vt=βvt1+(1β)θJ(θ)
  • θ = θ − η v t + ϵ ∇ θ J ( θ ) \theta = \theta - \frac{\eta}{\sqrt{v_t + \epsilon}} \nabla_{\theta} J(\theta) θ=θvt+ϵ ηθJ(θ)

其中, v t v_t vt 是梯度平方的指数加权移动平均, β \beta β 通常设置为 0.9, η \eta η是初始学习速率, ϵ \epsilon ϵ是一个非常小的数,以避免除以零。

Adam

Adam(Adaptive Moment Estimation)结合了 Momentum 和 RMSprop 的思想,不仅考虑了梯度的一阶矩估计(即 Momentum),还考虑了二阶矩估计(即 RMSprop)。Adam 在实际应用中被证明是一种效果非常好的优化算法。

核心思想

  • 同时计算梯度的一阶矩和二阶矩的指数加权移动平均。
  • 使用这些矩估计来调整每个参数的学习速率。

更新规则

  • m t = β 1 m t − 1 + ( 1 − β 1 ) ∇ θ J ( θ ) m_t = \beta_1 m_{t-1} + (1 - \beta_1) \nabla_{\theta} J(\theta) mt=β1mt1+(1β1)θJ(θ)
  • v t = β 2 v t − 1 + ( 1 − β 2 ) ( ∇ θ J ( θ ) ) 2 v_t = \beta_2 v_{t-1} + (1 - \beta_2) (\nabla_{\theta} J(\theta))^2 vt=β2vt1+(1β2)(θJ(θ))2
  • m t ^ = m t 1 − β 1 t \hat{m_t} = \frac{m_t}{1 - \beta_1^t} mt^=1β1tmt
  • v t ^ = v t 1 − β 2 t \hat{v_t} = \frac{v_t}{1 - \beta_2^t} vt^=1β2tvt
  • θ = θ − η v t ^ + ϵ m t ^ \theta = \theta - \frac{\eta}{\sqrt{\hat{v_t} + \epsilon}} \hat{m_t} θ=θvt^+ϵ ηmt^

其中, m t m_t mt v t v_t vt 分别是一阶和二阶矩的估计, β 1 \beta_1 β1 β 2 \beta_2 β2 是衰减率,通常分别设置为 0.9 和 0.999。偏差修正步骤(通过 m t ^ \hat{m_t} mt^ v t ^ \hat{v_t} vt^)是必须的,因为它们帮助校正在训练初期估计的低偏差。

总结

  • RMSprop 是一个非常有效的、但相对简单的适应性学习率方法。
  • Adam 在 RMSprop 的基础上增加了动量项,通常提供更好的稳定性。
  • 在实际应用中,Adam 是更受欢迎的选择,因为它通常能够更快地收敛,尤其是在复杂的深度学习模型中。

在选择优化算法时,考虑具体问题的性质是很重要的,有时候可能需要通过实验来决定使用哪种算法。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 每日任务:HTTP状态码详解及强缓存与协商缓存的区别
  • EXO-chatgpt_api 解释
  • 常见的文心一言的指令
  • 力扣面试题(三)
  • .Net Core 微服务之Consul(三)-KV存储分布式锁
  • ARM编程指令一
  • STM32--HAL库--定时器篇
  • 堆的基本实现
  • mysql中提供的函数
  • 独孤思维:长线副业,越做越香
  • C语言常见字符函数和字符串函数精讲
  • connect的非阻塞模式
  • Discourse 如何通过终端工具访问 PGSQL
  • 多模态
  • Android APP 音视频(02)MediaProjection录屏与MediaCodec编码
  • Android Studio:GIT提交项目到远程仓库
  • express.js的介绍及使用
  • HTML中设置input等文本框为不可操作
  • HTTP--网络协议分层,http历史(二)
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • python3 使用 asyncio 代替线程
  • RxJS: 简单入门
  • SSH 免密登录
  • tab.js分享及浏览器兼容性问题汇总
  • Vue实战(四)登录/注册页的实现
  • 精彩代码 vue.js
  • 前端技术周刊 2019-02-11 Serverless
  • 如何实现 font-size 的响应式
  • 最近的计划
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 如何用纯 CSS 创作一个货车 loader
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • "无招胜有招"nbsp;史上最全的互…
  • # centos7下FFmpeg环境部署记录
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #pragma pack(1)
  • (33)STM32——485实验笔记
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (Java数据结构)ArrayList
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (自用)仿写程序
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .NET Core引入性能分析引导优化
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .net网站发布-允许更新此预编译站点
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • /tmp目录下出现system-private文件夹解决方法
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • @NotNull、@NotEmpty 和 @NotBlank 区别
  • @SuppressWarnings注解
  • [.NET]桃源网络硬盘 v7.4