CosineAnnealingLR - 餘弦退火
原理: 學習率按餘弦曲線平滑衰減
像餘弦曲線一樣先慢慢降,再升回來一點,常配合長訓練
-
從初始 lr 開始,慢慢降到 eta_min(通常接近 0)
-
降的形狀是「半個餘弦」,一開始降得快,後面越來越慢
-
常用來:前期大步探索,後期很細地微調參數
沒有像 StepLR 那樣「突然掉階梯」,是整個訓練過程中平滑彎下來
optimizer = optim.AdamW(model.parameters(), lr=1e-3)
scheduler = optim.lr_scheduler.CosineAnnealingLR(
optimizer,
T_max=100, # 週期長度(總 epoch 數)
eta_min=1e-6 # 最小學習率
)
學習率變化公式:
lr = eta_min + (lr_max - eta_min) × (1 + cos(π × epoch / T_max)) / 2
可視化:
Learning Rate
│
1e-3│╲
│ ╲
│ ╲
│ ╲___
│ ╲___
│ ╲___
1e-6│ ╲______
│
└─────────────────────────→
0 25 50 75 100 Epoch
優點:
-
平滑衰減
-
避免學習率突變
-
適合從零訓練
-
幾乎不用指定很多「里程碑」,只設定
T_max就好 -
比 StepLR / MultiStepLR 更平滑,有時收斂更穩定
適用: 從零訓練、訓練時間較長的任務
相關筆記
- 學習率調度器:調度器總覽
- 學習率調度器 整理表:比較表