warmup的定义

在模型训练之初选用较小的学习率,训练一段时间之后(如:10epoches或10000steps)使用预设的学习率进行训练。

为什么使用warmup

  • 因为模型的weights是随机初始化的,可以理解为训练之初模型对数据的“理解程度”为0(即:没有任何先验知识),在第一个epoches中,每个batch的数据对模型来说都是新的,模型会根据输入的数据进行快速调参,此时如果采用较大的学习率的话,有很大的可能使模型对于数据“过拟合”(“学偏”),后续需要更多的轮次才能“拉回来”;
  • 当模型训练一段时间之后(如:10epoches或10000steps),模型对数据具有一定的先验知识,此时使用较大的学习率模型就不容易学“偏”,可以使用较大的学习率加速模型收敛;
  • 当模型使用较大的学习率训练一段时间之后,模型的分布相对比较稳定,此时不宜从数据中再学到新特点,如果仍使用较大的学习率会破坏模型的稳定性,而使用小学习率更容易获取local optima。

常用warmup

  • Constant warmup
    学习率从非常小的数值线性增加到预设值之后保持不变。但是学习率突然从小变为比较大的数值,模型的偏差可能较大。其学习率的系数如下图所示: - Linear Warmup
    学习率从非常小的数值线性增加到预设值之后,然后再线性减小。其学习率的系数如下图所示:
  • Cosine Warmup
    学习率先从很小的数值线性增加到预设学习率,然后按照cos函数值进行衰减。其学习率系数如下图所示:
  • Gradual Warmup
    constant warmup的不足之处在于从一个很小的学习率一下变为比较大的学习率可能会导致训练误差突然增大。于是18年Facebook提出了gradual warmup来解决这个问题,即从最初的小学习率开始,每个step增大一点点,直到达到最初设置的比较大的学习率时,采用最初设置的学习率进行训练。
"""
Implements gradual warmup, if train_steps < warmup_steps, the
learning rate will be `train_steps/warmup_steps * init_lr`.
Args:warmup_steps:warmup步长阈值,即train_steps<warmup_steps,使用预热学习率,否则使用预设值学习率train_steps:训练了的步长数init_lr:预设置学习率
"""
import numpy as np
warmup_steps = 2500
init_lr = 0.1
# 模拟训练15000步
max_steps = 15000
for train_steps in range(max_steps):if warmup_steps and train_steps < warmup_steps:warmup_percent_done = train_steps / warmup_stepswarmup_learning_rate = init_lr * warmup_percent_done  #gradual warmup_lrlearning_rate = warmup_learning_rateelse:#learning_rate = np.sin(learning_rate)  #预热学习率结束后,学习率呈sin衰减learning_rate = learning_rate**1.0001 #预热学习率结束后,学习率呈指数衰减(近似模拟指数衰减)if (train_steps+1) % 100 == 0:print("train_steps:%.3f--warmup_steps:%.3f--learning_rate:%.3f" % (train_steps+1,warmup_steps,learning_rate))

warmup学习率训练相关推荐

  1. 模型训练技巧:warmup学习率策略

    1.什么是warmup 学习率的设置 - 不同阶段不同值:上升 -> 平稳 -> 下降 由于神经网络在刚开始训练的时候是非常不稳定的,因此刚开始的学习率应当设置得很低很低,这样可以保证网络 ...

  2. 【DL】——Warmup学习率调整策略

    1. warmup的必要性 原理这部分转载自: 神经网络中 warmup 策略为什么有效:有什么理论解释么? 那么在什么时候可能不成立呢?论文[3]告诉我们有两种情况: 在训练的开始阶段,模型权重迅速 ...

  3. Warmup 模型训练之标配

    学习率的调节策略 等间隔调整学习率 StepLR 按需调整学习率 MultiStepLR 指数衰减调整学习率 ExponentialLR 弦退火调整学习率 CosineAnnealingLR 自适应调 ...

  4. 预热学习率的作用warmup

    学习率是神经网络训练中最重要的超参数之一,针对学习率的优化方式很多,Warmup是其中的一种 (一).什么是Warmup? Warmup是在ResNet论文中提到的一种学习率预热的方法,它在训练开始的 ...

  5. Warmup预热学习率

    学习率是神经网络训练中最重要的超参数之一,针对学习率的优化方式很多,Warmup是其中的一种 (一).什么是Warmup? Warmup是在ResNet论文中提到的一种学习率预热的方法,它在训练开始的 ...

  6. 目标检测的Tricks | 【Trick5】学习率调优方法——warmup

    如有错误,恳请指出. 文章目录 1. warmup理论概要 2. warmup实现代码 1. warmup理论概要 warmup定义: 在模型训练之初选用较小的学习率,训练一段时间之后(如:10epo ...

  7. 【trick 5】warmup —— 一种学习率调优方法

    目录 一.warmup定义 二.为什么使用warmup 2.1.理性分析 2.2.感性分析 三.常用的warmup 3.1.Constant Warmup 3.2.Linner Warmup 3.3. ...

  8. 垃圾分类、EfficientNet模型B0~B7、Rectified Adam(RAdam)、Warmup、带有Warmup的余弦退火学习率衰减

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 垃圾分类.EfficientNet模型.数据增强(ImageD ...

  9. 计算机视觉中的数据预处理与模型训练技巧总结

    来源丨机器学习小王子,转载自丨极市平台 导读 针对图像分类任务提升准确率的方法主要有两条:一个是模型的修改,另一个是各种数据处理和训练的技巧.本文在精读论文的基础上,总结了图像分类任务的11个tric ...

最新文章

  1. 用AI实现C++、Java、Python代码互译,运行成功率最高达80.9%
  2. table表格细边框
  3. 洛谷P3392 涂国旗
  4. Python中yield简单用法
  5. 通用职责分配软件原则之6-多态原则
  6. 简单的企业网站后台的实现之流程
  7. java agent 开发_IDEA + maven 零基础构建 java agent 项目
  8. sql server 2014 判断一个列某个字段是否相同_Select * from user的千层套路——一个sql是如何执行的...
  9. 完整仿写鸿洋WanAndroid网站客户端
  10. python程序题求roc-auc是一种常用的模型评价指标_【Python机器学习 5-3】模型评价指标及模型选择...
  11. C语言实例第9期:提取字符串中全部数字
  12. mysql中tab键作用_MySQL小技巧-mysql命令 tab键数据表名、字段名补全功能
  13. 渗透测试-HTTP Strict Transport Security
  14. Swipe 移动端滑动插件使用详解
  15. 《夜深人静写算法》数论篇 - (22) 卢卡斯定理
  16. 提示:Run-time error ‘339’:Cmponent 'MSCOMCTL.OCX'or one of its dependent..........的时候该怎么办?
  17. eft and spin
  18. bootstrap 查询条件布局
  19. npm login e401问题(npm ERR! Unable to authenticate, need: BASIC realm=“Sonatype Nexus Repository Mana)
  20. WordPress自定义分页代码

热门文章

  1. 电力电子中的宽禁带器件
  2. 大数据 人工智能 数据库 数据仓库
  3. 深度学习入门:基于Python的理论与实现①
  4. 更新包与已安装应用的签名不一致
  5. DCDC直流非隔离负高电压输出电源模块12V24V转0-负50v/-150v/-200v/-250v/-300v/-400v/-500v
  6. 怎样解决PHP中文乱码问题
  7. R语言[]和[[]]操作的区别
  8. 推荐一个老外的spring HATEOAS的demo
  9. 人事局计算机应用技术学院,计算机应用技术学校怎么样
  10. 4.6 案例10 使用QList处理数据集