吴恩达新书《Machine Learning Yearning》读后总结,哪些问题不适合使用机器学习

《Machine Learning Yearning》这本书是关于如何构建机器学习项目的开发流程。其中包括了许多在其他地方很难找到的实用见解,形式也是非常容易和团队成员及合作者共享的。大部分人工智能技术课程都是向你阐述不同的机器算法是如何工作的,而这本书是教你如何实际使用它们。如果你想要成为人工智能行业的技术主管,这本书一定会对你有所帮助。

作者简介

image
吴恩达(Andrew NG)是一名计算机科学家、公司高管、投资者、企业家,也是人工智能领域的顶尖专家之一。他曾担任百度的副总裁兼首席科学家,同时也是斯坦福大学(Stanford University)兼职教授。他创造的机器学习在线课程广受好评,现在已经成为最受欢迎的在线课程之一。他还是Coursera.com的联合创始人,Google Brain的前负责人。在百度的时候,他带领的人工智能团队达到数千人。

前言

这本书从一个小故事讲起。让我们想象一下,你的公司想要构建一个领先的猫探测系统。你已经构建了一个原型,但可惜的是,这个系统的性能不是很好。你的团队提出了一些关于如何改进系统的想法,但是你不知道应该遵循哪个方向。也许你可以构建出领先世界的猫探测系统,但是你也可能因为选错方向而浪费几个月的时间。

这本书可以告诉你,如何在这样的情况下做出决定并分清轻重缓急。根据吴恩达的说法,大多数机器学习的问题都会给你留下一些线索,告诉你下一步应该做什么,或者应该避免什么。学习“读懂”这些线索是机器学习领域的一项关键技能。

简而言之,《Machine Learning Yearnin》旨在让你深入理解如何确定机器学习项目的技术方向。

由于你的团队成员可能会对你提出的新方法持怀疑态度,所以吴恩达将这本书的章节做得非常精简(1-2页),这样你的团队成员就能够在几分钟内阅读完,并理解这些概念背后的思想。需要说明的是,这本书并不适合完全的初学者,因为它需要你对监督学习和深度学习有一些基本的了解。

在这篇文章中,我会用我自己的语言和理解来分享这本书的六个核心概念。

总结1:反复迭代……

吴恩达在全书中一直强调,因为机器学习是一个迭代的过程,因此快速迭代至关重要。你应该尽快构建一个简单的原型,而不是考虑如何为你的问题构建一个完美的机器学习系统。如果你不是该问题领域的专家,这一点就更加重要了,因为要找出正确的最佳方向实在是太难了。正确的做法是,你应该在几天内构建出第一个原型,然后就会出现一些线索帮你找到改进的方向。在下一个迭代中,你可以基于其中一个线索改进系统,并构建它的下一个版本。然后继续重复这个步骤。他还指出,迭代越快,取得的进展就越多。这本书的其他概念也都是建立在这个原则之上的。要注意的是,这一点仅仅适用于那些只想构建一个基于人工智能的应用,而不是在这个领域做研究的人。

总结2:使用单一的评估指标

image

这个概念建立在前一个概念的基础上,关于为什么应该选择值评估指标的解释非常简单:它使您能够快速评估算法,从而能够更快地迭代。而使用多个评估指标只会增加比较算法的难度。

假设有两种算法。前者的准确率为94%,召回率为89%。第二种方法的准确率为88%,召回率为95%。在这种情况下,如果你没有选择一个单一的评估指标,那么就很难指出哪个分类器更好,这就需要花费你更多的时间来计算它。问题是,如果每一次迭代都要浪费一些时间,从长期来看,这些时间累积起来就会觉得很震撼了。因为你会尝试很多关于架构、参数、特性等的想法。而如果你使用的是单值评估指标(如准确率或f1值),那么你就能够将模型按照其性能进行排序,并快速决定哪个模型最好。另外,把多个指标合并成一个,也是可以改善评估过程的方法。

当然,有些机器学习问题需要满足多个指标,例如考虑运行时间。吴恩达解释说,你应该定义一个“可接受的”运行时间,从而快速排出那些太慢的算法,然后再用你的单值评估指标来比较那些符合条件的算法。

简而言之,单值评估指标可以使你快速评估算法,从而更快地迭代。

概念3:误差分析至关重要

image

误差分析是查看算法结果中不正确示例的过程。例如,假设你的猫探测器将鸟类误认为猫,那么你就需要对这个问题提出一些解决方案。

