36. Adam 算法详解

news/2024/9/13 22:37:26/ 标签: 算法

Adam(Adaptive Moment Estimation)是一种结合动量法和自适应学习率的优化算法,自2014年提出以来,迅速成为深度学习中最流行和常用的优化算法之一。Adam算法的核心思想是利用梯度的一阶动量和二阶动量来动态调整学习率,既保持了动量法的优点,又结合了RMSProp的自适应学习率特性。

Adam 算法原理

Adam算法通过计算梯度的一阶动量(即梯度的指数加权平均)和二阶动量(即梯度平方的指数加权平均)来调整每个参数的学习率。具体公式如下:

1. 梯度的一阶动量:
\[ m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t \]

2. 梯度的二阶动量:
\[ v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 \]

3. 偏差修正:
\[ \hat{m}_t = \frac{m_t}{1 - \beta_1^t} \]
\[ \hat{v}_t = \frac{v_t}{1 - \beta_2^t} \]

4. 更新参数:
\[ \theta_{t+1} = \theta_t - \frac{\alpha \hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} \]

其中:
- \( \beta_1 \) 和 \( \beta_2 \) 分别是动量和均方根动量的衰减率,常用值为 \( \beta_1 = 0.9 \) 和 \( \beta_2 = 0.999 \)。
- \( \epsilon \) 是一个很小的常数,用于防止分母为零,常用值为 \( 10^{-8} \)。

Adam 优缺点

优点:

- 自适应学习率:根据一阶动量和二阶动量动态调整每个参数的学习率,使得训练过程更加稳定。
- 快速收敛:结合动量法的加速特性和RMSProp的平稳特性,能够快速收敛到最优解。
- 适用于大规模数据:对于大规模数据和稀疏梯度,表现出色。

缺点:

- 参数较多:Adam算法需要调整的超参数较多(例如 \( \beta_1, \beta_2, \epsilon \)),调参复杂度高。
- 可能不稳定:在某些情况下,Adam可能会出现不稳定的收敛行为。

Adam 代码实现

下面是一个使用Adam优化器的示例代码:
 

import torch
import matplotlib.pyplot as plt# 定义超参数
learning_rate = 0.001
epochs = 100# 随机生成数据
x = torch.randn(100, 1)
y = 2 * x + 3 + torch.randn(100, 1) * 0.5# 初始化参数
w = torch.randn(1, requires_grad=True)
b = torch.zeros(1, requires_grad=True)# 定义Adam优化器
optimizer = torch.optim.Adam([w, b], lr=learning_rate)# 记录损失
losses = []for epoch in range(epochs):# 预测y_pred = x * w + b# 计算损失loss = torch.mean((y_pred - y) ** 2)losses.append(loss.item())# 清空梯度optimizer.zero_grad()# 反向传播loss.backward()# 更新参数optimizer.step()# 可视化训练过程
plt.plot(range(epochs), losses)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('Training Loss with Adam')
plt.show()

Adam 与其他算法的比较

Adam算法集成了SGD、动量法、Adagrad、Adadelta等多种优化算法的优点,具有快速收敛和稳定的特点。以下是它与其他算法的对比:

1. SGD:基本的随机梯度下降法,收敛速度较慢,易陷入局部最优。
2. 动量法:在SGD基础上加入一阶动量,加速收敛,但仍然可能陷入局部最优。
3. Adagrad:自适应学习率,但对历史梯度的累积会导致学习率不断减小,后期训练缓慢。
4. RMSProp:改进了Adagrad,通过引入衰减系数解决学习率不断减小的问题。
5. Adam:结合动量法和RMSProp的优点,具有快速收敛和稳定的特点,是目前最常用的优化算法

小结

Adam算法是目前最常用的优化算法之一,结合了动量法和RMSProp的优点,通过计算一阶和二阶动量来动态调整学习率,具有快速收敛和稳定的特点。尽管Adam需要调整的超参数较多,但其优越的性能使得它成为深度学习中最广泛使用的优化算法之一。

希望通过本节的讲解,大家能对Adam算法有一个全面的了解,并能够在实际项目中熟练应用。


http://www.ppmy.cn/news/1475532.html

相关文章

Java的高级特性

类的继承 继承是从已有的类中派生出新的类,新的类能拥有已有类的属性和行为,并且可以拓展新的属性和行为 public class 子类 extends 父类{子类类体 } 优点 代码的复用 提高编码效率 易于维护 使类与类产生关联,是多态的前提 缺点 类缺乏独…

RequestContextHolder多线程获取不到request对象

RequestContextHolder多线程获取不到request对象,调用feign接口时,在Feign中的RequestInterceptor也获取不到HttpServletRequest问题解决方案。 1.RequestContextHolder多线程获取不到request对象 异常信息,报错如下: 2024-07-0…

k8s集群新增节点

目前集群状态 如K8S 集群搭建中规划的集群一样 Masternode01node02IP192.168.100.100192.168.100.101192.168.100.102OSCent OS 7.9Cent OS 7.9Cent OS 7.9 目前打算新增节点node03 Masternode01node02node03IP192.168.100.100192.168.100.101192.168.100.102192.168.100.1…

FPGA设计之跨时钟域(CDC)设计篇(1)----亚稳态到底是什么?

1、什么是亚稳态? 在数字电路中,如果数据传输时不满足触发器FF的建立时间要求Tsu和保持时间要求Th,就可能产生亚稳态(Metastability),此时触发器的输出端(Q端)在有效时钟沿之后比较长的一段时间都会处于不确定的状态(在0和1之间振荡),而不是等于数据输入端(D端)的…

