机器学习这个名字有点妨碍人们理解,改成“统计模型训练”其实更加贴切。因为机器学习的过程不是让机器蹲在小板凳上读书识字,而是更接近于马戏团里的动物训练。
我们都看过马戏表演,各种动物根据训练员的指示,或者踢球或者跳舞,十分有趣。但不妨深入考虑一下:毕竟“动物语”只有哈利·波特这样的巫师才能掌握,我们一般无法与动物直接沟通,那么训练员是怎样做到与动物配合无间的呢?
具体过程很复杂,但说起来很简单,就是利用反馈激励机制。
譬如训练海豹,训练员给海豹一个信号要它拍手,最开始海豹当然不知道要做什么,它可能做出各种动作,如点头、扭动身体,但只要它无意中做出了拍手的动作,训练员就会奖励它一条小鱼。海豹希望吃到小鱼,但它没有那么聪明,无法立即明白听到信号只要拍手就能吃小鱼,需要训练员花费大量的时间,不断给它反馈。久而久之,海豹形成了条件反射,听到信号就拍手,训练就成功了。
机器学习的过程与此类似,所以机器学习的一项主要工作就叫作“训练模型”。可是仔细一想也许会发现,“训练”这个词在机器学习中虽然常见,但感觉还是无法与机器很好地契合,那么干脆再换个词,就是“拟合”。
拟合是机器学习的主要工作。
在学习机器学习的知识之前,你也许已经接触过很多算法,譬如冒泡排序算法或MD5消息摘要算法,它们和机器学习算法有一个很大的区别,即这些算法的结果值是“算”出来的,只要确定了输入,输出就是一个定数。而机器学习算法的结果是“猜”出来的,猜的结果受很多因素影响,具体后面再讲。
如果给机器学习算法总结一个本质,我认为最符合的就是一个“猜”字。
机器学习的过程就是不断回答两个问题:“我猜是什么”和“我猜中没有”。这两个问题推动着学习过程不断进行,根据“我猜是什么”的结果回答“我猜中没有”,再根据“我猜中没有”的结果回答“我猜是什么”。
不知道大家是否玩过“猜数字”游戏。游戏规则很简单,首先裁判选定一个数字,接着参赛选手也报一个数字,裁判回答他猜大了或猜小了,不断重复这个过程,直到最后猜中。
接下来,游戏内容不变,我们引入两个机器学习的术语——“算法模型”和“损失函数”,这两个术语的具体含义马上就会解释,现在只要简单地把这两个术语当作两个名字。
把参赛选手替换成“算法模型”,把裁判的回答替换成“损失函数”,那么猜数字的过程就是一个完整的机器学习过程:算法模型输出一个数值,损失函数经过计算,回馈一个偏差结果,算法模型根据这个偏差结果进行调整,再输出一个数值,周而复始,直到正确为止。这就是机器学习的学习过程,这个过程在机器学习里称作“拟合”。
拟合可以说是机器学习中最重要的概念之一,甚至有人认为机器学习算法中所谓的“学习”,本质就是拟合数据。
在机器学习中,除了拟合外还有两个很重要的概念,分别为“欠拟合”和“过拟合”:
刚接触机器学习时,“过拟合”这个概念不太好理解,我们一般会认为算法模型当然是预测得越准越好,如果只对照“欠拟合”的解释,你是不是会认为过拟合意味着模型学得太好了?
其实,过拟合指的是算法模型的泛化性不好,算法模型通常通过一些具体的数据集进行训练,这些数据集称为训练集,由于采集方法等一些外部因素的硬性存在,训练集数据的分布情况(也就是一些统计指标)可能与真实环境的分布情况略有不同,如果算法模型太注重细节,反而会导致真正运用于真实环境中时预测精度下降。
所以,“过拟合”中所谓的“过”,其实是相对训练集而言的,算法模型的训练最终还是以真实环境,而不是训练集中的预测精度为衡量标准。