2.2 清楚标注错误的数据(Cleaning up Incorrectly labeled data)

训练集:深度学习算法对于训练集中的随机错误是相当健壮的(robust)。只要这些错误样本离随机错误不太远,有时可能做标记的人没有注意或者不小心,按错键了,如果错误足够随机,放着这些错误不管可能也没问题,而不要花太多时间修复它们,只要总数据集足够大,实际错误率可能不会太高

深度学习算法对随机误差很健壮,但对系统性的错误没那么健壮。如果做标记的人一直把白色的狗标记成猫,那就成问题。因为分类器学习之后,会把所有白色的狗都分类为猫。但随机错误或近似随机错误,对于大多数深度学习算法来说不成问题

是否值得修正6%标记出错的样本:

  • 如果标记错误严重影响了在开发集上评估算法的能力,应该去花时间修正错误的标签

  • 如果没有严重影响到用开发集评估成本偏差的能力,不应该花时间去处理

看3个数字来确定是否值得去人工修正标记出错的数据:

  • 看整体的开发集错误率,系统达到了90%整体准确度,10%错误率,应该看错误标记引起的错误的数量或者百分比。6%的错误来自标记出错,10%的6%是0.6%,剩下的占9.4%,是其他原因导致的,比如把狗误认为猫,大猫图片。即有9.4%错误率需要集中精力修正,而标记出错导致的错误是总体错误的一小部分而已,应该看其他原因导致的错误

  • 错误率降到了2%,但总体错误中的0.6%还是标记出错导致的。修正开发集里的错误标签更有价值

如果决定要去修正开发集数据,手动重新检查标签,并尝试修正一些标签,这里还有一些额外的方针和原则需要考虑:

  • 不管用什么修正手段,都要同时作用到开发集和测试集上,开发和测试集必须来自相同的分布。开发集确定了目标,当击中目标后,希望算法能够推广到测试集上,这样能够更高效的在来自同一分布的开发集和测试集上迭代

  • 如果打算修正开发集上的部分数据,最好也对测试集做同样的修正以确保它们继续来自相同的分布。可以让一个人来仔细检查这些标签,但必须同时检查开发集和测试集

  • 要同时检验算法判断正确和判断错误的样本,如果只修正算法出错的样本,算法的偏差估计可能会变大,会让算法有一点不公平的优势

修正训练集中的标签相对没那么重要,如果训练集来自稍微不同的分布,对于这种情况学习算法其实相当健壮,通常是一件很合理的事情

几个建议:

  • 构造实际系统时,需要更多的人工错误分析,更多的人类见解来架构这些系统

  • 搭建机器学习系统时,花时间亲自检查数据非常值得,可以帮你找到需要优先处理的任务,然后确定应该优先尝试哪些想法,或者哪些方向

Last updated