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

AdamW算法

AdamW算法是优化算法Adam的一个变体,它在深度学习中广泛应用。AdamW的主要改进在于它正则化方法的改变,即通过权重衰减(weight decay)而不是L2正则化,来控制模型参数的大小,从而提升了训练的稳定性和效果。

AdamW算法的背景

Adam优化器结合了动量(Momentum)和RMSProp的优点,能够在各种神经网络结构中实现高效的训练。然而,Adam算法中的L2正则化实现存在一些问题,特别是在实际实现中,L2正则化被融合到了梯度更新中,这可能导致不稳定的权重更新。

AdamW的改进

AdamW通过将权重衰减(weight decay)从梯度更新过程中分离出来,解决了这些问题。具体来说,AdamW将权重衰减直接应用到权重更新步骤中,而不是将其作为损失函数的一部分进行梯度计算。

AdamW算法的公式

AdamW的更新公式与Adam类似,但引入了显式的权重衰减项。以下是AdamW的核心公式:

  1. 偏移修正的动量估计
    m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t mt=β1mt1+(1β1)gt v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 vt=β2vt1+(1β2)gt2

  2. 偏移修正
    m ^ t = m t 1 − β 1 t \hat{m}_t = \frac{m_t}{1 - \beta_1^t} m^t=1β1tmt v ^ t = v t 1 − β 2 t \hat{v}_t = \frac{v_t}{1 - \beta_2^t} v^t=1β2tvt

  3. 参数更新
    θ t = θ t − 1 − η m ^ t v ^ t + ϵ − η λ θ t − 1 \theta_t = \theta_{t-1} - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} - \eta \lambda \theta_{t-1} θt=θt1ηv^t +ϵm^tηλθt1

其中:

  • θ t \theta_t θt 是参数。
  • g t g_t gt 是梯度。
  • m t m_t mt v t v_t vt是一阶和二阶动量估计。
  • η \eta η 是学习率。
  • β 1 \beta_1 β1 β 2 \beta_2 β2分别是动量项的指数衰减率。
  • ϵ \epsilon ϵ是防止除零的小常数。
  • λ \lambda λ 是权重衰减系数。

AdamW的优点

  1. 更稳定的权重更新:权重衰减独立于梯度计算,使得权重更新更稳定。
  2. 更好的正则化效果:权重衰减可以更有效地防止模型过拟合。
  3. 适用于广泛的模型:AdamW在各种深度学习模型中表现优异,尤其是在大规模神经网络中。

实现AdamW算法

以下是使用PyTorch实现AdamW优化器的示例代码:

import torch
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset# 定义数据集和数据加载器
data = torch.randn(1000, 10)  # 假设有1000个样本,每个样本有10个特征
labels = torch.randint(0, 2, (1000,))  # 假设二分类任务
dataset = TensorDataset(data, labels)
data_loader = DataLoader(dataset, batch_size=32, shuffle=True)# 定义模型
model = torch.nn.Linear(10, 2)
criterion = torch.nn.CrossEntropyLoss()# 创建AdamW优化器
optimizer = optim.AdamW(model.parameters(), lr=0.001, weight_decay=0.01)# 训练循环
num_epochs = 100
for epoch in range(num_epochs):for batch_data, batch_labels in data_loader:optimizer.zero_grad()outputs = model(batch_data)loss = criterion(outputs, batch_labels)loss.backward()optimizer.step()# 打印每个epoch的损失print(f'Epoch {epoch+1}/{num_epochs}, Loss: {loss.item()}')

总结

AdamW优化器通过将权重衰减从梯度更新过程中分离出来,提供了更稳定和有效的正则化方法。它在许多深度学习应用中表现优异,成为现代神经网络训练的标准选择之一。

相关文章:

AdamW算法

AdamW算法是优化算法Adam的一个变体,它在深度学习中广泛应用。AdamW的主要改进在于它正则化方法的改变,即通过权重衰减(weight decay)而不是L2正则化,来控制模型参数的大小,从而提升了训练的稳定性和效果。…...

【c++进阶(二)】STL之string类的模拟实现

💓博主CSDN主页:Am心若依旧💓 ⏩专栏分类c从入门到精通⏪ 🚚代码仓库:青酒余成🚚 🌹关注我🫵带你学习更多c   🔝🔝 1.前言 本章重点 本章主要介绍一些关键接口的模拟实现&#xff…...

PHPStudy(xp 小皮)V8.1.1 通过cmd进入MySQL命令行模式

PHPStudy是一个PHP开发环境集成包,可用在本地电脑或者服务器上,该程序包集成最新的PHP/MySql/Apache/Nginx/Redis/FTP/Composer,一次性安装,无须配置即可使用。MySQL MySQL是一个关系型数据库管理系统,由瑞典 MySQL A…...

php反序列化初步了解

