周志华新作《机器学习理论导引》阅读攻略
最近在读《机器学习理论导引》。这本书是西瓜书的作者周志华老师领衔、南大LAMDA四位教授共同撰写的新书,权威就自不必说。封面画了一只充满了阿里巴巴和四十大盗风格的木箱子,一看就是童话故事官方指定用来装宝贝的那一种,大家就按惯例起了个绰号,叫“宝箱书”。
刚接触机器学习应该都有一个共同的感觉,就是机器学习不太好学习。主要的难题有两个,第一个自然是数学,机器学习需要大量的数学基础知识,一个个张牙舞爪的数学公式很容易让人望而却步。可是,当我们好不容易鼓起勇气,为了学好机器学习,决心和数学死磕到底,我们很快又会遇到第二个难题,知识面太过宽泛,就算愿意硬啃,也让人无从下嘴。
我在以前的文章反复说过,机器学习是算法,不是一种算法,是一群算法的总称。机器学习虽然要求解的问题来来去去就那几个大类,但解题思路是一个赛一个精奇,不同思想下设计出来的算法自然也就犹如八仙过海。精彩是挺精彩的,但是自然涉及的数学基础自然五花八门,从学习的角度来看,总感觉要学的东西东一块西一块的不成体系,缺乏一条循序渐进的主轴,甚至连起点在哪里都不太好找。
《机器学习理论导引》就是要解决这个问题。这本书的定位是“给学习和研究机器学习理论提供一个入门引导”,这话是我从书里抄的,写得相当官方,如果没看完这本书,光看这句话确实不太容易明白究竟是什么意思。其实很简单,我们学习一门知识,习惯上总是从基础学习,毕竟从小就说要夯实基础再往上学嘛。可是,上面已经说了,机器学习的理论知识客观上确实存在并非同根同源的问题,真的能找到所谓的“机器学习基础理论知识”吗?
答案是可以的。机器学习算法脑洞频闪,但既然都叫机器学习,那自然都能抽象出一些共同的特点来,能够被归入同一套学习框架之中。这套从机器学习中通过高度抽象而来理论框架,就叫学习理论,顾名思义,是专门研究机器学习如何学习的理论体系,是机器学习算法理论的理论,这也是《机器学习理论导引》的主要内容。
如果你对这个词很陌生,不要紧,它是本篇的主角,接下来我们会用很长的篇幅介绍学习理论到底都研究哪些问题。总而言之,和机器学习算法散漫的知识点相比,学习理论显然更为系统,看上去更符合我们平时印象当中的“基础理论体系”。
那难道其它教材都不知道有学习理论的存在吗?当然不是,实际上很多的机器学习教材都有涉及。不过,市面上机器学习的教材主要还是着眼于算法,对学习理论的介绍通常分散在不同的章节当中,仍然无法避免知识点割裂的问题。另一些教材为了强调逻辑的关联,选择了另一个极端,即只选择学习理论中具体的某一种深入介绍,有一点研究专著的意思,这种选择确实能够避免了割裂问题,但同时也只好牺牲了知识的全面性。
教材市场的这种现状其实并不奇怪,症结在于机器学习的基础理论一点也不“基础”。我们说过,学习理论是机器学习理论的理论,是高度抽象的学习理论框架。看到“高度抽象”几个字,你也许会突然明白点什么。初次翻《机器学习理论引导》,特别是以前已经看过一些机器学习相关教材的同学,可能会有种用头雾水的感觉。我们习惯看到机器学习的书里面用不同的章节介绍线性模型、决策树、神经网络之类的知识,但《机器学习理论导引》这本书却不是这么回事,翻开目录,除了第一章预备知识里提了一嘴支持向量机,正片里全是可学性、复杂度、遗憾界之类搞不清从哪冒出来的怪词,搞不清和我们过往熟悉的那一套机器学习知识都有什么关联,自然就不太容易搞清楚应该怎样阅读。
这也正是本文的重点,这本书书名叫《机器学习理论导引》,定位是“导引”,不过正如上面所说,学习理论高度抽象,连《导引》翻开都是陌生艰涩的名词,容易让人摸不着头脑。我想,如果再有一篇《导引》的导引,介绍一下这本书都写了些什么内容,都有什么作用,又是按什么逻辑串在一起的,读起来也许就友好多了。
那么接下来我们就专聊怎么读的问题。《机器学习理论导引》这本书介绍的是机器学习中的学习理论,本书一共八个章节,除了第一章预备知识外,每章介绍一种学习理论的问题,一共介绍了七种重要概念和理论工具。“七”这个数字在周老师看来有着非凡意义,周老师在前言里自曝是武侠迷,“七”让他一下想起了古龙先生的代表作《七种武器》,而第七种武器正好是“什么都能往里装”的神奇箱子。周老师说,他忍不住要致敬《七种武器》,这就有了封面的宝箱,“宝箱书”也因此而得名。
学习理论的研究对象是机器学习是怎样学习的,很多的课题,哪怕此前已经对机器学习有所了解,可能刚接触时仍会感到陌生。要比较流畅地阅读本书,首先需要了解《机器学习理论导引》是根据怎样的组织逻辑、按照怎样的主线介绍学习理论。
首先讲的是可学性,这是学习理论的基础。先说说“可学性”这个词,是不是给人一种每一个字我都认识,但合在一起就不知道是什么意思的感觉?这个词和机器学习中的“学习”密切相关,英文叫Learnable,直译过来就是可学(习)性。听起来很复杂,其实意思很简单,机器学习的能力是有上限的,这里不是指某一款模型,而是在座的各位,也就是有些任务是无法通过机器学习来完成的。如果把机器学习要完成的任务看作是一道数学题,那可学性指的就是这道题是否有解,也就是能否通过机器学习来达到目标,反之亦然。
这一章有一个非常重要的学习理论,需要重点学习,叫概率近似正确理论,一般采用它的英文缩写,写作PAC理论。PAC理论是学习理论中最基本的理论,不难想见,“学习能力”是一个高度抽象的概念,我们可以用直白的语言解释它的含义,那要给出形式化的定义并不容易。PAC学习正是给出了一个抽象刻画机器学习能力的框架。这是一项开创性的工作,由图灵奖得主Valiant创立,并籍此开创了“计算学习理论”这个新的研究领域。
接下来讲的是复杂度。这一章承接上一章,可学性关注的是问题是否有解,而复杂度关注的是有多难解。在PAC理论中,可学性与假设空间的复杂程度密切相关,假设空间越复杂,搜索解的难度越大。当假设空间是有限的时候,可以通过层层筛选搜索解,但这就有了一个限制条件:假设空间必须有限。数学不喜欢局限,同时,很多模型的假设空间并非是有限的,那这时应该怎样刻画复杂度呢?这就是本章的主要内容。
本章同样有一个非常重要的概念,VC维。一般机器学习的教材如果选择放入一点学习理论的内容,通常至少会包括两个知识点,一个是前一章的PAC理论,另二个就着本章的VC维。VC维是一种刻画假设空间复杂度常用的方法,当然这不是唯一一种,本章同时也介绍了另一种,名为Rademacher复杂度。
也许大家第一次看,会觉得PAC理论、VC维这些知识太过抽象,也不知道学来能有什么用。这些知识确实不太容易学懂,但都是学习理论的基础,也是最常用的研究工具,绝不是为学而学,学完就扔了的,后续的章节会反复使用这些基础和工具来研究更具体的问题。书里接下来安排的三章,包括第4章的泛化界、第5章的稳定性和第6章的一致性,可以看作是同一个大问题的三个大块,这个大问题就是模型效果评价。在机器学习中,模型效果毫无疑问是最需要关注的问题之一。
机器学习模型效果好不好,一般业内会用泛化能力强不强来评价。什么叫“泛化”呢?泛化指的是模型在不同数据集中的预测效果。为什么要考虑这个问题呢?如果看过我写的那本面向初学者的《机器学习算法的数学解析和Python实现》知道,所谓机器学习,就是拟合数据。要使用机器学习模型,首先是需要经过训练的,模型训练需要数据,这部分数据称为训练数据,或者叫训练集。
这里有一个隐含的知识点,每个数据集都有自己的分布特征,使用训练集训练模型,模型拟合的其实是训练集的特征,这就可能导致一个问题,过拟合问题。过拟合直白来说,就是模型学得太好了,这是初学者很费解的一个词,学得太好怎么能叫问题呢?这个问题我在《机器学习算法的数学解析和Python实现》也专门进行了介绍,学得太好当然不是问题,问题是不同的数据集可能会有不同的分布特征,模型在训练集上学得太好,在其它数据集上,具体来说,是在其它分布特征上,模型的预测性能反而可能下降,也就是过拟合使得模型的泛化能力下降了。这可能就会产生一个现象,泛化能力差的模型在训练时看起来效果不错,可是一部署到生产环境就变成了笑话,完全不可用了。这就是为什么无论是学术界还是工业界,都非常关心模型的泛化能力。
为了具体研究这个问题,《机器学习理论导引》首先介绍了泛化界,包括泛化误差上界和泛化误差下界。泛化界主要是基于不同的假设空间复杂度度量,这里就用到了前面譬如VC维等的知识,与具体的学习算法无关,但有一个局限,这些泛化误差界只能用于有限VC维学习算法的泛化性,而对无限VC维的学习算法无能为力。要解决这个问题,书里接着介绍了稳定性,用来刻画训练集的扰动对算法效果产生的影响。
接下来书里介绍了一致性理论,同样是聚焦训练集,但这一次开了一个很大的脑洞。工业界有个说法,如果模型效果不行,首先要做的是多收集数据。多收集数据在实践上效果确实好,所以口口相传广为人知,但大家在用的时候肯定都很关心,到底什么样的模型才能和数据规模保持这种线性增长关系,里面会不会也有个“看脸”的问题。一致性理论就是假设训练数据不断增加,最后趋向于无穷的过程中,学习算法通过训练是否趋向于贝叶斯最优分类器。简单来说,一致性研究的就是哪些模型适合通过无脑堆数据来提升预测效果。
接下来的第7章的收敛率,研究的是模型训练阶段的优化问题,这是个实践中非常重要的问题。我在《机器学习算法的数学解析和Python实现》中介绍,模型训练很像马戏团训练动物,是通过反馈奖励来进行,具体的目标就是使得损失函数最小化。那怎么达到最小化呢?这就是个优化问题,最常见的就是选择梯度下降法。
但是,纸上得来终觉浅,一到实践你就会发现,是不是选择了梯度下降法就万事大吉呢?不是,还有一个收敛问题。首先梯度并不是一定就肯乖乖下降,还有可能上升,这就是非常叫人讨厌的梯度爆炸,更常见的问题是另一种,就是梯度虽然下降,但下降得非常慢,两百年过去了才降一点点,使得训练时间非常长。这些就是收敛问题,包括两个方面内容,一是什么条件才能够收敛,也就是收敛条件,另一个则是本书第7章要介绍的收敛率,也就是收敛的速度如何。
最后一章第8章,介绍的是遗憾界。遗憾英文regret,是一项性能评价指标,大家也许听到的不多,觉得有点陌生,这也不奇怪,因为这一章已经跨出了机器学习的传统范畴,进入到在线学习的领域。遗憾(regret)主要是用来评价在线学习。在线学习的训练方法和我们熟悉的不太一样,所谓在线学习,就是用于训练的数据集一直在不断动态更新,这和我们熟悉的用一块静态数据作为训练集来训练模型的方式不太一样,训练目标也从最小化损失函数,变成了最小化累计损失。因此,评价模型效果的指标也有所区别,使用的是比较结果,具体来说,是在线损失与离线算法的最小损失的差值,这就是遗憾。研究遗憾的取值边界,这就是本章重点关注的遗憾界问题。
点击链接了解详情并购买
莫凡,娱乐向机器学习解说选手,《机器学习算法的数学解析与Python实现》作者,前沿技术发展观潮者,擅长高冷技术的“白菜化”解说,微信公众号“睡前机器学习”,个人知乎号“木羊”。
扫码关注作者
书讯 | 华章计算机拍了拍你,并送来了8月书单(上)上新 | 阿里巴巴B2B电商算法首次对外公开
书单 | Effective系列图书大赏干货 | 【直播回放&PPT】漫谈ClickHouse在实时分析系统中的定位与作用收藏 | Space X载人龙飞船即将返航,上过太空的JavaScript要回来了