余弦退火策略
一、学习率调度的重要性
固定学习率的训练存在明显缺陷:
初始学习率过大会导致模型震荡,难以收敛;
后期学习率过小会导致收敛速度缓慢,甚至陷入局部最优。
学习率调度的核心思想是:在训练过程中动态调整学习率——前期用较大的学习率快速探索参数空间,后期用较小的学习率精细优化。
二、余弦退火策略的实现
import torch.optim as optim
from torch.optim.lr_scheduler import CosineAnnealingLR# 定义优化器
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 定义余弦退火调度器(T_max为周期步数,eta_min为最小学习率)
scheduler = CosineAnnealingLR(optimizer, T_max=10000, eta_min=0)# 训练循环中更新
for epoch in range(epochs):for inputs, labels in dataloader:optimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()scheduler.step() # 每步更新学习率
优势:
- 平滑过渡:相比于阶梯式衰减,余弦退火的学习率变化更连续,减少训练波动。
- 逃离局部最优:缓慢的衰减过程给模型更多机会探索参数空间,可以找到更优解。
- 通用性强:适用于各种神经网络和任务。
