
1. 小集学不会,大集没意义
新 segmentation pipeline 训三天 val 不动,我先用五十张过拟合实验——train loss 卡在 0.5 下不去。查下来是 mask 与 image resize 不同步,等于随机标签。修完增广后五十张二十 epoch 内 loss 近零。连 tiny set 都学不会,加数据、换大模型、调正则都没意义——先证明实现、标签和 loss 正确。
这是排查 bug 的第一招,不是 optional trick。团队若跳过这步直接调超参,常在错误 pipeline 上浪费数周算力。
2. 怎么做 tiny overfit
固定五十到二百张(或一个 batch 重复),关 dropout、减 weight decay、必要时增大 LR。目标:train loss → 0(CE < 0.01)、train acc/IoU → 100% 或接近。
tiny = torch.utils.data.Subset(dataset, list(range(50)))
loader = DataLoader(tiny, batch_size=10, shuffle=True)过拟合小集 OK 但全量不收敛 → 正常,加数据/正则/调 capacity。小集不过 → 实现 bug,别调超参,查下面清单。
3. 小集不过的常见原因
标签错:mask/bbox/keypoint 与 image 变换不同步。loss 符号或 reduction 错。augment 破坏标签。num_classes、ignore_index 与数据 mismatch。忘记 optimizer.zero_grad()。学习率过小或 schedule 过早 decay。BatchNorm 在 tiny batch 上噪声过大(可换 GroupNorm 或 freeze BN 做 debug)。
逐项单变量排除,不要同时改五项超参。
4. 与 sanity check 的配合
overfit tiny set 通过后,再跑:单 batch 过拟合(同一 batch 重复一百次,loss 应趋零)、梯度检查(finite difference 或 torch.autograd.gradcheck 对小模块)、train/val 同一批 forward 对比 output shape。
5. 案例:resize 不同步
某分割项目 fifty 张过不了——可视化发现 mask 被 nearest 缩到错误尺寸。改 bilinear 对齐 image 后十分钟过小集。这种 bug 全量训练永远暴露不出来「学不会」,只会表现为「涨不动」。
6. 验收
- 五十张内 train loss 近 0,acc/IoU 近 100%。
- 小集不过时先查 label/augment/loss,不调 LR 和 model size。
- 小集通过后全量训练才启动。
- debug 时记录 tiny set 的 fixed seed 和 sample id。
- 过拟合实验关 dropout、减正则,与生产训练配置分开。
7. 落地与衔接
新流水线合入主干前强制跑五十张过拟合门槛:固定随机种子与样本编号写入持续集成,训练损失近零才允许开全量训练。调试配置与生产配置分文件存放,避免把关闭随机失活的小集实验误当默认。可视化增广叠加图与单批次重复实验纳入入职清单,新人第一天就能排除标签同步类错误。全量训练启动前在合并请求里附小集曲线截图,便于审查者快速判断 pipeline 是否可信。
8. 案例复盘
某语义分割项目全量训三天验证不动,五十张过拟合卡在零点五——叠加图发现掩码最近邻缩放与图像双线性不同步。修对齐后小集二十分钟损失近零,全量训练次日验证正常上涨。团队此后把微小集过拟合写进合并模板,省掉多次调学习率调骨干的空转。这类错误在全量上只会表现为涨不动,不会自动指向流水线。该案例已纳入培训材料,强调先证伪实现再谈数据量。
先过拟合一小撮是训练前的契约测试。实现错了,数据 pipeline 错了,后面所有实验都是在错误基础上堆噪声。把 overfit gate 当成和数据 lint 同级的合并条件,比事后翻 log 猜原因可靠得多。小集通过后仍要保留固定难例,供后续增广或结构改动时快速回归。全量训练启动前在合并请求里附小集曲线。团队培训强调全量训练前先过微小集门槛,任何跳过该步骤的合并须说明理由并由负责人签字。
相关
也可以看看
- ·4 分钟阅读
Grad-CAM 与 shortcut 排查
Grad-CAM 和 activation map 不严谨,但能暴露模型盯背景、水印等捷径——当 debug 线索,不当因果解释证据。
- ·3 分钟阅读
grad_norm spike 与 misclass grid
只看 train loss 不够——要 log lr、grad norm、val slice、GPU 利用率和样例可视化,异常通常是 loss 曲线先以外的信号。
- ·6 分钟阅读
CE target long dtype 断言
PyTorch 广播让错误 shape 的 loss 能跑起来——silent bug 产生错误梯度;写 forward 时 assert shape 或用 torchdim 习惯。
johan's blog