深入剖析 Adam 优化器:原理、优势与应用

在深度学习领域,优化器的选择对模型的训练效率和性能起着决定性作用。Adam优化器作为一种自适应优化算法,凭借其根据历史梯度信息动态调整学习率的特性,备受研究者和工程师的青睐。它巧妙融合了RMSPropMomentum两种优化算法的理念,并对参数更新进行归一化处理,确保每个参数更新的量级相近,有效提升了训练效果。在众多实际问题中,尤其是大规模数据集上深度神经网络的训练,Adam优化器都展现出卓越的性能。

前置知识:RMSProp和Momentum

在深入探究Adam优化器之前,先来了解一下RMSProp和Momentum这两种优化算法。

RMSProp优化算法

RMSprop(Root Mean Square Propagation)是一种用于处理深度学习中稀疏梯度问题的自适应学习率优化算法。它通过对梯度的平方(二阶矩)进行加权平均,来动态调整每个参数的学习率。具体来说,较大梯度的参数步长会更小,较小梯度的参数步长则会较大,以此避免训练过程中的震荡现象。

  • 梯度平方的指数加权平均
    $$v_t = \beta v_{t-1} + (1 - \beta) g_t^2$$
    其中, v t v_t vt 表示时间步 t t t 时的梯度平方的加权平均(二阶矩), g t g_t gt 是当前时间步 t t t 的梯度, β \beta β 是衰减系数,用于控制梯度平方的历史信息占比,通常取值为0.9。
  • 参数更新
    θ t = θ t − 1 − α v t + ϵ g t \theta_t = \theta_{t-1} - \frac{\alpha}{\sqrt{v_t + \epsilon}} g_t θt=θt1vt+ϵ αgt
    其中, θ t \theta_t θt 是时间步 t t t 时的模型参数, α \alpha α 是学习率, ϵ \epsilon ϵ 是一个极小的常数,常取值为 1 × 1 0 − 8 1\times10^{-8} 1×108,用于防止分母为零。
  • 公式解析RMSprop通过对梯度平方进行指数加权平均,计算每个参数的更新步长,使其能记住过去梯度的变化,并在未来更新中予以考虑。在更新参数时,依据每个参数的梯度平方加权平均值 v t v_t vt 调整学习率,梯度大的参数通过对 v t v_t vt 平方根的缩放避免步伐过大,梯度小的参数则进行较大更新。同时,添加小常数 ϵ \epsilon ϵ 可防止除零错误,保障计算的稳定性。

Momentum优化算法

Momentum(动量)优化器是一种加速梯度下降的方法,它引入“动量”概念,对梯度的历史值进行累积,使参数更新不仅依赖当前梯度,还参考过去的梯度信息。这有助于减少优化过程中的振荡,加快收敛速度。

  • 动量更新
    m t = β m t − 1 + ( 1 − β ) g t m_t = \beta m_{t-1} + (1 - \beta) g_t mt=βmt1+(1β)gt
    其中, m t m_t mt(动量)是时间步 t t t 的梯度加权平均(一阶矩), g t g_t gt 是当前时间步 t t t 的梯度, β \beta β 是动量的衰减系数,通常取值在 0 ≤ β < 1 0\leq \beta < 1 0β<1 之间,常见取值为0.9。
  • 参数更新
    θ t = θ t − 1 − α m t \theta_t = \theta_{t-1} - \alpha m_t θt=θt1αmt
    其中, θ t \theta_t θt 是时间步 t t t 的模型参数, α \alpha α 是学习率,用于控制更新步长。
  • 公式解析
    m t m_t mt 会结合当前梯度 g t g_t gt 和之前的动量 m t − 1 m_{t - 1} mt1 形成加权平均,避免梯度震荡,在优化时逐渐加速收敛,特别是在平坦区域或局部最小值附近,动量能帮助跳出不良优化路径。最终的参数更新依赖于加权后的动量 m t m_t mt,而非单纯依赖当前梯度,动量值越大,当前梯度影响越小,历史梯度贡献越大。

Adam优化器的原理

Adam优化器巧妙地融合了RMSProp和Momentum的优势,通过对梯度的一阶矩估计(均值)和二阶矩估计(未中心化的方差)进行综合运用,实现自适应学习率调整。

