什么是机器学习:一次权威定义之旅
在这篇文章中,我想要解决一个很简单的问题:机器学习是什么?
你可能对机器学习感兴趣或者稍稍了解。如果有一天你和朋友或同事聊起机器学习,那么一些人可能会问你“机器学习是什么”。那么,此文的目标就是告诉你一些可参考的定义,以及一个现成的、容易记起的趣味定义。我们将从了解该领域的权威书籍上关于机器学习的标准定义出发,并且以得出机器学习的一种程序员定义和我们被问及什么是机器学习时一个随时可以使用的现成的笑话为结束。权威定义我们先从阅读四本大学课程中常用的机器学习参考书开始。这些是我们的权威定义,它们为我们更加深入地思考这个学科奠定了基础。我选择这四本书来强调该领域的一些有用的、多样的观点。经验告诉我们,这个领域确实是包括很多的方法,因此选择一个合适的角度是取得进展的关键。Mitchell定义的机器学习Tom Mitchell在他的《Machine Learning(中文版:计算机科学丛书:机器学习 )》一书的序言开场白中给出了一个定义:“机器学习这门学科所关注的问题是:计算机程序如何随着经验积累自动提高性能。”我喜欢这个简单明了的定义,它是我们在帖子最后得出的程序员定义的基础。注意计算机程序这一提法和提到的“自动提高”一词。写程序以改善它们自身,这是挑衅!他在引言中多次重复提到一个简短的形式体系:“对于某类任务T和性能度量P,如果一个计算机程序在T上以P衡量的性能随着经验E而自我完善,那么我们称这个计算机程序在从经验E学习。”不要让术语的定义把你吓跑,这是一个非常有用的形式体系。我们把这一形式体系作为一个模版,把经验E、任务T和性能度量P列在一张表的顶部,并且列出带有更少歧义的复杂问题。它可以作为一个设计工具来帮助我们清楚的思考收集什么样的数据(E),需要做出什么样的决策(T),以及如何评价结果(P)。 这就是我们把它作为一个标准定义的原因。请把它记在心里。统计学习基础《The Elements of Statistical Learning: Data Mining, Inference, and Prediction》是由三个斯坦福的统计学家编写的,它自我描述为组织探究他们领域的统计框架。它在前言中写到:“许多领域都产生了大量的数据,统计学家的工作就是让所有这些数据变得意义:提取重要的模式和趋势,理解“数据在说什么”。我们称之为从数据中学习。”我所理解的统计学家的工作是,使用统计工具在上下文环境中解译数据。作者似乎想要把机器学习领域中的全部作为辅助工具。有趣的是,他们选择把“数据挖掘”包含在书的标题中。统计学家从数据中学习,但软件也可以,并且我们是从软件学习到的事情中学习,从由多种多样的机器学习方法做出的决策和得出的结果中学习。模式识别Bishop在《 Pattern Recognition and Machine Learning 》的前言中写到:“模式识别起源于工程学,而机器学习产生于计算机科学。然而这些领域可以看做成是同一领域的两个方面。”看了这些,你会获得这样一个印象,Bishop从一个工程的角度来到这个领域,后来又采取同样的方法学习和利用了计算机科学。这是一个我们应该效仿的成熟方法。更广泛地说,不管一个方法所宣称的领域,如果它能够通过从数据中学习使得我们获得一个更接近的洞察力或结果,从而更符合我们的需要,那么,我 们就称之为机器学习。算法角度Marshland在《Machine Learning: An Algorithmic Perspective》中采用了Mitchell对于机器学习的定义。他在序言中提供了一个促使他写下这本书的强有力的解释:“机器学习最有趣的特征之一就是,它介于几个不同理论学科之间,主要是计算机科学、统计学、数学和工程学。机器学习经常被作为人工智能的一部分来进 行研究,这把它牢牢的置于计算机科学中。理解为什么这些算法能够有效工作需要一定的统计学和数学头脑,这往往是计算机科学专业的本科生所缺少的能力。”这是深刻并有益的。首先,他强调该领域的多学科性质。虽然我们已经从上面的定义中获得了这样一种感觉,但他为我们进一步强调了这一点,机器学习来源 于各种各样的信息科学。第二,他强调了过于坚持一个给定的角度的危险性。特别是,算法工程师避开一个方法的数学内部运作原理的情况。毫无疑问,相反的情 况,统计学家避开实现和部署的实际问题也是同样受限的。维恩图解2010年9月,Drew Conway创建了一个漂亮的维恩图,我发现这个图是很有帮助的。他在解释中评论到,机器学习就是黑客技能、数学和统计学知识的加和。数据科学维恩图。归属于Drew Conway,是一种知识共享许可的非商业归属。他还把危险区域描述为黑客技能与专业知识的加和。这里,他所指的是,那些了解得足够多的人是危险的。他们能够访问和构建数据,了解这个领域,还能运行一种方法并给出结果,但是他们并不理解结果的含义。我认为这就是Marsland曾经可能暗示的意思。程序员定义现在我们来谈谈,要想把所有这些问题分解为具体细节,程序员需要做些什么。首先,我们来看看抵制我们分解和程序的解决方案的复杂问题。这构成机器学习的动力。然后,我们需要找出一个适合于程序员的定义,一个每当其他程序员问我们什么是机器学习时我们就可以使用的定义。
复杂问题
作为一名程序员,你最终将会遇到很多类型的顽固抵制逻辑的、程序的解决方案的问题。我的意思是,对于很多类问题,坐下来写出解决问题所需要的所有条件语句是既不可行也不划算的。我听到你的程序员大脑在大喊,“亵渎”。这是真的,以每天的鉴别垃圾邮件问题为例,每当介绍机器学习时,它是一直被使用的例子。当一封邮件到来时,你将怎样写一个程序来过滤垃圾邮件,决定是将它放在垃圾箱还是收件箱中?你将可能开始收集一些实例并深入研究它们,你将寻找垃圾邮件和非垃圾邮件所特有的模式,你还将会考虑抽象出那些模式以便你的启发式学习将来能够应用到新案例之中。你将会忽视那些永远不会被看到的古怪邮件,你将能够轻松的提高准确率并为边界情况制定特殊的程序。你将反复多次的浏览邮件并抽象出新模式来 改善做出的决策。在那里有一个机器学习算法,所有这些事情都由程序员而不是电脑来完成。这种手动导出的硬编码系统将具有同程序员一样的、从数据中提取规则并将其实现的能力。这能够做到,但是它将花费太多的资源,而且会是一个持续的噩梦。机器学习在上面的例子中,我确信你下定决心寻求自动化的那一部分程序员大脑,能够看到自动化和优化从例子中提取模式这一过程的机会。机器学习方法就是这样一个自动化过程。在垃圾/非垃圾邮件的例子中,经验E就是我们所收集的邮件,任务T是一个决策问题(也称为分类),它需要标记每一封邮件是否为垃圾邮件,并将其放入 到正确的文件夹中。我们的性能度量将是一些类似于准确率之类的、介于0%-100%之间的一个百分比(正确决策数除以总的决策数再乘以100)。准备这样一个决策程序的过程通常被称为训练,收集到的实例称为训练集,程序即为一个模型,一个把非垃圾邮件从垃圾邮件的分离出来的问题的模型。作为程序员,我们喜欢这个术语,一个模型具有特定的状态并且需要被保持,训练是一个执行一次的过程,也可能会根据需要重新运行,分类是待完成的任务。这些对我 们来说都是有意义的。我们能够看到上面定义中所用到的术语并不是很适合于程序员。从技术上来说,我们写的所有的程序都是一个自动化操作,因此,机器学习是自动化学习的这一说明是没有意义的。一个现成的小笑话那么,让我们来看看我们是否可以使用这些片段,构建一个机器学习的程序员定义。机器学习是一个源于数据的模型的训练过程,最终归纳出一个面向一种性能度量的决策。“训练一个模型”代表训练实例,“模型”表示通过经验学习获得的状态,“归纳出一个决策”代表基于输入做出决策的能力,并且需要一个用于未来决策的、不可见的预期输入。最后,“面向一种性能度量”是指准备好的模型的针对性需要和定向特性。我不是诗人,你能想出一个更准确、更简洁的机器学习的程序员定义吗?请留下你的评论。