Warmup预热学习率「建议收藏」

Warmup预热学习率「建议收藏」学习率是神经网络训练中最重要的超参数之一,针对学习率的优化方式很多,Warmup是其中的一种(一)什么是Warmup?Warmup是在ResNet论文中提到的一种学习率预热的方法,它在训练开始的时候先选择使用一个较小的学习率,训练了一些epoches或者steps(比如4个epoches,10000steps),再修改为预先设置的学习率来进行训练.(二)为什么使用Warmup?由于刚开始…

大家好,又见面了,我是你们的朋友全栈君。

学习率是神经网络训练中最重要的超参数之一,针对学习率的优化方式很多,Warmup是其中的一种
(一)、什么是Warmup?
Warmup是在ResNet论文中提到的一种学习率预热的方法,它在训练开始的时候先选择使用一个较小的学习率,训练了一些epoches或者steps(比如4个epoches,10000steps),再修改为预先设置的学习来进行训练。

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

E x a m p l e Example Example:Resnet论文中使用一个110层的ResNet在cifar10上训练时,先用0.01的学习率训练直到训练误差低于80%(大概训练了400个steps),然后使用0.1的学习率进行训练。

(三)、Warmup的改进
(二)所述的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_steps
        warmup_learning_rate = init_lr * warmup_percent_done  #gradual warmup_lr
        learning_rate = warmup_learning_rate
    else:
        #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))

2.上述代码实现的Warmup预热学习率以及学习率预热完成后衰减(sin or exp decay)的曲线图如下:
sin decay and exp decay

(四)总结
使用Warmup预热学习率的方式,即先用最初的小学习率训练,然后每个step增大一点点,直到达到最初设置的比较大的学习率时(注:此时预热学习率完成),采用最初设置的学习率进行训练(注:预热学习率完成后的训练过程,学习率是衰减的),有助于使模型收敛速度变快,效果更佳。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132203.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【redis】一致性哈希算法

    【redis】一致性哈希算法前言这周复习redis,被集群和分布式搞得头大,也接触到一致性哈希算法,因此博主进行了一定得学习,故,写下这篇文章。一、普通哈希算法普通得哈希算法是对服务器得数量进行一定得取模预算得出,常见得公式如下:index=hash(key)%NN就是服务器得数量。我们可以想象到,如果服务器数量改变,那么index也会进行改变。例如:一台服务器宕机,服务里器的数据暂时丢失(系统会进行一定的备份,用户发送的请求经过哈希运算后,因为N的改变,会访问其他的服务器,但是该台服务器还没有拷贝过来宕机的数

    2022年7月27日
    9
  • 【Java面试】第一章:P5级面试

    HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们…

    2022年4月7日
    41
  • win10eplan激活码破解步骤【中文破解版】

    (win10eplan激活码破解步骤)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月22日
    206
  • 什么是TIME_WAIT

    什么是TIME_WAITTIME_WAIT是怎样产生的?因为TCP连接是双向的,所以在关闭连接的时候,两个方向各自都需要关闭。先发FIN包的一方执行的是主动关闭;后发FIN包的一方执行的是被动关闭。主动关闭的一方会进入TIME_WAIT状态,并且在此状态停留两倍的MSL时长。什么是MSL?MSL指的是报文段的最大生存时间,如果报文段在网络活动了MSL时间,还没有被接收,那么会被丢弃。关于MSL的大小

    2022年6月4日
    40
  • Java面试题集合_聚合的概念

    Java面试题集合_聚合的概念很多时候面试中恨不得你会造火箭,工作中也就让你拧拧螺丝。为了不在面试中吃亏,面试前突击多看看面试题还是狠有必要的。这是一份常见Java面试题分类汇总,希望对大家有用!初级面试题Java面试题-基础篇一Java面试题-基础篇二Java面试题-集合框架篇三Java面试题-基础篇四Java面试题-基础篇五Java面试题-javaweb篇六Java面试题-jav…

    2022年10月12日
    2
  • 给力者基于51单片机的C语言教程,给力者单片机开发教程

    给力者基于51单片机的C语言教程,给力者单片机开发教程资源介绍给力者单片机开发教程给力者51单片机视频教程01:51单片机学前的准备工作1.mp4给力者51单片机视频教程01:51单片机学前的准备工作2.mp4给力者51单片机视频教程02:51单片机的C语言程序框架.mp4给力者51单片机视频教程03:51单片机的数字量输出1.mp4给力者51单片机视频教程03:51单片机的数字量输出2.mp4给力者51单片机视频教程04:51单片机的查表操作1.m…

    2022年6月7日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号