首页 > 其他分享 >聊一聊学习率预热linear warmup

聊一聊学习率预热linear warmup

时间:2023-07-26 15:22:05浏览次数:34  
标签:预热 linear warmup len 学习 聊一聊 steps total

来源链接:https://mp.weixin.qq.com/s?__biz=MzAxOTU5NTU4MQ==&mid=2247488715&idx=1&sn=2acedd3705b27e5b9e259485f2dd9653&chksm=9bc5fc99acb2758f82b638d03ace8993b5b7374c0162020032e61e144ed86dc5a72082078a91&scene=178&cur_album_id=1783545951672958984#rd

来源公众号:ChallengeHub  

1什么是warmup

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

 

 

 2 Warmup的作用

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

3 为什么warmup有效

这个问题目前还没有被充分证明,下面是来自知乎的回答解释:

https://www.zhihu.com/question/338066667 从理论层面上可以解释为:

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

从训练效果可以体现为:

  • 一开始神经网络输出比较random,loss比较大,容易不收敛,因此用小点的学习率, 学一丢丢,慢慢涨上去。
  • 梯度偏离真正较优的方向可能性比较大,那就走短一点错了还可以掰回来。

4 如何使用

  • 实例1:warm_up_ratio 设置预热步数
from transformers import AdamW, get_linear_schedule_with_warmup

optimizer = 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) * epoch

warm_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()

  • 实例2: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)

5 经验参数选择
一般可取训练steps的10%,参考BERT。这里可以根据具体任务进行调整,主要需要通过warmup来使得学习率可以适应不同的训练集
合,另外我们也可以通过训练误差观察loss抖动的关键位置,找出合适的学习率

6 其他策略

标签:预热,linear,warmup,len,学习,聊一聊,steps,total
From: https://www.cnblogs.com/end/p/17582567.html

相关文章

  • GDI+画刷(LinearGradientBrush(三))
    3、LinearGradientBrush(Rect&,Color&,Color&,LinearGradientMode)对四种路径渐变方式进行代码效果展示,如下:变量定义:CDCMemDCIndicator;CBitmapMemBitmapIndicator;CDC*pDC;CComboBoxm_pGradientMode;关键代码:1voidLinearGradientTwoDlg::DoDataE......
  • torch.nn.Linear 和 torch.nn.Dropout
    torch.nn.Linear torch.nn.Linear是PyTorch中的一个线性层,它实现了一个全连接层,即输入和输出之间的每个神经元都连接到彼此。它的构造函数接受两个参数:输入特征的数量和输出特征的数量。例如,如果你想要将一个长度为100的输入向量映射到一个长度为10的输出向量,可以使用以下代码创建......
  • GDI+画刷(LinearGradientBrush(二))
    2、LinearGradientBrush(Rect&,Color&,Color&,REAL,BOOL),代码演示结果如下所示:注:Rect规定画刷一次所绘制的范围,REAL值是指定颜色渐变的方向变量定义:1CDCMemDCIndicator;2CBitmapMemBitmapIndicator;3CDC*pDC;45REALm_pRealValue;6CSliderCtrlm_pSlid......
  • 线性模型(linear model)基本定义及参数求解数学本质、损失函数的选择与评估数学原理、及
    线性模型(linearmodel)基本定义及参数求解数学本质、损失函数的选择与评估数学原理、及其基于线性模型衍生的其他机器学习模型相关原理讨论1.线性模型简介0x1:线性模型的现实意义在一个理想的连续世界中,任何非线性的东西都可以被线性的东西来拟合(参考Taylor......
  • [HCTF 2018]WarmUp
    [HCTF2018]WarmUp题目来源:buuctf题目类型:Web设计考点:PHP代码审计、文件包含1.题目上来只有一张滑稽图片,查看源代码,发现有source.php文件2.我们进入source.php,可以看到如下代码:<?phphighlight_file(__FILE__);classemmm{publicstaticfunction......
  • 聊一聊Java中的Steam流
    1引言在我们的日常编程任务中,对于集合的制造和处理是必不可少的。当我们需要对于集合进行分组或查找的操作时,需要用迭代器对于集合进行操作,而当我们需要处理的数据量很大的时候,为了提高性能,就需要使用到并行处理,这样的处理方式是很复杂的。流可以帮助开发者节约宝贵的时间,让以上......
  • 聊一聊非分布式任务调度@Scheduled
    @Scheduled注解是SpringBoot提供的用于定时任务控制的注解,主要用于控制任务在某个指定时间执行,或者每隔一段时间执行,默认是在单线程中执行的1、注解源码@Target({ElementType.METHOD,ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Repeatable......
  • 聊一聊这些年用过的绘图工具
    码农从只需要敲代码到需要绘图,而且是负责所在团队的相关图表绘制时,就是TA的岗位与角色发生变化,准确地说是得到提升的时刻。诸如“不会画图的程序员,不是好的技术扛把子”之类调侃,也是绘图能力对于开发人员以及团队的重要性的一种诙谐表达。今天,就来聊聊这些年来所用过的绘图工具。期......
  • 聊一聊 Lua 的基础数据类型:数值、布尔、字符串
    楔子任何一门语言都提供了不同类型的数据结构,那么Lua中都有哪些数据结构呢?nil:空boolean:布尔类型,分别是true和falsenumber:数值类型,整型和浮点型都属于numberstring:字符串table:表function:函数userdata:用户数据thread:线程Lua总共提供了以上8种数据类型,目前只需要......
  • 《Transformer Quality in Linear Time》论文解读
    会议/期刊:ICML年份:20221.VanillaTransformerBlock(MHSA+FFN)原本的Transformer的Block遵循如下的设计范式:MHSA(多头自注意力)+一层或者两层的FFN(全连接层),如下图所示。我们只考虑FFN的话,其数学表达式如下:T表示句子长度,d表示词向量维度(也表示模型隐藏层维度),e表示expandedint......