算法所需参数

  • α \alpha α(Stepsize):步长,即学习率,用于控制每次参数更新的幅度。
  • β 1 , β 2 ∈ [ 0 , 1 ) \beta_1, \beta_2 \in [0, 1) β1,β2[0,1):分别是一阶矩估计和二阶矩估计的指数衰减率。 β 1 \beta_1 β1 通常取值接近1,如0.9,它决定了对历史梯度信息的重视程度; β 2 \beta_2 β2 通常取值也接近1 。
  • f ( θ ) f(\theta) f(θ):带有参数 θ \theta θ 的随机目标函数,是模型训练中需要最小化(或最大化)的函数。
  • θ 0 \theta_0 θ0:初始参数向量,模型参数的初始值。

算法步骤

  1. 初始化
    • m 0 ← 0 m_0 \leftarrow 0 m00:初始化一阶矩向量为0。
    • v 0 ← 0 v_0 \leftarrow 0 v00:初始化二阶矩向量为0。
    • t ← 0 t \leftarrow 0 t0:初始化时间步为0。
  2. 迭代过程
    • 当参数 θ t \theta_t θt 未收敛时,进行以下操作:
      • t ← t + 1 t \leftarrow t + 1 tt+1:时间步加1。
      • g t ← ∇ θ f t ( θ t − 1 ) g_t \leftarrow \nabla_{\theta}f_t(\theta_{t - 1}) gtθft(θt1):计算在时间步 t t t 时,随机目标函数关于参数 θ \theta θ 的梯度。
      • m t ← β 1 ⋅ m t − 1 + ( 1 − β 1 ) ⋅ g t m_t \leftarrow \beta_1 \cdot m_{t - 1} + (1 - \beta_1) \cdot g_t mtβ1mt1+(1β1)gt:更新梯度加权平均值(一阶矩估计),结合了历史梯度信息和当前梯度。
      • v t ← β 2 ⋅ v t − 1 + ( 1 − β 2 ) ⋅ g t 2 v_t \leftarrow \beta_2 \cdot v_{t - 1} + (1 - \beta_2) \cdot g_t^2 vtβ2vt1+(1β2)gt2:更新梯度平方的加权平均值(二阶矩估计),反映了梯度的平方的累积情况。
      • m ^ t ← m t / ( 1 − β 1 t ) \hat{m}_t \leftarrow m_t / (1 - \beta_1^t) m^tmt/(1β1t):修正 m t m_t mt,随着 t t t的增加, ( 1 − β 1 t ) (1 - \beta_1^t) (1β1t)越来越大, m t / ( 1 − β 1 t ) m_t / (1 - \beta_1^t) mt/(1β1t)越来越小。
      • v ^ t ← v t / ( 1 − β 2 t ) \hat{v}_t \leftarrow v_t / (1 - \beta_2^t) v^tvt/(1β2t):修正 v t v_t vt
      • θ t ← θ t − 1 − α ⋅ m ^ t / ( v ^ t + ϵ ) \theta_t \leftarrow \theta_{t - 1} - \alpha \cdot \hat{m}_t / (\sqrt{\hat{v}_t} + \epsilon) θtθt1αm^t/(v^t +ϵ):更新参数,结合了学习率、修正后的 m t m_t mt v t v_t vt来调整参数值。
  3. 结束:当参数收敛后,返回最终的参数 θ \theta θ

从数学角度分析Adam优化器的性质

自适应学习率

Adam优化器能根据梯度变化自主调节学习率。从更新公式可知,当梯度较大时,分母 $ (\sqrt{\hat{v}_t} + \epsilon)$ 相应增大,学习率变小,防止一步走得太大;当梯度较小时,分母变小,学习率增大,加快收敛速度。这种自适应策略使Adam优化器在不同训练阶段都能保持良好性能。

先快后慢的收敛特性

训练初期,梯度较大,Adam优化器采用较大学习率,快速向最优解方向前进;随着训练推进,梯度逐渐变小,学习率也逐渐减小,使模型能更精细地调整参数,最终收敛到最优解附近。这种特性保证了收敛速度和精度。

对梯度绝对值的控制

Adam优化器通过除以梯度的二阶矩估计的平方根(即 v ^ t + ϵ \sqrt{\hat{v}_t} + \epsilon v^t +ϵ)来控制每一步更新的步子大小,有效避免了梯度爆炸或梯度消失问题,使模型训练更稳定。

Adam优化器的优势

高效性

Adam优化器收敛速度快,能显著减少训练时间,并且没有复杂运算,尤其适用于大规模数据集和复杂模型的训练。

鲁棒性

它对不同类型的问题,无论是凸优化问题还是非凸优化问题,都有良好的适应性,能取得不错的效果。

