transformers中学习率warmup策略具体如何设置

news2025/3/31 10:57:58

在使用 get_linear_schedule_with_warmup(如 Hugging Face Transformers 库中的学习率调度器)时,参数的合理设置需要结合 数据量(dataset size)批次大小(batch size) 和 训练轮数(epochs) 来确定。以下是分步指南和公式说明:

1. 核心参数解析

get_linear_schedule_with_warmup 的主要参数:

  • num_warmup_steps: 学习率预热步数(逐渐增大学习率的阶段)

  • num_training_steps: 总训练步数(学习率从峰值线性衰减到 0 的总步数)

2. 参数计算公式

(1) 计算总训练步数 (num_training_steps)

总训练步数 = 每轮(epoch)的步数 × 训练轮数(epochs)
每轮的步数 = ⌈ 数据总量 / batch_size ⌉ (向上取整)

公式

num_training_steps=epochs×⌈dataset_size/batch_size⌉

(2) 设置预热步数 (num_warmup_steps)

经验法则:

  • 小规模数据(< 10k 样本): 预热步数占总步数的 10%~20%

  • 中/大规模数据(> 10k 样本): 预热步数占总步数的 5%~10%

  • 超大数据(> 1M 样本): 预热步数可设为 1%~2%

公式

num_warmup_steps=max(100,num_training_steps×warmup_ratio)num_warmup_steps=max(100,num_training_steps×warmup_ratio)

max 确保至少 100 步预热,避免极端情况)

3. 参数设置建议

参数设置原则
num_warmup_steps避免过长(占用过多训练时间)或过短(学习率上升不稳定)
num_training_steps确保准确计算,否则学习率衰减可能提前结束或未完成
动态调整策略使用验证集监控,如果模型收敛不稳定,适当增加预热步数或调整预热比例

通过合理设置 num_warmup_steps 和 num_training_steps,可以确保学习率在训练初期稳定上升(预热阶段),随后线性衰减至零,从而优化模型收敛速度和最终性能。根据数据规模和任务特性灵活调整预热比例是关键。

4. 当使用多卡机器与梯度累加步骤结合时,应该如何计算?

可能存在的误区是,梯度累积是在每个卡上独立进行的,还是跨卡同步的。例如,如果每个卡在本地累积了A步梯度,然后进行同步和参数更新,那么总的梯度累积步数仍然是A,而不是卡数乘以A。因此,总的有效批量大小应该是卡数 × 单卡batch size × 梯度累积步数。

此外,在分布式训练中,每个卡处理的样本数是总样本数除以卡数,因此每个卡每个epoch的步数是(总样本数 / 卡数) / 单卡batch size,再乘以梯度累积步数得到参数更新次数。

假设以下参数:

  • 总样本数(dataset_size): 50,000

  • 每卡批量大小(per_device_batch_size): 32

  • 训练轮数(epochs): 3

  • 梯度累积步数(gradient_accumulation_steps): 4

  • GPU数量(num_gpus): 4

  • 预热比例(warmup_ratio): 10%

计算总的有效批量大小

有效批量大小=num_gpus×per_device_batch_size×gradient_accumulation_steps=4×32×4=512


计算每个epoch的参数更新次数

每个epoch的更新次数=⌈dataset_size/有效批量大小⌉=⌈50,000/512⌉=98


计算总训练步数(num_training_steps)

num_training_steps=每个epoch的更新次数×epochs=98×3=294


计算预热步数(num_warmup_steps)

num_warmup_steps

=max⁡(100,num_training_steps×warmup_ratio)

=max⁡(100,294×0.1)

=max⁡(100,29.4)=100

(若数据量较大,可适当降低预热比例)

5. 代码

from transformers import get_linear_schedule_with_warmup

# 输入参数
dataset_size = 50_000
per_device_batch_size = 32
epochs = 3
num_gpus = 4
gradient_accumulation_steps = 4
warmup_ratio = 0.1  # 10%

# 计算总有效批量大小
effective_batch_size = num_gpus * per_device_batch_size * gradient_accumulation_steps

# 计算每个epoch的更新次数
updates_per_epoch = (dataset_size + effective_batch_size - 1) // effective_batch_size  # 向上取整

# 计算总训练步数
num_training_steps = updates_per_epoch * epochs

# 计算预热步数(确保最小100步)
num_warmup_steps = max(100, int(num_training_steps * warmup_ratio))

