深度学习:预训练和warm up的区别

“预训练(Pre-training)”和“Warm-up(预热)”是深度学习中常见的两个训练策略,它们虽然都在训练初期起作用,但本质和目的完全不同。


一、预训练(Pre-training)

1. 定义

预训练是指:先在一个大规模数据集相关任务上训练模型,以获取有用的参数初始化,然后再在目标任务上进行微调(Fine-tuning)

2. 目的

  • 加快收敛

  • 避免从头开始训练

  • 提高小数据集上的性能(通过迁移知识)

3. 举例

NLP领域(经典):
模型预训练任务微调任务
BERTMasked Language Model文本分类、问答、NER等
GPT系列下一个词预测(语言建模)对话、写作、代码生成等
CV领域(图像):
  • 用 ResNet-50 在 ImageNet 上预训练,迁移到医疗图像/遥感图像等小样本任务中。

4. 形式

# 加载预训练权重 model.load_state_dict(torch.load("pretrained_model.pth")) # 再进行微调 train(model, task_dataset)


二、Warm-up(预热)

1. 定义

Warm-up 指的是:在训练初期,逐渐增加学习率,从一个较小值慢慢变大,直到达到设定的初始学习率。如下面例子中的线性warm up。

2. 目的

  • 防止一开始梯度爆炸或震荡

  • 提高训练稳定性,特别是Transformer类模型

3. 常见策略

(1) 线性 warm-up:

lr = base_lr × step / warmup_steps if step <= warmup_steps

(2) 结合衰减策略(如 transformer):

# 经典 Transformer warmup+inverse sqrt decay def get_lr(step, d_model=512, warmup=4000): return d_model**-0.5 * min(step**-0.5, step * warmup**-1.5)

4. 举例

PyTorch 中使用 warmup:

from transformers import get_linear_schedule_with_warmup 
optimizer = AdamW(model.parameters(), lr=1e-4) 
scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps=1000, num_training_steps=10000) 
for step in range(total_steps): optimizer.step() scheduler.step()

三、对比总结

项目预训练(Pre-training)Warm-up(预热)
作用阶段训练前或训练初期训练初期
针对对象模型权重学习率调度
目标利用已有知识迁移,加快收敛防止梯度不稳定,提高初始阶段鲁棒性
应用领域NLP、CV、大模型、元学习等Transformer、BERT、GAN、深度网络等


四、实际项目中如何配合使用?

  • 预训练 + warm-up 经常联合使用(如 BERT)

  • 示例:

    1. 加载预训练 BERT 模型

    2. 采用 warm-up + cosine decay 的学习率策略

    3. 微调分类任务(如情感分析)


在轨迹预测、分类或Transformer类任务,warm-up 几乎是标配;而预训练则要看你有没有现成的预训练模型或大规模源域数据

五、PyTorch 实现的warm-up 学习率调度器(warm-up + 余弦退火

下面是一个使用 PyTorch 实现的 warm-up 学习率调度器完整示例,适用于 Transformer、BERT 或任意深度模型训练时的预热策略。


示例:线性 warm-up + 余弦退火(Cosine Annealing)

import torch
import torch.nn as nn
import torch.optim as optim
import math
import matplotlib.pyplot as plt# 模拟模型
model = nn.Linear(512, 10)# 优化器
optimizer = optim.Adam(model.parameters(), lr=1e-3)# 训练总步数
num_training_steps = 10000# warm-up 步数(前10%步数用于 warm-up)
num_warmup_steps = int(0.1 * num_training_steps)# 自定义 warm-up + cosine 衰减调度器
def get_lr(step):if step < num_warmup_steps:return step / num_warmup_stepselse:# 余弦衰减,值在 [1, 0]progress = (step - num_warmup_steps) / (num_training_steps - num_warmup_steps)return 0.5 * (1.0 + math.cos(math.pi * progress))# 模拟训练流程
lrs = []
for step in range(1, num_training_steps + 1):# 当前的学习率(乘基础学习率)scale = get_lr(step)lr = scale * 1e-3for param_group in optimizer.param_groups:param_group['lr'] = lr# 模拟一次训练optimizer.step()lrs.append(lr)# 可视化学习率变化
plt.plot(lrs)
plt.title("Learning Rate Schedule (Warm-up + Cosine Decay)")
plt.xlabel("Step")
plt.ylabel("Learning Rate")
plt.grid(True)
plt.show()

代码解释:

阶段策略
前1000步学习率从 0 线性上升到 1e-3
后9000步学习率从 1e-3 余弦方式逐渐衰减到接近 0

线性 warm-up 的核心逻辑定义在 get_lr(step) 函数中的这部分

if step < num_warmup_steps:return step / num_warmup_steps

线性 warm-up 就是:在训练开始时,学习率从 0 按线性方式逐步升到设定的最大值,防止一开始梯度太大导致训练不稳定。

余弦退火Cosine Annealing)是一种学习率调度策略,其核心目的是:

