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

机器学习算法模型系列——Adam算法

Adam是一种自适应学习率的优化算法,结合了动量和自适应学习率的特性。

主要思想是根据参数的梯度来动态调整每个参数的学习率。

核心原理包括:

  1. 动量(Momentum):Adam算法引入了动量项,以平滑梯度更新的方向。这有助于加速收敛并减少震荡。

  2. 自适应学习率:Adam算法计算每个参数的自适应学习率,允许不同参数具有不同的学习速度。

  3. 偏差修正(Bias Correction):Adam算法在初期迭代中可能受到偏差的影响,因此它使用偏差修正来纠正这个问题。

Adam相关公式

初始化:

  • 参数:eq?%5Cbeta

  • 学习率:eq?%5Calpha

  • 梯度估计的移动平均(一阶矩):eq?m%3D0

  • 梯度平方的移动平均(二阶矩):eq?v%3D0

  • 时间步数:eq?t%3D0

每个迭代步骤:

  1. eq?t%3Dt+1
  2. 计算梯度:eq?g_%7Bt%7D%20%3D%5Cbigtriangledown%20f%20_%7Bt%7D%28%5Ctheta%20_%7Bt%7D%29

  3. 更新一阶矩:eq?m_%7Bt%7D%20%3D%5Cbeta_%7B1%7D%5Ccdot%20m_%7Bt-1%7D+%281-%5Cbeta_%7B1%7D%29%5Ccdot%20g_%7Bt%7D

  4. 更新二阶矩:eq?v_%7Bt%7D%20%3D%5Cbeta_%7B2%7D%5Ccdot%20v_%7Bt-1%7D+%281-%5Cbeta_%7B2%7D%29%5Ccdot%20g_%7Bt%7D%5E%7B2%7D

  5. 修正偏差(Bias Correction): eq?%5Chat%7Bm%7D_%7Bt%7D%20%3D%5Cfrac%7Bm_%7Bt%7D%7D%7B%281-%5Cbeta_%7B1%7D%5E%7Bt%7D%29%7D和 eq?%5Chat%7Bv%7D_%7Bt%7D%20%3D%5Cfrac%7Bv%7Bt%7D%7D%7B%281-%5Cbeta_%7B2%7D%5E%7Bt%7D%29%7D

  6. 更新参数:eq?%7B%5Ctheta%7D_%7Bt+1%7D%20%3D%7B%5Ctheta%7D_%7Bt%7D%20-%5Calpha%20%5Ccdot%20%5Cfrac%7B%5Chat%7Bm%7D%7Bt%7D%7D%7B%28%5Csqrt%7Bv_%7Bt%7D%7D-%5Cvarepsilon%20%29%7D,其中 eq?%5Cvarepsilon 是一个小的常数,以防分母为零。

项目:基于Adam优化算法的神经网络训练

在这个项目中,我们将使用Adam优化算法来训练一个简单的神经网络,以解决二分类问题。我们将深入讨论Adam算法的原理和公式,并展示如何在Python中实施它。最后,我们将绘制学习曲线,以可视化模型的训练进展。

项目:基于Adam优化算法的神经网络训练

在这个项目中,我们将使用Adam优化算法来训练一个简单的神经网络,以解决二分类问题。我们将深入讨论Adam算法的原理和公式,并展示如何在Python中实施它。最后,我们将绘制学习曲线,以可视化模型的训练进展。

模型训练

使用Python代码实现Adam算法来训练一个二分类的神经网络。

使用Python中的NumPy库来进行计算,并使用一个合成的数据集来演示。