通过正确的误差分析,你就可以估计出一个改进方案实际上能提高多少系统性能。这样的话我们就不用花费几个月的时间先来实现这个方案,然后才发现它对你的系统并不重要。这样你就能够决定将资源投到哪个方案上效果是最好的。如果你发现错误分类的图像中只有9%是鸟类,那么在鸟类的图片上,无论你如何改进算法都起不到什么作用,因为它最多只能改善你9%的错误。

此外,通过误差分析,你还能同时快速判断多个改进方案的好坏。例如,加入验证集里有100张分类错误的图片,你只需要创建一个电子表格,然后一边检查一边填写。在电子表格中,每一个分类错误的图片为,每个改进方案为一列。然后你再仔细检查每一个错误分类的图片,并标记出可以正确分类图片的改进方案。之后你就会确切地知道,使用方案1,系统可以正确地对40%的错误分类图像进行分类,方案2为12%,方案3仅仅为9%。最终你就会得出结论,方案1是你的团队最应该进行改进的。

此外,一旦你开始仔细查看这些错误分类样本,你可能会找到更多的灵感来改善算法。

总结4: 最佳错误率

最佳错误率有助于指导你下一步该怎么做。在统计学上,它也常常被称为贝叶斯错误率。

假设你正在构建一个语音转文本的系统,你发现19%的用户上传音频文件的背景噪声非常明显,甚至人类都无法识别其中的内容。如果是这样的话,那么即使是最好的系统也可能有19%左右的错误率。与之相反,如果你处理问题的最佳错误率能达到0%,那么就可以指望你的系统也能做得差不多好。此外,它还可以帮助您检测算法是否存在高偏差或高方差,从而帮助你决定下一步该怎么做。

但是我们怎么才能知道最佳错误率是多少呢?对于人类擅长的任务,你可以将系统的性能与人类进行比较,这差不多就是最佳错误率。在其他情况下,通常很难定义。这就是为什么你应该去研究人类本身也能做好的问题。这一点我们会在下一个概念中进行讨论。

总结5:优先选择 人类能够容易解决的问题

在整本书中,吴恩达多次解释了为什么建议大家去研究人类自己也能解决的机器学习问题。例如语音识别、图像分类、物体检测等。原因有以下几点。

首先,更容易获得或创建一个带标签的数据集。因为如果人们能够自己解决这个问题,那么为你的机器学习算法准备些高精度的标签也就很简单了。

其次,你可以把人类的水准作为最佳错误率。定义一个合理的、可实现的最佳错误率有助于加速团队的开发进展,它还可以帮助你检测算法是否存在高偏差或高方差。

第三,它使你能够用你的人类直觉来进行误差分析。例如,如果你正在构建一个语音识别系统,而你的模型将其错误分类,那么你可以尝试理解:人类需要使用哪些信息来获得正确的转录,并使用这些信息相应地改进学习算法。虽然算法在越来越多的人类无法完成的任务上已经超越了人类,但是你还是应该尽量避免去研究这些问题。

总而言之,您应该避免这些任务,因为获取数据的标签会变得更加困难,你不能再依赖于人类的直觉,并且而且很难确定最佳错误率是多少。

总结6:如何划分数据集

在这本书中,吴恩达也提出了划分数据集的方法,建议如下:

· 训练集:你只需要用它来训练算法。

· 验证集:用于超参数调优、选择并创建合适的特征、做误差分析。基本上我们需要根据它来确定算法。

· 测试集:用于评估系统的性能,不能用于做决策。仅在评估时使用。

验证集和测试集令你的团队可以快速评估算法的性能。它们的目的是引导,让你为系统做出最正确的改进。

吴恩达建议,在选择验证集和测试集时,应该考虑系统部署后你想要搞定的真实场景,使他们能如实反映该场景中的数据。如果你预期数据与你现在的训练数据不同,这一点就更为重要了。例如,你训练时使用的是普通的相机图像,而以后你的系统作为手机应用程序的一部分,只会收到手机图片。如果你没有足够的手机照片来训练系统,就会出现这种情况。因此,你应该选择可以反映未来真实目标数据的样例作为测试集,而不是用来培训的数据。

此外,你应该根据同一分布选取验证集和测试集。否则,你的团队很有可能在验证集上构建一些性能很好的东西,结果却发现你最关注的在测试集上的性能非常差。