很多人在跑深度学习项目时,卡住的地方不是写不出网络结构,而是数据没理干净就开始训,结果指标忽高忽低、复现不了,回头还要推翻重来。这篇按流程顺序给出一份速查清单:每个阶段该产出什么、怎么判断可以进入下一阶段、哪些情况该退回上一步,最后给一套训练与测试的排查顺序。
跑深度学习项目,真正卡人的往往不是网络结构写不出来,而是数据还没理干净就急着开训。结果指标忽高忽低、换台机器就复现不了,回头只能推翻重来。这篇按流程顺序给一份速查清单:每个阶段该产出什么、什么时候可以进下一步、什么情况下必须退回去。
整条链路可以拆成四段:数据处理、模型设计、训练、测试验收。每段都有明确的产出物和进入下一阶段的门槛,卡住的时候先回头看上游,比在训练脚本里反复调参有效得多。下面逐段说做法。
数据处理:先定口径,再谈清洗
动手清洗之前,先把每个字段的含义、量纲、取值范围、缺失怎么处理写成一份数据字典。字段口径没统一,后面做多少增强都是白费。这份字典同时是后面排查问题的依据:训练和推理两端预处理不一致时,对照它就能看出是哪里偏了。
- 先写数据字典,再写清洗脚本;字典没定完不要开始清洗
- 划分训练/验证/测试要在清洗之前做一次,避免同一来源的样本同时出现在两边造成泄漏
- 产出物是三份互不重叠的数据清单加一份数据字典;划分比例的取舍可参考站内关于训练集验证集划分的思路
- 标注质量抽样复核一遍,错标比例偏高时先回去修标注,而不是靠加数据量盖过去
判断能不能进下一步,看两件事:验证集里各主要类别的样本都有一定数量,不是某一类几乎不出现;抽查的样本标签和实际内容对得上。这两条不满足,别急着训,训了也是白跑。
模型设计:从任务和约束倒推结构
先写清输入输出的形状和评估指标,再选结构。指标定不下来,比如到底是分类还是排序、要不要专门看长尾表现,就没法判断模型好坏,也没法比较两次实验谁更优。
- 输入输出契约
- 张量形状、取值范围、batch 维度怎么摆,写死在一处,训练和推理共用
- 评估指标
- 主指标加一到两个辅助指标,明确算在哪个集合上
- 资源预算
- 显存上限、单步耗时、能接受的迭代轮数,决定骨干网络和多大批量
- 不适用边界
- 样本量太小或类别极度不均衡时,深层结构容易过拟合,这时该退回简单模型
设计时同时列预算。显存、单步耗时、能接受的迭代轮数这三项决定你能用多大的骨干和多大批量,具体能开到什么程度,到站内部署测算页面按你的卡和精度核一遍当时的数字。起步优先用现成骨干加轻量改造,跑通再考虑换结构;一上来就自己堆模块,出问题时分不清是数据还是设计。
训练:先跑通小样本,再放大
- 小样本跑通用很小的子集走完前向、反向、保存、加载全流程,确认损失能下降、权重能存能读,再换全量数据
- 固定随机种子记录种子、环境版本和超参;复现不了就没法判断改动到底有没有用
- 看曲线顺序先看损失是否正常下降,再看训练与验证的差距有没有拉开;差距快速拉大通常是过拟合或数据泄漏
- 准备降级方案减小批量、降低精度或剪短序列长度,让显存不够时训练还能继续,而不是直接中断
判断训练是否健康,看三点:损失曲线是否平滑下降、验证指标是否跟着改善、训练与验证的差距是否稳定。差距一开始就很大,先怀疑数据划分泄漏,而不是学习率没调好。训练中途指标来回跳,先回去检查数据口径,再动超参。
测试与验收:用固定流程代替感觉
测试集只在最后用一次,中途调参看验证集。反复拿测试集调参,等于把测试集变成了验证集,报出来的数字不再可信。这条纪律要写进流程,不靠自觉。
| 排查顺序 | 先查什么 | 常见原因 |
|---|---|---|
| 一 | 数据划分是否泄漏 | 同源样本分到了两边 |
| 二 | 预处理两端是否一致 | 训练和推理用了不同归一化参数 |
| 三 | 评估脚本是否有 bug | 标签对齐或阈值处理写错 |
| 四 | 模型本身 | 前面都排除后再怀疑结构或训练策略 |
评估要区分整体指标和分组指标,长尾类别掉得厉害时优先补数据而不是调阈值。最后做一次端到端验收:拿真实场景的输入走完预处理、推理、后处理,看输出格式和延迟是否符合预期。
把流程变成可核对的清单数据处理、模型设计、训练测试各阶段的判断标准和排查顺序,站内都有对应条目可以对照,动手前过一遍能省下大量返工时间。→常见问题
数据处理和模型设计哪个先做?
两条线并行更实际,但数据口径要先定。先明确字段含义、标签规则和评估指标,再据此选结构;如果结构先定死,很可能出现数据格式对不上的返工。判断标准是:数据字典和输入输出形状能互相说通,就可以同时推进。
训练集效果很好、测试集很差,先查什么?
先查数据泄漏和划分方式:同一来源、同一用户、同一时间窗口的样本是否被分到了两边。其次看预处理在训练和测试两端是否一致。最后才考虑过拟合,通过加正则、减参数量或补数据来处理,而不是直接换模型。
小团队没有多少数据,这套流程还适用吗?
适用,但顺序要调整:数据阶段花的时间更多,模型结构尽量从现成骨干改起,评估重点放在分组和错误样本分析上。这种情况下不建议一上来就自研结构,也不适合用测试集反复调参的玩法。