import numpy as np
import matplotlib.pyplot as plt# 定义模型和数据
np.random.seed(42)
X = np.random.rand(100, 2)  # 特征数据
y = (X[:, 0] + X[:, 1] > 1).astype(int)  # 二分类标签# 定义神经网络模型
def sigmoid(x):return 1 / (1 + np.exp(-x))def predict(X, weights):return sigmoid(np.dot(X, weights))# 初始化参数和超参数
theta = np.random.rand(2)  # 参数初始化
alpha = 0.1  # 学习率
beta1 = 0.9  # 一阶矩衰减因子
beta2 = 0.999  # 二阶矩衰减因子
epsilon = 1e-8  # 用于防止分母为零# 初始化Adam算法所需的中间变量
m = np.zeros(2)
v = np.zeros(2)
t = 0# 训练模型
num_epochs = 100
for epoch in range(num_epochs):for i in range(len(X)):t += 1gradient = (predict(X[i], theta) - y[i]) * X[i]m = beta1 * m + (1 - beta1) * gradientv = beta2 * v + (1 - beta2) * gradient**2m_hat = m / (1 - beta1**t)v_hat = v / (1 - beta2**t)theta -= alpha * m_hat / (np.sqrt(v_hat) + epsilon)# 输出训练后的参数
print("训练完成后的参数:", theta)# 定义损失函数
def loss(X, y, weights):y_pred = predict(X, weights)return -np.mean(y * np.log(y_pred) + (1 - y) * np.log(1 - y_pred))# 记录损失值
loss_history = []
for i in range(len(X)):loss_history.append(loss(X[i], y[i], theta))# 绘制损失函数曲线
plt.plot(range(len(X)), loss_history)
plt.xlabel("Iteration")
plt.ylabel("Loss Function Value")
plt.title("Change in Loss Function Over Time")
plt.show()

这个图形将显示损失函数值随着迭代次数的减小而减小,这表明Adam优化算法成功地训练了模型。

 

0c28a34bb095b6c7dd66ad815c82823e.png

 

 

相关文章:

机器学习算法模型系列——Adam算法

Adam是一种自适应学习率的优化算法,结合了动量和自适应学习率的特性。 主要思想是根据参数的梯度来动态调整每个参数的学习率。 核心原理包括: 动量(Momentum):Adam算法引入了动量项,以平滑梯度更新的方向…...

Qt按钮类-->day09

按钮基类 QAbstractButton 标题与图标 // 参数text的内容显示到按钮上 void QAbstractButton::setText(const QString &text); // 得到按钮上显示的文本内容, 函数的返回就是 QString QAbstractButton::text() const;// 得到按钮设置的图标 QIcon icon() const; // 给按钮…...

基于xr-frame实现微信小程序的手部、手势识别3D模型叠加和石头剪刀布游戏功能

前言 xr-frame是一套小程序官方提供的XR/3D应用解决方案,基于混合方案实现,性能逼近原生、效果好、易用、强扩展、渐进式、遵循小程序开发标准。xr-frame在基础库v2.32.0开始基本稳定,发布为正式版,但仍有一些功能还在开发&#…...

基于Kafka2.1解读Consumer原理

文章目录 概要整体架构流程技术名词解释技术细节coordinatorfetcherclientconsumer#poll的主要流程 全局总览小结 概要 继上一篇讲Producer原理的文章过去已经一个多月了,今天来讲讲Consumer的原理。 其实源码早就读了部分了,但是最近工作比较忙&#x…...

深度学习:ResNet每一层的输出形状

