36. Adam 算法详解

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.mzph.cn/diannao/44773.shtml

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

相关文章

基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(五)仿钉钉流程的json数据保存与显示

因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。 1、需要做一个界面保存与显示仿钉钉的流程,先建一个表,用online建 2、通过上面生成代码,放入到相应的前后端工程里 3、修改前端仿钉钉流程的设计功能&a…

spark基于Spark的对招聘信息的分析与设计-计算机毕业设计源码50716

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 系统分析 2.1 可行性分析 2.2.1 数据新增流程 2.2.2 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设计 3.1 系统架构设…

Vue2/Vue3实现全局/局部添加防篡改水印的效果。删除元素无效!更改元素属性无效!支持图片、元素、视频等等。

水印目的 版权保护:水印可以在图片、文档或视频中嵌入作者、品牌或版权所有者的信息,以防止未经授权的复制、传播或使用。当其他人使用带有水印的内容时,可以追溯到原始作者或版权所有者,从而加强版权保护。 身份识别:水印可以用作作者或品牌的标识符,使观众能够轻松识…

springboot对ZonedDateTime返回结果json是string-源码分析

springboot对ZonedDateTime返回结果json是string-源码分析 application/json格式默认使用ObjectMapper实例进行序列化ObjectMapper自动注入分析springboot关于jackson配置 java.time.ZonedDateTime application/json格式默认使用ObjectMapper实例进行序列化 controller返回后&…

人形机器人的理想与现实

李开复曾提到过一个AI界流传的“骗子又来了曲线”。 人会不断给机器进行“是否具有人类智能”的鉴定,而这个过程,总是从被人工智能在某些领域的惊艳表现震撼,到逐渐认识到当时的人工智能还有各种局限,以至于产生巨大心理落差。 近…

html js 3d z轴移动 实现星空

用chatgpt还有kimi 让实现动画效果的星空,都太垃圾了 不是y轴移动,就是x轴移动, 我要z轴移动,他们就是搞不出来, ai写代码还有很长的路。 <!DOCTYPE html> <meta charset="utf-8" /> <head> <title>ai相关博客</title> </h…

【操作系统】手把手带你搭建DNS服务器!

DNS服务器 DNS服务器指域名系统或者域名服务。域名系统为Internet上的主机分配域名地址和IP地址&#xff0c;用户使用域名地址&#xff0c;该系统就会自动把域名地址转为IP地址。域名服务是运行域名系统的Internet工具。执行域名服务的服务器称之为DNS服务器&#xff0c;通过DN…

51单片机嵌入式开发:8、 STC89C52RC 操作LCD1602原理

STC89C52RC 操作LCD1602原理 1 LCD1602概述1.1 LCD1602介绍1.2 LCD1602引脚说明1.3 LCD1602指令介绍 2 LCD1602外围电路2.1 LCD1602接线方法2.2 LCD1602电路原理 3 LCD1602软件操作3.1 LCD1602显示3.2 LCD1602 protues仿真 4 总结 1 LCD1602概述 1.1 LCD1602介绍 LCD1602是一种…

maven——(重要)手动创建,构建项目

创建项目 手动按照maven层级建好文件夹&#xff0c;并写上java&#xff0c;测试代码和pom文件 构建项目 在dos窗口中执行如下命令 compile编译 当前maven仓库中什么都没有。 在pom所在层级下&#xff0c;执行&#xff1a; mvn compile 就开始显示下面这些&#xff0c;…

数据库-ubuntu环境下安装配置mysql

文章目录 什么是数据库&#xff1f;一、ubuntu环境下安装mysql二、配置mysql配置文件1.先登上root账号2.配置文件的修改show engines \G; mysql和mysqld数据库的基础操作登录mysql创建数据库显示当前数据库使用数据库创建表插入students表数据打印students表数据select * from …

