50 流水线组件的选择:数据可用性
在构建非端到端的流水线系统时,什么样的流水线组件可作为合适的选项呢?对流水线的设计将极大地影响整个系统的性能,其中一个重要因素是,是否能够轻松地收集到数据来训练每个组件。
例如,考虑下面这个自动驾驶架构:
你可以使用机器学习算法进行车辆和行人的检测,另外要获取这些数据也并非难事——如今有许多含有大量带车辆和行人标记的计算机视觉数据集。你也可以通过众包市场(比如 Amazon Mechanical Turk)获得甚至更大规模的数据集。因此,获取训练数据来构建车辆检测器与行人检测器相对而言是比较容易的。
相反,考虑一种纯端到端的方式:
为了训练这样一个系统,我们需要一个包含 数据对的大型数据集。然而让人们在驾驶汽车时收集汽车的操纵方向的数据是非常费时费力的,你需要一辆特殊配置的汽车,且需要巨大的驾驶量来涵盖各种可能的场景。这就使得端到端系统难以进行训练,获得大量带标记的行人或者是汽车图像反而要容易得多。
更常见的情况是,如果有大量的数据可以被用来训练流水线的 “中间模块” (例如汽车检测器或行人检测器),你便可以考虑使用多段的流水线架构。因为可以使用所有可用数据进行训练,所以这种结构可能是更优的。
在更多端到端数据变得可用之前,我相信非端到端的方法对于自动驾驶而言是更有希望的——它的体系架构更匹配于数据的可用性。
51 流水线组件的选择:任务简单性
除了数据可用性之外,你还应该考虑流水线组件选择的第二个因素:独立的组件使得任务简单了多少?你应该尽可能地选择那些易于构建或学习的独立流水线组件,但对一个组件而言, “易于” 学习指的是什么呢?
考虑下面列出的机器学习任务,它们的难度逐级递增:
1. 分类判断某张图片是否过度曝光(就像上面这张图片);
2. 分类判断某张图片拍摄于室内还是室外;
3. 分类判断某张图片中是否有猫;
4. 分类判断某张图片中是否有黑白两色皮毛的猫;
5. 分类判断某张图片中是否有暹罗猫(一种特殊的猫)
这些图像分类任务都属于二分类任务——你需要输入一张图片,输出 0 或者 1. 但列出的前面几个任务看起来 “更易于” 使神经网络进行学习。你将能够通过较少的训练样本来学习更加简单的任务。
对于使问题变得简单或困难的原因,机器学习领域尚未给出一个较好的正式定义。随着深度学习和多层神经网络的兴起,我们有时认为,如果一个任务可以用更少的计算步骤(对应于一个浅的神经网络)来实现,那么相对于需要更多的计算步骤(对应于一个深的神经网络),这个任务就 “更简单” 了。但这些都是非正式的定义。
在信息论中有 “Kolmogorov 复杂度” 的概念,一个学习函数的复杂度是产生该函数的计算机程序的最短长度。然而这一理论概念在人工智能领域几乎没有什么实际的应用。参考:https://en.wikipedia.org/wiki/Kolmogorov_complexity
如果你能够完成一个复杂的任务,并将其分解为更简单的子任务,然后显式编写子任务步骤代码,那么你就会给算法一些先验知识,从而帮助它更有效地学习任务。
假设你正在构建一个暹罗猫检测器。下面是一个纯粹的端到端架构:
与此相反,你可以分成两个步骤来形成流水线:
第一步:(猫检测器)检测图像中所有的猫。
第二步:将每一块被检测到的猫的图像传送给猫种类分类器(每次一张),如果其中任何一只猫是暹罗猫,则在最后输出 1。
与仅仅使用标签 0/1 来训练一个纯粹的端到端分类器相比,流水线中的两个组件——猫咪检测器和猫种类分类器——似乎更容易进行学习,而且需要更少的数据。
如果你熟悉实际运用中的对象检测算法,你将认识到它们并不是只学习 0/1 图像标签,而是作为训练数据的一部分取代边界框进行训练,对它们的讨论超出了本章的范围。如果你想了解更多关于这种算法的知识,请参阅 Coursera 的 Deep Learning 专项课程(http://deeplearning.ai)。
最后一个例子,让我们回顾一下自动驾驶流水线。
通过使用该流水线架构,你可以告诉算法总共有三个关键的步骤:(1)检测其他车辆,(2)检测行人,(3)为你的车规划一条道路。此外,每一个步骤都是相对简单的功能——因此可以用更少的数据来学习——而不是纯粹的端到端方法。
总而言之,当决定流水线组件的内容组成时,试着构建这样的流水线,其中每个组件都是一个相对 “简单” 的功能,因此只需要从少量的数据中学习。
52 直接学习更为丰富的输出
一个图像分类算法可以输入一个图像 $x$ ,并输出一个表示对象类别的整数。那么一个算法可以输出一个完整的句子来对图像进行描述吗?
举个例子——
输入 $x$ 为:
输出 $y$ 为:“一辆黄色的公共汽车在路上开着,背景是绿色的树和绿色的草。 ”
传统的监督学习应用学得一个函数:$h:X \mapsto Y$ ,其中输出 $Y$ 通常是一个整数或者实数。例如:
端到端深度学习中最令人兴奋的进展之一是,它让我们直接学习比数字复杂得多的 $y$ . 在上面的图像配字示例中,你可以使用一个神经网络输入一个图像($x$),并直接输出一个标题($y$).
下面有更多的例子:
这体现了深度学习的高速变化趋势:当你有正确的(输入,输出)标签对的时候,有时可以进行端到端学习,即使输出是一个句子、图像、音频,或者其它的比一个数字更丰富的输出形式。
访问《机器学习训练秘籍》的开源翻译项目并帮助我们改进翻译质量:
https://accepteddoge.github.io/machine-learning-yearning-cn/
英文版最新章节请在这里注册:
领取专属 10元无门槛券
私享最新 技术干货