让学习率在训练后期逐渐减小,有节奏地收敛到接近 0,从而提升模型收敛的稳定性与最终精度。


为什么要用余弦退火?

  1. 训练初期: 需要较大的学习率来快速探索优化空间;

  2. 训练后期: 逐渐减小学习率,有助于模型精细调优、避免震荡

  3. 相比线性衰减或固定学习率更有效,尤其在 Transformer、BERT、CV大模型中常用。

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

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

相关文章

Apache Ignite中分布式信号量(Distributed Semaphore)的说明和使用示例

这段内容是关于 Apache Ignite 中 分布式信号量&#xff08;Distributed Semaphore&#xff09; 的说明和使用示例。我们来一步步解析&#xff0c;帮助你深入理解它的含义和用途。&#x1f539; 一、什么是 Semaphore&#xff08;信号量&#xff09;&#xff1f; 在并发编程中&…

怎么提升服务器的防攻击能力!

提升服务器的防攻击能力需要从​​架构设计、技术防护、运维管理​​等多维度入手&#xff0c;覆盖网络层、系统层、应用层及数据层的安全防护。以下是具体的策略和实践方法&#xff1a;​​一、基础安全加固&#xff1a;消除自身漏洞​​服务器自身的脆弱性是最常见的攻击入口…

vscode配置rust环境

1.官网下载vscode&#xff0c;安装 2.vscode命令行运行&#xff1a; Invoke-WebRequest https://win.rustup.rs/x86_64 -OutFile rustup-init.exe然后&#xff1a; .\rustup-init.exe3.验证 先配置path&#xff1a; $env:Path ";$env:USERPROFILE\.cargo\bin"查看是…

最新版 HarmonyOS NEXT 开发工具安装教程:如何在 macOS 系统安装 DevEco Studio 5.0.3 编辑器?

最新版 HarmonyOS NEXT 开发工具安装教程&#xff1a;如何在 macOS 系统安装 DevEco Studio 5.0.3 编辑器&#xff1f; 什么是 DevEco Studio&#xff1f; DevEco Studio 是华为为 HarmonyOS 开发的强大集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为开发 Harmony…

电商项目统一认证方案设计与实战

1. 微服务网关整合 OAuth2.0 设计思路分析 网关整合 OAuth2.0 有两种思路&#xff0c;一种是授权服务器生成令牌, 所有请求统一 在网关层验证&#xff0c;判断权限等操作&#xff1b;另一种是由各资源服务处理&#xff0c;网关只做请求 转发 。 比较常用的是第一种&#xf…

学习Markdown

标题一 标题二 标题三 标题四 标题五 标题六这是一段引用文本直接编写&#xff0c;段落换行是末尾两个以上的空格&#xff0b;回车 或者在段落后加一个空行 粗体语法&#xff1a;使用两个星号 ** 或两个下划线 __ 包围文字&#xff1a;这是粗体文字使用星号 这是__粗体文字__使…

剧本杀系统 App 开发:科技赋能,重塑剧本杀游戏体验

在科技飞速发展的当下&#xff0c;各个行业都在积极寻求与科技的融合&#xff0c;以实现创新和升级。剧本杀行业也不例外&#xff0c;剧本杀系统 App 的开发正是科技赋能的生动体现&#xff0c;它重塑了传统的剧本杀游戏体验&#xff0c;为玩家带来了全新的感受。剧本杀系统 Ap…

wvp-gb28181-pro 只用jar运行

编译前端后npm install --global yarnyarn --registryhttps://registry.npmjs.org installyarn run build&#xff0c;生成的前端文件&#xff0c;会在wvp-GB28181-pro\src\main\resources\static&#xff0c;因为是在resources中&#xff0c;打maven打包后会一起打到jar中&…

深度学习(鱼书)day06--神经网络的学习(后两节)

深度学习&#xff08;鱼书&#xff09;day06–神经网络的学习&#xff08;后两节&#xff09;一、梯度 像 这样的由全部变量的偏导数汇总而成的向量称为梯度&#xff08;gradient&#xff09;。 梯度实现的代码&#xff1a; def numerical_gradient(f, x):h 1e-4 # 0.0001grad…

