2.1 进行误差分析(Carrying out error analysis)
从举的例子中我理解这里的误差分析,其实就是通过分析误差因素来选择优化系统的正确方向。
所以总结一下,进行错误分析,你应该找一组错误样本,可能在你的开发集里或者测试集里,观察错误标记的样本,看看假阳性(false positives)和假阴性(false negatives),统计属于不同错误类型的错误数量。在这个过程中,你可能会得到启发,归纳出新的错误类型,就像我们看到的那样。如果你过了一遍错误样本,然后说,天,有这么多Instagram滤镜或Snapchat滤镜,这些滤镜干扰了我的分类器,你就可以在途中新建一个错误类型。总之,通过统计不同错误标记类型占总数的百分比,可以帮你发现哪些问题需要优先解决,或者给你构思新优化方向的灵感。
2.2 清除标注错误的数据(Cleaning up Incorrectly labeled data)
如果你发现你的数据有一些标记错误的样本,你该怎么办?
1、首先,深度学习算法对于训练集中的随机错误是相当健壮的(robust)。只要你的标记出错的样本,只要这些错误样本离随机错误不太远,有时可能做标记的人没有注意或者不小心,按错键了,如果错误足够随机,那么放着这些错误不管可能也没问题,而不要花太多时间修复它们。
2、当然你浏览一下训练集,检查一下这些标签,并修正它们也没什么害处。有时候修正这些错误是有价值的,有时候放着不管也可以,只要总数据集总足够大,实际错误率可能不会太高。
3、深度学习算法对随机误差很健壮,但对系统性的错误就没那么健壮了。
最后我讲几个建议:
在构造实际系统时,通常需要更多的人工错误分析,更多的人类见解来架构这些系统。
其次,不知道为什么,我看一些工程师和研究人员不愿意亲自去看这些样本,也许做这些事情很无聊,坐下来看100或几百个样本来统计错误数量,但我经常亲自这么做。当我带领一个机器学习团队时,我想知道它所犯的错误,我会亲自去看看这些数据,尝试和一部分错误作斗争。我想就因为花了这几分钟,或者几个小时去亲自统计数据,真的可以帮你找到需要优先处理的任务,我发现花时间亲自检查数据非常值得,所以我强烈建议你们这样做,如果你在搭建你的机器学习系统的话,然后你想确定应该优先尝试哪些想法,或者哪些方向。
2.3 快速搭建你的第一个系统,并进行迭代(Build your first system quickly, then iterate)
老师的意思就是,先别管现在是啥样,系统能上就先上,然后再进行不断优化。
1、快速搭好你的第一个系统,然后开始迭代。
2、快速设立开发集和测试集还有指标,这样就决定了目标所在,如果你的目标定错了,之后改也是可以的。但一定要设立某个目标,然后我建议你马上搭好一个机器学习系统原型,然后找到训练集,训练一下,看看效果,开始理解你的算法表现如何,在开发集测试集,你的评估指标上表现如何。当你建立第一个系统后,你就可以马上用到之前说的偏差方差分析,还有之前最后几个视频讨论的错误分析,来确定下一步优先做什么。
重要的是:机器学习算法应用到新的应用程序里,主要目标是弄出能用的系统,搭建快速而粗糙的实现,然后用它做偏差/方差分析,用它做错误分析,然后用分析结果确定下一步优先要做的方向。
2.4 使用来自不同分布的数据,进行训练和测试(Training and testing on different distributions)
2.5 数据分布不匹配时,偏差与方差的分析(Bias and Variance with mismatched data distributions)
定义一组新的数据训练-开发集。
2.6 处理数据不匹配问题(Addressing data mismatch)
2.7 迁移学习(Transfer learning)
所谓的迁移学习,指的是在A上学习得到的模型应用到B上。
2.8 多任务学习(Multi-task learning)
2.9 什么是端到端的深度学习?(What is end-to-end deep learning?)
2.10 是否要使用端到端的深度学习?(Whether to use end-to-end learning?)
第七课:机器学习(ML)策略(2)
Deep Learning in Health Care slides (by Pranav)