机器学习:使用OpenCV、Python和scikit-learn进行智能图像处理(原书第2版)
上QQ阅读APP看书,第一时间看更新

1.2 开始机器学习

机器学习已经存在至少60年了。早期机器学习系统源于对人工智能的探索,推导出if…else语句的手工编码规则来处理数据并做出决策。考虑一个垃圾邮件过滤器,其工作是解析收到的电子邮件,并将无用的邮件移入垃圾邮件文件夹,如图1-1所示。

图1-1 垃圾邮件过滤器处理过程

我们可以列出一个单词黑名单,只要在一封邮件中出现这些黑名单中的单词,就将该邮件标记为垃圾邮件。这是手工编码专家系统的一个简单示例。(我们将在第7章中构建一个更加智能的垃圾邮件过滤器。)

如果允许我们将这些专家决策规则组合并嵌套到一棵决策树中,那么这些专家决策规则可能会变得更加复杂(第5章)。接下来,通过一系列决策步骤,我们就可以做出更明智的决策。你应该注意到,尽管决策树看起来像是一组if…else条件,但是它远不止于此,实际上这是一种机器学习算法,我们将在第5章中进行探讨。

手工编码这些决策规则有时是可行的,但有两个主要的缺点:

  • 做出一个决策所需的逻辑仅适用于单个域中的一个特定任务。例如,我们无法使用这个垃圾邮件过滤器在一张图片中标记我们的朋友。即使我们想要改变垃圾邮件过滤器来做一些稍微不同的事情,例如:过滤钓鱼邮件(目的是盗取你的个人数据),我们也必须重新设计所有的决策规则。
  • 手动设计规则需要对问题有一个深刻的理解。我们必须确切地知道什么类型的电子邮件构成了垃圾邮件,包括所有可能的例外。这并不像看上去那么容易,否则,我们就不会经常反复查看我们的垃圾邮件文件夹,寻找意外过滤掉的重要邮件了。对于其他领域的问题,手工设计规则简直是不可能的。

这就是机器学习的用武之地。有时,我们不能很好地定义任务——除非通过例子——我们希望机器能够自己理解并解决这些任务。在其他时候,重要的关系和相关性可能隐藏在我们人类会忽略的大数据中(见第8章)。在处理大数据时,机器学习通常可以用来找出这些隐藏关系(也称为数据挖掘)。

人工专家系统失败的一个很好的例子是检测图像中的脸。这么愚蠢,真的吗?如今,每一部智能手机都能够检测图像中的脸。可是,在20年前,这个问题基本上还没有解决。原因是,人们对脸部构成要素的认识对机器没有太大的帮助。我们并不用像素来思考问题。如果要我们来检测一张脸,那么我们可能只会寻找一张脸的决定性特征,例如:眼睛、鼻子、嘴巴等。可是,当所有的机器只知道图像有像素,像素有一定的灰度时,我们如何告诉一台机器去寻找什么呢?在很长的一段时间里,这种图像表征上的差异基本上使人们无法提出一套好的决策规则,让一台机器检测出图像中的一张脸。我们将在第4章中讨论解决这个问题的各种方法。

然而,随着卷积神经网络和深度学习的出现(第9章),在识别脸部方面,机器已经和我们人类一样成功了。我们所要做的仅仅是向机器呈现大量脸部图像集。大多数方法还需要对训练数据中脸部的位置进行某种形式的标注。从这时起,机器就能够发现可以识别一张脸的特征集,而不必像人类一样来处理这个问题了。这就是机器学习的真正强大之处。