首先warmup主要解决的问题或者说是作用:

  1. 有助于减缓模型在初始阶段对mini-batch的提前过拟合现象,保持分布的平稳
  2. 有助于保持模型深度的稳定性

从训练的效果可以体现为:一开始loss比较大,不容易收敛,因此用小一点的学习率,慢慢学,慢慢往上涨;梯度偏离真正较优的方向可能性比较大,那就走短一点,如果错了还可以调整回来。

由于刚开始训练的时候,模型的权重是随机初始化的,此时如果选择一个较大的学习率,可能带来模型的不稳定(震荡),选择预热学习率的方式,可以使得开始训练的几个epoch或者一些step内学习率较小,在预热的小学习率下,模型可以慢慢的趋于稳定,等模型相对稳定后再去选择预先设定的学习率进行训练,使得模型收敛的速度变得更快,模型的效果更好。

warmup是针对学习率learning rate优化的一种策略,主要过程是,在预热期间,学习率从0线性(也可以非线性)增加到优化器中的初始预设lr,之后使其学习率从优化器中的初始学习率线性较低到0.

如何使用warmup?

  • warm_up_ratio 设置预热步数
from transformers import AdanW, get_linear_schedule_with_warmupoptimizer = AdamW(model.parameters(), lr=lr, eps=adam_epsilon)
len_dataset = 3821 # 可以根据pytorch中的len(Dataset)计算
epoch = 30
batch_size = 32
total_steps = (len_dataset // batch_size) * epoch if len_dataset % batch_size = 0 else (len_dataset // batch_size + 1) * epoch # 每一个epoch中有多少个step可以根据len(DataLoader)计算:total_steps = len(DataLoader) * epochwarm_up_ratio = 0.1 # 定义要预热的step
scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps = warm_up_ratio * total_steps, num_training_steps = total_steps)
......
optimizer.step()
scheduler.step()
optimizer.zero_grad()
  • num_warmup_steps 设置预热步数

    # training steps 的数量: [number of batches] x [number of epochs].
    total_steps = len(train_dataloader) * epochs# 设计 learning rate scheduler
    scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps = 50, num_training_steps = total_steps)

神经网络中warmup为什么有效?相关推荐

  1. 神经网络中warmup策略

    训练模型常规策略是初始使用较大的学习率,随着训练的逐渐进行学习率衰减(learning rate decay).而wramup则是刚开始使用较小的学习率,然后增大到设定的学习率,最后又随着训练的进行慢 ...

  2. 深度神经网络中Inception-ResNet模块介绍

    之前在https://blog.csdn.net/fengbingchun/article/details/113482036 介绍了Inception,在https://blog.csdn.net/ ...

  3. 深度神经网络中的局部响应归一化LRN简介及实现

    Alex.Hinton等人在2012年的NIPS论文<ImageNet Classification with Deep Convolutional Neural Networks>中将L ...

  4. Hinton新论文:如何在神经网络中表示“部分-整体层次结构”?

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨Geoffrey Hinton 来源丨AI科技评论 编辑丨极市 ...

  5. 神经网络中的权重初始化一览:从基础到Kaiming

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在进行各种小实验和思维训练时,你会逐步发现为什么在训练深度神经网络 ...

  6. 综述:神经网络中 Normalization 的发展历程

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来自 | 知乎  作者丨没头脑 链接丨https://zhuanl ...

  7. 7 大主题!梳理神经网络中 Normalization 的发展历程

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本篇文章用于总结近年来神经网络中 Normalization 操作 ...

  8. 神经网络中,设计loss function有哪些技巧?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:视学算法 神经网络中,设计loss function有哪 ...

  9. 神经网络中参数量parameters和FLOPs计算

    一.神经网络中参数量parameters和FLOPs计算 CNN中的parameters分为两种:W和b,对于某一个卷积层,它的parameters的个数为: (Kh∗Kw∗Cin)∗Cout+Cou ...

最新文章

  1. Python使用numpy函数hsplit水平(按列)拆分numpy数组(返回拆分后的numpy数组列表)实战:水平(按列)拆分二维numpy数组、split函数水平(按列)拆分二维numpy数组
  2. 第十六周 个人项目开发流程
  3. EventBus的简单使用
  4. Mysql 5.5 源码安装
  5. java高并发(九)线程封闭
  6. C语言求35 45的最大公约数,C语言怎么求最大公约数和最小公倍数
  7. 均线交易策略的回测 r_使用r创建交易策略并进行回测
  8. HK-2000多功能数据采集仪支持命令说明
  9. 西部数码服务器绑定域名解析,中国数据域名如何修改DNS设置方法
  10. Mysql中eft join、right join、inner join的区别
  11. OpenCV下载/OpenCV国内镜像/opencv_contrib下载
  12. 3d相机机器视觉检测技术
  13. 阿里编程规范(精简版)
  14. mysql root 访问被拒绝_mysql-“连接失败:用户'root'@'localhost'(使用密码:是)的访问被拒绝”...
  15. STM32F103移植FreeRTOS必须搞明白的系列知识---1(Cortex-CM3中断优先级)
  16. ios实时卡顿检测和优化方案
  17. 步步为营——局域网调试NAS软路由“PVE+爱快+lede+黑群晖硬盘直通”并移植到宽带网(超详细,上篇)
  18. 森林图怎么分析_图说meta十一:森林图暨RevMan软件使用方法简介
  19. 【操作系统】RR算法
  20. 育儿心得-红脸,白脸

热门文章

  1. 新三板开通精选层后,仅存的四家软件公司都是做什么的?
  2. 管理的挑战——软技能在项目管理中的应用案例(转)
  3. java 查看对象内存占用大小
  4. Java学习笔记(三):流程控制
  5. proteus 0.96OLED IIC仿真 SSD1306 UG-2864HSWEG01
  6. ARM服务器和云手游
  7. java 二维码生成及其标签打印
  8. Java面试3-5年规划,去了阿里面试软件测试工程师,面试官问我3-5年的职业规划!...
  9. jeapedu 115 複習習題05
  10. c++ 左值 广义左值 右值 纯右值 将亡值