# 创建调度器
optimizer = ...  # 初始化优化器
scheduler = get_linear_schedule_with_warmup(
    optimizer,
    num_warmup_steps=num_warmup_steps,
    num_training_steps=num_training_steps
)

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

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

相关文章

Charles抓HTTPS包

一、电脑端 1、证书下载与安装 安装完之后&#xff0c;重新点开看一看&#xff0c;确认下证书状态&#xff0c;安装的没问题 2、charles设置 抓电脑端要把这个点开 3、抓包 正经人看浏览器的包一般是F12&#xff0c;不过这里就用浏览器代替电脑软件了 如果配制好charles之后…

JavaScript模板字符串:

1.示例代码&#xff08;包含注释&#xff09;: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>JS-数…

【系统架构设计师】数据库系统 ③ ( 数据库设计过程 | 概念结构设计 | ER 图 简介 | 概念设计阶段 工作拆分 )

文章目录 一、数据库设计过程 概述二、ER 图 简介1、ER 图 概念2、ER 图 示例3、ER 图 关系类型① 一对一 ( 1:1 ) 关系② 一对多 ( 1:n ) 关系③ 多对多 ( n:n ) 关系 三、概念设计阶段 工作拆分 一、数据库设计过程 概述 数据库设计过程 : 需求分析阶段 : 明确 用户需求 ; …

Servlet开发与生命周期详解-2

一、在集成开发环境当中开发Servlet程序 1.集成开发工具很多&#xff0c;其中目前使用比较多的是&#xff1a; IntelliJ IDEA&#xff08;这个居多&#xff0c;IDEA在提示功能方面要强于Eclipse&#xff0c;也就是说IDEA使用起来比Eclipse更加智能&#xff0c;更好用。JetBrai…

将网络安全和第三方风险管理与业务目标相结合

在网络安全风险领域&#xff0c;我们经常遇到与企业语言不通的问题。这可能导致网络安全风险管理计划得不到支持。当发现网络安全风险时&#xff0c;困难在于以符合组织语言和目标的方式来表达它。 第三方风险属于另一个灰色地带。在组织内部&#xff0c;许多利益相关者&#…

NO.58十六届蓝桥杯备战|基础算法-枚举|普通枚举|二进制枚举|铺地毯|回文日期|扫雷|子集|费解的开关|Even Parity(C++)

枚举 顾名思义&#xff0c;就是把所有情况全都罗列出来&#xff0c;然后找出符合题⽬要求的那⼀个。因此&#xff0c;枚举是⼀种纯暴⼒的算法。 ⼀般情况下&#xff0c;枚举策略都是会超时的。此时要先根据题⽬的数据范围来判断暴⼒枚举是否可以通过。 使⽤枚举策略时&#xf…

Python正则表达式(二)

目录 六、re.findall()函数和分组 1、0/1分组情况 2、多分组情况 七、或“|”的用法 1、作用域 2、用法 八、贪婪模式和懒惰模式 1、量词的贪婪模式 2、量词的懒惰模式 九、匹配对象 1、相关函数 六、re.findall()函数和分组 1、0/1分组情况 在正则表达式中&#x…

图解AUTOSAR_SWS_FlashDriver

AUTOSAR Flash驱动(FLS)模块详解 AUTOSAR基础软件存储抽象层组件详细解析 目录 1. 概述 1.1. Flash驱动模块简介1.2. 功能和作用2. 架构设计 2.1. 模块架构2.2. API接口设计2.3. 状态机设计2.4. 异步操作时序2.5. 配置结构2.6. 任务处理流程3. 总结 3.1. 设计优势3.2. 应用场景…

哪吒汽车:一边熬夜蹦迪,一边找药投医

两年前&#xff0c;威马CEO沈晖发了个短视频&#xff0c;内容是“活下去&#xff0c;像牲口一样活下去”。 如今最能体会沈晖当时心情的&#xff0c;估计就是方运舟了。 作为哪吒汽车创始人兼董事长&#xff0c;他连续多次被限高&#xff0c;为了让哪吒汽车活下去&#xff0c…

Linux一步部署主DNS服务器

​ #!/bin/bash #部署DHCP服务 #userli 20250319if [ "$USER" ! "root" ]then echo"错误&#xff1a;非root用户&#xff0c;权限不足&#xff01;"exit 0fi#防火墙与高级权限 systemctl stop firewalld && systemctl disable firewalld…

