神经网络中warmup为什么有效?
首先warmup主要解决的问题或者说是作用:
- 有助于减缓模型在初始阶段对mini-batch的提前过拟合现象,保持分布的平稳
- 有助于保持模型深度的稳定性
从训练的效果可以体现为:一开始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为什么有效?相关推荐
- 神经网络中warmup策略
训练模型常规策略是初始使用较大的学习率,随着训练的逐渐进行学习率衰减(learning rate decay).而wramup则是刚开始使用较小的学习率,然后增大到设定的学习率,最后又随着训练的进行慢 ...
- 深度神经网络中Inception-ResNet模块介绍
之前在https://blog.csdn.net/fengbingchun/article/details/113482036 介绍了Inception,在https://blog.csdn.net/ ...
- 深度神经网络中的局部响应归一化LRN简介及实现
Alex.Hinton等人在2012年的NIPS论文<ImageNet Classification with Deep Convolutional Neural Networks>中将L ...
- Hinton新论文:如何在神经网络中表示“部分-整体层次结构”?
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨Geoffrey Hinton 来源丨AI科技评论 编辑丨极市 ...
- 神经网络中的权重初始化一览:从基础到Kaiming
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在进行各种小实验和思维训练时,你会逐步发现为什么在训练深度神经网络 ...
- 综述:神经网络中 Normalization 的发展历程
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来自 | 知乎 作者丨没头脑 链接丨https://zhuanl ...
- 7 大主题!梳理神经网络中 Normalization 的发展历程
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本篇文章用于总结近年来神经网络中 Normalization 操作 ...
- 神经网络中,设计loss function有哪些技巧?
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:视学算法 神经网络中,设计loss function有哪 ...
- 神经网络中参数量parameters和FLOPs计算
一.神经网络中参数量parameters和FLOPs计算 CNN中的parameters分为两种:W和b,对于某一个卷积层,它的parameters的个数为: (Kh∗Kw∗Cin)∗Cout+Cou ...
最新文章
- Python使用numpy函数hsplit水平(按列)拆分numpy数组(返回拆分后的numpy数组列表)实战:水平(按列)拆分二维numpy数组、split函数水平(按列)拆分二维numpy数组
- 第十六周 个人项目开发流程
- EventBus的简单使用
- Mysql 5.5 源码安装
- java高并发(九)线程封闭
- C语言求35 45的最大公约数,C语言怎么求最大公约数和最小公倍数
- 均线交易策略的回测 r_使用r创建交易策略并进行回测
- HK-2000多功能数据采集仪支持命令说明
- 西部数码服务器绑定域名解析,中国数据域名如何修改DNS设置方法
- Mysql中eft join、right join、inner join的区别
- OpenCV下载/OpenCV国内镜像/opencv_contrib下载
- 3d相机机器视觉检测技术
- 阿里编程规范(精简版)
- mysql root 访问被拒绝_mysql-“连接失败:用户'root'@'localhost'(使用密码:是)的访问被拒绝”...
- STM32F103移植FreeRTOS必须搞明白的系列知识---1(Cortex-CM3中断优先级)
- ios实时卡顿检测和优化方案
- 步步为营——局域网调试NAS软路由“PVE+爱快+lede+黑群晖硬盘直通”并移植到宽带网(超详细,上篇)
- 森林图怎么分析_图说meta十一:森林图暨RevMan软件使用方法简介
- 【操作系统】RR算法
- 育儿心得-红脸,白脸