单一误差分析
假设我们面对一个猫分类器的准确率不够的原因。
队友看了一下算法分类出错的例子,注意到算法将一些够狗分类为猫。
在这种条件下,我们应不应该做一个项目专门处理狗?比如搜集更多的狗的图片,或者设计一些只处理狗的算法功能之类的,从而使得猫分类器在狗图上做得更好(狗不再被分类成猫)。有一个误差分析流程,可以让我们很快知道这个方向是否值得努力。
首先收集比如100个标记错误的开发集(dev set)的例子。然后手动检查有多少错误标记的例子是狗。
假设100个例子中有5%的例子是狗,那么即使我们完全解决了狗的问题,你也只能修正错误例子中的5%,使得准确率从10%变为9.5%。(在机器学习中,我们有时称为性能上限the ceiling on performance)
在这种情况下,“做一个项目专门处理狗”并不是一个值得努力的方向。
另外,吴恩达老师对手动操作的评价:“我知道在机器学习中,有时候我们很鄙视手工操作,或者使用了太多的manual insight。但如果你要搭建应用系统,那这个简单的人工统计步骤和误差分析,可以节省大量的时间,可以迅速决定什么是最重要的或者最有希望的方向。”
multiple 误差分析
简单来说,包括下面这么几步:
- 列出可以想到的优化思路
- 列出一个表格,横轴为优化思路(可扩充)(+comments),纵轴为错误例子的标号
- 遍历错误例子的标号,在相应的优化思路下打勾
- 计算各个优化思路的比例
这样得到的占比最高的优化思路,就是最应该尝试的思路。
总之,通过统计不同错误标记类型占总数的百分比,可以帮你发现哪些问题需要优先解决,或者给你构思新优化方向的灵感。
你的监督学习的问题的数据由输入X和输出标签Y构成,但是有些时候我们会发现我们人为定标的Y的有问题的。
当这种错误发生在训练集training set
的时候:
深度学习算法对于训练集training set
的随机误差是相当鲁棒的(DL algorithms are quite robust to random errors in the training set)。
也就是说,只要这些错误例子离随机误差差不太远,那么放着不管可能也没问题,当然修正了也可以。
实际的做法是,在检查错误样本的时候,在表格中加入incorrectly labeled
一列
然后由% of total
来决定下一步努力的方向。
对于左边的情况,我们首先应该解决其他问题;而对于右边的情况,我们则应该首先解决incorrect labels
的问题。而且还有一个问题,当标记错误的比重,相对于错误率不可忽略时,开发集就不能再告诉我们哪一个模型更好。
假设对于这两种模型,errors due incorrect labels
有0.6%,那么开发集就不能告诉我们哪一个模型更好。
在这种情况下,我们也应该首先解决incorrect labels
的问题。Guidelines
- 开发集和测试集应采用相同的操作,来保证二者的数据同分布。
- 强烈建议在检查判断错误的例子时,也看一下判断正确的例子。
- 开发集和测试集不一定要用到训练集上,因为训练集对随机误差有鲁棒性,训练集和开发集/测试集的分布略有不同是可以接受的。