前端使用Vue和Element实现可拖动弹框效果,且不影响底层元素操作,Cesium作为底图(可拖拽的视频实时播放弹框,底层元素可以正常操作)

简述&#xff1a;在前端开发中&#xff0c;弹框和实时视频播放是常见的需求。这里来简单记录一下&#xff0c;如何使用Vue.js和Element UI实现一个可拖动的弹框&#xff0c;并在其中播放实时视频。同时&#xff0c;确保在拖拽弹框时&#xff0c;底层元素仍然可以操作。这里来记…

vue 画二维码及长按保存

需求 想要做如下图的二维码带文字&#xff0c;且能够长按保存 前期准备 一个canvas安装qrcode&#xff08;命令&#xff1a;npm i qrcode&#xff09; 画二维码及文字 初始化画布 <template><div><canvas ref"canvas" width"300" he…

JAVASE进阶day07(泛型,集合,Set,TreeSet,枚举,数据结构)

泛型 1.泛型的基本使用 限制集合存储的数据类型 package com.lu.day07.generics;/*** 定义了一个泛型类* E 泛型通配字母(不固定代替真实数据类型A-Z都可以)* 常见的泛型通配字母:* E:element 元素* T:type 类型* R:return 返回值类型* K:key 键* …

14.爬虫---Selenium 经典动态渲染工具的使用

14.Selenium 经典动态渲染工具的使用 1.查看chrome浏览器版本2.ChromeDriver 安装3.Selenium 安装4.验证安装5.基本用法5.1启动浏览器5.2导航到页面5.3查找元素5.3.1单个元素 find_element5.3.2多个元素 find_elements 5.4 执行操作5.5 动作链ActionChains5.6 执行 JavaScript …

Python基础语法:运算符详解(算术运算符、比较运算符、逻辑运算符、赋值运算符)②

文章目录 Python中的运算符详解一、算术运算符二、比较运算符三、逻辑运算符四、赋值运算符五、综合示例结论 Python中的运算符详解 在Python编程中&#xff0c;运算符用于执行各种操作&#xff0c;例如算术计算、比较、逻辑判断和赋值。了解并掌握这些运算符的使用方法是编写…

pychopper的安装与使用

文章目录 安装使用 安装 在Linux环境下使用conda安装 通常习惯一个软件一个虚拟环境&#xff1a; conda create -n pychopper -c nanoporetech -c conda-forge -c bioconda "nanoporetech::pychopper"使用 参考官方文档&#xff1a; https://github.com/epi2me-la…

N-(4-Azido-2-nitrophenyl)-N‘‘-biotinylnorspemidine

​一、基本信息 常用名&#xff1a;N-(4-Azido-2-nitrophenyl)-N-biotinylnorspemidine 英文名&#xff1a;N-(4-Azido-2-nitrophenyl)-N-biotinylnorspemidine CAS号&#xff1a;786609-83-4 分子式&#xff1a;C22H33N9O4S 分子量&#xff1a;519.62 二、结构特点 该化…

SQL职场必备:掌握数据库技能提升职场竞争力

&#x1f482; 个人网站:【 摸鱼游戏】【网址导航】【神级代码资源网站】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

vue3 + tsx 表格 Action 单独封装组件用法

前言 先上图看右侧列 action 的 UI 效果&#xff1a; 正常来说&#xff0c;如果一个表格的附带 action 操作&#xff0c;我们一般会放在最右侧的列里面实现&#xff0c;这个时候有些UI 框架支持在 SFC 模板里面定义额外的 solt&#xff0c;当然如果不支持&#xff0c;更通用的…

【网络】SCTP协议概念

SCTP协议 SCTP&#xff08;Stream Control Transmission Protocol&#xff09;是一种传输层协议&#xff0c;设计用于提供可靠的数据传输服务&#xff0c;同时具备一些类似UDP&#xff08;User Datagram Protocol&#xff09;的属性。以下是SCTP协议的基本概念、优缺点以及与T…