关于西瓜书的解读

2,406 阅读10分钟

前言

西瓜书(《机器学习》周志华著) 是机器学习入门级别书籍中口碑比较好的。虽是入门,但书中涉及的“少量的概率、统计、代数、优化、逻辑知识”让数学基础不够扎实的朋友(无中生友)着实头疼。本文会逐渐将自己对于这些难点的理解或者是收集回来的理解整理起来,以作分享。如果有任何讲得不好或是错误的地方,欢迎提出,一同研究。还有就是有些地方可能贴上图片会好点,但是本人还没学会使用CDN(实在惭愧),最近时间也是需要用来做别的,等稍后有空的时候再去研究CDN,然后把图补上。

如有侵权,请联系删除,抱歉

开篇第8页就遇到了一个:NFL定理的简化论述

NFL定理

NFL定理:“没有免费的午餐”定理(No Free Lunch Theorem)。
假设有算法\mathfrak{L}a和算法\mathfrak{L}b,无论算法\mathfrak{L}a多聪明,算法\mathfrak{L}b多笨拙,它们的期望值都是相同的。

描述

假设样本空间\mathcal{X}和假设空间\mathcal{H}都是离散的,令P(h|X,\mathfrak{L}_a)代表算法\mathfrak{L}a基于训练数据X产生假设h的概率,再令f代表我们希望学习的真实目标函数。则\mathfrak{L}a的“训练集外误差”,即\mathfrak{L}a在训练集之外的所有样本上的误差为:

E_{ote}(\mathfrak{L}_a|X,f) = \sum_{h}\sum_{x\in\mathcal{X}-X} P(x) \mathbb{I}( h(x) \ne f(x)) P(h|X, \mathfrak{L}_a)

其中 \mathbb{I}(\cdot) 是指示函数,若 \cdot 为真则取值1,否则取值0

困惑1

为什么 E_{ote}(\mathfrak{L}_a|X,f) 可以用来表示\mathfrak{L}a在训练集之外的所有样本上的误差

数学功底不好,查了好久也没能查到点所以然。强行解释就是由于 f 是真实的、正确的函数,基于此函数的结论去判断,基于训练数据 X 产生的算法 \mathfrak{L}a 成立的概率

解析1

  • E_{ote} 是数学期望,其中 下标ote 代表的应该是 off-training error
  • 从解析函数 \mathbb{I}( h(x) \ne f(x)) 入手,这个很容易理解,题意要求的是误差,必须只能把错误的概率算上。当目前假设 h 和真实的、正确的函数 f 不一样时,那此时的假设在当前数据 x 处就是错误的,那这个概率就能够算上, 即指示函数的值将会是 1。换而言之,当目前假设 h 和真实的、正确的函数 f 一样的时候,那么整个指示函数的值将会是 0 ,相乘起来概率就会被清零
  • \sum_{h} 这个的话是因为我们训练算法的时候都是基于有限的训练集进行的,所以,可能会有多个假设 h 与训练集一致。比如根据某某算法得出假设1:根蒂蜷缩的是好瓜;假设2:敲声浊响的是好瓜。它们都符合训练集的情况,与训练集一致。 所以,在计算 \mathfrak{L}a 的“训练集外误差”时,应该把所有的假设 h 都算上
  • \sum_{x\in\mathcal{X}-X} 这个就很好理解了,需要把训练集之外的所有样本算上。\mathcal{X} 是整个样本空间,X 是训练集,相减就是训练集之外的所有样本啦
  • P(h|X,\mathfrak{L}_a) 是算法\mathfrak{L}a基于训练数据X产生假设h的概率
  • P(x) 取到该数据的概率。训练集外的误差怎么计算?肯定是(取到这个数据的概率 \times 这个数据被算法 \mathfrak{L}a认为是正确的的概率(而实际上它是错的))

困惑2

考虑二分类问题,且真实目标函数可以是任意函数\mathcal{X}\longmapsto \{0,1\},函数空间为\{ 0,1 \}^\left| \mathcal{X} \right|,对所有可能的f按均匀分布对误差求和,有:

\sum_f E_{ote}(\mathfrak{L}_a|X,f)
= \sum_f \sum_{h}\sum_{x\in\mathcal{X}-X} P(x) \mathbb{I}( h(x) \ne f(x)) P(h|X, \mathfrak{L}_a)
= \sum_{x\in\mathcal{X}-X} P(x) \sum_h P(h|X, \mathfrak{L}_a) \sum_f \mathbb{I}( h(x) \ne f(x))
= \sum_{x\in\mathcal{X}-X} P(x) \sum_h P(h|X, \mathfrak{L}_a) \frac{1}{2}2^\left| \mathcal{X} \right|
= \frac{1}{2}2^\left| \mathcal{X} \right| \sum_{x\in\mathcal{X}-X} P(x) \sum_h P(h|X, \mathfrak{L}_a) = 1 ,
= 2^{\left| \mathcal{X} \right|-1} \sum_{x\in\mathcal{X}-X} P(x) \cdot1

解析2

  • 对于第二个等号那里的求和符号换位,可以这么解释

假设 a_i \in \{ a_1,a_2,...,a_m \} ,b_i \in \{ b_1,b_2,...,b_m \} , c_i \in \{ c_1,c_2,...,c_m \}
那么会有 \begin{matrix} \sum_{i}^m\end{matrix} \begin{matrix} \sum_{j}^n\end{matrix} \begin{matrix} \sum_{k}^o\end{matrix} a_ib_jc_k =  \begin{matrix} \sum_{i}^m\end{matrix} a_i  \begin{matrix} \sum_{j}^n\end{matrix} b_j \begin{matrix} \sum_{k}^o\end{matrix} c_k

看不懂的话可以想想 (a_1+a_2+...+a_m)(b_1+b_2+...+b_n)(c_1+c_2+...+c_o)
等于 a_1b_1c_1 + a_2b_1c_1+...+a_mb_1c_1 + ... + a_mb_nc_o

  • \sum_f \mathbb{I}( h(x) \ne f(x)) = \frac{1}{2}2^\left| \mathcal{X} \right| 则是由于 f 均匀分布,即 f(x)=1f(x)=0f 的个数相等,所以对于每一个 h(x) 来说,不管 h(x)=1 还是 h(x)=0 ,都会有一半的 f(x) 与之相等。所有的 f 的数量即是 2^\left| \mathcal{X} \right| ,一半就是 \frac{1}{2}2^\left| \mathcal{X} \right|
  • 对于 \sum_h P(h|X, \mathfrak{L}_a) = 1,是因为算法\mathfrak{L}a基于训练数据X产生所有假设 h 的概率和肯定是为1,就好比已经把所有情况列举完了,自然就是1

总结

上述步骤用于论证NFL定理:总误差与学习算法无关
但是NFL定理有一个重要的前提:所有“问题”出现的机会相同、或所有问题同等重要
但是实际情况并不是这样的,所以,NFL定理最重要的寓意是,让我们清楚地认识到,脱离具体问题,空泛地讨论“什么算法更好”毫无意义,因为若考虑所有潜在的问题,则所有的学习算法都一样好。要谈论算法的相对优劣,必须针对具体的学习问题

拖了两天的更新,不管有没有人期待我的“随手记”,这样做实在是不好,以后要更加自律,承诺的事情就要做到。 —— 2020.3.17

第23页:关于“过拟合是否可避免” / "NP=P?"

原文

欠拟合比较容易克服……而过拟合则很麻烦。在后面的学习中我们将看到,过拟合是机器学习面临的关键障碍,各类学习算法都必然带有一些针对过拟合的措施;然而必须认识到,过拟合是无法彻底避免的,我们所能做的只是“缓解”,或者说减小其风险。关于这一点,可大致这样理解:机器学习面临的问题通常是NP难甚至更难,而有效的学习算法必然是在多项式时间内运行完成,若可彻底避免过拟合,则通过经验误差最小化就能获得最优解,这就意味着我们构造性地证明了“P=NP”;因此,只要相信“P\ne NP”,过拟合就不可避免。

困惑

没有读懂的地方有两个

  • “机器学习面临的问题通常是NP难甚至更难”
  • 还有最后几句甩数学等式

相关概念

欠拟合

学得不够好

过拟合