其中 /**在输出通道数为64、步幅为2的7 7卷积层后,接步幅为2的3 3的最大汇聚层,与GoogLeNet区别是每个卷积层后增加了批量规范层**/ b1 nn.Sequential(nn.Conv2d(1, 64, kernel_size7, stride2, padding3),nn.BatchNorm2d(64), nn.ReLU(),nn.MaxPool2d(kernel_s…...

国内几大网络安全公司介绍 - 网络安全

Posted by zhaol under 安全 , 电信 , 评论 , 中国 中国国内的安全市场进入“战国时期”,启明星辰、绿盟、天融信、安氏、亿阳、联想网御、华为等战国七雄拥有雄厚的客户资源和资金基础,帐前皆有勇猛善战之士,渐渐开始统领国内安全市场的潮流…...

修改Android Studio项目配置JDK路径和项目Gradle路径的GUI工具

概述 本工具提供了一个基于Python Tkinter的图形用户界面(GUI),用于帮助用户搜索并更新Android Studio项目中的config.properties文件里的java.home路径,以及workspace.xml文件中的last_opened_file_path路径。该工具旨在简化手动…...

✅DAY30 贪心算法 | 452. 用最少数量的箭引爆气球 | 435. 无重叠区间 | 763.划分字母区间

452. 用最少数量的箭引爆气球 解题思路:首先把原数组按左边界进行排序。然后比较[i-1]的右边界和[i]的左边界是否重叠,如果重叠,更新当前右边界为最小右边界和[i1]的左边界判断是重叠。 class Solution:def findMinArrowShots(self, points:…...

关于Redis单线程模型以及IO多路复用的理解

IO多路复用 -> redis主线程 -> 事件队列 -> 事件处理器 1.IO多路复用机制的作用: 操作系统的多路复用机制(如 epoll、select)负责监听多个文件描述符(如客户端连接)上的事件。 当某个文件描述符上的事件就绪…...

学习ASP.NET Core的身份认证(基于Cookie的身份认证1)

B/S架构程序可通过Cookie、Session、JWT、证书等多种方式认证用户身份,虽然之前测试过用户登录代码,也学习过开源项目中的登录认证,但其实还是对身份认证疑惑甚多,就比如登录验证后用户信息如何保存、客户端下次连接时如何获取用户…...

奇门遁甲中看债务时用神该怎么取?

奇门遁甲中看债务的用神 一、值符 值符在债务关系中可代表债权人(放贷人)。例如在预测放贷时,以值符为放贷人,如果值符克天乙(借贷人)或者天乙生值符,这种情况下可以放贷;反之&#…...

Redis 集群主要有以下几种类型

Redis 集群主要有以下几种类型: 主从复制模式: 这种模式包含一个主数据库实例(master)与一个或多个从数据库实例(slave)。客户端可以对主数据库进行读写操作,对从数据库进行读操作,主…...

使用 Axios 拦截器优化 HTTP 请求与响应的实践

目录 前言1. Axios 简介与拦截器概念1.1 Axios 的特点1.2 什么是拦截器 2. 请求拦截器的应用与实践2.1 请求拦截器的作用2.2 请求拦截器实现 3. 响应拦截器的应用与实践3.1 响应拦截器的作用3.2 响应拦截器实现 4. 综合实例:一个完整的 Axios 配置5. 使用拦截器的好…...

mini-lsm通关笔记Week2Day5

项目地址:https://github.com/skyzh/mini-lsm 个人实现地址:https://gitee.com/cnyuyang/mini-lsm Summary 在本章中,您将: 实现manifest文件的编解码。系统重启时从manifest文件中恢复。 要将测试用例复制到启动器代码中并运行…...

mybatis的动态sql用法之排序

概括 在最近的开发任务中,涉及到了一些页面的排序,其中最为常见的就是时间的降序和升序。这个有的前端控件就可以完成,但是对于一些无法用前端控件的,只能通过后端来进行解决。 后端的解决方法就是使用mybatis的动态sql拼接。 …...

OneToMany 和 ManyToOne

在使用 ORM(如 TypeORM)进行实体关系设计时,OneToMany 和 ManyToOne 是非常重要的注解,常用来表示两个实体之间的一对多关系。下面通过例子详细说明它们的使用场景和工作方式。 OneToMany 和 ManyToOne 的基本概念 ManyToOne 表示…...

《生成式 AI》课程 第3講 CODE TASK 任务3:自定义任务的机器人

课程 《生成式 AI》课程 第3講:訓練不了人工智慧嗎?你可以訓練你自己-CSDN博客 我们希望你创建一个定制的服务机器人。 您可以想出任何您希望机器人执行的任务,例如,一个可以解决简单的数学问题的机器人0 一个机器人&#xff0c…...

反转链表、链表内指定区间反转

反转链表 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 如当输入链表{1,2,3}时,经反转后,原链表变…...

Debezium系列之:Debezium3版本使用快照过程中的指标

Debezium系列之:Debezium3版本使用快照过程中的指标 一、背景二、技术原理三、增量快照四、阻塞快照指标一、背景 使用快照技术的过程中可以观察指标,从而确定快照的进度二、技术原理 Debezium系列之:Debezium 中的增量快照Debezium系列之:Incremental snapshotting设计原理…...

第一讲,Opencv计算机视觉基础之计算机视觉概述

深度剖析计算机视觉:定义、任务及未来发展趋势 引言 计算机视觉(Computer Vision)是人工智能的重要分支之一,旨在让机器通过视觉感知和理解环境。随着深度学习的快速发展,计算机视觉在自动驾驶、安防监控、医疗影像等…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...