文章

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模型预测开发集标签是否错误?错误类型(如:狗→猫)是否标签错误?
9801背景有猫未被注意✔️

通过统计,可得:

  • 总开发集错误率:$E_{\text{dev}}$
  • 其中因标签错误导致的错误占比:$E_{\text{label}}$
📊 决策依据:看三个关键数字
  1. 整体开发集错误率:$E_{\text{dev}}$
  2. 标签错误导致的绝对错误率:$E_{\text{label}}$
  3. 标签错误占总错误的比例:$\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. 亲自查看数据

    • 花 1–2 小时检查 100–200 个错误样本,能快速定位瓶颈。
    • 人工错误分析是高效迭代的关键。
  3. 数据质量 > 模型复杂度

    • 在高精度阶段,标签噪声可能成为主要瓶颈
    • 修正标签有时比调参更有效。

六、关键公式总结(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 进行授权