
我有时候在想,为什么要让机器学习?解释可以有很多,成本啊,标准化啊之类的,我想到的另外一个影响因素是这样的:
有时候我们无法让人学习。
有些工作其实是需要不断学习的,比如开车。大多数人都学过开车,但开到一定程度就不会再进行刻意练习了,甚至麻痹大意。如果你跟一个老司机说,您的开车技术还得刻意练习一下,估计对方会跟你急。就是对于这样的人,我们没法劝说他们学习[1]。当然,对于其他工作,不愿意学习原因还可能有,工作环境危险等等。
如果人们不愿意学习,我们也没办法逼迫他们学习。而某些问题确实需要不断学习来解决,怎么办?有些人想到了一种方法:让机器学习。只要通电,开机,机器可以永远学习;有新的数据,就有新的学习。
想到这个方法的人,熟练使用机器学习方法的人,可能属于当前世界上最聪明[2]的那一部分人。他们是怎样让机器学习的呢,我们能不能从中借鉴一些概念呢?
我想到了两个概念可以借鉴:
- 过拟合
- 欠拟合
别人家的孩子
什么是过拟合?
「别人家的孩子」这种现象,就是一种典型的过拟合。
家长不像老师,没什么机会接触几百个孩子;也很难像教育专家一样,去统计几万个孩子的数据。家长对于好孩子的评判标准,通常来自于对少数几个孩子的观察,比如街坊邻居的孩子,孩子的同班同学等等。
这其实是非常少的数据,可能是孩子群体中的百万分之一都不到。但很多家长就是借助这些数据,形成了「好孩子」的评价模型。如果这些孩子中有会跳舞的,他们可能会说,“你看看老李家孩子,会跳舞,多好”;如果有数学靠高分的,他们就说,“你看看老王家孩子,数学考的多好”。这样的模型被少数几个数据点扭曲了。这些家长可能想不到,在所有可以被定义为好孩子的孩子中,会跳舞的可能很少,数学好的也不多,但这些孩子也可以是好孩子。
面对这样的问题,我们怎么办呢?如果在现实生活中遇到这样的情形,很多孩子可能会跟家长吵一架,然后各自不高兴。但机器学习针对过拟合,有两个清晰的处理方法。不用吵架,不用不高兴,可能还很有启发性:
- 增加训练数据量
- 降低模型复杂度
首先说,什么是增加训练数据量?就是不要只盯着街坊邻居的几个孩子。选取大量孩子的数据,观察一下什么是好孩子,就可能发现,某些标准在评价好孩子时所占的权重其实比较低。比如数学考多少分,可能是参考标准之一,但权重没有那么高。不要因为你家孩子数据考了59分,就用自己的过拟合的模型定义它不是好孩子。
用大量的数据训练自己大脑中的模型,抵消个体经验的有限性产生的过拟合。这就是机器学习方法提供的第一条思路。那具体怎么做呢?观察更多人的生活,阅读更多人的经验,都是可以有的选择,还有更多适合方法你可以自己去挖掘。
接下来,什么是降低模型复杂度?就是把评价指标弄少一点。
这是在训练数据量无法提高的情况下选择的方法。评价一个好孩子,可能有很多指标:英语好不好,会不会跳舞……。但我们要意识到,在我们的数据量很少的时候,如果想从这些极少的数据中挖掘出特别多维度作为评价指标,就会造成偏差(机器学习中对偏差有特殊的定义,这里提到的偏差在机器学习其实叫方差,在下面的欠拟合中会讲到)。
为什么呢?举个简单的例子:会不会跳舞可能不是一个重要的评价指标,但你总共认识2个好孩子,其中1个会跳舞,你就说会跳舞的是好孩子;但你根本无法验证自己的模型,因为你只有一个数据点;当你有认识了2个会跳舞的孩子,但不是你所认为的好孩子[3],而你家孩子已经学会了跳舞,你是不是还要批评你家孩子会跳舞?
总而言之,在数据少的时候,不要把所有的评价指标都拿出来作为模型的一部分。只选择少数几个最重要的评价指标,在有限的数据中寻找规律。
审美感
什么是欠拟合呢?
我国的语文教育可能就是一种欠拟合。
我国的语文教育可能过多地关注语言在文学中的作用[4]。打开语文试卷,太多的是:这个修辞有什么用,那句诗词表达了作者怎样的心情。语文,还有还多其他维度可以探索,但老师对学生训练只有文学,这是一种欠拟合。意思就是,训练出来的大脑只能感知语言的一个维度,而不是更多样化的维度。
如果训练维度不够全面,会有什么问题呢?就是重复性的出现错误。如果模型出现过拟合,至少可以通过增大训练数据量来抵消过拟合。但如果出现了欠拟合,再大的训练数据量都不行,因为模型从根本上,就无法理解数据的维度。
比如,若一个人只能感觉语言在文学上的美,而不能感受其在说理上的美,那么,跟这位读者讲述:用简洁的语言说理比用冗长的语言说理更美,是没用的。因为在他对语言的评价模型里,所有的理性之美根本无需讨论,理性之美的等级之分更是莫名其妙。给他再多的优秀的说理文章也没用,因为他根本就不认为那有什么美,甚至根本就不愿意看。
听起来很像全知遮蔽[5],或者不接受新事物的人,有木有?我们会不会成为那样的人呢?很有可能曾经就是。
当然,欠拟合的发生,有时候不是我们故意的,而是我们学习的维度太少,所以没能抓住重点。那如何识别自己正在面临欠拟合呢?

欠拟合在机器学习中的表现是,对于训练数据集的预测都不好。也就是说,当模型训练完之后,模型把训练自己的数据梳理一遍,发现自己还是无法把握其中的规律。更简单点说,就是连自己读过的数据都没学会。
我觉的这在现实生活中有 1 个对照:对已经学习过的东西,依然重复出现错误。有些时候,我们怪自己「怎么这么不涨记性」,这是一个简单的答案,但也有可能不是不长记性,而是我们的学习模型欠拟合,有些维度永远学不会。
而机器学习中对欠拟合的解决办法也是很清晰的:增加模型复杂度。
这和刚刚上面提到的降低模型复杂度是相反的过程。不要只考虑过分简单的几个维度,要多维度思考。具体怎么应用,大家可以自行思考。(咳咳,因为我还没想好)
网友评论