赞
踩
模型训练时定义一个线性衰减且结合预热策略的学习率调度器,来动态调整学习率。
from transformers import get_linear_schedule_with_warmup
scheduler = get_linear_schedule_with_warmup(
optimizer,
num_warmup_steps=0,
num_training_steps=total_steps
)
这是使用Transformers 库中的 get_linear_schedule_with_warmup 函数来创建一个学习率调度器(scheduler),用于在训练过程中动态地调整优化器的学习率。这个调度器通常与学习率衰减和预热(warmup)策略一起使用。学习率调度可以有不同的策略,如指数衰减、余弦退火、线性衰减等。
一个较大的学习率有助于模型更快地学习训练数据的特征(*穿插一个问题,为什么较大的学习率有助于模型更快地学习训练数据的特征?*因为较大的学习率,使得参数更新的幅度更大,从而使模型更快地朝着损失函数的最小值方向前进,损失函数更快地变小,不就是更快学习到特征么,清楚了叭~)。然而,随着训练的进行,模型逐渐接近收敛点,到这时,较大的学习率可能导致参数跳过最优解附近的区域,可能导致参数在最优解附近出现震荡。通过学习率衰减,可以在训练后期使学习率逐渐减小,使参数更稳定地收敛到最优解。
且较大的学习率可能导致模型过于拟合训练数据,而衰减学习率可以使模型在训练后期更加关注数据的全局特征,提高泛化性能。
训练刚开始时,模型的参数通常是随机初始化的,此时模型可能处于一个相对不稳定的状态。如果在这个阶段直接使用较大的学习率,可能导致参数在不稳定状态下发生剧烈变化,从而使训练过程变得不稳定。所以通过采用预测策略,在定义的预热步数里逐步增加学习率,模型的参数更新幅度逐渐增大,从而使模型逐渐适应训练数据的特征(*穿插一个问题,为什么要逐渐增大学习率?*为什么预测开始的学习率太小了,如果一直是这个,很难学习到合适的曲线方程,且后续预热步数结束,采用学习率衰减策略,那就更难充分学习到特征,更难拟合到最佳曲线,也不能使模型收敛),逐渐从随机初始化的状态过渡到一个相对稳定的状态。
num_warmup_steps:
这个参数表示预热步数,即模型在训练刚开始时会在这些步数内逐渐增加学习率。预热是为了在训练初期使模型更稳定地收敛。
num_training_steps:
这个参数表示总的训练步数,学习率会在这些步数内逐渐减小。这个参数决定了学习率下降的总幅度。
如果 num_warmup_steps=10 且 num_training_steps=100,那么在训练的前10步中,学习率将逐步增大。从第11步开始,学习率会逐步减小,直到训练结束的第100步。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。