新手盯着 loss 往下掉容易上头,掉到 0 还稳住不动就更开心了。其实这种曲线大概率是哪里出了问题,不是练好了。我踩过的几种,按自己排查的顺序列一下:
- 标签或输入泄漏。标签、输入里混进了能直接推出答案的信息,模型根本不用学,直接抄答案,loss 当然好看。这种最阴,因为别的地方全都看着正常。
- 数据集本身有问题。样本全一样,或者标签全是同一类,模型发现躺平输出一个值就行,loss 就成 0 了。
- loss 算错了。维度对不上,或者被 mask 成全零,这时候算出来的根本不是你以为的那个 loss。
- 学习率或数值问题,导致输出直接塌缩。
排查我一般分两步走:先把几个 batch 的输入输出和中间 loss 值打印出来,肉眼过一遍,看数据和数值是不是正常;再单独拿一小撮数据喂进去,看它能不能过拟合。第一步主要揪 1、3 这种“数据或计算本身就错了”的,第二步是确认整条训练流程是通的,两步都过了再回头看学习率。
碰到过更隐蔽情况的,欢迎楼下补充。