1.什么是warm up

  Warmup是在ResNet论文中提到的一种学习率预热的方法,它在训练开始的时候先选择使用一个较小的学习率,训练了一些epoches或者steps(比如4个epoches,10000steps),再修改为预先设置的学习来进行训练。

2.为什么使用warm up

  由于刚开始训练时,模型的权重(weights)是随机初始化的,此时若选择一个较大的学习率,可能带来模型的不稳定(振荡),选择Warmup预热学习率的方式,可以使得开始训练的几个epoches或者一些steps内学习率较小,在预热的小学习率下,模型可以慢慢趋于稳定,等模型相对稳定后再选择预先设置的学习率进行训练,使得模型收敛速度变得更快,模型效果更佳。
例:Resnet论文中使用一个110层的ResNet在cifar10上训练时,先用0.01的学习率训练直到训练误差低于80%(大概训练了400个steps),然后使用0.1的学习率进行训练。

3.warm up的改进

  2所述所述的Warmup是constant warmup,它的不足之处在于从一个很小的学习率一下变为比较大的学习率可能会导致训练误差突然增大。于是18年Facebook提出了gradual warmup来解决这个问题,即从最初的小学习率开始,每个step增大一点点,直到达到最初设置的比较大的学习率时,采用最初设置的学习率进行训练。
1.gradual warmup的实现模拟代码如下:

"""
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))

【学习率预热】Warm up相关推荐

  1. 【介绍+代码实现】使用GradualWarmupScheduler进行学习率预热

    找了一晚上warmup资料,有用的很少,基本都是互相转载,要不就是讲的很空泛,代码没有可使用的价值.但是最后我还是解决了,于是写一个warmup教程造福大家,这里抛砖引玉了. 一.介绍GradualW ...

  2. 学习率预热warmup

    学习率衰减 学习率:权重更新的控制因子 训练神经网络的常规策略是初始时使用较大的学习率(好处是能使网络收敛迅速),随着训练的进行,学习率衰减: warmup是什么? 在训练初期,loss很大,因此计算 ...

  3. 预热学习率的作用warmup

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

  4. Warmup预热学习率

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

  5. YOLOv5-优化器和学习率调整策略

    优化器和学习率调整策略 pytorch-优化器和学习率调整 这个链接关于优化器和学习率的一些基础讲得很细,还有相关实现代码 优化器 前向传播的过程,会得到模型输出与真实标签的差,我们称之为损失, 有了 ...

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

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

  7. 梯度下降法、学习率、优化算法笔记

    梯度下降法.学习率.优化算法 一. 梯度下降法 梯度下降法一种求解最优化的算法.其中心思想是沿着目标函数梯度的方向更新参数值以希望达到目标函数最小 我们可以想象我们深处高山上的某一处位置,而梯度下降法 ...

  8. paddle 12种学习率调度器

    目录 文本框检测的Cosine学习率调度器: 13种调度器 文本框检测的Cosine学习率调度器: 学习率 0.001 效果好像比较好,推荐使用 configs/det/ch_ppocr_v2.0/c ...

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

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

最新文章

  1. 谷歌软件工程师薪资百万,大厂薪资有多高?
  2. 论文笔记:Distilling the Knowledge
  3. 咏南中间件集群解决方案
  4. [Abp vNext 源码分析] - 4. 工作单元
  5. vfp程序改错 计算机和英语,vfp程序改错教案.doc
  6. 双指放大_便携超小手机显微镜1000倍放大!让你玩转微观世界,惊艳朋友圈
  7. HSRP与VRRP以及GLBP区别
  8. ps 命令的详细功能解析
  9. pdf转换成ppt转换器免费版
  10. 使用HttpClient4来构建Spring RestTemplate
  11. 方法重载overload
  12. C++ struct构造函数
  13. 用Python简单代码实现炫酷动态条形图
  14. 基于Python实现的合同管理系统设计
  15. 深度学习进阶课程16---用ReL解决Vanishing Gradient问题
  16. 使用 Jenkins 创建微服务应用的持续集成
  17. 论文复现:<Beyond Static Features for Temporally Consistent 3D Human Pose and Shape from a Video>
  18. CUDA C 编程指导(二):CUDA编程模型详解
  19. 数据库设计(二)——数据库设计原则
  20. 婚姻介绍所怎么做身份实名认证?

热门文章

  1. 信息审计服务器功能,审计服务器是什么意思?如何使用Audit和目录审计
  2. netlink的内核实现原理
  3. linux中request_region()函数的分析
  4. 高性能HTTP加速器Varnish(管理维护篇)
  5. Java学习日报 — 问题记录 — 2021/12/14
  6. 【LeetCode】剑指 Offer 18. 删除链表的节点
  7. 力扣441.排列硬币
  8. SparkStreaming项目(实时统计每个品类被点击的次数)
  9. Mysql的七种表类型
  10. [转] ASP.NET使用AJAX联动