一、定义 序列化(串行化):将变量转换为可保存或传输的字符串的过程(通常是字节流、JSON、XML格式) 反序列比(反串行化):把这个字符串再转化成原始数据结构或对象(原来的…...

Windows系统电脑本地部署AI音乐创作工具并实现无公网IP远程使用

文章目录 前言1. 本地部署2. 使用方法介绍3. 内网穿透工具下载安装4. 配置公网地址5. 配置固定公网地址 前言 本文主要介绍如何在Windows系统电脑上快速本地部署一个文字生成音乐的AI创作工具MusicGPT,并结合cpolar内网穿透工具实现随时随地远程访问使用。 MusicG…...

玩转Linux进度条

准备工作&#xff1a; 一.关于缓冲区 首先&#xff0c;咱们先来一段有意思的代码&#xff1a; #include<stdio.h> #include<unistd.h> int main() {printf("you can see me");sleep(5);} 你可以在你的本地运行一下&#xff0c;这里我告诉大家运行结果…...

真国色码上赞,科技流量双剑合璧,商家获客新纪元开启

在数字化浪潮汹涌的今天,真国色研发团队依托红玉房网络科技公司的雄厚实力,凭借科技领先的核心竞争力,推出了创新性的商家曝光引流工具——码上赞。这款工具借助微信支付与视频号已有功能,为实体商家提供了一种全新的引流获客方式,实现了科技与商业的完美融合。 科技领先,流量黑…...

C++:特殊类设计和四种类型转换

一、特殊类设计 1.1 不能被拷贝的类 拷贝只会放生在两个场景中&#xff1a;拷贝构造函数以及赋值运算符重载&#xff0c;因此想要让一个类禁止拷贝&#xff0c;只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 C98&#xff1a; 1、将拷贝构造函数与赋值运算符重载只…...

(南京观海微电子)——屏幕材质及优缺点对比

LED/LCD LCD&#xff08;Liquid Crystal Ddisplay&#xff09;即“液晶显示器”&#xff0c;由两块偏光镜、两块薄膜晶体管以及彩色滤光片、光源&#xff08;荧光灯&#xff09;、显示面板组成的成像元器件。 LED&#xff08;Light Emitting Diode&#xff09;即“发光二极管…...

uniapp uni.showModal 出现点击没有反应

uni.showModal 里面有好些参数 点击后不弹出 是因为 出现了 null 或者undifind 字符 特别是content 里面 title: 提示, cancelColor: #000000, editable: true,//是否显示输入框 content: item.text?item.te…...

Vue3-VueRouter

客户端 vs. 服务端路由​ 服务端路由指的是服务器根据用户访问的 URL 路径返回不同的响应结果。当我们在一个传统的服务端渲染的 web 应用中点击一个链接时&#xff0c;浏览器会从服务端获得全新的 HTML&#xff0c;然后重新加载整个页面。 然而&#xff0c;在单页面应用中&a…...

【图像处理与机器视觉】频率域滤波

知识铺垫 复数 CRjI 可以看作复平面上的点&#xff0c;则该复数的坐标为&#xff08;R&#xff0c;I&#xff09; 欧拉公式 e j θ c o s θ j s i n θ e^{j\theta} cos \theta j sin \theta ejθcosθjsinθ 极坐标系中复数可以表示为&#xff1a; C ∣ C ∣ ( c o s…...

python第五次作业

1.请实现一个装饰器&#xff0c;每次调用函数时&#xff0c;将函数名字以及调用此函数的时间点写入文件中 # 导入datetime模块&#xff0c;用于获取当前时间并格式化输出 import datetime# 定义一个装饰器工厂函数log_funcName_time&#xff0c;它接受一个参数time def log_fu…...

JS面向对象编程

目录 实例对象与new命令this关键字对象的原型和继承Object对象的相关方法浅拷贝和深拷贝严格模式实例对象与new命令 构造函数 构造函数的特点有两个: 函数体内部使用了this关键字,代表了所要生成的对象实例。生成对象的时候,必须使用new命令。var Vehicle...

kotlin1.8.10问题导致gson报错TypeToken type argument must not contain a type variable

书接上回&#xff0c;https://blog.csdn.net/jzlhll123/article/details/139302991。 之前我发现gson报错后&#xff1a; gson在2.11.0给我的kotlin项目代码报错了。 IllegalArgumentException: TypeToken type argument must not contain a type variable 上次解释原因是因为&…...

数据库漫谈-国产数据库

国产数据库突然大量出现&#xff0c;下表列出&#xff08;按首字母排序 &#xff09; AISWare AntDB&#xff0c;亚信科技。 AliSQL&#xff0c;阿里云。 Analyticdb&#xff0c;阿里云。 ArkDB&#xff0c;北京极数云舟科技有限公司。 CynosDB&#xff0c;腾讯云 DM&…...

小白跟做江科大32单片机之光敏传感器控制蜂鸣器

代码部分 1.思路 通过光敏电阻&#xff0c;控制蜂鸣器的发声 2.butter.h代码 #ifndef _BUTTER__H #define _BUTTER__H void butter_Init(void); void butter_on(void); void butter_off(void); #endif 3.butter.c代码 #include "stm32f10x.h" void butter…...

使用 Django Channels 构建实时聊天应用(包含用户认证和消息持久化)

文章目录 准备工作创建 Django 项目创建应用程序配置项目编写 Consumer编写路由创建 URL 路由运行应用用户认证消息持久化显示历史消息结论 Django Channels 是 Django 的一个扩展&#xff0c;允许在 Web 应用中添加实时功能&#xff0c;例如 Websockets、HTTP2 和其他协议。本…...

【Elasticsearch】es基础入门-03.RestClient操作文档

RestClient操作文档 示例&#xff1a; 一.初始化JavaRestClient &#xff08;一&#xff09;引入es的RestHighLevelClient依赖 <!--elasticsearch--> <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest…...

LeetCode - 二分查找(Binary Search)算法集合(Python)[左右边界|旋转数组|双列表]

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/139419653 二分查找&#xff0c;也称为折半查找&#xff0c;是一种在有序数组中查找特定元素的高效算法。其基本原理是将待搜索的区间分成两半&am…...

(全网最全)分享8款AI工具,毕业论文AIGC率速降至5%!

【CSDN AI底层算法专栏 / 核心摘要】 2026年&#xff0c;学术圈的反AI审查已经演变成了一场“算法级别的军备竞赛”。随着知网、万方全面接入大模型语义探针&#xff0c;靠改同义词、甚至靠传统Prompt洗稿的套路已全线崩溃。为了帮大家避坑&#xff0c;本期专栏我从代码和算法逻…...

从apt-get到yum:Ubuntu20.04下跨平台包管理工具安装指南

从apt-get到yum&#xff1a;Ubuntu 20.04下跨平台包管理工具实战指南 在Linux生态中&#xff0c;不同发行版采用不同的包管理系统——Debian系的apt与RedHat系的yum就是典型代表。当开发者需要在Ubuntu环境下运行原本为CentOS设计的软件时&#xff0c;掌握yum的安装与配置技巧能…...

uboot移植实战:DDR初始化参数优化与调试指南

1. 理解DDR初始化在uboot移植中的重要性 第一次接触uboot移植时&#xff0c;我完全不明白为什么DDR初始化这么麻烦。直到有一次&#xff0c;我把开发板直接烧成砖头&#xff0c;才真正意识到这个环节有多关键。简单来说&#xff0c;DDR初始化就像是给电脑装内存条&#xff0c;但…...

零基础教程:5个简单步骤用Mi-Create打造个性化小米手表表盘

零基础教程&#xff1a;5个简单步骤用Mi-Create打造个性化小米手表表盘 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create Mi-Create是一款专为小米穿戴设备用户打…...

Keyv自定义序列化教程:超越JSON,支持更多数据类型

Keyv自定义序列化教程&#xff1a;超越JSON&#xff0c;支持更多数据类型 【免费下载链接】keyv jaredwray/keyv: 这是一个分布式键值存储库&#xff0c;用于在多个节点上存储数据。适合用于需要分布式存储和访问的场景。特点&#xff1a;易于使用&#xff0c;支持多种数据存储…...

CTF实战:手把手教你用fastcoll工具复现MD5碰撞攻击(附Python验证脚本)

CTF实战&#xff1a;手把手教你用fastcoll工具复现MD5碰撞攻击&#xff08;附Python验证脚本&#xff09; 在网络安全竞赛和渗透测试中&#xff0c;MD5碰撞攻击是一个经典且实用的技术点。本文将带你从零开始&#xff0c;完整复现MD5碰撞攻击的全过程&#xff0c;包括工具使用、…...

RT-Thread PM组件实战:手把手教你为STM32L4移植低功耗驱动(含RTC时间补偿)

RT-Thread PM组件深度实战&#xff1a;STM32L4低功耗移植与RTC时间补偿全解析 1. 低功耗设计的工程挑战与解决方案 在电池供电的嵌入式设备开发中&#xff0c;我们常常面临一个核心矛盾&#xff1a;如何平衡系统性能与能耗。以智能水表为例&#xff0c;常规模式下MCU工作电流可…...

Flow.js源码深度解析:分块算法、上传策略与事件系统的实现原理

Flow.js源码深度解析&#xff1a;分块算法、上传策略与事件系统的实现原理 【免费下载链接】flow.js A JavaScript library providing multiple simultaneous, stable, fault-tolerant and resumable/restartable file uploads via the HTML5 File API. 项目地址: https://gi…...

LoRA训练助手GPU显存优化:Qwen3-32B INT4量化后仅需9.2GB显存稳定运行

LoRA训练助手GPU显存优化&#xff1a;Qwen3-32B INT4量化后仅需9.2GB显存稳定运行 1. 引言&#xff1a;当大模型遇见显存焦虑 如果你尝试过在个人电脑上运行大语言模型&#xff0c;大概率会遇到一个令人头疼的问题&#xff1a;显存不足。特别是像Qwen3-32B这样拥有320亿参数的…...

告别繁琐操作:用快马AI定制你的智能FileZilla,实现自动化文件管理

告别繁琐操作&#xff1a;用快马AI定制你的智能FileZilla&#xff0c;实现自动化文件管理 作为一个经常需要处理文件传输的开发人员&#xff0c;我深知传统FTP工具的局限性。每次都要重复配置服务器信息&#xff0c;手动同步文件夹&#xff0c;还要花时间筛选文件&#xff0c;…...