ReduceLROnPlateau - 自適應衰減
原理: 當指標停止改善時自動降低學習率
當「模型表現卡住一陣子沒進步」時,才自動把學習率變小
核心概念(只抓這個)
-
你指定要「監控的指標」,例如:
-
驗證 loss(希望越小越好 → mode=‘min’)
-
驗證 accuracy(希望越大越好 → mode=‘max’)
-
-
如果這個指標在好幾個 epoch 內都沒變好(叫做 plateau 平台期):
→ 就把 lr 乘上一個 factor(例如 0.1),讓 lr 變小,幫助模型再往更細的方向收斂。
直覺就是:
「訓練卡住不進步 → 自動幫你調小 lr 再試試看」。
optimizer = optim.AdamW(model.parameters(), lr=1e-3)
scheduler = optim.lr_scheduler.ReduceLROnPlateau(
optimizer,
mode='max', # 'max' 監控準確率, 'min' 監控 loss
factor=0.5, # 衰減係數(lr = lr × 0.5)
patience=3, # 容忍 3 個 epoch 沒進步
verbose=True, # 顯示學習率變化
min_lr=1e-7 # 最小學習率
)
# 使用方式
for epoch in range(100):
train(...)
val_acc = validate(...)
scheduler.step(val_acc) # 傳入監控指標
幾個關鍵參數直觀理解:
-
mode:‘min’(指標越小越好)或 ‘max’(越大越好)
-
factor:每次衰減倍率,通常 0.1 或 0.2
-
patience:容忍多少個「沒進步的 epoch」才動手降 lr
-
min_lr:lr 不會小於這個值
-
cooldown:剛降完 lr,要等多少 epoch 才開始再次監控,避免太頻繁降
運作示例:
Epoch Val Acc Learning Rate 說明
1 75.0% 1e-3 初始
2 78.0% 1e-3 進步
3 80.0% 1e-3 進步
4 80.5% 1e-3 進步
5 80.3% 1e-3 沒進步 (patience 1/3)
6 80.4% 1e-3 沒進步 (patience 2/3)
7 80.2% 1e-3 沒進步 (patience 3/3)
8 80.3% 5e-4 ⬇ 觸發衰減!
9 81.0% 5e-4 進步(重置 patience)
優點:
-
自動調整
-
不需預先設定
-
適應不同訓練速度
缺點:
- 可能過早衰減
適用: 不確定訓練會跑多久、微調任務
相關筆記
- 學習率調度器:調度器總覽
- 學習率調度器 整理表:比較表