1.3 机器学习的基本原理

从本节开始,我们正式踏入机器学习的领域。不妨对照图1-1的关系图,把机器学习领域想象成一个圈,圈外是人工智能,用各种千奇百怪的方法模拟“智能”,而圈内则简单得多,只有一种方法,就是“学习”。

“这(机器学习)是一个妨碍你理解的名字。”类似说法在本书中还将一再重复。

那么叫什么更容易理解呢?改叫“统计模型训练”就好了很多。因为机器学习的过程不是让机器蹲在小板凳上读书识字,而是更接近于马戏团里的动物训练。

我们都看过马戏表演,各种动物根据训练员的指示,或者踢球或者跳舞,十分有趣。但不妨深入考虑一下:毕竟“爬说语”只有哈利·波特这样的巫师才能掌握,我们一般无法与动物直接沟通,那么训练员是怎样做到与动物配合无间的呢?具体过程很复杂,但说起来很简单,就是利用反馈激励机制。譬如训练海豹,训练员给海豹一个信号要它拍手,最开始海豹当然不知道要做什么,它可能做出各种动作,如点头、扭动身体,但只要它无意中做出了拍手的动作,训练员就会奖励它一条小鱼。海豹希望吃到小鱼,但它没有那么聪明,无法立即明白听到信号只要拍手就能吃小鱼,需要训练员花费大量的时间,不断给它反馈。久而久之,海豹形成了条件反射,听到信号就拍手,训练就成功了。

机器学习的过程与此类似,所以机器学习的一项主要工作就叫作“训练模型”。可是仔细一想也许会发现,“训练”这个词在机器学习中虽然常见,但感觉还是无法与机器很好地契合。那么干脆再换个词——“拟合”。

拟合是机器学习的主要工作。在学习机器学习的知识之前,你也许已经接触过很多算法,譬如冒泡排序算法或MD5消息摘要算法,它们和机器学习算法有一个很大的区别,即这些算法的结果值是“算”出来的,只要确定了输入,输出就是一个定数。而机器学习算法的结果是“猜”出来的,猜的结果受很多因素影响,具体后面再讲。如果给机器学习算法总结一个本质,我认为最符合的就是一个“猜”字。

机器学习的过程就是不断回答两个问题:“我猜是什么”和“我猜中没有”。这两个问题推动着学习过程不断进行,根据“我猜是什么”的结果回答“我猜中没有”,再根据“我猜中没有”的结果回答“我猜是什么”。

不知道大家是否玩过“猜数字”游戏。游戏规则很简单,首先裁判选定一个数字,接着参赛选手也报一个数字,裁判回答他猜大了或猜小了,不断重复这个过程,直到最后猜中。

接下来,游戏内容不变,我们引入两个机器学习的术语——“算法模型”和“损失函数”,这两个术语的具体含义马上就会解释,现在只要简单地把这两个术语当作两个名字。把参赛选手替换成“算法模型”,把裁判的回答替换成“损失函数”,那么猜数字的过程就是一个完整的机器学习过程:算法模型输出一个数值,损失函数经过计算,回馈一个偏差结果,算法模型根据这个偏差结果进行调整,再输出一个数值,周而复始,直到正确为止。这就是机器学习的学习过程,这个过程在机器学习里称作“拟合”。

拟合可以说是机器学习中最重要的概念之一,甚至有人认为机器学习算法中所谓的“学习”,本质就是拟合数据。在机器学习中,除了拟合外还有两个很重要的概念,分别为“欠拟合”和“过拟合”。欠拟合很好理解,就是学得还不像,算法模型的预测准确性不够。

过拟合则正好相反,就是学得太过了。刚接触机器学习时,“过拟合”这个概念不太好理解,我们一般会认为算法模型当然是预测得越准越好,如果只对照“欠拟合”的解释,你是不是会认为过拟合意味着模型学得太好了?其实,过拟合指的是算法模型的泛化性不好,算法模型通常通过一些具体的数据集进行训练,这些数据集称为训练集,由于采集方法等一些外部因素的硬性存在,训练集数据的分布情况(也就是一些统计指标)可能与真实环境的分布情况略有不同,如果算法模型太注重细节,反而会导致真正运用于真实环境中时预测精度下降。所以,“过拟合”中所谓的“过”,其实是相对训练集而言的,算法模型的训练最终还是以真实环境,而不是训练集中的预测精度为衡量标准。