分享

吴恩达《Machine_Learning_Yearning》中文版 第17-19章误差分析


问题导读

1.将大型开发集拆分为哪两个子集?
2.Eyeball 和 Blackbox 开发集该设置多大?
3.Eyeball 开发集的作用是什么?










17 将大型开发集拆分为两个子集,专注其一


假设你有一个含有 5000 个样本的大型开发集,并有着 20% 的误差。因此算法将误分类 1000 张开发集图片。手动检查这 1000 张图片会花费很长时间,因此我们在误差分析时可以决定不使用所有的图片。
在这种情况下,我会明确地将开发集分成两个子集,并只专注其中的一个。你将会更快地过拟合手动查看的那些图片,而另一部分没有被手动查看的图片可以拿来调参。
1.png
继续上面的例子,在该例子中算法将误分类 5000 个开发集样本中的 1000 个。假设我们想手动检查约 100 个错误样本(整体的10%)进行误差分析。你应该随机选择 10% 的开发集,并将其放入 Eyeball 开发集中(译者注:直译为眼球不妥,保留原文),以提醒我们自己,我们正在用眼睛看它。(对于语音识别项目,你可能需要听一些音频的剪辑,此时则将数据集称为 Ear 开发集)。因此 Eyeball 开发集将有 500 个样本,其中预计的算法误分类样本约 100 个。
第二个子集叫做 Blackbox 开发集(直译为黑箱,保留原文),它有着剩余的 4500 个样本。你可以使用 Blackbox 开发集,通过测量错误率来自动评估分类器,也可以使用它来选择算法或调整超参数。但是,你应该避免将目光聚焦于此。我们使用术语“ Blackbox ”是因为我们只使用该子集来获得分类器的“ Blackbox ”评价。
2.png


为什么我们将开发集明确分为 Eyeball 开发集和 Blackbox 开发集呢?当你在 Eyeball 开发集中建立对样本的直观认识之后,则容易更快地过拟合。当你发现 Eyeball 开发集的性能比 Blackbox 开发集提升得更快,说明已经过拟合 Eyeball 开发集了。此时可能需要丢弃它并寻找一个新的 Eyeball 开发集,比如可以将更多 Blackbox 开发集中的样本移到 Eyeball 开发集中,也可以获取新的标注数据。

将开发集明确地分为 Eyeball 和 Blackbox 开发两个子集将很有帮助,它使你了解在人为的误差分析过程中 Eyeball 开发集何时开始发生过拟合。



18 Eyeball 和 Blackbox 开发集该设置多大?



Eyeball 开发集应该大到能够让你对算法主要的错误类别有所察觉。如果你正在处理一项人类表现良好的任务(比如识别图像中的猫),下面是一些粗略的指导方案:
  • 如果分类器在 Eyeball 开发集上只犯错 10 次,这个开发集就有点小了。只有 10 个错误样本的话,很难准确估计不同错误类别的影响。但如果数据非常少且不能提供更多的 Eyeball 开发集样本时,聊胜于无,这将有助于确立项目的优先级。
  • 如果分类器在 Eyeball 开发集上样本上犯了约 20 次错误,你将会开始大致了解主要的误差来源。
  • 如果有约 50 个错误样本,你将会比较好地了解主要的误差来源。
  • 如果有约 100 个错误样本,你将会很清楚主要的误差来源。我见过有人手动分析更多的错误样本——有时候多达500个。只要你有足够多的数据,这将是无害的。

假设你的分类器有 5% 的错误率。为了确保在 Eyeball 开发集中有约 100 个误分类的样本,样本开发集应该有约 2000 个样本(因为 0.05 * 2000 = 100)。分类器的错误率越低,为了获得足够多的错误样本进行误差分析,需要的 Eyeball 开发集就越大。
如果你正在处理一个人类也做不好的任务,那么检查 Eyeball 开发集将不会有大的帮助,因为很难找出算法不能正确分类一个样本的原因。此时你可能会忽略了 Eyeball 开发集的存在,我们会在后面的章节讨论诸如此类问题的指导方案。

Blackbox 开发集该有多大呢?我们先前提到,开发集有约 1000-10000 个样本是正常的 。完善一下该陈述,一个有 1000-10000 个样本的 Blackbox 开发集通常会为你提供足够的数据去调超参和选择模型,即使数据再多一些也无妨。而含有 100 个样本的 Blackbox 开发集虽然比较小,但仍然有用。
如果开发集较小,那么你可能没有足够的数据将其分成足够大的 Eyeball 开发集和 Blackbox 开发集来满足目的。相反,你的整个开发集可能需要用作 Eyeball 开发集——即,你将手动检查所有的开发集数据。
在 Eyeball 和 Blackbox 开发集之间,我认为 Eyeball 开发集更加重要(假设你正在研究一个人类能够很好解决的问题,检查这些样本能帮你更有洞悉力)。如果你只有一个 Eyeball 开发集,你可以在这个开发集上进行误差分析、模型选择和超参数调整,缺点是过拟合开发集的风险更大。
如果你有充足的权限去访问数据,那么 Eyeball 开发集的大小将主要取决于你能够手动分析样本的时间。实际上我很少看到有人手动分析超过 1000 个错误样本。


19小结:基础误差分析


  • 当你开始一个新项目,尤其是在一个你不擅长领域时,很难正确猜测出最有前景的方向。
  • 所以,不要在一开始就试图设计和构建一个完美的系统。相反,应尽可能快(可能在短短几天内)地构建和训练一个基本系统。然后使用误差分析去帮助你识别出最有前景的方向,并据此不断迭代改进你的算法。
  • 通过手动检查约 100 个算法错误分类的开发集样本来执行误差分析,并计算主要的错误类别。用这些信息来确定优先修正哪种类型的错误。
  • 考虑将开发集分为人为检查的 Eyeball 开发集和非人为检查的 Blackbox 开发集。如果在 Eyeball 开发集上的性能比在 Blackbox 开发集上好很多,那么你已经过拟合 Eyeball 开发集,并且应该考虑为其获得更多的数据。
  • Eyeball 开发集应该足够大,以便于算法有足够多的错误分类样本供你分析。对很多应用来说,含有1000-10000个样本的 Blackbox 开发集已足够。
  • 如果你的开发集不够大到可以按照这种方式进行拆分,那么就使用 Eyeball 开发集来用于人工误差分析、模型选择和调超参。





本帖被以下淘专辑推荐:

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条