最近在看周志华的《机器学习》西瓜书,第一章绪论部分最值得讨论的恐怕就是”没有免费的午餐“定理(No Free Lunch Theorem),这个定理的完整证明很复杂,书里尽可能地将问题简化,但是似乎还是有一些晦涩难懂,尤其是数学公式部分。所以对这一段的内容,本文阐述一下我个人的理解,或许能帮助到大家,或许有不周全的地方也欢迎留言讨论。

直观理解

首先我们避开复杂的理论分析过程,直接跳到结论部分,来看一下这个定理本质上是要告诉我们什么,这一点相信很多读者应该也很清楚。书中使用了如下的例子:

image.png

训练数据集是图中的黑点,如果采用两种不同的算法,他们有着不同的归纳偏好,或者说训练策略,可能会训练出 A 和 B 两个模型(即假设),那么对于第一张图中的测试数据集(白点),显然 A 比 B 拟合得更好,即 A 的泛化能力更强;而对于第二张图则相反,B 在测试数据集上表现更出色。

即便左边的图中的数据点的平滑分布似乎是一个更”常见“,更”合理“的现实问题,但很遗憾这只是你的一厢情愿。从数学上讲左右两张图所描述的问题,它们的地位是一样的,出现的可能也是一样,并不存在谁比谁更常见更符合现实。

”没有免费的午餐“定理正是要告诉我们,没有什么算法是适用于所有的现实问题的,任何两个算法,以及它们训练出来的模型,在所有的现实问题的集合面前是无优劣的,它们的性能的数学期望值是一样的。对于不同的现实问题,要选择相应的算法来解决。

概念阐述

在进入理论分析前,我们先将书中提到的几个重要的概念阐述清楚,这些概念咋一看你可能都没在意,或者没仔细思考过它的含义究竟是什么,所以这里把它们都厘清:

问题

这其实是最核心的一个概念,但书中并没有给出一个明确的阐述,到底什么是所谓的问题。这里的问题,其实就是指一个函数,从输入可以计算得到输出的函数,或者说从输入到输出的映射。我们获取了一堆样例数据,想要求解这个目标函数,通俗来说就是要解决这个问题

所以可以这样简单地等价,一个问题就是一个目标函数,问题的集合,就是目标函数的集合,就是书中所说的函数空间,其实也等价于假设空间 $\cal{H}$,因为我们求解出来的假设 $h$ 必然是属于上述函数空间中的某一个函数,只是它并不一定恰好是目标函数(或者说几乎不可能是),所以在测试样本集上 $h$ 必然会产生误差。

样本与样例

有了问题,或者说目标函数,就有了样本数据,所有样本的集合就是样本空间。不同的目标函数,在样本上会求出不同的标签,这些带了标签的样本就是样例。我们的任务,就是从有限的样例数据中尽可能地能还原出目标函数,使之能很好地描述(拟合)真实问题。

假设

就是我们根据训练数据集,训练出来的函数,这个函数可能并不是这个问题真正的目标函数,但值得注意的是,不管是真正的目标函数,还是我们训练出来的假设函数,它们都来自同一个函数空间

数学建模

在“免费的午餐”问题中,我们评定一个假设,或者说模型的性能,并不是测试它在某一个单独问题上的表现,是将其放在所有问题的集合上,计算它的误差的理论期望值,这也正是书中的公式所要计算的。

看完书中这一段理论推导,我的第一感觉是:似乎能理解了,但又总觉得没法从数学上完全说服自己。不知道多少人和我的感觉是一样的,所以这里我们仔细来分析这段理论推导,来把它的含义真正理解清楚。

问题集合

书中为了简化,将所讨论的问题局限于二分类问题,所有问题出现的可能性是平均分布的,并且样本空间 X 的大小也是有限的。这种简化是为了方便我们理解, 也是合理的。所以我们首先要弄清楚,在这种简化的前提之下,我们所面对的问题集合,或者说函数空间究竟是什么:

假设我们正处于一个问题之下,样本空间 $\cal{X}$ 的大小是 |$\cal{X}$|,每个样本点的标签是 0 或 1。虽然我们并不知道这个问题真正是什么,也就是说并不知道真正的目标函数是什么,但是我们可以知道目标函数来自的集合。对于二分类问题,我们样本空间总共有 |$\cal{X}$| 个样本,映射到 |$\cal{X}$| 个标签上,每个标签都有 0 或 1 两中可能性,那么 $\cal{X}$ 个点就有 $2^{|\cal{X}|}$ 种映射的可能。也就是说对于样本空间 $\cal{X}$,我们的函数空间无非就是这 $2^{|\cal{X}|}$ 个函数(映射)。真正的目标函数必定是这 $2^{|\cal{X}|}$ 个函数中的一个;同样,训练出来的假设也只能来自于这 $2^{|\cal{X}|}$ 个函数的集合,这就是问题集合

算法与假设的关系

书中的第一条公式 1.1,如图所示:

image.png

