← 返回题目列表

学习率是什么?太大太小分别有什么问题?怎么调?

高频 中等 第 8 / 25 题 更新于 2026/08/02
深度学习学习率学习率调度warmup

简化版

学习率(Learning Rate) 控制每次参数更新的步子大小w ← w - η·梯度),通常是深度学习最敏感的超参数之一太大:步子迈过头,在最优点附近来回震荡甚至发散、损失变 NaN;太小:走得太慢,收敛极慢、容易卡在局部极小/鞍点。理想的学习率能又快又稳地下降。实践中常用学习率调度(scheduling)——训练中动态调整:先大后小(前期大步快速逼近、后期小步精细收敛),常见有阶梯衰减、余弦退火、指数衰减;深层网络/Transformer 常配 warmup(预热)——训练最开始用很小的学习率逐渐升到目标值,避免初期不稳定。

详细版

学习率的作用:

w ← w - η · ∂L/∂w      η = 学习率 = 更新步长

太大 vs 太小:

太大太小
现象震荡、发散、loss 变 NaN收敛极慢、卡局部极小/鞍点
损失曲线上下剧烈波动/上升缓慢下降、长期不收敛

学习率调度(先大后小):

方法做法
阶梯衰减 StepLR每隔若干轮学习率乘一个系数
指数衰减按指数持续减小
余弦退火 Cosine按余弦曲线平滑降到很小
ReduceLROnPlateau验证指标不再改善就降
Warmup训练初期从很小逐渐升到目标值

为什么先大后小: 前期大步快速接近最优区域,后期小步精细收敛不越过最优点。

完整版教学

一、学习率是什么——步子大小

梯度下降更新参数的公式是 w ← w - η·梯度。梯度告诉你往哪个方向走(下降最快的反方向),而学习率 η 决定每一步走多远——它是「步长」。

学习率是深度学习里最敏感、最需要调的超参数之一。同一个模型,学习率合适能顺利收敛到好解,学习率不当则可能训不动或直接崩掉。所以理解「太大太小各有什么问题、怎么调」是基本功。

二、学习率太大:震荡与发散

学习率太大,每一步迈得太远,会越过最优点

损失曲面(碗形):
  太大 → 在碗壁两侧来回横跳,越跳越高 → 震荡甚至发散
       损失曲线上下剧烈波动,甚至一路上升、变成 NaN/Inf
  • 在最优点附近反复横跳、不收敛
  • 严重时发散——损失越来越大,数值溢出成 NaN,训练崩溃。

看到 loss 剧烈震荡或突然变 NaN,首先怀疑学习率太大

三、学习率太小:慢与卡住

学习率太小,每一步挪一点点:

  • 收敛极慢:要跑非常多轮才能到最优,浪费大量时间和算力。
  • 有限预算内进展太慢:小步长会让穿过平坦区或受噪声帮助逃离鞍点的过程变慢,但不等于数学上必然卡住,在那里停滞不前。

看到 loss 下降极其缓慢、长期不动,怀疑学习率太小(或已陷入鞍点)。

学习率太小时,单步参数变化可能远小于在有限训练预算内需要跨越的距离,因此 loss 看起来长期不动。它也会降低随机梯度噪声帮助离开鞍点或平坦区的速度,但不能据此断言模型数学上必然困在某个局部极小值。判断时应同时检查梯度范数、参数更新比和学习率调度,避免把数据或实现错误误诊为步长问题。

四、理想学习率与「先大后小」的思想

理想的学习率能又快又稳地下降:前期快速接近最优区域,后期稳稳收敛。但固定一个学习率很难同时满足前后期需求——前期想大(快速逼近),后期想小(精细收敛、不越过最优点)。

于是有了学习率调度(Learning Rate Scheduling)训练过程中动态调整学习率,通常是「先大后小」

学习率
 │ ̄ ̄\____
 │        \____
 │             \____ 逐渐减小
 └──────────────────→ 训练进程
  前期大步快速逼近  后期小步精细收敛
  • 前期大学习率:快速从初始点走向最优区域。
  • 后期小学习率:在最优点附近精细微调,避免大步越过、稳定收敛到更好的解。

