scheduler = CyclicCosineDecayLR(
optimizer,
init_decay_epochs=15, # 初始余弦衰减周期
min_decay_lr=2.5e-6, # 最小学习率
restart_interval=10, # 学习率重启周期
restart_lr=12.5e-5, # 重启后的初始学习率
warmup_epochs=10, # 学习率热身阶段
warmup_start_lr=2.5e-6 # 初始热身学习率
)
概述
创建一个 CyclicCosineDecayLR
调度器实例,用于调整优化器的学习率。该调度器结合了 学习率热身(Warmup)、余弦衰减 和 周期性重启 机制,旨在提升模型训练效果。
参数详解
-
optimizer
• 功能:需要调整学习率的优化器(如Adam
、SGD
)。• 示例:若使用
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
,调度器将动态调整此优化器的学习率。 -
init_decay_epochs=15
• 功能:初始余弦衰减周期的 epoch 数。• 细节:在热身阶段结束后,学习率从
restart_lr
开始,按余弦函数下降至min_decay_lr
,持续 15 个 epoch。 -
min_decay_lr=2.5e-6
• 功能:余弦衰减过程中允许的 最低学习率。• 示例:在衰减周期结束时,学习率降至
2.5e-6
,避免过小的学习率导致训练停滞。 -
restart_interval=10
• 功能:学习率重启周期的 epoch 数。• 细节:初始衰减阶段(15 epoch)后,每隔 10 个 epoch 将学习率重置为
restart_lr
,开始新的余弦衰减周期。 -
restart_lr=12.5e-5
• 功能:重启后的初始学习率。• 示例:每次重启时,学习率被重置为
12.5e-5
,作为新一轮余弦衰减的起点。 -
warmup_epochs=10
• 功能:学习率热身阶段的 epoch 数。• 细节:在训练开始时,学习率从
warmup_start_lr
逐步增加至restart_lr
,持续 10 个 epoch,避免初始学习率过大导致不稳定。 -
warmup_start_lr=2.5e-6
• 功能:热身阶段的起始学习率。• 示例:热身阶段从
2.5e-6
开始,逐步线性或非线性增长到restart_lr=12.5e-5
。
调度器工作流程
-
热身阶段(Epoch 0-9)
• 学习率从2.5e-6
逐步增加至12.5e-5
,持续 10 个 epoch。 -
初始余弦衰减阶段(Epoch 10-24)
• 学习率按余弦函数从12.5e-5
降至2.5e-6
,持续 15 个 epoch。 -
周期性重启阶段(Epoch 25 及以后)
• 每 10 个 epoch 重启一次:◦ 学习率重置为
12.5e-5
。◦ 按余弦函数在 10 个 epoch 内再次降至
2.5e-6
。• 此过程循环进行,直到训练结束。
设计动机
• 热身阶段:避免初始学习率过大,稳定训练初期。
• 余弦衰减:平滑降低学习率,帮助模型收敛到更优解。
• 周期性重启:通过周期性重置学习率,使模型跳出局部最优,探索更佳参数空间。
示意图
学习率变化趋势:
▲
12.5e-5 | 重启点 重启点 重启点
| ↘ ↘ ↘
| ↘ ↗ ↘ ↗ ↘
| ↘ ↗ ↘ ↗ ↘
2.5e-6 |______↘______↘____↘______↘____↘______▶ Epoch
10 25 35 45 55 65
|←15→|←10→|←10→|←10→|←10→|←10→|
衰减周期 重启周期 重启周期 重启周期
通过这种设计,模型能够在训练过程中平衡探索(高学习率)与收敛(低学习率),提升泛化性能。