易于调参

Adam优化器仅有几个超参数(如 α \alpha α β 1 \beta_1 β1 β 2 \beta_2 β2 ϵ \epsilon ϵ ),且在大多数情况下,这些超参数都有较为合理的默认值,无需过多调参工作。

Adam优化器凭借其独特的设计和出色的性能,已成为深度学习领域不可或缺的工具。深入理解其原理和性质,能帮助我们更好地运用它提升模型训练效果,推动深度学习技术不断发展。在未来的研究和应用中,相信Adam优化器还会持续改进和完善,为更多领域带来创新与突破。

感谢你的阅读,希望本文能对你有所收获。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/960159.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ppp综合实验

IP地址 r1 r2 r3 r4 hdlc封装 pap认证 r2 r3 chap认证 r2 r4 MGRE 主认证 [r1]int Tunnel 0/0/0 [r1-Tunnel0/0/0]ip add 192.168.4.1 24 [r1-Tunnel0/0/0]tunnel-protocol gre p2mp [r1-Tunnel0/0/0]source 12.1.1.1 [r1-Tunnel0/0/0]nhrp entry multicast dynamic [r1-Tu…

C++——list的了解和使用

目录 引言 forward_list与list 标准库中的list 一、list的常用接口 1.list的迭代器 2.list的初始化 3.list的容量操作 4.list的访问操作 5.list的修改操作 6.list的其他操作 二、list与vector的对比 结束语 引言 本篇博客要介绍的是STL中的list。 求点赞收藏评论…

Elasticsearch+kibana安装(简单易上手)

下载ES( Download Elasticsearch | Elastic ) 将ES安装包解压缩 解压后目录如下: 修改ES服务端口&#xff08;可以不修改&#xff09; 启动ES 记住这些内容 验证ES是否启动成功 下载kibana( Download Kibana Free | Get Started Now | Elastic ) 解压后的kibana目…

Ansible自动化运维实战--script、unarchive和shell模块(6/8)

文章目录 一、script模块1.1、功能1.2、常用参数1.3、举例 二、unarchive模块2.1、功能2.2、常用参数2.3、举例 三、shell模块3.1、功能3.2、常用参数3.3、举例 一、script模块 1.1、功能 Ansible 的 script 模块允许你在远程主机上运行本地的脚本文件&#xff0c;其提供了一…

Unity Epplus读取excel表并存入So文件举例

目录 此篇需要你有一定的阅读代码的能力&#xff0c;不然点开了也不知道在做什么 这是读表工具 So文件这么写 使用 此篇需要你有一定的阅读代码的能力&#xff0c;不然点开了也不知道在做什么 在此之前你需要知道epplus是干什么的&#xff0c;然后知道其基本api&#xff0…

Java Web-Cookie与Session

会话跟踪技术 会话跟踪技术是一种在 Web 应用程序中跟踪用户会话状态的机制&#xff0c;它允许服务器在多个请求之间识别和关联属于同一用户的请求&#xff0c;以便在整个会话过程中保持用户相关的信息。以下是几种常见的会话跟踪技术&#xff1a; Cookie 概念&#xff1a;Cook…

Spring Boot(6)解决ruoyi框架连续快速发送post请求时,弹出“数据正在处理,请勿重复提交”提醒的问题

一、整个前言 在基于 Ruoyi 框架进行系统开发的过程中&#xff0c;我们常常会遇到各种有趣且具有挑战性的问题。今天&#xff0c;我们就来深入探讨一个在实际开发中较为常见的问题&#xff1a;当连续快速发送 Post 请求时&#xff0c;前端会弹出 “数据正在处理&#xff0c;请…

YOLOv8改进,YOLOv8检测头融合DynamicHead,并添加小目标检测层(四头检测),适合目标检测、分割等,全网独发

摘要 作者提出一种新的检测头,称为“动态头”,旨在将尺度感知、空间感知和任务感知统一在一起。如果我们将骨干网络的输出(即检测头的输入)视为一个三维张量,其维度为级别 空间 通道,这样的统一检测头可以看作是一个注意力学习问题,直观的解决方案是对该张量进行全自…

C语言编译过程全面解析

今天是2025年1月26日&#xff0c;农历腊月二十七&#xff0c;一个距离新春佳节仅一步之遥的日子。城市的喧嚣中&#xff0c;年味已悄然弥漫——能在这个时候坚持上班的人&#xff0c;真可称为“牛人”了吧&#xff0c;哈哈。。。。 此刻&#xff0c;我在重新审视那些曾被遗忘的…

在php中怎么打开OpenSSL

&#xff08;点击即可进入聊天助手&#xff09; 背景 在使用php做一些项目时,有用到用户邮箱注册等,需要开启openssl的能力 在php系统中openssl默认是关闭状态的,在一些低版本php系统中,有的甚至需要在服务器终端后台,手动安装 要打开OpenSSL扩展&#xff0c;需要进行以下步骤 …

【数据分享】2014-2025年我国水系数据(免费获取/全国/分省)

水系数据是我们在各项研究中经常使用的数据&#xff01;水系数据虽然很常用&#xff0c;但是却基本没有能下载最近年份水系数据的网站&#xff0c;所以很多人不知道如何获得水系数据。 本次我们给大家分享的是2014-2025年的全国范围的水系数据&#xff0c;包括水系线数据和水系…

Office2021下载与安装保姆级教程【Office Tool Plus】

Office Tool Plus安装Office2021 下载Office Tool Plus安装OfficeⅠ. 清除旧版本Ⅱ. 配置安装参数Ⅲ. 安装许可证Ⅳ. 激发&#xff08;JH&#xff09;Office 本文介绍使用Office Tool Plus工具下载、安装、部署Office 2021全过程。 下载Office Tool Plus OfficeToolPlus是一个…

DeepSeek明确学术研究方向效果如何?

明确学术研究方向 在学术写作中&#xff0c;选择一个出色的研究主题至关重要&#xff0c;因为它直接关系到论文是否能登上高级别的学术期刊。不少学者在这个过程中走入了误区&#xff0c;他们往往将大把的时间花在写作本身&#xff0c;而忽略了对选题的深入思考&#xff0c;这…

Spring MVC 综合案例

目录 一. 加法计算器 1. 准备工作 2. 约定前后端交互接口 需求分析 接口定义 3. 服务器端代码 4. 运行测试 二. 用户登录 1. 准备工作 2. 约定前后端交互接口 需求分析 接口定义 (1) 登录界面接口 (2) 首页接口 3. 服务器端代码 4. 运行测试 三. 留言板 1. 准备…

基于OSAL的嵌入式裸机事件驱动框架——消息队列osal_msg

参考B站up主【架构分析】嵌入式祼机事件驱动框架 感谢大佬分享 消息队列 消息分为hdr和bdy&#xff0c;把消息的头dhr和内容bdy做了一个分离的设计 dhr包括指向下一个消息的指针next&#xff0c;len在创建消息的时候使用&#xff0c;dest_id即目标任务&#xff0c;将消息和任务…

Github 2025-01-25Rust开源项目日报Top10

根据Github Trendings的统计,今日(2025-01-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Python项目1Vue项目1JavaScript项目1Deno: 现代JavaScript和TypeScript运行时 创建周期:2118 天开发语言:Rust, JavaScript协议类型…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.8 随机数奥秘:生成符合现实分布的虚拟数据

1.8 随机数奥秘&#xff1a;生成符合现实分布的虚拟数据 目录 #mermaid-svg-wHqPAE3mMd8HNYmi {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-wHqPAE3mMd8HNYmi .error-icon{fill:#552222;}#mermaid-svg-wHqPAE3mM…

使用vitepress搭建自己的博客项目

一、介绍can-vitepress-blog 什么是CAN BLOG CAN BLOG是基于vitepress二开的个人博客系统&#xff0c;他能够方便使用者快速构建自己的博客文章&#xff0c;无需繁琐的配置和复杂的代码编写。 CAN BLOG以antdv为UI设计基础&#xff0c;简洁大方&#xff0c;界面友好&#xf…

STranslate 中文绿色版即时翻译/ OCR 工具 v1.3.1.120

STranslate 是一款功能强大且用户友好的翻译工具&#xff0c;它支持多种语言的即时翻译&#xff0c;提供丰富的翻译功能和便捷的使用体验。STranslate 特别适合需要频繁进行多语言交流的个人用户、商务人士和翻译工作者。 软件功能 1. 即时翻译&#xff1a; 文本翻译&#xff…

【数据结构】_链表经典算法OJ:合并两个有序数组

目录 1. 题目描述及链接 2. 解题思路 3. 程序 3.1 第一版 3.2 第二版 1. 题目描述及链接 题目链接&#xff1a;21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。 新链表是通过拼接给…