学习嵌入式的第三十四天-数据结构-(2025.7.29)数据库

数据库基础概念 数据库是用于存储和管理海量数据的应用程序&#xff0c;提供数据增删改查及统计功能&#xff08;如最大值、最小值、平均数等&#xff09;。通过SQL语句操作数据&#xff0c;以表格形式管理存储。 数据库分类 关系型数据库 Oracle&#xff08;大型&#xff0…

STM32——HAL库

总&#xff1a;STM32——学习总纲 一、简介 1.1 CMIS简介 所有厂家为了市场兼容性推出的标准 arm架构 1.2 HAL库简介 1.2.1 各种库优缺点 二、 STM32 Cube固件包 ST公司为CMSIS 中间层开发的pack&#xff0c;包含HAL。 2.1 获取方式 ST官网&#xff1a;st.com/content/st_c…

数据结构-图的相关定义

图-多对多Graph&#xff08;V,E&#xff09;&#xff0c;图&#xff08;顶点Vertex&#xff0c;边Edge&#xff09;图可以没有边&#xff0c;只有一个顶点也叫图&#xff0c;但是单独的一条边&#xff0c;或者一个顶点连一条边&#xff0c;不能叫图有向图&#xff1a;无向图&am…

B 站搜一搜关键词优化:精准触达用户的流量密码

在 B 站内容生态中&#xff0c;搜一搜功能是用户主动获取信息的重要渠道&#xff0c;而关键词优化则是让你的视频在搜索结果中脱颖而出的关键。通过合理优化关键词&#xff0c;能提升视频曝光率&#xff0c;吸引精准流量&#xff0c;为账号发展注入强劲动力。以下从关键词挖掘、…

Python爬虫实战:研究purl库相关技术

1. 引言 随着互联网数据量的爆炸式增长,网络爬虫已成为数据采集、舆情分析和学术研究的重要工具。Python 凭借其丰富的库生态和简洁语法,成为开发爬虫的首选语言。本文提出的爬虫系统结合 requests 进行 HTTP 请求、BeautifulSoup 解析 HTML,并创新性地引入 purl 库处理复杂…

OpenCV 学习探秘之三:从图像读取到特征识别,再到机器学习等函数接口的全面实战应用与解析

一、引言 1.1介绍 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个功能强大的开源计算机视觉库&#xff0c;广泛应用于图像和视频处理、目标检测、机器学习等领域。本文将全面解析 OpenCV 中常用的函数接口&#xff0c;帮助读者快速掌握 OpenCV 的…

Umi从零搭建Ant Design Pro项目(3)集成 openapi 插件

1. 安装插件 pnpm add umijs/max-plugin-openapi pnpm add swagger-ui-dist如果不安装swagger-ui-dist&#xff0c;不会影响运行。但会报错。 2.配置文件export default defineConfig({// umi插件配置plugins: [umijs/max-plugin-openapi],// openAPI配置openAPI: {requestLibP…

Flutter开发实战之状态管理深入解析

第4章:状态管理深入解析 前言 想象一下,你正在开发一个购物车应用。用户在商品页面添加商品,然后去购物车页面查看,最后到结算页面付款。在这个过程中,购物车的数据需要在多个页面之间保持同步和一致。这就是状态管理要解决的核心问题。 状态管理是Flutter开发中最重要…

组件化(一):重新思考“组件”:状态、视图和逻辑的“最佳”分离实践

组件化(一)&#xff1a;重新思考“组件”&#xff1a;状态、视图和逻辑的“最佳”分离实践 引子&#xff1a;组件的“内忧”与“外患” 至此&#xff0c;我们的前端内功修炼之旅已经硕果累累。我们掌握了组件化的架构思想&#xff0c;拥有了高效的渲染引擎&#xff0c;还探索…

【Redis】Redis 协议与连接

一、Redis 协议 1.1 RESP RESP 是 Redis 客户端与服务器之间的通信协议&#xff0c;采用文本格式&#xff08;基于 ASCII 字符&#xff09;&#xff0c;支持多种数据类型的序列化和反序列化 RESP 通过首字符区分数据类型&#xff0c;主要支持 5 种类型&#xff1a; 类型首字…

Android通知(Notification)全面解析:从基础到高级应用

一、Android通知概述通知(Notification)是Android系统中用于在应用之外向用户传递信息的重要机制。当应用需要告知用户某些事件或信息时&#xff0c;可以通过通知在状态栏显示图标&#xff0c;用户下拉通知栏即可查看详细信息。这种机制几乎被所有现代应用采用&#xff0c;用于…