趋近智
最直接且常用的训练中调整学习率的方法之一是步进衰减策略。其核心思路是,从较高的学习率开始,然后以预设的时间间隔(例如,周期或步数)将其按特定因子减少。这种做法使得模型在训练初期,当参数可能离最优值较远时,可以取得较大进展;而在接近最小值时,则采取更小、更谨慎的步长,这有助于稳定收敛并精调权重。
设想您在广阔的开阔地带开始搜寻。起初,您可以迈开大步快速覆盖区域。当您接近目标所在的位置时,您会缩短步长,在该局部区域更仔细地搜寻。步进衰减模仿了这种直觉。
此策略基于几个参数运行:
在训练过程中调整学习率的一种直接且常用的方法是步长衰减 (Step Decay) 策略。其主要思想是初始时使用相对较高的学习率,然后在预设的间隔(如周期或步数)后将其按一定因子减小。这种方法使得模型在训练早期能够取得显著进展,此时参数可能远离最优值;随后,当模型接近最小值时,它会采取更小的、更精细的步长,这有助于稳定收敛并对权重进行微调。
αt=α0×γk=α0×γ⌊t/S⌋例如,如果 α0=0.01、γ=0.1、S=10 个周期:
学习率在步与步之间保持不变,当达到周期阈值时会即刻下降。
以下图表显示了一个典型的步进衰减策略,共50个周期,初始学习率为0.01,衰减因子为0.5,步长为15个周期。
显示步进衰减的学习率策略,其中 α0=0.01、γ=0.5、S=15。学习率每15个周期减半。请注意y轴是对数刻度。
步进衰减的效果取决于为 α0、γ 和 S 选择合适的值。这些超参数通常需要调整:
步进衰减虽然简单,但需要细致地手动调整策略(何时以及降低多少)。如果下降发生过早或过晚,或者因子过大或过小,都可能阻碍收敛。
大多数深度学习框架都提供了实现步进衰减的便捷方法。在PyTorch中,您可以使用 torch.optim.lr_scheduler.StepLR:
import torch
import torch.optim as optim
from torch.optim.lr_scheduler import StepLR
from torch.nn import Linear # 示例层
# 假设 'model' 是您定义的神经网络
model = Linear(10, 2) # 一个简单的模型部分示例
# 选择一个优化器(例如,Adam 或 SGD)
optimizer = optim.Adam(model.parameters(), lr=0.01) # 初始学习率 = 0.01
# 定义 StepLR 调度器
# 每10个周期将学习率降低0.1倍
scheduler = StepLR(optimizer, step_size=10, gamma=0.1)
# --- 在您的训练循环内部 ---
num_epochs = 30
for epoch in range(num_epochs):
# model.train()
# ... 训练前向传播,计算损失,反向传播 ...
optimizer.step() # 根据当前学习率更新权重
# 更新学习率
scheduler.step()
# 可选:打印当前学习率
# current_lr = scheduler.get_last_lr()[0]
# print(f"周期 {epoch+1}, 学习率: {current_lr}")
# ... 验证循环 ...
# 示例输出 (学习率变化):
# 周期 1, 学习率: 0.01
# ...
# 周期 10, 学习率: 0.01 (学习率在第10个周期步长*之后*下降)
# 周期 11, 学习率: 0.001
# ...
# 周期 20, 学习率: 0.001 (学习率在第20个周期步长*之后*下降)
# 周期 21, 学习率: 0.0001
# ...
在这个PyTorch示例中,StepLR 接收优化器、step_size(以周期为单位)和 gamma 因子作为参数。scheduler.step() 调用通常在每个周期执行一次,在 optimizer.step() 之后,以便根据策略更新下一个周期的学习率。
步进衰减提供了一种简单、易于理解的学习率调整方式。尽管存在更复杂的策略,但其有效性和易于实现使其成为深度学习实践者工具集中的一种有价值的工具。
这部分内容有帮助吗?
torch.optim.lr_scheduler.StepLR, PyTorch, 2024 PyTorch Documentation (PyTorch Foundation) - PyTorch中步长衰减学习率调度器的官方文档,对实际应用至关重要。© 2026 ApX Machine Learning用心打造