真实面经题目 · 原创解析
模型训练时 advantage 或 loss 突然变成 0,可能是什么原因?
advantage 或 loss 突然变成 0 通常是训练信号、数据、mask、奖励归一化、数值稳定或日志统计出了问题,需要按链路逐层排查。
真实面经题目 · 原创解析
advantage 或 loss 突然变成 0 通常是训练信号、数据、mask、奖励归一化、数值稳定或日志统计出了问题,需要按链路逐层排查。
我会先判断是真正训练停了,还是日志口径显示为 0。然后沿数据到损失链路排查:样本 batch 是否为空、label 或 reward 是否全相同、mask 是否把 token 全屏蔽、advantage 归一化后是否被错误置零、KL 或 clipping 是否让有效梯度消失、学习率和梯度裁剪是否异常、fp16/bf16 是否 underflow,以及分布式训练的 all-reduce 或日志聚合是否有问题。定位时打印关键张量分布、非零比例、梯度 norm 和每个 loss 分量。
有时是 logging、平均窗口、分布式聚合或格式化精度导致显示为 0,不代表反向传播真的没有信号。
空 batch、全 padding、错误 attention mask、label 全 ignored、reward 全相同都会让有效训练信号消失。
advantage 标准化、PPO clip、KL 惩罚、梯度裁剪、混合精度 underflow 和学习率异常都可能让 loss 或梯度接近 0。
用固定小 batch 关闭随机性,逐步打印 reward、return、advantage、mask、loss 分量和梯度 norm,可以确认是数据阶段、损失计算阶段还是优化器更新阶段开始归零。
reward 没差异、baseline 等于 return、归一化实现错误、mask 后没有有效样本,或张量被 detach/覆盖。
固定一个小 batch,逐步打印 reward、return、advantage、mask、loss 分量和梯度 norm,确认哪一步开始变 0。
不同 rank 有空 batch、all-reduce 平均口径错误、梯度同步失败或日志只取了异常 rank,都可能误导判断。