已经在讨论某一个算法的误差期望值了,这其实在思维上已经有了一个跳跃。我们这里先给它降维,首先讨论某一个假设的误差。注意这里算法假设的区别,按照书中的表述,在同一个问题之下,基于训练数据集 $X$,一个算法 $\cal {L_a}$ 可能会训练出不同的假设 $h$,它们符合一定的概率分布 $P(h|X,\cal{L_a})$。

你可能会问,一个特定算法,在特定的训练集上,训练出的假设不应该是固定的吗,为啥会有一个概率分布?关于这一点我也是存在困惑,但是我们可以先承认这一前提。我的个人解释是,算法是任意的,它的策略中可能也包含了某些随机因子,即便是同一份训练数据集,也可能产出不同的假设。当然你也可以说一般的算法不包含随机因子,基于同一份数据训练出的结果是一定是确定的,那么这个概率分布就只有一个样本,概率为 100%,但是这仍然可以囊括在上述的概率分布理论中,也就是说我们可以认为这个关于 $h$ 的概率分布理论是通用的。

计算误差的期望值

假设 $h$ 在单样本 $x$ 上的误差总和

然而在讨论算法的性能之前,我们首先跳过算法,只关注最后训练出来的假设本身:即对于某一个假设 $h$,它的“训练集外误差”是多少?

在二分类问题的框架之下,我们的函数空间里一共有 $2^{|\cal{X}|}$ 个函数,即 $2^{|\cal{X}|}$ 个问题。我们现在训练出一个假设 $h$,这个 $h$ 当然是这 $2^{|\cal{X}|}$ 个函数中的某一个,那么我们需要计算的就是 $h$ 在这所有 $2^{|\cal{X}|}$ 问题上的总误差是多少。考虑任意单一样本点 $x$,通过 $h$ 能够计算出它的预测标签 $y$,是 0 或 1;而 $x$ 在所有 $2^{|\cal{X}|}$ 个问题上的真正标签,显然其中有一半即 $2^{|\cal{X}|-1}$ 个是 0, 另外一半是 1,因此假设 $h$ 对于样本点 $x$ 的预测标签,在一半的问题上能预测正确,在一半的问题上预测错误,所以误差的期望值综合总和即为 $2^{|\cal{X}|-1}$。

上面的计算过程中,需要理解的核心思想就是:$h$ 来自于函数空间中 $2^{|\cal{X}|}$ 个函数中的某一个,而函数空间即等价于问题集合。$h$ 与函数空间中的所有其它函数的预测结果之差,就是 $h$ 在所有问题全集上误差总和;

我们注意到:

  • 上面计算的是单个假设 $h$,预测单个样本点 $x$,在所有问题上的误差之和。这个单点样本 $x$ 是任意的,但并不影响最后的计算结果,也就说对任意一个样本 $x$,假设 $h$ 在所有问题集合上的预测误差总和是一样的,都是 $2^{|\cal{X}|-1}$;
  • 样本 $x$ 一样, 假设 $h$ 也是任意的,但是不管是哪一个 $h$,同样不影响最后的计算结果,也就是说在所有问题集合面前,任意一个 $h$ 的预测误差总和是一样的,即所有 $h$ 的性能都是一样的;

综上所述我们得出一个基本结论:

  • 对于任意一个假设 $h$,预测任意一个样本 $x$,在所有问题的集合面前,它的预测误差总和是一样的,是一个常数,与 $h$ 和 $x$ 无关;

这个误差之和,我们可以表示为:

$\sum_f{\Bbb {I}}(h(x){\neq}f(x))$ = $2^{|\cal{X}|-1}$

其中 ${\Bbb {I}}$ 为书中的误差函数,为真则取值 1,假则取值 0;$f$ 为真实的目标函数,对全体 $f$ 求和,即表示这个假设 $h$ 在所有问题集合上的误差总和。

假设 $h$ 在数据集上的误差总和期望值

上述表达式针对的是单个样本 $x$ 的,如果将求和扩展到所有“训练集外数据” ${{\cal{X}}-X}$ 上,假设样本 $x$ 在 ${{\cal{X}}-X}$ 上符合分布 $P(x)$ ,则误差总和期望值为:

$\space\space\sum_{{\cal{X}}-X}\sum_fP(x){\cdot}{\Bbb {I}}(h(x){\neq}f(x))$
= $\sum_{{\cal{X}}-X}P(x){\cdot}\sum_f{\Bbb {I}}(h(x){\neq}f(x))$
= $2^{|\cal{X}|-1}\sum_{{\cal{X}}-X}P(x)$

对于上述结论,我们可以理解为,由于 $h$ 对于任意一个样本 $x$ 做预测的误差总和都是 $2^{|\cal{X}|-1}$,这个结果与我们采用哪一个样本 $x$ 是无关的。也就是说,不管 $x$ 在 ${{\cal{X}}-X}$ 上符合怎样的分布,$\Bbb {I}$ 与 $x$ 无关,因此上述计算公式,可以将关于 $x$ 和 $\Bbb {I}$ 的部分提取出来分别求和,最终得到 $2^{|\cal{X}|-1}\sum_{{\cal{X}}-X}P(x)$。

