大多数人听到“机器学习”这个词,脑海中会浮现出一个机器人:可能是一个可靠的管家,也可能是一个致命的终结者形象,这取决于你问的对象是谁。
机器学习已经不仅仅只是一个未来幻想了,它已经存在了。事实上,在某些专门领域的应用中,例如光学字符识别(OCR),它甚至已经存在了几十年。
但是,第一个真正成为主流并改善了亿万人民生活的机器学习应用,是 20 世纪 90 年代席卷了全世界的垃圾邮件过滤器。它不算是一个有自我意识的天网(Skynet),但从技术上来讲,它确实有资格称为一种机器学习(事实上它也学得很好,我们几乎不需要再手动标记垃圾邮件了)。
随后便是数以百计的机器学习应用,默默地为那些我们定期使用的产品和功能提供支持,从更好的推荐系统到语音搜索。
机器学习是一门能够让编程计算机从数据中学习的计算机科学(和艺术)。
这里有一个略微笼统的定义:
还有一个更偏工程化的定义:
举例来说,垃圾邮件过滤器就是一个机器学习的程序,它通过垃圾邮件(比如用户手动标记的垃圾邮件)以及常规邮件(非垃圾邮件)的示例,来学习标记垃圾邮件。系统用来学习的这些示例,我们称之为训练集。每一个训练示例称为训练实例或者是训练样本。
在本例中,任务 T 就是给新邮件标记垃圾邮件,经验 E 则是训练数据,那么衡量性能表现的指标 P 则需要我们来定义,例如,我们可以使用被正确分类的邮件的比率来衡量。这个特殊的性能衡量标准称为精度,经常用于衡量分类任务。
所以,如果你只是下载了维基百科的副本,你的电脑得到了更多的数据,这并不会给任何任务带来提升。因此,它不是机器学习。
试想一下,如果让你使用传统编程技术来编写一个垃圾邮件过滤器,你会怎么做(如图1)?
1) 你会看看垃圾邮件通常长什么样。你可能会注意到某些单词或用语(比如“4U”“信用卡”“免费”以及“神奇的”等字眼)在这类主题中出现的频率非常高;也许你还会在发件人名称和邮件的正文中发现一些其他的模式。
2) 你会为你发现的每个模式编写检测算法,如果检测到一定数量的这类模式,你的程序会将其标记为垃圾邮件。
3) 你还要测试这个程序,不断地重复过程1和过程2,直到它变得足够好。
而这些问题都并不简单,因此你的程序很可能变成一长串的复杂规则——很难维护。
相比之下,基于机器学习技术的垃圾邮件过滤器通过对比垃圾邮件示例和常规邮件示例,自动检测垃圾邮件中异常频繁的单词模式,自动学习哪些单词和短语可以作为垃圾邮件的预测因素(见图2)。这样的程序要简短得多,易于维护,并且可能还更准确。
此外,如果垃圾邮件发送者注意到所有包含“4U”字眼的电子邮件都被阻止,他们很可能会开始写成“For U”。使用传统编程技术的垃圾邮件过滤器需要更新才能标记“For U”的邮件。而如果垃圾邮件发送者持续围绕着你的过滤器来工作,那你将需要永无止境地续写新的过滤规则。
相比之下,基于机器学习技术的垃圾邮件过滤器可以自动注意到“For U”开始在用户标记的垃圾邮件中出现得异常频繁,不需要人为干预,就会开始自动标记它们(见图3)。
机器学习的另一个闪光点,是针对那些使用传统方法太过复杂——甚至根本不存在已知算法的问题。
例如语音识别,假如你想写一个能够区分出“一”和“二”的程序。你会想到,“二”(two)的读音是以一个高音(“T”)开始,所以你可以硬编码出一个测量高音强度的算法,然后用它来区分“一”和“二”。但是想想数以百万计的不同人群所说的成千上万的词句,加之其所处的吵闹环境,以及所使用的几十种不同的语言,很显然,这种技术不可能得以扩展。迄今为止,最好的解决方案是写一个能够自己学习的算法,然后针对每个字给它提供许多录音示例。
最后,机器学习还可以帮助人类学习(见图4):通过检视机器学习算法以了解它们学到了什么(尽管对于某些算法来说,这可能挺棘手)。
例如,一旦垃圾邮件过滤器经过了足够多的训练,人们可以很轻松地检视它,查看它认为的可以作为垃圾邮件最佳预判因子的单词及单词组合的列表。有时候,这可能会揭示出一些人类未曾意识到的关联性或是新趋势,从而帮助我们更好地理解问题。
应用机器学习技术来挖掘海量数据,可以帮助我们发现那些此前并非立见端倪的模式。这个过程称为数据挖掘。
简而言之,机器学习的伟大在于: