当前位置:   article > 正文

定义一个线性衰减且结合预热策略的学习率调度器_get_linear_schedule_with_warmup

get_linear_schedule_with_warmup

模型训练时定义一个线性衰减且结合预热策略的学习率调度器,来动态调整学习率。

from transformers import get_linear_schedule_with_warmup

scheduler = get_linear_schedule_with_warmup(
  optimizer,
  num_warmup_steps=0,
  num_training_steps=total_steps
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这是使用Transformers 库中的 get_linear_schedule_with_warmup 函数来创建一个学习率调度器(scheduler),用于在训练过程中动态地调整优化器的学习率。这个调度器通常与学习率衰减和预热(warmup)策略一起使用。学习率调度可以有不同的策略,如指数衰减、余弦退火、线性衰减等。

问题1:为什么要动态调整(衰减)优化器的学习率

一个较大的学习率有助于模型更快地学习训练数据的特征(*穿插一个问题,为什么较大的学习率有助于模型更快地学习训练数据的特征?*因为较大的学习率,使得参数更新的幅度更大,从而使模型更快地朝着损失函数的最小值方向前进,损失函数更快地变小,不就是更快学习到特征么,清楚了叭~)。然而,随着训练的进行,模型逐渐接近收敛点,到这时,较大的学习率可能导致参数跳过最优解附近的区域,可能导致参数在最优解附近出现震荡。通过学习率衰减,可以在训练后期使学习率逐渐减小,使参数更稳定地收敛到最优解。
且较大的学习率可能导致模型过于拟合训练数据,而衰减学习率可以使模型在训练后期更加关注数据的全局特征,提高泛化性能。

问题2:预热策略有什么作用

训练刚开始时,模型的参数通常是随机初始化的,此时模型可能处于一个相对不稳定的状态。如果在这个阶段直接使用较大的学习率,可能导致参数在不稳定状态下发生剧烈变化,从而使训练过程变得不稳定。所以通过采用预测策略,在定义的预热步数里逐步增加学习率,模型的参数更新幅度逐渐增大,从而使模型逐渐适应训练数据的特征(*穿插一个问题,为什么要逐渐增大学习率?*为什么预测开始的学习率太小了,如果一直是这个,很难学习到合适的曲线方程,且后续预热步数结束,采用学习率衰减策略,那就更难充分学习到特征,更难拟合到最佳曲线,也不能使模型收敛),逐渐从随机初始化的状态过渡到一个相对稳定的状态。

问题3:详解这个函数的参数

num_warmup_steps:
这个参数表示预热步数,即模型在训练刚开始时会在这些步数内逐渐增加学习率。预热是为了在训练初期使模型更稳定地收敛。

num_training_steps:
这个参数表示总的训练步数,学习率会在这些步数内逐渐减小。这个参数决定了学习率下降的总幅度。

如果 num_warmup_steps=10 且 num_training_steps=100,那么在训练的前10步中,学习率将逐步增大。从第11步开始,学习率会逐步减小,直到训练结束的第100步。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/412318
推荐阅读
相关标签
  

闽ICP备14008679号