,那么 Eout 指的是什么?就是在测试集上面的评估结果,这个应该相对好理解,也就是说你训练一个模型,然后在 Eout 上面去评估。这个Eout指的就是你在测试集上的一个结果。那个 g 是什么?就是你的假设集合。比如简单讲,我就选了一个逻辑回归,这就是逻辑回归,我要训练逻辑回归了。右上角这个 D 指的是数据集,就是选定一个一个训练数据集,我在这个数据集上训练出一个结果来,然后在我的测试集上评估,就得到了Eout里面的一个点。然后 out 集上得到的好多点就是这个 Eout。然后再对 D 做平均数,取好多好多个数据集,我在每个上面训练一个结果,然后在测试集上评估一下,然后得到一个结果。这就是这个东西的来源。
所以说现在第一概念就是 bias 和 variance 它的基础单位都是数据集,然后要算这个数据集上面的误差,就是这个 error,叫 reducible Error。然后下面这个可以先不用关注它是怎么出来的,然后它通过两步计算,就把这个error 分成了两个部分,大家可以看到左下角这个部分和右下角这个部分,这两个东西其实就是 bias 和 variance。右边这个是什么?我解释一下,就是g bar,g 的平均值,x 这个,它其实指的是你在所有数据集上估的那个模型再取一个平均。比如说我有 10 个数据集,我估出 10 个结果来,我最终预测结果就把这 10 个模型的预测结果平均一下,这是g bar 的含义。然后f(x) 特别好理解,f(x) 就是原始函数,就是原始真实的那个函数,假设它有一个真实的函数。这个东西它就是 bias。
左边这个就是它的 variance。variance 是什么?你可以看到 bias 它是没有外面这个E的,它是不用算均值的,但是为什么 variance 需要算?因为variance 是概率里面一个基础概念,就是你需要把好多点去取方差。所以说它的计算方式就是说用在每一个集合上估出来的结果减去这个平均函数估出来的结果,然后看每一个集合,它其实衡量的是在每个数据集上估出来的结果和你平均结果是一个平均误差,这个东西就是 variance。所以说我希望通过这段讲解让大家能够知道 bias 和 variance 它俩究竟指的是什么,大家说起来好像都知道,一个是衡量偏差的,一个是衡量方差的,但是偏差和方差是什么?它就是这两个含义。
下面这个图,它是有两个组成部分。左边是个特别简单的图,它表示的是什么含义?它表示这个H是我的假设空间,是这样一个圆圈,里面只有一个点,因为这是一个极端情况,就是说我的假设空间里面只有一个点。我举个例子,什么叫只有一个点?就是说估出我的模型,就是 g(x)=1,就是不管你给我什么数据,我的模型就是这个结果,然后我对你所有的结果都预测,不管你给我什么特征我就预测 y 值=1,就是这样一个模型,其实特别傻的一个模型。这个模型它的variance是多少?它的variance是0,为什么它的variance是 0?它的方差为什么是 0?因为你不论给它什么数据集,它估的结果都是一样的,并且和平均结果是一样的,因为你所有的结果都是一样的,那一平均自然也是一样的。所以说它的方差是 0。
那么它的偏差是什么?大家可以看到右边有个 f 这个小圆点,这个点和这个f中间的差距这个就是偏差。所以说这个模型的方差特别低,它就是 0,你不可能比这个更低,因为方差带平方的,所以方差不可能比这个更低了。所以这就是一个极端的 case,它的方差是 0,它的偏差一般来说会非常大。任何 x 给的y都等于 1,那你自然不会得到一个好的结果了。
右边这个它是一个反向的例子,就是说它的假设空间点特别多,然后这里面有一个点,颜色偏浅的一个点。右边这个图是什么含义?就是说假设空间特别多的点,真实的点,真实的那个 f(x) 是右边这个颜色不太一样的点,大家应该能够分辨出来。那么这个集合你可以看到它的方差会非常大,因为什么?它每一个黑点都代表着我给你一个数据集,你给我估一个 g 出来。我给你100 个数据集你就估出 100 个 g 来,这 100 个 g 各不相同,所以它的方差会很大。但是它的偏差有可能会比较小,就是阴影部分覆盖住的这些黑点,它的平均点大概率其实是在颜色不一样的点附近,所以它的偏差有可能会比较低,但是它的方差是非常大的。
这里核心想让大家 get 的一个点是什么?就是在说机器学习模型的偏差和方差的时候,它的核心元素是一个点,这个点是怎么得到的?就是在一个数据集上估出来的结果。这个数据集,因为我刚才讲的是实际中的情况,理论上你是从总的那个样本中抽的,就是我知道真实分布,然后我抽 100 个点,再抽 100 个点,每抽一次就得到一个数据集点,就得到这个公式里面的一个D,后面的偏差和方差其实都是对这个 D 来讲的。
Eout 其实就是 g(D) 减去 f(x) 得来的。这个公式是不是看着很眼熟?这就是平均展开,a 减 b 的平方等于a 的平方加 b 的平方减去 2ab。然后为什么到下一个等号了?它减去g bar x平方,加了一个 g bar x 平方,然后就出来这个东西了。后面这个又根据这个平方差公式然后得到了这个图。
这个公式中,这个 Eout 其实就是你的 g(D)减去 f(x) 得来的。这个公式你不是看着很眼熟吗?这就是平均展开,a 减 b 的平方等于 a 的平方加 b 的平方减去 2ab。然后为什么到下一个等号了?它减去 g 一半 x 平方,加了一个 g 一半 x 平方,然后就出来这个东西了。后面这个又根据这个平方差公式然后弄了这个图。
然后再从直观的去理解一下这个图。这是四种情况,四种情况分别代表了高和低的方差、偏差的点。先看左上角这个点,这是最牛逼的点,它有很低的偏差,还有很低的方差。偏差低大家很好理解,就是预测准确率特别好。那为什么关注方差要低?方差低就代表着你在任意一个数据集上得到的结果都特别接近在所有数据集上得到的结果,这是一个保证。这是一个什么保证?就是说在没有办法得到全部数据集的情况下,只得到了部分数据集。在这个上面的结果和在所有数据集上得到的结果不会差特别多,是这样一个保证,这就是方差,这就是稳定的问题。
然后最不理想的情况是什么?就是右下角这个情况——偏差又大,方差又大,那这个模型就没什么用了,既估不准,而且在不同的数据集上跳得还特别厉害。值得关注的是左下角这个点,左下角这个点叫做 High bias、Low variance。其实这种点看着好像离圆心挺远的,偏差不大好。但实际上这种点在实际中很多时候也是有用的,因为它有一个保证,有一个稳定性保证。如果你关注的是一个趋势的话,这样的数据集其实也是ok的,因为你知道它稳定地离你的圆心就是这么远,但是你不管拿什么数据它都是这么远,所以这种模型也是ok的。
然后看右上角这个点,可以看到它散得非常厉害,它的方差很高,它的偏差还是比较低的,这种点看起来好像也蛮好,但实际情况中这种模型不是特别好的点,因为你根本不知道你某个数据集能映射到哪个点上去,它没有一个保证。所以我们在现实中其实很多情况下,我们后面会讲这个东西和算法能力,和正常化是有关系的。就是为了要,不管你准不准先不说,你不要太散,在工业中应用我们还是很注重稳定性的。
这个大家下去可以再去理解一下,我们后面推荐的书里也会讲这个东西。
然后我们就讲到交叉验证,刚才讲这个 bias variance,可能有的同学会讲这个东西也就是面试会考一考,实际中好像也没有什么用处。我们下面讲一下它在实际中有什么用处。它的实际用处就是交叉验证,为什么做交叉验证?交叉验证的方法我就不重复了,大家应该知道,就是说你把数据分成 k 份,每次留一份出去,剩下的训练,你可以预测,然后把结果拿起来,然后去评估一下。但有没有想过你这么评估,评估的是什么东西?你评估的是什么东西?其实你评估的就是 bias 和 variance 的一个拆分,它就是 bias 和variance 拆解的一个直接应用。
流程我这儿简单写了一下,就是将数据划分为 k 份,每次留出一份作为测试,其余作为训练,记得到的误差为 ei,ei 就是第 i 份的,你把第 i 份去做测试的时候得到的误差,然后就得到了k份测试结果。你的 bias 是什么?就是每一份误差的一个均值,这个很好理解,这就是你的 bias。你的 variance 是什么?把这 k 个误差当做 k 个点,用统计学的方法算一下它们的方差,这就是它的 variance,这就能很好地评估你这个模型在这个数据集上它的稳定性如何,它的偏差如何,这就是这种方差、偏差分解在实际中的一个最典型的应用。
可能有的同学经常用交叉验证,但其实对它的深层次含义没有过太多的考虑,今天就给大家建立这样一种联系,其实是解决了两个问题,一是偏差、方差的分解究竟在现实中有什么用;二是反过来,这个交叉验证它的理论知识是什么,做这样一件事情它的意义是什么。
其实如果你不关注稳定性的话,你就直接再一个数据集上做一个测试就ok了,你得到的 bias 如果数据量大也是准的,但是你如果不划成k份,你做交叉验证你就没法知道它的稳定性是多少,我觉得这个应该说得比较清楚。
在上一步我们已经建立了一个方法,就是说我怎么评估一组模型的好坏?但是刚才我们经历了是如何评估一个假设集合的好坏,接下来还要想办法去评估具体一个模型,比如我们选定了一个袋子,下面从袋子里面选球,这个球的好坏怎么去评估。所以说第一步需要考虑的,我们这个reducible一共不就两步吗,一个bias,一个variance,我们如何减少bias?在考虑如何减少bias之前,首先要考虑如何评价bias,还是刚才那个理念,在改进它之前先要考虑好如何评价它。所以说我们在日常生活中用的怎么评价bias,其实就是各种损失函数,你的loss function方程是什么?刚才有同学说Cross Entropy。定义出来然后去优化它,这是我们后面会讲的一个优化方法。
这里放了一张图,这个图是一个特别简单的图。上面那个图可以说你的计划从 A 到 B,骑着小车过去,下面是现实,你会发现好多好多坑。这其实代表一定程度上代表算法工程师的一个窘境。一开始你觉得我学会模型了,我理论学得挺明白的,就可以走上人生巅峰了。但其实你会发现你真的到工作中做的时候,这些东西坑非常多,你一落地会有很多东西需要去加强,需要去夯实。