吴恩达deep learning ai 笔记总结(3-2) 构建机器学习项目-机器学习策略(下)

构建机器学习项目-机器学习策略(上)

Carrying out error analysis

对已经建立的机器学习模型进行错误分析(error analysis)十分必要,而且有针对性地、正确地进行error analysis更加重要。
当我们在训练一个模型的时候,如一个猫和狗分类模型,最终得到了90%90%的精确度,即有10%10%的错误率。所以我们需要对模型的一些部分做相应调整,才能更好地提升分类的精度。

如果不加分析去做,可能几个月的努力对于提升精度并没有作用。所以一个好的误差分析的流程就相当重要。

举个例子,猫类识别问题,已经建立的模型的错误率为10%。为了提高正确率,我们发现该模型会将一些狗类图片错误分类成猫。一种常规解决办法是扩大狗类样本,增强模型对够类(负样本)的训练。但是,这一过程可能会花费几个月的时间,耗费这么大的时间成本到底是否值得呢?也就是说扩大狗类样本,重新训练模型,对提高模型准确率到底有多大作用?这时候我们就需要进行error analysis,帮助我们做出判断。

方法很简单,我们可以从分类错误的样本中统计出狗类的样本数量。根据狗类样本所占的比重,判断这一问题的重要性。假如狗类样本所占比重仅为5%,即时我们花费几个月的时间扩大狗类样本,提升模型对其识别率,改进后的模型错误率最多只会降低到9.5%。相比之前的10%,并没有显著改善。我们把这种性能限制称为ceiling on performance。相反,假如错误样本中狗类所占比重为50%,那么改进后的模型错误率有望降低到5%,性能改善很大。因此,值得去花费更多的时间扩大狗类样本。

这种error analysis可以同时评估多个影响模型性能的因素,通过各自在错误样本中所占的比例来判断其重要性。例如,猫类识别模型中,可能有以下几个影响因素:

  • Fix pictures of dogs being recognized as cats
  • Fix great cats(lions, panthers, etc…) being misrecognized
  • Improve performance on blurry images

Cleaning up incorrectly labeled data

监督式学习中,训练样本有时候会出现输出y标注错误的情况,即incorrectly labeled examples。
如果这些label标错的情况是随机性的(random errors),深度学习算法对其包容性是比较强的,即健壮性好,一般可以直接忽略,无需修复。
然而,如果是系统错误(systematic errors),这将对深度学习算法造成影响,降低模型性能。

如果是dev/test sets中出现incorrectly labeled data,该怎么办呢?
方法很简单,error analysis,统计dev sets中所有分类错误的样本中incorrectly labeled data所占的比例。根据该比例的大小,决定是否需要修正所有incorrectly labeled data,还是可以忽略。举例说明,若:

  • Overall dev set error: 10%
  • Errors due incorrect labels: 0.6%
  • Errors due to other causes: 9.4%
    Errors due incorrect labels所占的比例仅为6%,占dev set error的6%,而其它类型错误占dev set error的94%。因此,这种情况下,可以忽略incorrectly labeled data。

如果优化后:

  • Overall dev set error: 2%
  • Errors due incorrect labels: 0.6%
  • Errors due to other causes: 1.4%
    Errors due incorrect labels所占的比例依然为0.6%,但是却占dev set error的30%,而其它类型错误占dev set error的70%。因此,这种情况下,incorrectly labeled data不可忽略,需要手动修正。

dev set的主要作用是在不同算法之间进行比较,选择错误率最小的算法模型。但是,如果有incorrectly labeled data的存在,当不同算法错误率比较接近的时候,我们无法仅仅根据Overall dev set error准确指出哪个算法模型更好,必须修正incorrectly labeled data。

关于修正incorrect dev/test set data,有几条建议:

  • Apply same process to your dev and test sets to make sure they continue to come from the same distribution
  • Consider examining examples your algorithm got right as well as ones it got wrong
  • Train and dev/test data may now come from slightly different distributions

Build your first system quickly then iterate

构建一个机器学习应用模型,
应该先快速构建第一个简单模型,然后再反复迭代优化。

  • Set up dev/test set and metric
  • Build initial system quickly
  • Use Bias/Variance analysis & Error analysis to prioritize next steps

Training and testing on different distribution

在深度学习的时代,因为需求的数据量非常大,现在很多的团队,使用的训练数据都是和开发集和测试集来自不同的分布。
以猫类识别为例,train set来自于网络下载(webpages),图片都是high quality的;
dev/test set来自用户手机拍摄(mobile app),图片是low quality的。
假如train set的大小为200000,而dev/test set的大小为10000,显然train set要远远大于dev/test set。

在这里插入图片描述
虽然dev/test set质量不高,但是模型最终主要应用在对这些模糊的照片的处理上。面对train set与dev/test set分布不同的情况,有两种解决方法。

方法一:
将train set和dev/test set完全混合,然后在随机选择一部分作为train set,另一部分作为dev/test set。

  • 优点:
    实现train set和dev/test set分布一致。
  • 缺点:
    dev/test set中webpages图片所占的比重比mobile app图片大得多,这样,dev set的算法模型对比验证,仍然主要由webpages决定,实际应用的mobile app图片所占比重很小,达不到验证效果。因此,这种方法并不是很好。

方法二:
将原来的train set和一部分dev/test set组合当成train set,剩下的dev/test set分别作为dev set和test set。

  • 优点:
    保证了验证集最接近实际应用场合。这种方法较为常用,而且性能表现比较好。

Use Bias / Variance analysis & Error analysis to prioritize next steps

根据human-level error、training error和dev error的相对值可以判定是否出现了bias或者variance。但是,需要注意的一点是,如果train set和dev/test set来源于不同分布,则无法直接根据相对值大小来判断。例如某个模型human-level error为0%,training error为1%,dev error为10%。根据我们之前的理解,显然该模型出现了variance。但是,training error与dev error之间的差值9%可能来自算法本身(variance),也可能来自于样本分布不同。比如dev set都是很模糊的图片样本,本身就难以识别,跟算法模型关系不大。因此不能简单认为出现了variance。

在可能伴有train set与dev/test set分布不一致的情况下,定位是否出现variance的方法是设置train-dev set
train-dev set: Same distribution as training set, but not used for training.
从原来的train set中分割出一部分作为train-dev set,train-dev set不作为训练模型使用,而是与dev set一样用于验证。
这样,我们就有training error、training-dev error和dev error三种error。其中,training error与training-dev error的差值反映了variance;training-dev error与dev error的差值反映了data mismatch problem,即样本分布不一致。

举例说明,如果training error为1%,training-dev error为9%,dev error为10%,则variance问题比较突出。如果training error为1%,training-dev error为1.5%,dev error为10%,则data mismatch problem比较突出。通过引入train-dev set,能够比较准确地定位出现了variance还是data mismatch。

总结一下human-level error、training error、training-dev error、dev error以及test error之间的差值关系和反映的问题:
在这里插入图片描述
一般情况下,human-level error、training error、training-dev error、dev error以及test error的数值是递增的,但是也会出现dev error和test error下降的情况。这主要可能是因为训练样本比验证/测试样本更加复杂,难以训练。

发布了45 篇原创文章 · 获赞 4 · 访问量 2518

猜你喜欢

转载自blog.csdn.net/keke_Memory/article/details/102762595