文章目录

  • 什么是 Warmup?
  • 实现示例
  • 科学设置 Warmup 的黄金法则
  • 直观例子

什么是 Warmup?

Warmup 是一种学习率调度策略,在训练初期逐步增加学习率(LR),而不是直接使用目标学习率。它解决了两个关键问题:

  • 避免早期震荡:模型参数初始化为随机值,直接高LR会导致不稳定更新。
  • 稳定Adam优化器:Adam的动量估计在初始阶段不准确,需要渐进调整。

实现示例

初始 LR
线性增长阶段
达到 warmup_steps?
反平方根衰减阶段
def get_lr(step, warmup_steps, d_model):# 1. 预热阶段:线性增长if step < warmup_steps:return base_lr * (step / warmup_steps)# 2. 衰减阶段:反平方根衰减scale = (warmup_steps ** 0.5) * min(step ** (-0.5), step * (warmup_steps ** (-1.5))return base_lr * scale

科学设置 Warmup 的黄金法则

  • NNN = 总样本数(条)
  • BBB = 每次 forward 的原始 batch(每卡)
  • AAA = 梯度累积步数(accum_grad
  • EEE = epoch 数
  • WWW = 卡数(world_size,单卡 = 1)
  1. 每 epoch 的 forward 次数(向上取整):

I=⌈N/(B×W)⌉I = \lceil N / (B \times W) \rceil I=N/(B×W)⌉

  1. 每 epoch 的 optimizer 更新次数(每 AAA 次 forward 做一次 update,向上取整):

S=⌈I/A⌉S = \lceil I / A \rceil S=I/A

  1. 总 optimizer step(也就是 scheduler 用的 total steps):

T=S×ET = S \times E T=S×E

  1. 推荐的 warmup 步数:

warmup={max⁡{⌈0.10×T⌉,10},T<4000clamp⁡(⌊0.05×T⌉,4000,20000),T≥4000\text{warmup} = \begin{cases} \max\{\lceil 0.10 \times T \rceil, 10\}, & T < 4000\\[4pt] \operatorname{clamp}(\, \lfloor 0.05 \times T \rceil,\; 4000,\; 20000 \,), & T \ge 4000 \end{cases} warmup={max{⌈0.10×T,10},clamp(0.05×T,4000,20000),T<4000T4000

并且最终确保 warmup≤T−1\text{warmup} \le T-1warmupT1

解释:小训练用 10%,大训练用 5%,并在 4k–20k 之间限制


直观例子

假设 B=16,A=8,E=120,W=1B=16, A=8, E=120, W=1B=16,A=8,E=120,W=1

  1. N=100,000N = 100{,}000N=100,000
  • I=⌈100000/16⌉=6250I=\lceil100000/16\rceil=6250I=100000/16=6250
  • S=⌈6250/8⌉=782S=\lceil6250/8\rceil=782S=6250/8=782
  • T=782×120=93,840T=782\times120=93{,}840T=782×120=93,840
  • warmup ≈ ⌊0.05×93840⌉=4,692\lfloor0.05\times93840\rceil=4{,}6920.05×93840=4,692(取 4000–20000 区间内 → 4692
  1. N=1,000,000N = 1{,}000{,}000N=1,000,000
  • I=⌈1000000/16⌉=62500I=\lceil1000000/16\rceil=62500I=1000000/16=62500
  • S=⌈62500/8⌉=7813S=\lceil62500/8\rceil=7813S=62500/8=7813
  • T=7813×120=937,560T=7813\times120=937{,}560T=7813×120=937,560
  • 0.05×T ≫ 20000 → clamp → 20000
  1. N=100N = 100N=100(极小样本、仅作示例):
  • I=⌈100/16⌉=7I=\lceil100/16\rceil=7I=100/16=7
  • S=⌈7/8⌉=1S=\lceil7/8\rceil=1S=7/8=1
  • T=1×120=120T=1\times120=120T=1×120=120
  • 因为 T<4000T<4000T<4000,warmup = max(ceil(0.1×120),10) = 12

import mathdef suggest_warmup(N,B,A,E,W=1):I = math.ceil(N / (B*W))S = math.ceil(I / A)T = S * Eif T < 4000:w = max(math.ceil(0.10*T), 10)else:w = round(0.05*T)w = max(4000, min(w, 20000))w = min(w, T-1)return {"iters_per_epoch":I, "opt_steps_per_epoch":S, "total_steps":T, "warmup":w}print(suggest_warmup(403733, 16, 8, 120, 4))
# {'iters_per_epoch': 6309, 'opt_steps_per_epoch': 789, 'total_steps': 94680, 'warmup': 4734}print(suggest_warmup(403733, 16, 4, 100, 4))
# {'iters_per_epoch': 6309, 'opt_steps_per_epoch': 1578, 'total_steps': 157800, 'warmup': 7890}

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

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

相关文章

vue一个超简单的菜单栏伸缩示例

代码<template><div class"container"><!-- 左侧区域 --><div class"left-side" :style"{ width: leftWidth px }">左侧内容</div><!-- 右侧区域 --><div class"right-side" :style"{ l…

Spark学习(Pyspark)

&#xff08;1&#xff09;Spark基础入门 ①什么是Spark Spark是一款分布式内存计算的统一分析引擎。其特点就是对任意类型的数据进行自定义计算。Spark可以计算&#xff1a;结构化、半结构化、非结构化等各种类型的数据结构&#xff0c;同时也支持使用Python、Java、Scala、R以…

PDF压缩原理详解:如何在不失真的前提下减小文件体积?

与直接删除内容不同&#xff0c;良好的PDF压缩能在大幅减小体积的同时&#xff0c;较好地保留原有文字清晰度和图像质量&#xff0c;兼顾实用性与视觉效果。软件操作十分直观&#xff0c;仅需设置输入文件与输出路径&#xff0c;点击【开始压缩】按钮即可启动处理。画质压缩等级…

从应用场景看国产化FPGA潜力,紫光同创研讨会武汉·北京站回顾

八月&#xff0c;紫光同创 FPGA 技术研讨会先后在武汉、北京举行。作为紫光同创官方合作伙伴&#xff0c;ALINX 携紫光同创 FPGA 开发板及行业解决方案亮相&#xff0c;与来自通信、工业控制、医疗、图像视频、消费电子等领域的近 200 位行业专家齐聚一堂&#xff0c;通过主题演…

安卓APK包体优化全攻略

目录 正常默认打包流程&#xff08;以Android平台为例&#xff09; 查看编辑器打包日志 压缩图片 压缩网格模型 压缩贴图 压缩音频文件 只打64位包 最终大小 正常默认打包流程&#xff08;以Android平台为例&#xff09; 准备工作&#xff1a; 确保已安装最新版Unity H…

嵌入式学习日记(28)进程、线程

回收资源空间子进程回收策略1、wait阻塞回收&#xff1a;一般情况下父进程专门负责回收2、waitpid非阻塞回收&#xff1a;搭配轮询方式回收3、不回收&#xff1a;子进程任务一致执行4、异步回收&#xff1a;子进程结束后通知父进程进行回收exec 函数族三种调用外部程序的方式#i…

测试用例的一些事项

为什么要写测试用例&#xff1f;写测试用例的原因是为了避免遗漏测试&#xff0c;我们要根据给的文档将逻辑都表达出来&#xff0c;不能因为简单而不写&#xff0c;日后版本更新就知道自己哪些测了哪些没测。在没有文档的时候测试用例该怎么写&#xff1f;大家可以考虑安全测试…

当Java遇见AI:飞算驱动的个人博客介绍智能生成风暴

一、飞算JavaAI&#xff1a;重新定义个人开发的"智能魔法棒" 1.1 开发者需求变革&#xff1a;从"技术门槛"到"创意优先"的时代 在数字化浪潮席卷全球的今天&#xff0c;个人品牌建设已成为技术从业者、创业者乃至学生的刚需——无论是程序员分享…

小程序排名优化:用户行为数据背后的提升密码

用户在小程序中的每一次点击、每一次停留、每一次分享&#xff0c;都在产生着有价值的数据。这些看似零散的用户行为数据&#xff0c;其实隐藏着提升小程序排名的密码。平台在判定小程序排名时&#xff0c;用户行为数据是重要的参考依据&#xff0c;因为它直接反映了小程序对用…

【DSP28335 入门教程】深度解析中断系统:三级架构与响应机制

大家好&#xff0c;欢迎来到我们的 DSP28335 深度解析系列。在之前的实战中&#xff0c;我们通过 while(1) 循环和延时函数实现了各种控制&#xff0c;这种方式被称为轮询。但轮询就像一个焦急的门卫&#xff0c;需要不停地去检查每个门口是否有人&#xff0c;既浪费精力又效率…

代码随想录二刷之“字符串”~GO

1.344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; func reverseString(s []byte) {left : 0right : len(s)-1for left < right{s[left],s[right] s[right],s[left]leftright--}return } 感悟&#xff1a;还是go语法熟练程度的问题&#xff0c;需要注意的是&am…

(!万字血书!)文本预处理:NLP 版 “给数据洗澡” 指南

好吧&#xff0c;我承认我是个标题党&#xff01;(不这样你会点进来享受这篇 通俗易懂 的好文章吗&#xff1f;) 正经标题&#xff1a;文本预处理全流程:从基础到实践 &#xff08;屏幕前的你&#xff0c;帅气低调有内涵&#xff0c;美丽大方很优雅… 所以&#xff0c;求…

最新chrome浏览器elasticsearch-head无法安装使用问题

chrome浏览器网址栏复制粘贴以下内容输入回车 chrome://flags/#allow-legacy-mv2-extensions 找到Allow legacy extension manifest versions项右侧选择Enabled启用&#xff0c;重启浏览器即可。

CSS aspect-ratio 属性

aspect-ratio 是 CSS 中用于控制元素宽高比的属性&#xff0c;通过一行代码即可实现响应式比例布局&#xff0c;无需复杂计算。它确保元素在不同屏幕尺寸下保持固定比例&#xff0c;提升响应式设计效率。一、基本语法与取值selector {aspect-ratio: <width> / <height…

FreeRTOS多核支持

个人博客&#xff1a;blogs.wurp.top 简介 1. 多核支持概述 在传统的单核系统中&#xff0c;FreeRTOS 通常运行在一个 CPU 核心上&#xff0c;负责任务调度、中断处理和资源管理。然而&#xff0c;在多核系统中&#xff0c;多个核心可以并行执行不同的任务或线程&#xff0c…

CUDA中的基本概念

要学习cuda的同学相信已经对其有一定的了解了&#xff0c;至少直到它是干什么的了。这篇文章主要是对cuda编程中的主要概念进行总结&#xff0c;有了一个大致的轮廓后就好入手了。 异构架构 异构架构即使用CPU和GPU共同进行计算。GPU不能作为一个独立的运行平台&#xff08;程序…

【LINUX网络】HTTP协议基本结构、搭建自己的HTTP简单服务器

目录 1. 初识HTTP 2. URL 2.1 基本结构 2.2 URL中的?与urldecode\urlencode 易混淆&#xff1a;URL和HTTP传输请求两者是什么关系&#xff1f; HTTP的宏观结构 3. DEMO CODE loop模块&#xff0c;核心逻辑 HttpServer 初代版本&#xff08;DEMO 0.0&#xff09; DEMO 1.0 DEMO…

Spring Boot 静态函数无法自动注入 Bean?深入解析与解决方案

在 Spring Boot 项目中&#xff0c;开发者常遇到一个典型问题&#xff1a;在静态方法或静态变量中尝试使用 Autowired 注入 Bean 时&#xff0c;始终得到 null 值。本文将深入剖析这一问题的根源&#xff0c;并提供多种可靠解决方案。问题重现&#xff1a;为什么注入失败&#…

存储过程作为系统逻辑核心的架构思考 —— 以 SaaS 系统为例

在企业级系统尤其是 SaaS 架构中&#xff0c;技术选型一旦确定&#xff0c;就意味着底层数据库类型基本不会轻易更换。既然如此&#xff0c;我们可以更大胆地将数据库能力本身纳入系统设计的核心&#xff0c;而不仅仅把它当成一个被动的存储引擎。存储过程&#xff08;Stored P…

Ubuntu20.04下Remmina的VNC密码忘记后重置

你遇到的错误&#xff1a; ** error creating password: /home/ysc/.vnc/passwd storepasswd: No such file or directory说明&#xff1a;x11vnc -storepasswd 无法创建密码文件&#xff0c;因为 .vnc 目录不存在。 虽然你可能以为路径是对的&#xff0c;但系统找不到 /home/y…