第九课:机器学习策略(2)(ML Strategy)
2.1 进行误差分析(Carrying out error analysis)
将识别错误的例子人工挑选出来,同时查看每一个错误的原因,比如识别猫的时候,其中有8%是狗,有43%是大猫,61%是模糊,我们可以在开发集或测试集里观察假阳性(False Positives)和假阴性(False Negatives),统计属于不同错误类型的错误数量,如上图所示。然后根据错误所占比重首先根据高比重错误进行改善。
2.2 清除标注错误的数据(Cleaning up Incorrectly labeled data)
开发集和测试集必须来自同一分布。
如上图,总体错误10%的时候,如果有0.6%的错误是由于标记出错导致的,其他都是由其他错误导致的,我们可以忽略掉这个错误,由标记出错导致的错误所占比重比较少。
如果总体错误是2%,我们需要重新对开发集进行标记。
2.3 快速搭建一个系统并进行迭代
一句话:自己快速搭建一个简单的系统并进行迭代。
2.4 使用来自不同分布的数据进行测试和训练
训练集与测试集和开发集的样本可以来自不同的分布,比如猫图片识别中,训练集可以是网上爬取的数据,而测试集和开发集可以是用户app上上传的图片。
2.5 数据分布不匹配时的偏差与方差的分析
前提是训练集和开发测试集来自不同的分布
上图所示,对于大多数据来说,第一行表示人类水平错误率,第二行表示训练错误率,第三行表示训练-开发集错误率10%,一个集合里面既包括训练集也包括开发集。红框的最后是开发集或者测试集错误率6%。通过如上图所示Human level和training error之间的两个数字之差表示了可避免偏差的大小,training error和training-dev error之间的差距表示了方差的大小,training-dev error和Dev/test dev之间的差距表示了数据不匹配问题。
上图是一个举例,便于理解。
方差、偏差问题都有对应的解决方法,而数据不匹配问题的解决方法下节课讲。
2.6 处理数据不匹配问题
总而言之,如果认为存在数据不匹配问题,建议做错误分析,或者看看训练集,或者看看开发集,试图找出,试图了解这两个数据分布到底有什么不同,然后看看是否有办法收集更多看起来像开发集的数据作训练。
我们谈到其中一种办法是人工数据合成,人工数据合成确实有效。在语音识别中。我已经看到人工数据合成显著提升了已经非常好的语音识别系统的表现,所以这是可行的。但当你使用人工数据合成时,一定要谨慎,要记住你有可能从所有可能性的空间只选了很小一部分去模拟数据。
人工数据合成例子:汽车语音识别里面在实际情况中是有噪音的,我们可以找到清晰的录音再找到噪音,然后两个合成就得到了需要的测试集(尽量和开发集一致)。
2.7 迁移学习(Transfer learning)
从A迁移到B的条件:
1.A与B有相同的输入:如都是图像或者都是语音
2.对于B来说A有更多的数据。
3.来自于A的低层次特征对于B学习来说是有帮助的。
2.8 多任务学习(Multi-task learning)
多任务学习能让你训练一个神经网络来执行许多任务,这可以给你更高的性能,比单独完成各个任务更高的性能。但要注意,实际上迁移学习比多任务学习使用频率更高。我看到很多任务都是,如果你想解决一个机器学习问题,但你的数据集相对较小,那么迁移学习真的能帮到你,就是如果你找到一个相关问题,其中数据量要大得多,你就能以它为基础训练你的神经网络,然后迁移到这个数据量很少的任务上来。
2.9 端到端的深度学习
端到端的深度学习:训练一个巨大的神经网络,输入是一段音频,输出直接是听写文本,通常端到端的深度学习系统表现更好。
端到端的深度学习只需要把训练集拿过来,直接学到了x和y之间的函数映射,绕过其中很多步骤。
2.10 是否使用端到端的深度学习
优点:
1.只要有足够多的(x,y)数据就可以训练足够大的神经网络
2.所需要的手工设计的组件更少,不用花太多时间手工设计功能。
缺点:
1.需要大量的数据
2.它排除了可能有用的手工设计组件,功能。