学得太好,但是过度的好让学习器偏离了原来的目标

经验误差

学习器在训练集上的误差称为“训练误差”或“经验误差”

P问题

(Polynomial 多项式)P问题是一个判定问题类,这些问题可以用一个确定性算法在多项式时间内判定或解出。如果一个判定性问题的复杂度是该问题的一个实例的规模n的多项式函数,则我们说这种可以在多项式时间内解决的判定性问题属于P类问题。P类问题就是所有复杂度为多项式时间的问题的集合。

通俗解释就是有多项式时间算法能解决的问题

NP问题

NP(Nondeterministic Polynomially,非确定性多项式)类问题是指一个复杂问题不能确定是否在多项式时间内找到答案,但是可以在多项式时间内验证答案是否正确。

通俗解释就是我不知道你能不能在多项式时间内解决,但是我能在多项式时间内验证一个你的答案是否正确。比如寻找质数问题,目前没有一条公式可以找到所有的质数,但是却可以在多项式时间内验证一个数是不是质数

NP = P?和 NPC问题(NP完全问题)

百度百科对NPC问题的定义中说NP=P?是NPC问题的简写。我为什么要把这两个“概念”分开写呢?因为在查阅资料后一直不认同它们是“同一个东西”,具体如何见仁见智。

  • NP = P?
    是否所有能在多项式时间内验证解的问题,都是具有多项式时间算法的问题呢

  • NPC问题(NP完全问题,Non-deterministic Polynomial complete problem)
    NP中的某些问题的复杂性与整个类的复杂性相关联。这些问题中任何一个如果存在多项式时间的算法,那么所有NP问题都是多项式时间可解的。这些问题被称为NP-完全问题(NPC问题)。

NP Hard

Non-deterministic Polynomial hard problem(NPH)问题,如果所有NP问题可在多项式时间内转化(归约,意思是解决了后者也就相应的解决了前者)成某个问题(注意,与NPC问题的区别就在这里,该问题不一定是NP问题,即不清楚存不存在多项式时间算法可解决,也不清楚存不存在多项式时间算法可验证),则该问题称为NP难问题

解析

困惑1

“机器学习面临的问题通常是NP难甚至更难”

愚见:
第一点:机器学习的目标是解决一个问题,但是要怎么去学才能获得最优解(最优学习器)呢?这就是没有多项式时间算法解决的难题;
第二点:
而假设给你一个最优学习器,你又该怎么在多项式时间内去验证这个学习器呢?这即是无法在多项式时间内验证。
小结:
所以机器学习面临的问题通常是NP难甚至更难

困惑2

还有最后几句甩数学等式

其实感觉使用“P=NP”的说法是不太好的,应该说“NP=P”

  • 机器学习面临的问题通常是NP难甚至更难,而有效的学习算法必然是在多项式时间内运行完成,若可彻底避免过拟合,则通过经验误差最小化就能获得最优解,这就意味着我们构造性地证明了“P=NP”

机器学习面临的问题被认为是NP难甚至更难的,那先降低标准,姑且认为我们面对的问题是NP问题。所以我们面对的是在多项式时间内无法解决的,但是可以验证的NP问题是吧?那给定一个有效学习算法(可以在多项式时间内运行完成),假设过拟合是可以避免的(这很关键),那么在这个基础上,如果我们持续最小化经验误差(这个不难做到),那就获得了一个泛化误差也很小(因为避免了过拟合)的最最最最最优解(即最优的学习算法,既能达到效果,又能使泛化误差最小,这还不优?)。总结一下就是做到了在有限的时间内完美解决了机器学习面对的NP问题。那岂不就是NP=P了吗

  • 因此,只要相信“P\ne NP”,过拟合就不可避免
    上面的结论说NP=P。那因此(本人对这个“因此”,保留质疑。人家由A推导出B,如果要说B不成立,那总不能说别人的A也是不成立的吧),在相信P\ne NP的时候,上述推导不成立,也就是过拟合是无法避免的

总结

对于这段话的解析,我自己也不是完全理解透,主要是在“因此”这个转折这里。但是说实话,如果不看这么长一段话,光是自己想象一下,也能得出过拟合无法避免的结论吧。