首页 > 编程知识 正文

trick 6warmup 一种学习率调优方法,深度学习是一种的方法

时间:2023-05-04 10:48:50 阅读:181889 作者:384

目录一、warmup定义二、为什么要用warmup2.1、感性分析三、常用warmup3.1、Constant warmup3.2、Linner Warmup3.3、Cosine Warmup3.4、warmup3.1

学习率是模型训练中最重要的超参之一,学习率的优化有多种方法,而warmup是其中的重要内容之一。

一. warmup定义

在模型训练的最初选择较小的学习率,训练一定时间后,例如在10epoches或10000steps下使用默认的学习率进行训练。

二、为什么使用warmup 2.1,合理的分析是由于模型的weights是随机初始化的,在训练开始时可以理解为对模型数据的“了解度”为0 (即没有任何先验知识)。 在第一个epoches中,每个batch的数据对模型来说是新的,模型基于输入的数据快速参与。 此时,大模型训练一段时间后(例如,10epoches或者10000steps ),该模型对数据具有一定的先验知识。 此时,使用大学习率模型将难以学习“偏差”,使用大学习率可以加速模型的收敛; 模型经过大学习率训练一定时间后,模型分布比较稳定,但在这种情况下,不应该从数据中学习新的特征,使用大学习率会破坏模型的稳定性,使用小学习率容易得到local optima。 2.2、感性分析刚开始的模型完全不了解数据。 此时,脚步太大,容易扯断dan。 此时,需要以较小的学习率摸着石头过河; 理解数据后,在接近可以使用大学习率向目标大步前进的目标时,使用小学习率进行探索。 这个时候,步伐太大了,很容易错过最近的一点。 三.常用魔兽3.1、常量魔兽的学习率由非常小的数值线性增加到默认值后是恒定的,其学习率系数如下图。

3.2、Linner Warmup的学习率由非常小的数值线性增加到预设值后线性减少。 其学习率系数如下图所示为:

3.3、Cosine Warmup学习首先从小数值到预设学习率线性增加,然后随cos函数的值衰减。 学习率系数如下图所示。

3.4、魔兽世界的改进:魔兽世界的不足之处在于,从小学习率到比较大的学习率,训练误差可能会突然增大。 因此18年Facebook为了解决这个问题提出了gradual warmup。 也就是说,从最初的小学习率开始,每个step一点一点地增大,直到达到最初设定的比较大的学习率为止,按照最初设定的学习率进行训练。

gradual warmup的安装模拟代码为以下:

“' ' Implements gradual warmup,if train_steps warmup_steps, thelearningratewillbe ` train _ steps/warmup _ steps * init _ lr `.args : warmup _ steps 3360 warmup步长阈值,即train 用默认值的学习率train_steps:训练的步骤数init_lr:预设学习率“' importnumpyasnpwarmup _ steps=2500 init _ lr=0.1 #模拟训练15000步mm 3360 if warmup _ stepsandtrain _ steps warmup _ steps : warmup _ percent _ done=train _ steps/warmup _ steps warmup gradual warmup _ lr learning _ rate=warmup _ learning _ rate else 3360 # learning _ rate=NP学习率为sin衰减learning _ rate=leate 学习率为指数衰减(伪指数衰减) if(train_steps1) 100==0: print (train _ steps 3360 %.3f-- warmup _ steps 3360 %.3f-)

#模型训练第一次采用warmup训练慢速训练lr _ scheduler=noneifepoch==1andwarmupistrue : #第一次训练(epoch=1) 热身训练warmup _ factor=1.0/1000 warmup _ iters=min (1000, warmup_factor(accumulate=1)慢慢训练,每个batch可理解为len(data_loader(-1 ) lr_scheduler=utils.Warmup )

def warmup _ lr _ scheduler (optimizer,warmup_iters, warmup_factor(3360deff ) x ) :“”基于step数,学习倍率系数constant warmup“”ifx=warmup _ iters 3360 #基于规定的warmup_# warmup_iters # )迭代中的倍率因子从warmup _ factor-1 return warmup _ factor * (1- alpha )到alphareturntorch.optim.lr _ schedup

参考链接1:原理.链接2:代码

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。