学习率计划 模拟器 返回
机器学习

学习率计划 模拟器

神经网络训练中"学习率计划"的可视化工具。支持步长衰减·指数衰减·余弦退火三种方式切换,改变初始学习率和衰减参数,实时查看学习率如何随epoch变化,损失谷下降的球的步幅如何改变。

参数设置
计划方式
三种经典的学习率衰减方式
初始学习率 η₀
训练开始时的学习率(步幅的基准)
总epoch数 T
ep
整个训练的epoch数
衰减参数
步长:衰减系数γ/指数:衰减常数k/余弦:曲线形状参数
当前epoch t
ep
显示此时刻的学习率和进度
计算结果
当前学习率 η(t)
初始学习率 η₀
最终学习率 η(T)
平均学习率
当前/初始 比值
计划种类
损失谷下降的球 — 步幅与学习率成正比

当epoch从0→T推进时,学习率逐渐降低,球的步幅也随之缩小。前期大跨步弹跳,后期在谷底小心谨慎地收敛。上部曲线显示学习率推移。

学习率 vs epoch
三种方式对比(步长·指数·余弦)
理论·主要公式

$$\text{步长: }\eta=\eta_0\,\gamma^{\lfloor t/s\rfloor}\qquad \text{指数: }\eta=\eta_0\,e^{-kt}$$

步长衰减:每s个epoch将学习率乘以γ,形成阶梯状。指数衰减:用衰减系数k连续平滑地减小学习率。t:当前epoch,η₀:初始学习率。

$$\text{余弦: }\eta=\eta_{min}+\tfrac{1}{2}(\eta_0-\eta_{min})\!\left(1+\cos\frac{\pi t}{T}\right)$$

余弦退火:按半周期余弦曲线从η₀平滑下降到最小值,后期逐渐接近最小值。T:总epoch数。所有计划都体现了"前期速度"与"后期精度"的平衡。

学习率计划是什么

🙋
深度学习中"学习率"是控制每次更新权重幅度的参数吧。这个"计划"是干什么用的呢?
🎓
好问题。学习率决定了"下降损失曲线坡面的步幅"。问题在于,最优的步幅在训练初期和末期完全不同。初期损失很大,希望大步快速下降;但接近谷底时,大步就会跳过最小值,在谷底来回振荡无法收敛。所以要随训练进行逐步缩小学习率——这就是计划的作用。
🙋
我看到左上方的画布里,球在谷里下降,最初弹跳幅度很大,但后来就只在谷底小幅摇晃了。
🎓
正是如此!球每一步的大小都与当前的学习率成正比。前期大学习率让它大步冲下坡,接近谷底后小学习率让它谨慎地一点点接近最低点。如果学习率始终保持很大,球就会在谷底永远蹦跶;相反,如果始终很小,还没到谷底训练就结束了。
🙋
衰减方式有三种呢。步长衰减的曲线是锯齿形的阶梯,指数和余弦是光滑的。该怎么选择使用呢?
🎓
简单来说,步长衰减是"每30个epoch乘以0.1"这样按固定时间点一下子降低,是历史悠久的标准做法,容易理解和实现。但会产生明显的台阶。指数衰减没有跳跃,连续平滑地下降。余弦退火按余弦半周期曲线下降,后期缓缓接近最小值,曲线很优美,现在的图像识别模型几乎标配。看右侧的"三种方式对比"图,能直观感受三者的差异。
🙋
衰减参数越大,学习率下降得越快呢。这样大的越好吗?
🎓
不对,过大会出问题。衰减参数大了,学习率会迅速变得极小,训练后期的步幅就会接近零,该下降的地方下不去了。太小又会导致后期学习率还很大,在谷底振荡无法收敛。实践中通常调整参数使最终学习率是初值的1~10%左右。看下统计卡片里的"最终学习率",可以一边调参一边看着找到合适的衰减量。
🙋
一开始就用最优学习率,就不用计划了吧?
🎓
要是这么简单就好了。问题是"初期最优值"和"后期最优值"根本无法用一个数值同时满足。单一固定值必然要牺牲其中一个。计划的妙处就是随时间切换最优值,化解这个矛盾。所以现代深度学习训练几乎都离不开某种计划。

常见问题

