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 进行授权