深入剖析 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优化器还会持续改进和完善,为更多领域带来创新与突破。

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis入门

Mybatis入门 一、mybatis的快速入门 1、创建springboot项目 直接选择必须的依赖&#xff1a;MyBatis Framework和MySQL Driver在项目下创建pojo包&#xff0c;用来存放数据库表对应的实体类 2、配置连接信息 在springboot项目的配置文件中application.properties写入一下信…

消息队列篇--通信协议篇--MQTT(通配式主题,消息服务质量Qos,EMQX的Broker,MqttClient示例,MQTT报文等)

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息协议。它基于发布/订阅模式&#xff0c;专为低带宽、高延迟或不可靠网络设计。它主要用于物联网&#xff08;IoT&#xff09;设备之间的通信&#xff0c;但也广泛应用于其他需要高效消息传递…

dmfldr实战

dmfldr实战 本文使用达梦的快速装载工具&#xff0c;对测试表进行数据导入导出。 新建测试表 create table “BENCHMARK”.“TEST_FLDR” ( “uid” INTEGER identity(1, 1) not null , “name” VARCHAR(24), “begin_date” TIMESTAMP(0), “amount” DECIMAL(6, 2), prim…

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

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

关于MySQL InnoDB存储引擎的一些认识

文章目录 一、存储引擎1.MySQL中执行一条SQL语句的过程是怎样的&#xff1f;1.1 MySQL的存储引擎有哪些&#xff1f;1.2 MyIsam和InnoDB有什么区别&#xff1f; 2.MySQL表的结构是什么&#xff1f;2.1 行结构是什么样呢&#xff1f;2.1.1 NULL列表&#xff1f;2.1.2 char和varc…

单相可控整流电路——单相桥式全控整流电路

以下是关于单相桥式整流电路的介绍&#xff1a; 电路构成&#xff08;带阻性负载的工作情况&#xff09; - 二极管&#xff1a;是电路0的核心元件&#xff0c;通常采用四个同型号或根据需求选择不同型号的二极管&#xff0c;如1N4001、1N4007等&#xff0c;如图Vt1和Vt4是一对…

Linux(Centos、Ubuntu) 系统安装jenkins服务

该文章手把手演示在Linux系统下如何安装jenkins服务、并自定义jenkins数据文件位置、以及jenkins如何设置国内镜像源加速&#xff0c;解决插件下载失败问题 安装方式&#xff1a;war包安装 阿里云提供的war下载源地址&#xff1a;https://mirrors.aliyun.com/jenkins/war/?s…

力扣算法题——11.盛最多水的容器

目录 &#x1f495;1.题目 &#x1f495;2.解析思路 本题思路总览 借助双指针探索规律 从规律到代码实现的转化 双指针的具体实现 代码整体流程 &#x1f495;3.代码实现 &#x1f495;4.完结 二十七步也能走完逆流河吗 &#x1f495;1.题目 &#x1f495;2.解析思路…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】 1.3 广播机制:维度自动扩展的黑魔法

1.3 《广播机制&#xff1a;维度自动扩展的黑魔法》 前言 NumPy 的广播机制是 Python 科学计算中最强大的工具之一&#xff0c;它允许不同形状的数组进行运算&#xff0c;而无需显式地扩展数组的维度。这一机制在实际编程中非常有用&#xff0c;但初学者往往对其感到困惑。在…

Semantic Kernel - Kernel理解

目录 一、关于Kernel 二、案例实战 三、运行截图 一、关于Kernel 微软的 Semantic Kernel 项目中,Semantic Kernel 是一个工具框架,旨在使得开发人员能够更容易地将大语言模型(如GPT)集成到不同的应用中。它通过提供一组接口、任务模板和集成模块,使开发者能够轻松地设计…

【MySQL】--- 复合查询 内外连接

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; MySQL &#x1f3e0; 基本查询回顾 假设有以下表结构&#xff1a; 查询工资高于500或岗位为MANAGER的雇员&#xff0c;同时还要满足他们的姓名首字母为…

Qt Designer and Python: Build Your GUI

1.install pyside6 2.pyside6-designer.exe 发送到桌面快捷方式 在Python安装的所在 Scripts 文件夹下找到此文件。如C:\Program Files\Python312\Scripts 3. 打开pyside6-designer 设计UI 4.保存为simple.ui 文件&#xff0c;再转成py文件 用代码执行 pyside6-uic.exe simpl…

openlayer getLayerById 根据id获取layer图层

背景&#xff1a; 在项目中使用getLayerById获取图层&#xff0c;这个getLayerById()方法不是openlayer官方文档自带的&#xff0c;而是自己封装的一个方法&#xff0c;这个封装的方法的思路是&#xff1a;遍历所有的layer&#xff0c;根据唯一标识【可能是id&#xff0c;也可能…

Qt 控件与布局管理

1. Qt 控件的父子继承关系 在 Qt 中&#xff0c;继承自 QWidget 的类&#xff0c;通常会在构造函数中接收一个 parent 参数。 这个参数用于指定当前空间的父控件&#xff0c;从而建立控件间的父子关系。 当一个控件被设置为另一控件的子控件时&#xff0c;它会自动成为该父控…

SOME/IP--协议英文原文讲解1

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 一、SOM…

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;其提供了一…

【模型】RNN模型详解

1. 模型架构 RNN&#xff08;Recurrent Neural Network&#xff09;是一种具有循环结构的神经网络&#xff0c;它能够处理序列数据。与传统的前馈神经网络不同&#xff0c;RNN通过将当前时刻的输出与前一时刻的状态&#xff08;或隐藏层&#xff09;作为输入传递到下一个时刻&…

《FreqMamba: 从频率角度审视图像去雨问题》学习笔记

paper&#xff1a;FreqMamba: Viewing Mamba from a Frequency Perspective for Image Deraining GitHub&#xff1a;GitHub - aSleepyTree/FreqMamba 目录 摘要 1、介绍 2、相关工作 2.1 图像去雨 2.2 频率分析 2.3 状态空间模型 3、方法 3.1 动机 3.2 预备知识 3…

iic、spi以及uart

何为总线&#xff1f; 连接多个部件的信息传输线&#xff0c;是部件共享的传输介质 总线的作用&#xff1f; 实现数据传输&#xff0c;即模块之间的通信 总线如何分类&#xff1f; 根据总线连接的外设属于内部外设还是外部外设将总线可以分为片内总线和片外总线 可分为数…

Android WebView 中网页被劫持的原因及解决方案

文章目录 一、原因分析二、解决方案一览三、解决方案代码案例3.1 使用 HTTPS3.2 验证 URL3.3 禁用 JavaScript3.4 使用安全的 WebView 设置3.5 监控网络请求3.6 使用安全的 DNS 四、案例深入分析4.1 问题4.2 分析 五、结论 在 Android 应用开发中&#xff0c;WebView 是一个常用…