02 清除标注错误的数据(Cleaning up Incorrectly Labeled Data)
02 清除标注错误的数据(Cleaning up Incorrectly Labeled Data)
02 清除标注错误的数据(Cleaning up Incorrectly Labeled Data)
一、问题背景
在监督学习中,训练数据由输入 $x^{(i)}$ 和标签 $y^{(i)}$ 构成。但在实际项目中,标签可能出错(即人类标注错误),例如:
- 将狗误标为猫($y=1$ 应为 $y=0$);
- 或将非猫图像(如猫的图画)误标为猫。
这类样本称为 “标记错误的样本(incorrectly labeled examples)” 。
二、是否值得修正错误标签?
✅ 核心原则:
是否修正标签,取决于该类错误对模型性能评估和优化的影响程度。
三、训练集 vs 开发/测试集中的标签错误
1. 训练集中的标签错误
深度学习对随机标签错误具有鲁棒性(robust) :
- 如果错误是随机的(如偶尔按错键),且比例不高,通常无需修正。
- 模型仍能从大量正确样本中学习到有效模式。
但系统性错误(systematic errors)很危险:
- 例如:总是把白狗标为猫 → 模型会学到错误的决策边界。
- 这类错误必须修正。
📌 建议:若资源有限,可优先不修正训练集标签;若发现系统性偏差,则需处理。
2. 开发集 / 测试集中的标签错误
开发集和测试集用于评估和比较模型性能,其标签准确性至关重要。
🔍 错误分析方法:
在错误分析表中增加一列:“是否标签错误? ”
| 样本ID | 模型预测 | 开发集标签 | 是否错误? | 错误类型(如:狗→猫) | 是否标签错误? |
|---|---|---|---|---|---|
| 98 | 0 | 1 | 是 | 背景有猫未被注意 | ✔️ |
通过统计,可得:
- 总开发集错误率:$E_{\text{dev}}$
- 其中因标签错误导致的错误占比:$E_{\text{label}}$
📊 决策依据:看三个关键数字
- 整体开发集错误率:$E_{\text{dev}}$
- 标签错误导致的绝对错误率:$E_{\text{label}}$
- 标签错误占总错误的比例:$\frac{E_{\text{label}}}{E_{\text{dev}}}$
🧠 两种典型场景:
| 场景 | $E_{\text{dev}}$ | $E_{\text{label}}$ | $\frac{E_{\text{label}}}{E_{\text{dev}}}$ | 建议 |
|---|---|---|---|---|
| 初期模型 | 10% | 0.6% | 6% | 不优先修正,聚焦其他错误(如狗→猫) |
| 高性能模型 | 2% | 0.6% | 30% | 应修正标签,否则评估不可靠 |
💡 关键洞见:当模型性能提升后,标签错误在总错误中的相对占比显著上升,此时修正标签变得非常有价值。
四、修正开发/测试集标签的实践原则
✅ 原则 1:开发集与测试集必须同步修正
- 两者需来自同一分布。
- 若只修正开发集,会导致分布偏移(distribution shift),影响泛化评估。
- 做法:雇佣标注员时,同时检查 dev 和 test 集。
✅ 原则 2:不仅检查模型出错的样本,也应检查模型正确的样本
原因:有些样本模型“猜对了”,但标签本身是错的。
- 例如:标签为猫($y=1$),实际是狗,但模型碰巧输出 1。
- 若不修正,会低估真实错误率,产生“虚假优势”。
现实限制:由于正确样本占比高(如 98%),全检成本高。
- 折中做法:通常只检查错误样本,但需意识到此偏差。
✅ 原则 3:训练集标签可不修正
- 训练集通常远大于 dev/test 集。
- 深度学习对训练集中的随机标签噪声鲁棒。
- 策略:优先保证 dev/test 标签质量,训练集可容忍一定噪声。
⚠️ 注意:若训练集与 dev/test 分布不同(如网络图片 vs 手机拍摄),这是另一个问题(后续课程讨论),但dev/test 同分布是底线。
五、工程实践建议(吴恩达经验之谈)
不要迷信“端到端深度学习”
“我只是把数据喂给算法,效果拔群” —— 这在研究中常见,但在实际系统构建中不现实。
亲自查看数据
- 花 1–2 小时检查 100–200 个错误样本,能快速定位瓶颈。
- 人工错误分析是高效迭代的关键。
数据质量 > 模型复杂度
- 在高精度阶段,标签噪声可能成为主要瓶颈。
- 修正标签有时比调参更有效。
六、关键公式总结(KaTeX 兼容)
开发集总错误率:
\[E_{\text{dev}} = \frac{1}{m_{\text{dev}}} \sum_{i=1}^{m_{\text{dev}}} \mathbb{1}\left( \hat{y}^{(i)} \neq y^{(i)}_{\text{dev}} \right)\]其中因标签错误导致的错误数:
\[E_{\text{label}} = \frac{1}{m_{\text{dev}}} \sum_{i=1}^{m_{\text{dev}}} \mathbb{1}\left( \hat{y}^{(i)} \neq y^{(i)}_{\text{dev}} \land y^{(i)}_{\text{true}} \neq y^{(i)}_{\text{dev}} \right)\]标签错误占总错误比例:
\[\text{Label Error Ratio} = \frac{E_{\text{label}}}{E_{\text{dev}}}\]
其中 $\mathbb{1}(\cdot)$ 为指示函数,$y_{\text{true}}$ 为真实标签(需人工核查)。
七、总结口诀(便于记忆)
- 训练标签错,随机可放过;系统性错误,必须马上改。
- 开发测试错,影响评估准;错误占比高,修正不能拖。
- Dev Test 同分布,修正要同步;只改错样本,小心有偏差。
- 高手看数据,不靠猜模型;亲手查百例,胜过调千参。
本文由作者按照 CC BY 4.0 进行授权