一个例子让你秒懂机器学习

近年来,机器学习和大数据领域的突破进展使人工智能急速回温,训练计算机模拟甚至实现人类的学习行为则是目前人工智能领域最受关注的研究课题之一。

很多人都难以想象,看似冷冰冰的机器如何能在短时间内学得一身本领的?


一个例子让你秒懂机器学习大数据、分析、物联网、云技术……最近的几年里,没有这些术语你就无法参与到关于科技的讨论和对话中。它们已经成了科技中主要的参与者,影响着商务的方方面面。

变化似乎正在以极快的速度发生着,并且没有减速的迹象。 如今,科技中唯一不变的就是变化本身了。不断的变化需要不断的创新,因此就需要引入更多的新技术。进入科技话题的新技术之一是机器学习。

Gartner指出机器学习是2016年十大技术趋势之一,毫无疑问这是一个热点话题。但是,无论是专业从业者还是业余爱好者都必须弄清楚一个问题:什么是机器学习?

作为机器学习领域的先驱,Arthur Samuel在 IBM Journal of Research and Development期刊上发表了一篇名为《Some Studies in Machine Learning Using the Game of Checkers》的论文中,将机器学习非正式定义为:

“在不直接针对问题进行编程的情况下,赋予计算机学习能力的一个研究领域。”

而后,Tom Mitchell在他的《Machine Learning(中文版:计算机科学丛书:机器学习 )》一书的序言开场白中又给出了一个更为广泛引用的定义:

“机器学习这门学科所关注的问题是:计算机程序如何随着经验积累自动提高性能。”

他在引言中多次重复提到一个简短的形式体系:“对于某类任务T和性能度量P,如果一个计算机程序在T上以P衡量的性能随着经验E而自我完善,那么我们称这个计算机程序在从经验E学习。”     

是不是看得一头雾水?不要让术语的定义把你吓跑,这是一个非常有用的形式体系。

我们把这一形式体系作为一个模版,把经验E、任务T和性能度量P列在一张表的顶部,并且列出带有更少歧义的复杂问题。它可以作为一个设计工具来帮助我们清楚的思考收集什么样的数据(E),需要做出什么样的决策(T),以及如何评价结果(P)。

举个例子吧,想象一下有一个邮箱过滤程序接受到一封邮件,该程序如何判断这封邮件是不是垃圾邮件呢?首先这封邮件先观察你之前标记过是不是垃圾邮件的邮件,基于这个学习到的经验,该过滤程序为你过滤掉垃圾邮件了。

在这个任务中:

  • 判断邮件是不是垃圾邮件,这个是任务T;

  • 观察到你之前标记过是不是垃圾邮件的邮件,这个是经验E;

  • 正确分类垃圾邮件与非垃圾邮件的数量,这个是性能P。

如果还是不懂,那么,看来是时候祭出这个古老经典的买芒果例子了:

假设有一天你去购买芒果,老板摆了满满的芒果,你会挑选一些芒果后让老板称重,然后根据重量付款购买。

一个例子让你秒懂机器学习

显然,你希望挑选相对更成熟更甜一些的芒果(因为你是根据重量付款而不是根据质量),所以你应该怎么挑选芒果呢?你想起来你妈妈曾教过你,亮黄色的芒果比暗黄色的芒果更甜一些,所以你有了一个简单的规则:只挑选亮黄色的芒果。

是不是So easy ?并不是。。。生活总会更加复杂。

你回家吃了这些芒果之后,也许会觉得有的芒果味道并不好......很显然,你妈妈教给你的方法很片面,挑选芒果的因素有很多而不只是根据颜色。

在经过大量思考(并且试吃了很多不同类型的芒果)之后,你又得出一个结论:相对更大的亮黄色芒果肯定是甜的,同时,相对较小的亮黄色芒果只有一半是甜的。你会很开心自己得出的结论,然后下次去买芒果的时候就根据这个结论去买芒果。

但是下次又去买芒果的时候,你喜欢的那家店不卖了......

一个例子让你秒懂机器学习

所以你只能买别家的芒果,不过别家的芒果和之前你常去的那家的芒果不是一个产地的。然后你发现你之前得出的结论不适用了。你不知道能不能迁移过去(transfer learning),于是你从头再开始尝试吧,发现这里小的,浅黄色的是最甜的!

这时候呢假设你有朋友来家里了,你摆了一些芒果给他们吃,但是你朋友说他并不是很在意芒果甜不甜,他更加喜欢多汁的芒果(这个朋友是不是很烦?)。

又一次,你根据你的经验,又尝了所有类型的芒果,然后发现: 软一点的芒果比较多汁。

然后后来你又因为工作或其他原因要搬家了,在新的地方你发现这里的芒果和家乡的芒果又不一样,这里的芒果绿色的实际上会比黄色的更甜一点...... 

然后你家里来了个妹妹,结果妹妹竟然不喜欢芒果,喜欢苹果。所以你只得去买苹果,你之前所有实践得出的芒果的知识都没用了。你需要根据之前挑芒果的经验,用相同的办法重新研究一遍哪些苹果的口感最好。

现在呢想象一下,你在写一个程序帮助你挑选芒果(或者苹果),你会写到类似如下的规则:

if ( color is bright yellow and size is big and sold is vendor1 ): mango is sweet ;

if ( soft ): mango is juicy ;

etc.

这就是你挑芒果时用到的规则了。把它发给你的弟弟,想必他也能帮你买到对你口味的芒果。

但问题在于,每回你在试验之后得出了观察结果,你都得把规则做一番修正。你还得明察秋毫地了解清楚都有那些因素在影响芒果的品质。如果问题复杂起来的话,你在上面耗费的心血甚至都有可能为你拿个 “芒果科学” 的 PhD 下来(如果有的话)......

一个例子让你秒懂机器学习

写个机器学习算法吧

机器学习算法是普通算法的进化版,它们让你的程序变得 “更聪明”,能从你提供的数据里自动学到东西。

你在市场上随机选择了某个品种的芒果(training data),把每个芒果的物理特征都写进了一个表格——颜色、大小、形状、产地、所属果摊等(features),甜度、多汁程度、成熟度(output variables)也做了记录。你把这些数据都放进了一个机器学习算法(classification/regression),然后这个算法就会自动从芒果的物理特征和品质之间得出一个相关性模型。

等到下一回你到市场的时候,你把在售的芒果的特征信息都收集起来,再扔进你的机器学习算法,它就会利用之前计算出来的模型来预测哪些芒果是甜的、熟的、以及/或多汁的了。该算法可能会使用和你曾经手写的差不多的规则,也有可能使用的规则会更有相关性,不管怎样,在很大程度上你都不用操太多心了。

现在,算法在手,你就可以挺直身板去买芒果去了。更重要的是,你的算法还能继续演进(reinforcement learning),读取更多的训练数据,准确率也更高,每预测错误后再进行自我修正。

更妙的是,你还能用同一个算法来训练不同的模型,预测预测苹果、橙子、香蕉、葡萄、樱桃、西瓜什么的......