文章

06 开发集和测试集的大小(Size of dev and test sets)

06 开发集和测试集的大小(Size of dev and test sets)

06 开发集和测试集的大小(Size of dev and test sets)

🧠 一、背景与动机

在传统机器学习时代,数据集规模较小(如几十到几千个样本),常采用固定比例划分:

  • 70/30 划分:70% 训练,30% 测试
  • 60/20/20 划分:60% 训练,20% 开发(验证),20% 测试

但在现代深度学习中,数据集规模极大(如百万级甚至更大),这种固定比例不再适用。我们需要根据实际目标数据规模动态调整划分策略。


📏 二、现代划分原则

1. 核心思想

训练集应尽可能大,以满足深度模型对数据的“胃口”;
开发集和测试集只需足够大,能可靠评估模型性能即可。

2. 典型划分示例(大数据场景)

若总数据量为 $N = 1{,}000{,}000$:

  • 训练集:98% → $980{,}000$
  • 开发集:1% → $10{,}000$
  • 测试集:1% → $10{,}000$

✅ 此时 1% 已提供 10,000 个样本,足以进行高置信度评估。

3. 一般性建议

设总数据量为 $N$,则:

  • 若 $N \leq 10^4$:可沿用传统比例(如 60/20/20)
  • 若 $N \geq 10^5$ 或更大:

    • 训练集比例 $\to$ 接近 95%~99%
    • 开发集 + 测试集 $\to$ 各占 0.5%~5%,具体取决于所需评估精度

🔍 三、开发集 vs 测试集的作用区分

集合目的关键要求
开发集(Dev Set)用于模型选择、超参调优、架构迭代足够大以区分不同模型性能差异
测试集(Test Set)用于最终无偏评估系统上线性能足够大以高置信度估计真实误差

📌 重要原则:测试集绝不参与任何训练或调参决策,否则会引入评估偏差


⚠️ 四、常见误区与澄清

❌ 误区1:必须严格保留 20%~30% 作测试

  • 事实:测试集大小应由所需评估精度决定,而非固定比例。
  • 例如:若 10,000 个样本已能将误差估计标准差控制在 ±0.5%,则无需更多。

❌ 误区2:可以省略测试集,仅用训练+开发集

  • 风险:若在开发集上反复迭代,会导致对开发集过拟合,高估真实性能。
  • 建议始终保留独立测试集,除非:

    • 开发集极大(如 >100,000 样本),且你确信未过拟合;
    • 应用场景对性能精度要求极低(如内部原型)。

💡 吴恩达强调:“有个单独的测试集让我更安心。”

❌ 术语混淆

  • 有些人称“测试集”实为“开发集”(因在其上调试)。
  • 正确做法:明确区分:

    • Dev Set = 用于调试(Validation Set)
    • Test Set = 用于最终评估(Hold-out Set)

📐 五、如何确定 Dev/Test 集大小?

1. 开发集大小

需满足:

\[\text{能以统计显著性区分两个竞争模型的性能差异}\]

例如:若模型 A 准确率 90.1%,模型 B 为 90.3%,则需足够样本使该差异显著(如 p ✅ 若希望 $\sigma_{\hat{\epsilon}}$$

n_{\text{test}} > \frac{0.1 \times 0.9}{(0.005)^2} = 3600

\[故约 **4,000~10,000 样本**通常足够。\]

✅ 六、总结:最佳实践指南

场景建议划分
小数据($N 10^6$ 训练集 >99%,Dev/Test 各数千至数万
是否必须 Test Set?强烈建议保留,除非 Dev 极大且不迭代
Dev/Test 分布必须同分布!否则评估无效

🔚 结语

在深度学习时代,数据划分的核心逻辑从“比例固定”转向“目的驱动”

  • 训练集越大越好(提升模型容量)
  • Dev/Test 只需“够用” (保证评估可靠性)

灵活运用这一思想,可更高效地利用海量数据,同时避免评估偏差,构建真正鲁棒的 AI 系统。

本文由作者按照 CC BY 4.0 进行授权