五、常见的学习率调度方法

  • 阶梯衰减(StepLR):每隔固定轮数,把学习率乘以一个系数(如每 30 轮乘 0.1)。简单常用。
  • 指数衰减:学习率按指数持续平滑减小。
  • 余弦退火(Cosine Annealing):学习率沿余弦曲线从大平滑降到很小,末端很平缓——现在很流行,常配合重启(warm restarts)。
  • ReduceLROnPlateau监控验证指标,当它不再改善时才把学习率下调——自适应、按需衰减。
  • 多项式衰减、线性衰减等。

六、Warmup(预热)——大模型的标配

深层网络、尤其 Transformer,训练最开始权重是随机的、梯度可能很不稳定,一上来就用大学习率容易震荡崩溃。Warmup(预热) 的做法是:训练最初的若干步,学习率从一个很小的值线性(或平滑)地逐渐升到目标学习率,之后再按正常调度衰减。

学习率
 │    / ̄\___
 │   /      \___  warmup 后正常衰减
 │  / warmup 上升
 └──────────────→ 步数
  • 好处:让训练初期平稳,避免随机初始化 + 大学习率导致的早期发散,尤其配合 Adam/大 batch 时。
  • Warmup + 余弦衰减 是现代大模型训练的常见组合。

七、怎么找合适学习率

  • 从经验值起步:可从框架或论文基线起步,但最佳量级会随模型、归一化、batch 和调度变化,按任务/模型调。
  • 学习率范围测试(LR range test):从很小到很大逐步增大学习率,看 loss 曲线,选 loss 下降最快、还没发散的区间。
  • 网格/随机搜索:在对数尺度上搜(如 1e-4、1e-3、1e-2)。
  • 配合优化器:Adam 有逐参数缩放但仍可能对基础学习率敏感;SGD 更依赖学习率和调度。
  • 观察 loss 曲线:震荡/NaN → 调小;下降太慢 → 调大或检查是否卡鞍点。

八、用一维二次函数看清稳定学习率区间

L(w)=0.5w²,梯度为 w,固定学习率更新为 w_{t+1}=(1-η)w_t。当 0<η<2 时绝对收缩因子小于 1,迭代收敛;η=2 时在正负之间等幅振荡;η>2 时振幅越来越大并发散。

η更新因子 1-η从 w₀=4 的前几步结论
0.10.94→3.6→3.24稳但慢
1.004→0该二次例中一步到达
1.5-0.54→-2→1交替收敛
2.1-1.14→-4.4→4.84发散

真实网络各方向曲率不同,不存在一个学习率同时对所有方向最理想;动量、自适应缩放和调度都在处理这个困难。范围测试也只能提供候选区间,最终应在固定训练预算和验证协议下比较。

记忆钩子:学习率的稳定上限与损失曲率有关,不是 Adam=0.001、SGD=0.1 这样的永久常数。

九、常见误区与追问

  • 误区:学习率越小最终结果一定越好。 过小会在有限预算内几乎不动,也可能因调度结束得不到充分训练。
  • 误区:看到 NaN 就一定只是学习率过大。 还可能是数据异常、除零、混合精度溢出或损失实现错误。
  • 追问:为什么 warmup 常与大 batch 或 Adam 配合? 初期统计和矩估计尚不稳定,逐步升高步长可降低早期破坏性更新。
  • 追问:ReduceLROnPlateau 应监控训练还是验证指标? 通常监控与泛化目标一致的验证指标,并设置耐心值防止被噪声触发。
  • 追问:改变 batch size 后学习率怎么调? 线性或平方根缩放只是起点,还要重新验证临界 batch、warmup 和总更新次数。

十、加强记忆

学习率 η 控制参数更新的步长w←w-η·梯度),是最重要的超参数太大→步子越过最优点、震荡甚至发散、loss 变 NaN太小→有限训练预算内进展极慢、在平坦区看似停滞。理想是又快又稳,但固定学习率难兼顾,故用学习率调度「先大后小」(前期大步快速逼近、后期小步精细收敛):阶梯衰减、指数衰减、余弦退火、ReduceLROnPlateau。深层网络/Transformer 还用 Warmup(预热)——初期学习率从很小逐渐升到目标值,避免随机初始化+大学习率的早期发散,warmup+余弦衰减是大模型标配。调法:经验值起步(Adam 1e-3、SGD 1e-2)、LR range test、对数尺度搜索、看 loss 曲线(震荡调小、太慢调大)。