如果从始至终使用固定学习率,初期的最优值在后期会太大,导致损失在最小值附近振荡无法收敛;相反,后期最优的较小值会使初期训练进度缓慢。学习率计划通过前期使用较大学习率快速降低损失,随训练进行逐步缩小学习率以精确收敛,既保证了收敛速度也保证了最终精度。
步长衰减每隔固定epoch将学习率乘以γ(如每30个epoch乘以0.1),产生阶梯式下降。实现简单,但有明显的跳跃。指数衰减通过 η=η₀·e^(−kt) 平滑下降,无突变。余弦退火按半周期余弦曲线从初值下降到最小值,后期逐渐接近最小值速度较慢,近年在图像识别中广泛使用。
初始学习率取决于模型·优化器·batch大小,过大导致损失发散(NaN),过小则训练进度缓慢。实践中用学习率范围测试(LR range test),逐步增大学习率观察损失下降最快的区域,选择略小于该区域的值。SGD通常0.1左右,Adam通常0.001左右作为起点,再用计划逐步衰减。
热启动是训练初期几个epoch内将学习率从0线性上升到目标值,防止初期梯度不稳定导致发散。大batch和Transformer训练中几乎必需。热重启(SGDR)是多次重复余弦退火,每个周期开始时将学习率重置到较大值,便于逃离局部最优,也能通过平均多个解获得集成效果。

实际应用

图像识别模型训练:ResNet和EfficientNet这类卷积神经网络在ImageNet上训练时,学习率计划是影响精度的最关键超参数之一。传统做法是步长衰减(第30、60、90个epoch时乘以0.1),但现在余弦退火更流行,同样模型和epoch数下往往能获得更好的精度。

大规模语言模型预训练:Transformer语言模型预训练时,带热启动的计划几乎必不可少。前数千步线性上升学习率从0到目标值,之后用逆平方根衰减或余弦衰减缓缓下降。不加热启动的话,初期大梯度会导致损失发散,根本无法训练。

迁移学习和微调:用预训练模型适应新任务时,初始学习率要设得比预训练时小很多,并用短周期快速衰减。学习率过大会破坏已学习的优质权重,造成"灾难性遗忘"。有时还会对不同层用不同学习率。

超参数搜索的初步评估:像本工具一样,提前可视化学习率推移,能在实际耗时GPU前快速检查"最终学习率是否过小"、"衰减是否太急"。这是跑完整训练前的重要检查步骤,能和实际损失曲线对照验证。

常见误区和注意点

首先是一个大误区:"学习率越小越安全越好"。虽然小学习率降低损失发散的风险,但从初期就用过小的值会导致训练极其缓慢,给定epoch内损失无法充分下降。更糟的是,小学习率容易陷入浅的局部最优,泛化性能(对未知数据的精度)反而变差。正确做法是初期大胆使用较大学习率,再用计划逐步衰减。

其次是"计划应按步(iteration)而非epoch考虑"。本工具为了易理解用epoch展示,但实际框架一般是每个iteration(一个mini-batch)更新一次学习率。改变batch大小就会改变每个epoch的iteration数,同一个"30个epoch乘以0.1"计划在不同batch大小下衰减时机会不同。设计时应以总step数为基准。

最后是"有好的计划初始学习率就随便选"。计划只是在初值基础上的衰减方案,出发点不好就救不了。初值过大初期损失爆炸变NaN,过小始终步幅不足。实操必须先用学习率范围测试确定好初值,再在此基础上调整计划的形状和衰减量。初值和计划是配套设计的。

使用指南

  1. 设置初始学习率η₀(0.1~1.0)和总epoch数(10~500)
  2. 选择计划种类(步长衰减·指数衰减·余弦退火),输入衰减参数(步长大小或衰减常数)
  3. 改变当前epoch编号(0~总epoch数),实时显示该时刻的学习率η(t)、初始学习率η₀、最终学习率η(T)、平均学习率、当前/初始比、选中的计划种类

具体计算例

用ResNet-50在ImageNet训练,设置初始学习率η₀=0.1,总epoch数=100,步长衰减(步长30个epoch,衰减系数0.1)。第30个epoch时学习率降至0.01,第60个epoch降至0.001。选择余弦退火时,第50个epoch学习率约为0.0525(初值的52.5%)平滑下降,最后第99个epoch降至0.00005。指数衰减(衰减系数0.99)每个epoch乘以0.99,第46个epoch降至约0.01。

实际操作注意

  1. 步长衰减在验证精度停滞时有效,但30个epoch的急剧下降在深网络中容易产生振荡,如VGG-16可将衰减系数从0.5调至0.1
  2. 指数衰减稳定,但衰减系数0.99在100个epoch后学习率仅为初值的37%,BERT微调(总3~5个epoch)建议用0.95
  3. 余弦退火在Vision Transformer和Transformer模型上表现最优,但若单独加热启动阶段(最初5个epoch)要注意不要重复计入总epoch
  4. 设置学习率下限(通常1e-5~1e-6)防止过度收敛到局部最优