要实现带有热重启的余弦退火,你需要一种学习率调度策略,该策略将周期性重置与余弦形状的学习率衰减相结合。这种技术通过遵循在预定间隔内重置为更高值的余弦曲线来调整训练期间的学习率 (LR)。目标是通过周期性地将 LR“重置”为更高值,然后进行逐渐衰减,来帮助模型逃离局部最小值并更快收敛。PyTorch 和 TensorFlow 等库内置了类(例如 PyTorch 中的 CosineAnnealingWarmRestarts
)以简化实现,但你也可以创建自定义调度器。
例如,在 PyTorch 中,你可以使用 torch.optim.lr_scheduler.CosineAnnealingWarmRestarts
。使用诸如 T_0
(首次重启前的 epoch 数)和 T_mult
(每个周期后增加重启间隔的乘数)之类的参数对其进行初始化。学习率从初始值开始,按照余弦曲线下降直到重启点,然后重置并在 T_mult > 1
时以更长的周期重复。以下是一个代码片段
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
scheduler = torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(
optimizer, T_0=10, T_mult=2, eta_min=1e-6
)
for epoch in range(100):
# Training loop...
scheduler.step()
在此示例中,第一个周期运行 10 个 epoch(T_0
),下一个周期运行 20 个(T_0 * T_mult
),依此类推。eta_min
设置衰减期间的最小 LR。调度器会在每个 epoch 后自动更新 LR。
主要考虑因素是调整 T_0
和 T_mult
以匹配你的数据集和模型大小。较短的周期(小的 T_0
)适用于小型数据集或训练时间有限的情况,而较长的周期适用于大型模型。热重启机制有助于避免停滞——例如,如果验证损失停滞不前,LR 重置可以将优化器推向探索损失景观的新区域。然而,频繁的重启可能会导致训练不稳定,因此在初始实验期间要密切监控性能。这种方法在半监督学习或使用噪声数据进行训练等场景中特别有效,在这些场景中,周期性的 LR 峰值有助于纠正错位的梯度。