训练loss直接掉到0还稳在0,多半不是练好了而是坏了

新手盯着 loss 往下掉容易上头,掉到 0 还稳住不动就更开心了。其实这种曲线大概率是哪里出了问题,不是练好了。我踩过的几种,按自己排查的顺序列一下:

  1. 标签或输入泄漏。标签、输入里混进了能直接推出答案的信息,模型根本不用学,直接抄答案,loss 当然好看。这种最阴,因为别的地方全都看着正常。
  2. 数据集本身有问题。样本全一样,或者标签全是同一类,模型发现躺平输出一个值就行,loss 就成 0 了。
  3. loss 算错了。维度对不上,或者被 mask 成全零,这时候算出来的根本不是你以为的那个 loss。
  4. 学习率或数值问题,导致输出直接塌缩。

排查我一般分两步走:先把几个 batch 的输入输出和中间 loss 值打印出来,肉眼过一遍,看数据和数值是不是正常;再单独拿一小撮数据喂进去,看它能不能过拟合。第一步主要揪 1、3 这种“数据或计算本身就错了”的,第二步是确认整条训练流程是通的,两步都过了再回头看学习率。

碰到过更隐蔽情况的,欢迎楼下补充。

标签泄漏这个太阴了,查半天才发现

我还习惯先关掉数据增强再打印,不然输入看着乱没法判断

顶