在大模型训练中,学习率预热(Learning Rate Warmup)是一个关键的优化策略,尤其在大规模模型微调时能显著提升训练稳定性和收敛速度。本文将对比不同预热策略的应用方式,并提供可复现的实践步骤。
什么是学习率预热?
学习率预热是指在训练初期使用较小的学习率,然后逐渐增加到设定的最大值。这样可以避免模型在初始阶段因学习率过大而震荡,从而提高训练稳定性。
常见预热策略对比
线性预热(Linear Warmup)
这是最常用的预热方式,在前N个step中线性增加学习率:
warmup_steps = 1000
max_lr = 5e-5
def get_linear_warmup_lr(current_step):
if current_step < warmup_steps:
return max_lr * (current_step / warmup_steps)
else:
return max_lr
余弦预热(Cosine Warmup)
更平滑的预热曲线:
import math
def get_cosine_warmup_lr(current_step):
if current_step < warmup_steps:
return max_lr * (1 + math.cos(math.pi * current_step / warmup_steps)) / 2
else:
return max_lr
在HuggingFace Transformers中的应用
from transformers import get_linear_schedule_with_warmup
optimizer = AdamW(model.parameters(), lr=5e-5)
scheduler = get_linear_schedule_with_warmup(
optimizer,
num_warmup_steps=1000,
num_training_steps=num_train_steps
)
实践建议
- 预热步数通常设置为训练总步数的1-5%
- 预热学习率一般设为模型最终学习率的10-50%
- 在大模型微调中,建议使用余弦预热以获得更平滑的收敛
通过合理设置学习率预热策略,可以有效提升大模型训练效果和稳定性。建议根据具体任务调整参数。

讨论