趋近智
调整学习率是训练机器学习模型的重要步骤。虽然Adam、RMSprop和AdaGrad等自适应方法根据梯度历史动态调整学习率,常比固定学习率带来显著性能提升,但采用全局学习率调整策略能够为模型的稳定性和性能带来独特的优势。学习率调整策略会系统地调整训练过程中的学习率 ,通常随训练的进行而降低。
主要思想很直接:在训练初期,当参数可能远离最优值时,使用相对较大的学习率以便快速取得进展。随着训练收敛,参数接近良好解决方案时,降低学习率以允许更精细的调整,从而减少越过最小值的风险,并帮助更有效地处理复杂损失面。即使使用管理每个参数学习率的自适应优化器,将调整策略应用于全局基础学习率 也是一种常见且通常有效的方法。
接下来,我们考察几种流行的调整策略。
几种函数常用于定义学习率的变化方式,通常是回合数或迭代次数 的函数。
步长衰减: 这是最简单的策略之一。学习率在固定数量的回合(一个“步长”)内保持不变,然后按一定因子降低。例如,你可能每10个回合将学习率减半。
指数衰减: 提供比步长衰减更平滑的下降。学习率在每个回合(有时是每次迭代)后乘以一个小于1的衰减因子。
decay_factor 控制下降速度。decay_factor。逆时间衰减 (1/t 衰减): 学习率与迭代或回合数的倒数成比例下降。
余弦退火: 这种流行的策略在定义的周期 内,学习率遵循余弦曲线的形状下降。它从初始学习率 开始,平滑地退火到最小学习率 (通常为0)。
不同学习率调整策略在100个回合中的表现,初始学习率为0.1。步长衰减使学习率骤降,指数衰减平滑下降,余弦退火遵循周期性模式(这里展示的是每50个回合重启一次)。
周期性学习率 (CLR): CLR 不是单调递减学习率,而是在最小 () 和最大 () 边界之间周期性变化。常见形式包括三角形或基于余弦的周期。
预热: 尤其适用于训练非常深的网络(如Transformer)或使用大批量大小时,预热阶段常在训练的开始阶段使用。在预热期间,学习率从很低(例如,0或接近0)开始,并在指定数量的初始回合或迭代中逐渐增加到目标初始学习率 ( 或 )(例如,线性或二次方增加)。
学习率调整策略经常与Adam或RMSprop等自适应优化器结合使用。该策略通常控制每一步 的全局基础学习率 。然后,自适应优化器会使用这个 以及其内部状态(例如,梯度的一阶和二阶矩估计)来计算最终的参数更新。
对于Adam,更新规则是: 这里, 是在时间步 由当前生效策略确定的学习率。该策略提供全局的、依赖时间的调整,而Adam则基于梯度统计信息提供局部、参数特定的适应。这种组合在实践中通常非常有效。
# 示例(伪代码)
initial_lr = 0.001
optimizer = Adam(parameters, lr=initial_lr) # Adam使用初始学习率
# 示例:带预热的余弦退火
num_epochs = 100
warmup_epochs = 10
scheduler = CosineAnnealingWithWarmup(optimizer,
warmup_epochs=warmup_epochs,
total_epochs=num_epochs,
min_lr=1e-6)
for epoch in range(num_epochs):
# 训练循环...
# train_one_epoch(model, dataloader, optimizer)
# 在每个回合结束时更新学习率
scheduler.step()
# 可选:记录当前学习率
# current_lr = scheduler.get_last_lr()[0]
# print(f"Epoch {epoch+1}, LR: {current_lr}")
# 验证循环...
# validate(model, val_dataloader)
该结构展示了调整器如何集成到训练循环中,根据回合数更新优化器的学习率。
了解并恰当应用学习率调整策略,能为你的优化方法增添一项有效技能。虽然自适应方法处理大部分参数的学习率调整,但调整策略对学习过程提供了必要的全局控制,有助于加快收敛,提高稳定性,并可能改善最终模型性能。实验和仔细监控在为你的特定机器学习任务寻找最适合的调整策略时,仍是重要部分。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造