M8-087M8: ML Systems, Engineering & ResearchResearch: Replication & DebuggingMedium
Mastery:

Research: Replication & Debugging: 如何做小规模验证实验(sanity check)?

📐 Mathematical Definition
sanity: overfit small set⇒loss↓;random labels⇒no learning\text{sanity}:\ \text{overfit small set}\Rightarrow\text{loss}\downarrow;\qquad \text{random labels}\Rightarrow\text{no learning}
⚡ Executive Summary
Core Concept: 用可过拟合的小数据集验证模型能学习、用随机标签验证不会学到、用单 batch 检查损失下降、用梯度与形状检查定位实现错误,先小后大快速迭代。

📌 Key Takeaways

  • •
    过拟合小数据集——在几十个样本上训练,损失应降到接近 0(验证模型有学习能力)
  • •
    随机标签——打乱标签后应无法泛化(验证无数据泄漏与捷径)
  • •
    单 batch 检查——一个 batch 上损失应迅速下降(验证前向/反向与优化器)
  • •
    梯度与形状检查——张量形状、梯度范数、是否梯度消失/爆炸
  • •
    从小规模到大——先小模型/小数据/少步数验证,再放大到完整规模

📐 Mathematical Derivations

数学机理:<strong>sanity check 的类型</strong>——(1) <strong>过拟合小数据集(overfit a tiny set)</strong>——(a) <strong>做法</strong>——取几十个样本,训练足够多步,看损失是否降到接近 0、准确率接近 100%;(b) <strong>验证</strong>——(i) 模型有学习能力(前向/反向/优化器正确);(ii) 数据加载与标签对齐正确;(iii) 损失与任务匹配;(c) <strong>若失败</strong>——说明实现有 bug(如标签错位、损失写错、梯度未回传)。(2) <strong>随机标签测试(random labels)</strong>——(a) <strong>做法</strong>——把标签随机打乱后训练;(b) <strong>预期</strong>——训练损失可降(记忆)但<strong>验证无法泛化</strong>(准确率接近随机);(c) <strong>验证</strong>——(i) 无数据泄漏(若验证也能学好,说明训练/验证重叠或泄漏);(ii) 无捷径特征(如文件名编码标签);(d) <strong>若验证也学得好</strong>——严重问题(泄漏/捷径)。(3) <strong>单 batch 检查</strong>——(a) 取一个固定 batch,重复训练;(b) 损失应迅速下降(过拟合该 batch);(c) 验证优化器、学习率、梯度流。(4) <strong>梯度与形状检查</strong>——(a) <strong>形状</strong>——张量维度是否与预期一致;(b) <strong>梯度范数</strong>——是否消失(≈0)或爆炸(→∞);(c) <strong>梯度流</strong>——是否所有参数都收到梯度;(d) <strong>数值</strong>——是否有 NaN/Inf。(5) <strong>前向一致性</strong>——(a) 用已知输入检查输出(如全零输入);(b) 检查是否与参考实现一致。(6) <strong>从小规模到大</strong>——(a) <strong>先小</strong>——小模型/小数据/少步数,分钟级迭代;(b) <strong>再放大</strong>——验证一致后放大;(c) <strong>理由</strong>——大模型调试慢且贵,小规模能快速定位问题。(7) <strong>其他检查</strong>——(a) <strong>损失初始化</strong>——分类任务初始损失应 ≈ ln(类别数);(b) <strong>学习率扫描</strong>——小范围扫描找合理区间;(c) <strong>baseline 复现</strong>——先复现一个已知结果确认流程正确;(d) <strong>单元测试</strong>——数据管道、损失、指标函数的单元测试。(8) <strong>常见 bug 定位</strong>——(a) 标签错位 → 过拟合小集失败;(b) 损失写错(如未取负、符号错)→ 损失不降;(c) 梯度未回传 → 参数不更新;(d) 数据泄漏 → 随机标签仍能泛化;(e) 归一化错 → 训练不稳定。<strong>与其他问题的关系</strong>——(a) 与调试训练不收敛;(b) 与复现排查;(c) 与研究代码质量(单元测试)。<strong>度量</strong>——(a) 小数据集过拟合的最终损失/准确率;(b) 随机标签的验证准确率(应≈随机);(c) 单 batch 损失下降速度。

🏭 Production Trade-offs

深度剖析与工程权衡:① <strong>过拟合小数据集是最有效的实现验证</strong>——能同时验证前向/反向/优化器/数据加载;面试中能指出这点是深度理解的标志。② <strong>随机标签测试查泄漏与捷径</strong>——若仍能泛化则严重问题。③ <strong>先小后大是效率原则</strong>——小规模分钟级迭代。④ <strong>初始损失应≈ln(类别数)</strong>——异常则说明有问题。⑤ <strong>梯度与形状检查定位底层 bug</strong>。⑥ <strong>先复现已知结果确认流程</strong>。⑦ <strong>面试要点</strong>——被问怎么验证实现,应给出'<strong>过拟合小数据集 + 随机标签测试 + 单 batch 检查 + 梯度与形状检查 + 初始损失检查 + 先小后大</strong>';能指出随机标签测试查泄漏与初始损失期望是深度理解的标志。
⚠️ Common Interview Pitfalls
  • ✕
    跳过 sanity check 直接大规模训练
  • ✕
    不知道初始损失应约为 ln(类别数)
🎯 Interviewer Follow-ups
  • ?
    为什么'过拟合小数据集'是验证实现正确的好方法?
  • ?
    随机标签测试能发现什么问题?
📚

Associated Knowledge Base Guides & Mindmaps

Explore the comprehensive technical article, exam cards, and global architecture tree.

← PreviousM8-086: Research: Replication & Debugging: 为什么很多论文难以复现?📋Back to BankNext →M8-088: Research: Replication & Debugging: 如何调试训练不收敛的问题?