真实面经题目 · 原创解析

训练中把 loss 除以 10 和把学习率除以 10 有什么区别?

这题考优化器细节:把 loss 除以 10 会先把反向传播得到的梯度缩小 10 倍;把学习率除以 10 是在优化器更新参数时缩小 step size。二者在最简单的无动量 SGD、无正则、无裁剪场景下近似等价,但在 Adam/AdamW、动量、weight decay、gradient clipping、混合精度、多任务 loss、分布式梯度累积等真实训练中会产生明显差异。

出现于:京东 · 算法

60 秒回答模板

我会先从链式法则说起:如果总 loss L 变成 L/10,那么所有由这个 loss 反传出来的梯度也会变成原来的 1/10;如果学习率 lr 变成 lr/10,梯度本身不变,只是在 optimizer 更新参数时把 update step 缩小。对最朴素的 SGD,且没有 momentum、weight decay、gradient clipping、loss scaling、scheduler 等额外机制时,theta <- theta - lr * grad,所以 L/10 和 lr/10 在参数更新上可以近似等价。但真实训练里差别很多。第一,有 momentum 时,缩放 loss 会改变进入动量缓冲的梯度和历史累积,而缩放学习率只改变当前用缓冲更新参数的步长。第二,Adam/AdamW 会维护一阶、二阶矩,梯度整体缩放后 m 和 v 同时缩放,m/sqrt(v) 在很多情况下会抵消比例,受 epsilon、bias correction 和数值范围影响,并不等价于降低学习率。第三,AdamW 的 decoupled weight decay 通常乘学习率但不来自 loss 梯度,所以降学习率会同时减小权重衰减步长,而 loss 除以 10 不会直接减小 decoupled decay,相当于正则相对更强。第四,gradient clipping 是在梯度层发生的:loss 除以 10 可能让梯度不再触发 clipping,而学习率除以 10 不改变 clipping 判断。第五,多任务或带 auxiliary loss 的训练中,只把某个 loss 除以 10 是改变目标权重;学习率除以 10 是所有梯度项一起更新变慢。第六,混合精度里的 loss scale 是数值技巧,通常会在 optimizer 前 unscale,不应改变有效学习率。面试中最稳的结论是:二者只在极简 SGD 条件下等价;一旦进入现代优化器和训练系统,loss 缩放改变的是梯度信号及其相对权重,学习率缩放改变的是优化器应用更新的步长。

考点 极简 SGD 才近似等价
难度 真实面经题
回答目标 让候选人能从优化公式解释 loss 缩放和学习率缩放的边界:在纯 SGD 中近似等价,但在现代训练里的 optimizer state、weight decay、gradient clipping、AMP 和多 loss 目标都会让二者产生不同训练轨迹。

深入解析

01

先区分梯度缩放和步长缩放

loss 除以 10 发生在反向传播之前,根据链式法则会让这个 loss 贡献的梯度整体除以 10。学习率除以 10 发生在优化器更新阶段,梯度张量本身不变,只是参数更新时乘上的系数变小。

02

朴素 SGD 下存在等价条件

如果优化器是 theta = theta - lr * grad 的纯 SGD,且没有 momentum、weight decay、gradient clipping、scheduler、混合精度等机制,那么把 loss 除以 10 和把 lr 除以 10 对该 loss 的参数更新近似等价。这是一个很窄的特例。

03

动量会让二者分离

带 momentum 的 SGD 会把梯度写入动量缓冲。loss 缩放改变进入缓冲区的新梯度,影响后续多步历史;学习率缩放不改变缓冲本身,只改变使用缓冲更新参数的幅度。因此即使当前 step 看起来相近,长期轨迹也不同。

04

Adam 的自适应归一会抵消梯度尺度

Adam 会更新一阶矩 m 和二阶矩 v。如果梯度整体缩小,m 约缩小同样倍数,v 约缩小平方倍数,m/sqrt(v) 可能接近不变;但 epsilon、bias correction、非平稳梯度和数值精度会打破完全抵消。所以 loss 除以 10 通常不等价于 Adam 学习率除以 10。

05

权重衰减的相对强度不同

在 AdamW 这类 decoupled weight decay 中,权重衰减是独立于 loss 梯度的更新项,通常与学习率相关。降低学习率会减小梯度步长和衰减步长;只缩小 loss 梯度不会同等缩小 decoupled decay,等价于正则相对变强。

06

梯度裁剪会改变结果

gradient clipping 根据梯度 norm 判断是否裁剪。loss 除以 10 会先改变梯度 norm,可能避免触发裁剪;学习率除以 10 不改变梯度 norm,裁剪行为仍然发生。因此有 clipping 时两者可能差异很大。

07

多 loss 场景代表目标权重变化

如果总目标是 L = L1 + lambda L2,只把某个 loss 除以 10,本质是在改变任务、正则项或辅助目标的相对权重;学习率除以 10 则会让所有 loss 贡献的更新一起变慢。多任务、RLHF、MoE aux loss 和蒸馏 loss 中这一点尤其重要。

08

混合精度 loss scale 是另一回事

AMP 中常见的 loss scaling 通常是先把 loss 放大以避免 FP16 下溢,反向后再 unscale 梯度,然后再裁剪和 optimizer step。这个数值缩放不应该改变有效优化目标,和人为把训练 loss 除以 10 不是同一个概念。

易错点

  • 直接说二者完全一样,只记住了纯 SGD 的特例。
  • 直接说二者完全不一样,却说不出在无动量 SGD 下为何可以等价。
  • 忽略 Adam/AdamW 的一阶、二阶矩和 epsilon,误以为梯度缩放一定线性改变 step。
  • 忽略 decoupled weight decay,没意识到降学习率会改变正则步长而 loss 缩放不会。
  • 忽略 gradient clipping,没意识到 loss 缩放会改变 clipping 是否触发。
  • 把多任务中的 loss 权重缩放误解成学习率调整,导致目标函数相对权重被意外改变。
  • 混淆 AMP 的 loss scale 和人为缩放训练 loss。
  • 只看 loss 数值变小,以为模型训练更稳定,却没有检查梯度 norm、更新量和验证指标。

面试官追问

Adam 中为什么 loss 除以 10 不等于学习率除以 10?

因为 Adam 使用 m/sqrt(v) 做自适应归一。梯度缩小 10 倍时,一阶矩约缩小 10 倍,二阶矩约缩小 100 倍,二者相除后比例可能接近抵消;学习率除以 10 则直接把最终 step 缩小。epsilon 和数值状态还会进一步造成差异。

AdamW 的 weight decay 会怎样影响结论?

AdamW 的 decoupled weight decay 不来自 loss 反传梯度。降低学习率会让 decay step 也变小;只把 loss 除以 10 不会同等缩小 decay,于是正则项相对梯度更新更强,训练轨迹会变。

有梯度裁剪时哪个更安全?

要看目的。如果问题是梯度 norm 太大导致频繁 clipping,缩小 loss 或调整 loss 权重会改变 clipping 触发;降低学习率不会减少 clipping 发生,只会让裁剪后的 step 小一些。两者解决的问题不同。

混合精度里的 loss scaling 算不算改变 loss?

通常不算。AMP 的 loss scale 是数值技巧,反向后会 unscale 梯度再进入裁剪和 optimizer;只要实现正确,它不改变有效优化目标。人为把 loss 除以 10 且不再补偿,才会改变梯度尺度。

什么时候应该缩放 loss 而不是学习率?

当你想改变某个任务、辅助损失、正则项或样本权重的相对重要性时,应缩放对应 loss;当你想让整个优化过程更保守时,通常调学习率。两者的意图不同。