StepLR - 階梯式衰減
原理: 每隔固定 epoch 將學習率乘以衰減係數
optimizer = optim.AdamW(model.parameters(), lr=1e-3)
scheduler = optim.lr_scheduler.StepLR(
optimizer,
step_size=30, # 每 30 個 epoch 衰減一次
gamma=0.1 # 衰減係數(lr = lr × 0.1)
)
# 使用方式
for epoch in range(100):
train(...)
scheduler.step() # 每個 epoch 結束後調用
-
設定:
step_size = S,gamma = γ -
意思:每過
S個 epoch,就把現在的 lr 變成原來的γ倍 -
效果:學習率曲線長得像樓梯:一段時間保持不變 → 突然掉一級 → 再保持 → 再掉
學習率變化:
Epoch Learning Rate
0-29 1e-3
30-59 1e-4 (×0.1)
60-89 1e-5 (×0.1)
90-99 1e-6 (×0.1)
可視化:
Learning Rate
│
1e-3│████████████████████████████
│
1e-4│ ████████████████████████████
│
1e-5│ ████████████
│
└─────────────────────────────────────────────────────────────→
0 30 60 90 Epoch
什麼時候適合用 StepLR?
-
很多 分類 CNN(像 ResNet, CIFAR-10, ImageNet) 會用:
- 例如:epoch 30、60、90 各衰減一次
-
優點:簡單、好理解、效果常不錯
-
缺點:lr 是「突然跳變」,不是平滑下降
-
適用: 訓練 epoch 數固定的情況
相關筆記
- 學習率調度器:調度器總覽
- MultiStepLR:可自訂多個衰減點的版本