授人以鱼不如授人以渔:吴恩达的7个建议
《Machine Learning Yearning》是人工智能和深度学习大师吴恩达的一本书。这本书着重介绍如何让机器学习算法发挥作用以及如何构建机器学习项目。在这里我们提供了7个非常有用的建议。
人工智能、机器学习和深度学习正在迅速发展并改变着许多行业。吴恩达是该领域的领军人物之一,他是Coursera的联合创始人,前百度AI集团的负责人,也是谷歌大脑的前负责人。他撰写的一本书,《Machine Learning Yearning》,可以教您如何构建机器学习项目。
吴恩达写到:
本书的重点不在于教您如何使用ML算法,而在于如何让ML算法起作用。一些技术课会给您一个工具,这本书教您如何使用这个工具。如果您渴望成为AI的技术领导者并且想要学习如何为您的团队设定方向,这本书将会对您有所帮助。
我们已经阅读了草稿,并从该书中选出了7个最有趣和有用的建议:
1.优化和满足指标
您应该考虑使用多个评估指标,而不是使用单个公式或指标评估算法。执行此操作的其中一种方法是要制定“优化”和“令人满意”的指标。
使用上面的例子,我们可以首先定义可接受的运行时间,比如小于100ms的任何事情 - 这是令我们“满意”的指标。它要求您的分类器必须足够好,因为运行时间需要低于这个值。这里的准确性是指“优化”指标。
快速选择dev/测试套件
在开始一个新项目时,吴恩达解释说他试图快速选择dev/测试集,从而给他的团队一个明确的目标。最好一开始就有明确的目标,并且有称不上“完美”的方案,然后迅速行动,而不是在过度思考。
这样说来,如果您突然意识到您的初始dev/测试集合不对,请不要害怕改变。原因可能是:
·您需要做好的实际分布不同于dev/测试集
·您已经安装了dev/测试集
·该指标测量的不是项目需要优化的内容
请记住,改变这并不是什么大不了的事。只要做到这一点,可以让您的团队知道您前进的新方向。
3.机器学习是一个迭代的过程:不要期望它能一次满足您的要求
吴恩达表示,他建立机器学习软件的方法有三个:
·从一个想法开始
·用代码实现这个想法
·进行一个实验来总结这个想法的效果
这个循环越快,您就可以更快地取得进展。这也是为什么事先选择测试/dev集合非常重要,因为它可以在迭代过程中节省宝贵的时间。根据这一组的测量性能可以让您快速地查看您是否朝着正确的方向前进。
4.快速构建您的第一个系统,然后迭代
正如第3点所提到的那样,构建机器学习算法是一个迭代的过程。吴恩达专门用一章来解释迅速构建第一个系统的好处,并从那里开始:“不要开始尝试设计和建立完美的系统。相反,要在短短几天内迅速建立和训练一个基本系统。即使基本系统达不到您可以构建的“最佳”系统标准,因为检查基本系统的功能也很有价值:您将很快找到线索,它会向您显示投入时间后,最有希望的方向。”
5.并行评估多个想法
当您的团队对如何改进算法有很多想法时,您可以并行高效地评估这些想法。以创建可检测图片的算法的为例,吴恩达将解释他如何创建电子表格并填写它同时查看100个错误分类的dev/测试集的图像。
其中包括对每张图片的分析,为什么会失败以及其他任何可能有助于未来反思的评论。完成后,您可以看到哪些想法更有用,应该继续坚持哪些想法。
6.考虑清理错误标记的dev/测试集是否值得
在错误分析过程中,您可能会注意到您的dev/测试集中的一些示例已被错误标记。也就是说,图像已经被人错误标记。如果您怀疑有一小部分错误是由于此原因导致的,则在电子表格中添加一个附加类别:
完成后,您可以考虑是否值得花时间修复这些问题吴恩达供了两种可能的方案来判断是否值得修复这些问题:
例1:
dev集的整体准确度.........................90%(总体误差10%)
由错误标记的例子引起的错误...... 0.6%(开发集错误的6%)
由于其他原因导致的错误............... 9.4%(设置错误的94%)
“在这里,相对于您可以改进的9.4%的错误,由于错误标记导致的0.6%的错误可能不太显著。在dev中手动修复错误标记的图像没有任何坏处,但这样做并不重要:因为不知道您的系统是否有10%或9.4%的总体误差“
例2:
dev集的整体准确度........................98.0%(整体误差2.0%)
由错误标记的例子引起的错误...... 0.6%(设置错误的30%)
由于其他原因导致的错误................1.4%(设置错误的70%)
“您错误的30%是由于错误标记的设置图像造成的,现在提高dev集中标签的质量是值得的。处理错误标记的例子将帮助您判断分类器的误差是否接近1.4%或2%,这是一个显著的相对差异。“
7.考虑分裂dev设置成单独的子集
吴恩达解释道,如果您有一个大型的dev集,其中20%有错误率,可能值得将它们分成两个独立的子集:
“以5,000个dev集中示例中的1,000个错误分类的为例。假设我们想要手动检查约100个错误的分析(10%的错误)。您应该随机选择10%的dev集,并把它放入DEV集合中,提醒我们自己用眼睛观察它。(对于一个关于语音识别的项目,在这个项目中您将会听到音频剪辑,或许您会把这个集合称为Ear dev集)。因此,如果有500个例子,我们希望我们的算法误分类约为100个。
dev集的第二个子集,称为Blackbox dev集,将拥有剩余的4500个示例。您可以使用Blackbox dev集通过测量其错误率来自动评估分类器。您还可以使用它来选择算法或调整超参数。但是,您应该避免主观判断它。(我们使用术语“Blackbox”)因为我们会使用这个数据子集来获得分类器的“Blackbox”评估。