好的,相信你多半可能是对这个标题产生兴趣才进来的,本文章可跟吃的没有任何关系呢,"没有免费午餐"定理(No Free Lunch,简称NFL)是Wolpert和Macerday提出的“最优化理论的发展”之一。不和吃的有关你可能会失望了,但是这是一个非常有趣的一个定理,我相信等你看完你也会觉得的。
我们先来思考一下这么一个问题,现在机器学习和深度学习在我们的生活中,已经成为了不可缺少的一部分,就单单对我们生活而言,他们的发展极大方便了我们的生活,例如你每天都要使用手机上网,互联网的存在以及它们的应用给你带来了乐趣和便利。 那么既然机器学习和深度学习的成功,存不存在着一种算法,它能够在任何领域,任何情况下都表现为最佳,即有没有一种最好的算法,这样科学家们只需要努力的寻找这么一种算法就好了,但是很遗憾,事实证明,这并不存在。那么接下来,我们一起看一下这个定理的简单证明。接下来会涉及一点数学,每步我都会进行解释,看看数学家们是如何运用数学来完美解释的!
简单说一下机器学习,是建立一个解决问题的模型(算法),然后通过对给定训练集的样本进行学习,通过学习不断优化自身,让其向这个问题的真实模型靠近,最后学得一个模型,使得能够在训练集之外的样本,即未见样本,对其进行预测,仍会有好的表现!
例如我们现在要训练一个模型,让它能够用来对西瓜进行分类,将西瓜分成好瓜和坏瓜,这是一个二分类问题。 给的的训练集是西瓜的一些属性,例如假设决定西瓜得好坏由以下属性决定,当模型在这个数据集上进行学习,不断得优化自己,然后在未见样本下,对其进行预测,仍然有很好得表现!即我们模型的泛化能力很好,这是我们训练模型的终极目标!
首先,假设一个算法为a,而随机胡猜的算法为b,为了简单起见,假设 样本空间为和 假设空间H 都是离散的。令 P(h|X,a) 表示算法a基于训练数据 X 产生 假设h 的概率,再令 f 代表我们希望学习的真实目标函数。算法a的训练集外(测试集)误差,即算法a在训练集之外(测试集)的所有样本上的误差为:
其中函数为指示函数,当里面的为真,即,函数取值为1,否则为0. 表示在使用算法a时,认为训练集数据X为假设h的概率。
令人生畏的长公式,不过我们来依次解读它,
首先看里面这个,, 预测值h(x)与真实值f(x)一致则误差为0,不一致则误差为1,即I(h(x)≠f(x)),由于x是一个随机变量,那么这个误差值也是一个随机变量,取值为0或1,其在训练集之外的所有样本上的 期望 可以看作 假设函数h 在训练集之外的所有样本上预测的错误率,定义为 假设函数h 对 训练集之外的样本 x 的误差
与此同时,在 算法a 的假设空间中可能会存在多个假设函数 与训练集一致,每一个假设函数的产生是有概率的,假设算法a在训练数据集X上产生某个假设h的概率为 P(h|X, a)(在使用算法a,把训练集样本X,认为是假设h的概率),那么,我们接下来要做的是定义a在“训练集之外的所有样本上的误差”,而不单单只是a产生的一个假设h的误差。
我们已经定义了 假设函数h 在训练集之外的所有样本上的误差,由于假设h是算法a以概率P(h|X, a)产生的,那么我们可以定义算法a的误差为所有可能的h的误差的期望,所以按照上面的那个方式,同理,在外面嵌套一层即可,即:
接下来,考虑二分类问题,而且真实目标函数可以是任何函数,假设对所有可能的f按均匀分布对误差求和,有:
因为每个乘积都是独立的,所以可以把求和符号放到任意位置,
因为根据假设所有可能的f满足均匀分布,所以 会有一半为0,一半为1,然后任何函数取值都为0和1,样本空间有个元素,令,所以,然后,因为在所有情况下概率和为1嘛。 即:
我们得出一个惊人的结果,可以看到总误差竟与算法无关!!!! 即对于任何两个算法a和b,我们都有
也就是说,无论学习算法a 多聪明、学习算法b 多笨拙,它们的期望性竟然相同!这就是"没有免费午餐"定理。
这下子,你对想学习机器学习和深度学习的热情可能被一盆水浇透了:既然所有学习算法的期望性都跟随机胡猜差不多,那还有什么好学的?
聪明的你可能注意到,NFL有一个重要前提:所有问题出现的机会相同、或所有问题同等重要,但实际情形并非如此,很多时候我们都会只关注自己正在试图解决的问题,希望为它找到一个好的解决方案,至于这个解决方案在别的问题、甚至相似的问题上是否为好方案,我们并不关心。
所以我们可以在解决特定的问题的时候,能够找到在这个情况下,较好的算法,例如在解决非线性问题的时候,例如拟合非线性函数,神经网络其强大的学习能力明显具有很大的优势!!
最后,NFL定理告诉我们的是,如果脱离实际背景,空谈什么都是毫无意义的,还不如随机胡猜来的快!!!
正如这个形象的名字,世上没有免费的午餐,天上不会掉馅饼,努力奋斗才能梦想成真!
加油!
由于水平有限,根据自己的理解编写,有错误望指出!
注:转载请注明原文地址
部分引用周志华的《机器学习》,百度百科,CSDN