MultiStepLR
是在 StepLR 基礎上更「可客製化」的一種階梯式衰減
在你指定的幾個 epoch(里程碑)把 lr 變小
核心直覺:MultiStepLR 在做什麼?
-
StepLR:每隔固定
step_sizeepoch 扣一次學習率 -
MultiStepLR:你「自己指定幾個 epoch 點」,在那些點扣學習率
所以你會給一個列表 milestones=[e1, e2, e3, ...]:
-
當 epoch 到
e1時 → lr *= gamma -
到
e2時 → 再乘一次 gamma -
以此類推
lr 曲線還是「樓梯狀」,但樓梯在哪幾階是你自己決定的,而不是固定間隔。
PyTorch CNN 寫法(感覺一下就好)
optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
scheduler = torch.optim.lr_scheduler.MultiStepLR(
optimizer,
milestones=[30, 60, 90], # 在這幾個 epoch 把 lr 衰減
gamma=0.1 # 每次乘 0.1
)
for epoch in range(num_epochs):
train_one_epoch(...)
scheduler.step()
意思就是:
-
epoch 0–29:lr = 0.1
-
epoch 30–59:lr = 0.01
-
epoch 60–89:lr = 0.001
-
epoch 90 之後:0.0001
為什麼用 MultiStepLR?
-
比 StepLR 更靈活:你可以根據實驗經驗選在「模型快收斂完一段」時再降 lr
-
很多論文或實作會寫:
milestones=[30, 60, 80]這種
相關筆記
- 學習率調度器:調度器總覽
- StepLR - 階梯式衰減:固定間隔衰減的版本