图片隐私清理工具

图片隐私清理助手&#xff1a;一键清除图片敏感信息的神器 在数字时代&#xff0c;我们每天都会拍摄和分享大量图片&#xff0c;但你是否注意过这些图片中可能暗藏隐私信息&#xff1f;相机的GPS定位、拍摄参数等EXIF数据&#xff0c;都可能在不经意间泄露你的隐私。今天介绍的…

【UE5】摄像机晃动

目录 效果 步骤 一、游戏中晃动视角 二、Sequence中晃动视角 效果 步骤 一、游戏中晃动视角 1. 新建一个蓝图&#xff0c;父类选择“CameraShakeBase” 这里命名为“BP_MyCameraShake” 打开“BP_MyCameraShake”&#xff0c;根晃动模式这里设置为“Perlin噪点摄像机晃…

类和对象—继承(1)

目录 1、继承1.1、继承的概念1.2、继承的语法 2、子类访问父类成员2.1、子类中访问父类的成员变量2.2、子类中访问父类的成员方法2.3、super 关键字 3、子类构造方法 1、继承 在 Java 中&#xff0c;类对现实中的实体进行描述&#xff0c;而类实例化的对象用来表示现实中的实体…

试试智能体工作流,自动化搞定运维故障排查

APO 1.5.0版本全新推出的智能体工作流功能&#xff0c;让运维经验不再零散&#xff01;只需将日常的运维操作和故障排查经验转化为标准化流程&#xff0c;就能一键复用&#xff0c;效率翻倍&#xff0c;从此告别重复劳动&#xff0c;把时间留给更有价值的创新工作。更贴心的是&…

Linux应用:线程基础

线程介绍 进程是程序在操作系统里的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的一个执行单元&#xff0c;是 CPU 调度和分派的基本单位。一个进程可以包含多个线程&#xff0c;这些线程共享进程的资源&#xff0c;如内存空间、文…

要创建一个基于Spring Boot、Thymeleaf、MyBatis Plus和MySQL的简单表格增删改查(CRUD)项目

文章目录 要创建一个基于Spring Boot、Thymeleaf、MyBatis Plus和MySQL的简单表格增删改查&#xff08;CRUD&#xff09;项目1. 创建Spring Boot项目2.项目配置2.1 依赖yml配置数据库表配置 3.代码实现3.1 实体类3.2 数据访问层3.3 服务层3.4 控制层3.5 Thymeleaf模板 要创建一…

解决Cubemx生产的 .ioc文件不能外部打开的方法

正常来说&#xff0c;cubemx生成的文件会有图标 但是当图标白色的时候&#xff0c;无法通过直接点击这个文件进入cubemx 1.首先检查java环境是不是装的JAVA8&#xff0c;如果是的话进行第二步操作&#xff1b; 2.重新安装一次cubemx&#xff0c;在安装的时候选择为我安装&…

在 Linux(Ubuntu / CentOS 7)上快速搭建我的世界 MineCraft 服务器,并实现远程联机,详细教程

Linux 部署 MineCraft 服务器 详细教程&#xff08;丐版&#xff0c;无需云服务器&#xff09; 一、虚拟机 Ubuntu 部署二、下载 Minecraft 服务端三、安装 JRE 21四、安装 MCS manager 面板五、搭建服务器六、本地测试连接七、下载樱花&#xff0c;实现内网穿透&#xff0c;邀…

Transformer | 一文了解:缩放、批量、多头、掩码、交叉注意力机制(Attention)

源自: AINLPer&#xff08;每日干货分享&#xff01;&#xff01;&#xff09; 编辑: ShuYini 校稿: ShuYini 时间: 2025-3-27 更多&#xff1a;>>>>专注大模型/AIGC、学术前沿的知识分享&#xff01; 引言 之前的文章&#xff1a;2万字长文&#xff01;一文了解…

原型验证后客户推翻原有需求,如何止损

原型验证后客户推翻原有需求时止损的有效方法包括&#xff1a;迅速评估影响范围、立即开展沟通确认、调整项目计划和资源配置、更新变更管理流程、协商成本分担机制。其中&#xff0c;迅速评估影响范围是关键&#xff0c;项目团队必须立即明确此次变更的具体影响&#xff0c;包…