因此对 $x$ 求 $\sum$ 后,我们的结论进一步变成:对于任意一个假设 $h$,在所有问题集合面前,对训练集外数据的预测误差总和的期望值是一样的,都是 $2^{|\cal{X}|-1}\sum_{{\cal{X}}-X}P(x)$,这个结果与假设 $h$ 无关。

其实到这里的结论已经非常接近“没有免费午饭”的本质了,只是目前考察的对象是假设 $h$,而不是算法。这个结论已经告诉我们,任意假设 $h$ 在所有问题集合面前,性能都是平等的。

算法的误差期望值

最后我们终于可以回到“没有免费午餐”理论所讨论的真正对象,即一个算法的性能。前面已经提到过,在同一个问题之下,一个算法 $\cal{L_a}$​,可能会训练出不同的假设 $h$,这一点书中的描述方式是,一个算法 ,基于训练数据集 $X$,它训练出的假设 $\cal{h}$ 是符合分布 $P(h|X,\cal{L_a})$ 的。

前面的结论已经告诉我们,对于任意一个假设 $h$,在所有问题集合面前,预测误差总和的期望值是一样的,都是 $2^{|\cal{X}|-1}\sum_{{\cal{X}}-X}P(x)$,这个结果与 $h$ 无关,即所有 $h$ 平等。既然如此,那么对于一个算法而言,不管它最终训练出的假设 $h$ 是什么,符合怎样的概率分布,它的误差期望值其实也是 $2^{|\cal{X}|-1}\sum_{{\cal{X}}-X}P(x)$。

从数学公式看,一个算法的误差期望值,就是对它所能训练出来的所有 $h$ 的误差求期望值,于是可以用下面的公式表示:

$\space\space\sum_h\sum_{{\cal{X}}-X}\sum_fP(h|X,{\cal{L_a}}){\cdot}P(x){\cdot}{\Bbb {I}}(h(x){\neq}f(x))$
= $\sum_h(h|X,{\cal{L_a}}){\cdot}\sum_{{\cal{X}}-X}P(x){\cdot}\sum_f{\Bbb {I}}(h(x){\neq}f(x))$
= $1{\cdot}\sum_{{\cal{X}}-X}P(x){\cdot}\sum_f{\Bbb {I}}(h(x){\neq}f(x))$
= $2^{|\cal{X}|-1}\sum_{{\cal{X}}-X}P(x)$

这个结论就是书中的最终结论,即对于任意一个算法 $\cal {L_a}$,不管它会训练出怎样的假设,在所有问题集合上的误差期望值是一样的,为 $2^{|\cal{X}|-1}\sum_{{\cal{X}}-X}P(x)$,这个结果与算法无关。

总结

上面这个复杂公式,即为书中给出的数学表达式,只是我把三个求和符号 $\sum$ 按照我个人的理解方式调换了一下顺序。其中我认为最重要的就是最内层求和,即:

一个假设 $h$,在单一样本 $x$ 上做预测,在所有问题集合上的误差总和:

$\sum_f{\Bbb {I}}(h(x){\neq}f(x)) = 2^{|\cal{X}|-1}$

这是维度最低的一层,只针对单一假设 $h$ 和单一样本 $x$,而且该结果与 $h$ 和 $x$ 都无关。

因此我们将求和扩展到所有 $x$ 和 $h$ 时 ,由于彼此独立,那三个 $\sum$ 可以分别单独求和,感性的认知就是,不管 $h$ 在某一算法 $\cal {L_a}$ 训练下的分布如何,也不管 $x$ 在样本空间 ${{\cal{X}}-X}$ 下的分布如何,最终的期望值都是 $2^{|\cal{X}|-1}\sum_{{\cal{X}}-X}P(x)$,是一个常数。而且,假如我们把 $x$ 的求和范围扩展到全体样本空间 ${\cal {X}}$,则最终的期望值为 $2^{|\cal{X}|-1}\sum_{\cal{X}}P(x)$ = $2^{|\cal{X}|-1}$,这是一个更简洁的结果。

这也就是“没有免费午餐”定理所要最终阐述的结论,即不管任何算法,它们会训练出怎样的假设(模型),如果假设全体问题集合的分布是均匀的,那么假设与假设之间就不存在任何优劣之分,算法与算法之间也不存在任何优劣之分,它们的性能期望值都是相等的。当然,必须注意这个结论的前提,就是全体问题,以及它们的分布是均匀的,地位均等,才能推出所有假设和算法的的地位也均等。

但是在现实应用中,我们评估一个算法或者假设的性能,不会把它应用在所有问题上做测试,这显然是不合理的。任何算法和假设都有其特定的适用场景,我们关心的是它们在自己适配的场景上,即在某些问题上,能否表现出最优异的性能。


navi
612 声望191 粉丝

naive