升级springboot3.2集成shiro的问题

由于之前的springcloud相关版本太久,很多新功能无法使用,所以打算抽时间把代码的版本做一下升级。使用最新版的springboot3.2,发现shiro过滤器无效。经检查发现原因: springboot3.x使用的是JDK17,从jdk8以后javax.serv…

【数据结构】单链表 双向链表

目录 链表链表的分类单链表单链表接口的实现内部类头插法尾插法任意位置插入查找是否包含关键字key是否在单链表当中删除第一次出现关键字为key的节点删除所有值为key的节点得到单链表的长度清空链表单链表的优缺点 双向链表双向链表接口的实现内部类头插法尾插法任意位置插入查…

微信小程序 - 本地存储 增加有效期

小程序的本地存储API提供了wx.setStorageSync和wx.setStorage来存储数据,注意的是,小程序的本地存储并没有明确的有效期设置,存储的数据在不超过限制的情况下,会一直保留。 一、小程序本地存储API 小程序的本地存储API提供了设置…

32路串口服务器 应用领域

32路串口服务器在多个领域有着广泛的应用,以下是详细的应用实例: 一、工业自动化 在工业自动化领域,32路串口服务器发挥着举足轻重的作用。传统的工业设备往往采用串口通信方式,而串口服务器能够将这些设备接入网络,…

800 元打造家庭版 SOC 安全运营中心

今天,我们开始一系列新的文章,将从独特而全面的角度探索网络安全世界,结合安全双方:红队和蓝队。 这种方法通常称为“紫队”,集成了进攻和防御技术,以提供对威胁和安全解决方案的全面了解。 在本系列的第一篇文章中,我们将指导您完成以 100 欧元约800元左右的预算创建…

金南瓜科技的SECS/GEM解决方案

1. 高稳定性和可靠性:金南瓜SECS/GEM解决方案已在多家知名半导体工厂中稳定运行,实现了7*24小时无重启无故障超过3年时间 。 2. 符合国际标准:金南瓜的解决方案符合SEMI E4、E5、E30、E37通信协议,确保与国际标准的兼容性&#x…

《RWKV》论文笔记

原文出处 [2305.13048] RWKV: Reinventing RNNs for the Transformer Era (arxiv.org) 原文笔记 What RWKV(RawKuv):Reinventing RNNs for the Transformer Era 本文贡献如下: 提出了 RWKV 网络架构,结合了RNNS 和Transformer 的优点,同…

星环科技推出语料开发工具TCS,重塑语料管理与应用新纪元

5月30-31日,2024向星力未来数据技术峰会期间,星环科技推出一款创新的语料开发工具——星环语料开发工具TCS(Transwarp Corpus Studio),旨在通过全面的语料生命周期管理,极大提升语料开发效率,助…

prompt第三讲-PromptTemplate

文章目录 前提回顾PromptTemplateprompt 模板定义以f-string渲染格式以mustache渲染格式以jinja2渲染格式直接实例化PromptTemplatePromptTemplate核心变量 prompt value生成invokeformat_prompt(不建议使用)format(不建议使用) batchstreamainvoke PromptTemplate核心方法part…

Redis实战—秒杀优化(Redis消息队列)

目录 回顾 基于阻塞队列实现程序异步优化 优化代码 总结 Redis消息队列 初始消息队列 基于List结构模拟消息队列 基于PubSub的消息队列 基于Stream的消息队列 基于Stream的消息队列-消费者组 总结 代码实现 回顾 我们回顾一下前文下单的流程,当用户发起…

python:使用openpyxl模块处理excel

前言 最近在实践excel的处理,在此途中,我彻底抛弃了xlwt xlrd的组合,投入了openpyxl这一模块的怀抱。 并成功实现了excel单元格数据的快速访问、修改、样式保持,以及添加填充色等功能。 至于为什么写这个博客,主要是因…

Interpretability 与 Explainability机器学习

在机器学习的范畴中,“Interpretability”(可解释性)和“Explainability”(可解释性)尽管在含义上有重叠部分,但仍存在一些微妙的差异和重点的不同。 “Interpretability”主要强调模型自身的结构和运作方式…

科普文:微服务技术栈梳理

概叙 如上两图所示,微服务架构下,需要的组件很多,上面中也并未列全。下面将梳理一下国内微服务架构下,用到的技术栈,仅供参考。 科普文:12种常见的软件架构-CSDN博客 没有最好的架构,只有最适…

【Android面试八股文】组件化在项目中有什么意义?

一、没有组件化会出现什么问题? 早期的单一分层模式 问题一:无论分包怎么做,随着项目增大,项目失去层次感,后面接手的人扑街问题二:包名约束太弱,稍有不注意,就会不同业务包直接互相调用,代码高耦合问题三:多人开发在版本管理中,容易出现代码覆盖冲突等问题二、组件…

[linux] git push时需要输入user 和keyword

git clone的要是ssh链接&#xff01;&#xff01;&#xff01;&#xff01; 1、用户名和邮箱 git config --global user.name "name" git config --global user.email "email" 2、生成ssh key (ED25519) ssh-keygen -t ed25519 -C "<自定义内容&g…

数据结构:顺序表+链表

数据结构&#xff1a;顺序表链表 一。顺序表&#xff1a; 首先在了解顺序表和链表之前&#xff0c;先了解一下线性表&#xff0c;**线性表&#xff08;linear list&#xff09;**是n个具有相同特征元素的有限序列 &#xff0c;在逻辑上是线性结构&#xff0c;也就是一条连续的…