单一误差分析

假设我们面对一个猫分类器的准确率不够的原因。

队友看了一下算法分类出错的例子,注意到算法将一些够狗分类为猫。

神经网络 校正 神经网络训练误差图_算法分类


在这种条件下,我们应不应该做一个项目专门处理狗?比如搜集更多的狗的图片,或者设计一些只处理狗的算法功能之类的,从而使得猫分类器在狗图上做得更好(狗不再被分类成猫)。有一个误差分析流程,可以让我们很快知道这个方向是否值得努力。

神经网络 校正 神经网络训练误差图_监督学习_02


首先收集比如100个标记错误的开发集(dev set)的例子。然后手动检查有多少错误标记的例子是狗。

假设100个例子中有5%的例子是狗,那么即使我们完全解决了狗的问题,你也只能修正错误例子中的5%,使得准确率从10%变为9.5%。(在机器学习中,我们有时称为性能上限the ceiling on performance)

在这种情况下,“做一个项目专门处理狗”并不是一个值得努力的方向。

另外,吴恩达老师对手动操作的评价:“我知道在机器学习中,有时候我们很鄙视手工操作,或者使用了太多的manual insight。但如果你要搭建应用系统,那这个简单的人工统计步骤和误差分析,可以节省大量的时间,可以迅速决定什么是最重要的或者最有希望的方向。”

multiple 误差分析

神经网络 校正 神经网络训练误差图_机器学习_03


简单来说,包括下面这么几步:

  • 列出可以想到的优化思路
  • 列出一个表格,横轴为优化思路(可扩充)(+comments),纵轴为错误例子的标号
  • 遍历错误例子的标号,在相应的优化思路下打勾
  • 计算各个优化思路的比例

这样得到的占比最高的优化思路,就是最应该尝试的思路。

总之,通过统计不同错误标记类型占总数的百分比,可以帮你发现哪些问题需要优先解决,或者给你构思新优化方向的灵感。


你的监督学习的问题的数据由输入X和输出标签Y构成,但是有些时候我们会发现我们人为定标的Y的有问题的。

当这种错误发生在训练集training set的时候:

深度学习算法对于训练集training set的随机误差是相当鲁棒的(DL algorithms are quite robust to random errors in the training set)。

也就是说,只要这些错误例子离随机误差差不太远,那么放着不管可能也没问题,当然修正了也可以。

实际的做法是,在检查错误样本的时候,在表格中加入incorrectly labeled一列

神经网络 校正 神经网络训练误差图_机器学习_04


然后由% of total来决定下一步努力的方向。

神经网络 校正 神经网络训练误差图_机器学习_05


对于左边的情况,我们首先应该解决其他问题;而对于右边的情况,我们则应该首先解决incorrect labels的问题。而且还有一个问题,当标记错误的比重,相对于错误率不可忽略时,开发集就不能再告诉我们哪一个模型更好。

神经网络 校正 神经网络训练误差图_算法分类_06


假设对于这两种模型,errors due incorrect labels有0.6%,那么开发集就不能告诉我们哪一个模型更好。

在这种情况下,我们也应该首先解决incorrect labels的问题。Guidelines

神经网络 校正 神经网络训练误差图_监督学习_07

  • 开发集和测试集应采用相同的操作,来保证二者的数据同分布。
  • 强烈建议在检查判断错误的例子时,也看一下判断正确的例子。
  • 开发集和测试集不一定要用到训练集上,因为训练集对随机误差有鲁棒性,训练集和开发集/测试集的分布略有不同是可以接受的。