英文原文:How do you read math-heavy machine learning papers ?
有些机器学习论文里包含了大量的数学公式、理论和证明。通常,阅读这类论文要比阅读普通的深度学习论文花上更多的时间。对机器学习论文读者而言,需要什么样的数学背景?有哪些书有助于理解机器学习论文?可以阅读哪些书籍来提高阅读这类论文的能力呢?
最近 reddit 上的网友们针对以上问题展开了热烈的讨论,我们将讨论贴中的观点整理和总结如下。
对包含了大量数学公式的机器学习论文,有两种理解。
第一种是,一篇文章中有大量的公式、代数理论和复杂的公式计算。
一般而言,阅读论文都不会只读一遍。可以先浏览标题,然后决定是否要阅读摘要,再决定是否直接跳到结果部分。
阅读有着大量代数理论的论文的秘诀在于,在第一篇粗读时,不要一步步跟随代数部分。大部分学生都会犯下这个错误。在第一遍阅读时,你并不需要理解一个冗长计算的所有步骤。相反,默认它们是正确的,跳过它们,深入阅读关键的步骤。读公式之间的文字描述,读实验结果,读结论。当你大致明白了文章所谈论的东西之后,你再决定是否把时间花费在代数部分。不要在看不懂的步骤上花太多时间。当你以后有空时,可以重复阅读来慢慢理解它们。
当你逐渐成长为“应用数学家”时,你的能力也相应地增强了,浏览代数部分时已经能大致了解作者想达到什么目的以及大致所需要的步骤。没有人能够快速地阅读冗长复杂的计算公式。这也是为什么在第一遍阅读时要跳过公式的原因。从粗读开始,在每一次细读时再慢慢琢磨细节。
另外,你也应注意到,有时候这些计算里是有错误的。我们很难在第一次读的时候就发现它们。很多时间,这些错误与文章的观点是不相关的,但是它们会让读者产生混淆并阻碍读者理解数学内容。如果你已经基本理解了作者所做的工作,这些错误也很容易被找出。而且,当你看这些公式时,要确保你明白它们的真正意义。你可能知道某个公式的数学计算,但是你了解其背后的含义吗?譬如,你是否能够解释在某个特定系统下该公式的意义何在?你能否说出“当最大化 ELBO(Evidence Lower Bound Objective,似然函数下限)时,估计后验值与似然数据所允许的前验值类似”?这就是 ELBO 表达式背后的含义。当你达到了这一境界时,对冗长的代数操作进行推理就会变得更容易了。如何达到这种境界呢?读很多理论书,做很多代数题,这里没有捷径可走。
第二种是,论文中用到了大量的数学理论和证明,依赖大量的数学概念、理论和证明(有时候是过多且不必要的)来验证文章的观点。这种文章的核心就是数学。譬如,论文“为什么在增强学习中后验取样比优化更好”就是一篇数学理论性很强的文章。
对有些读者而言,这类文章更难阅读,因为它们往往很容易令人混淆。所有正式的谈论看起来都很重要。对这种论文,阅读的技巧是相通的:粗读。我们并不需要去查询 Wikipedia 来试图记住 Borel hierarchy 是什么。我们可以把这些时间节省下来,说不定我们再也不会读第二次了。
另外,也可以把用于某个特例的概念替换为一个简单的场景。很多时候,人们之所以用到正式的数学公式和推导,是因为他们在打安全牌、不想让一些诡异的边角例子破坏他们的推理。譬如,有一些聪明的数学系博士生会问:“如果该函数在每一处都是连续的但是不可微的,你认为还是否适用呢?”遇到这种情况怎么办?你所能做的就是假设没有这么聪明的学生,把所有 Radon-Nikodym 导数都替换为比率,把所有测量标准都替换为有黎曼积分的简单函数,并假设这个作者只是在炫耀自己的数学知识,而你不需要通过这些数学知识来理解他所谈论的东西。
有时候这些方法都不适用,因为对某些文章,你必须认真阅读数学理论和推导来理解文章。
有时候,论文中引用数学公式只是为了更好地描述问题,仅仅了解公式的名称也能帮助你阅读文章。但是也有特例,譬如,KL 散度依赖于扎实的统计和信息论理论,当你阅读时,你会对其中的推论和计算点头称赞,但要想完全理解它,的确需要一些时间。
对有些人而言,更有效的方法是,拿出纸和笔,按照论文中的计算步骤一步步完成。这样有助于理解文章中的内容,而且也有助于发现其中简单的错误或笔误。很多文章会省略一些很明显的步骤,当只是用眼睛看的时候,很难跟着这些公式的思路。但是,如果你自己动手重新计算一次,就能涵盖文中所跳过的简单但重要的步骤。当然,每个人可以根据自己的情况来决定深入研究的程度。对于那种嵌套引用其他文章的断言或理论,你可以决定是继续查看参考文献还是直接跳过。
如果论文作者已经将基于论文实现的代码公布到了 GitHub 上,读者可以粗读摘要和结论,然后跳入到程序中。这也是一个将理论与实践相结合的好方法。譬如, 论文“Self-Normalizing Neural Networks”中有着大量的公式,并在附录中给出了大篇幅的数学计算和证明。但这些附录中的计算是从一个计算机辅助的代数系统中生成出来的,对读者而言价值不大,可以快速地跳过。如果有读者想检查这些证明,当然也可以细看。该论文也有相应的 GitHub 代码,读者可以借助它来更好地理解文章。
也有人借助于量子物理中的费曼图(Feynman Diagrams),将复杂的公式抽象化和图形化,对于有物理背景的人而言,是一个简单易用的方法。
另外,阅读的深度也取决于读者的研究方向是机器学习的哪个分支。对于内核方法,需要有线性代数(元组、矩阵等的计算)、功能分析等的基础。对时间序列分析而言,需要了解测量方法和随机过程。有些方法需要用到图论等复杂理论。
当然,从学习机器学习的角度出发,了解一些数学理论基础还是很有必要的,如贝叶斯、最大后验概率、最大似然估计、高斯分布、一元/多元分类器、线性回归分析、支持向量机、隐藏马尔可夫模型、线性代数、概率论、微积分等等。很多东西都是这些理论的变形。一些引论类的研究生课程中会介绍到这些。网上也有很多免费资源,譬如你可以去 Youtube 上找到一些你喜欢的课程,加强自己对这些数学概念的了解。
有一些网友也推荐认真看看“How to read a paper(如何阅读论文)”这篇文章,它里面讲解了很多论文阅读技巧。