工程先于理论:深度学习不是炼金术(文字版)
点击这里收听本期节目音频版
编辑: 肖怡婷
主播: 阿拉法特 (A), 舒晏 (S)
- A
- 大家好,在上周又停工一次之后,我们的德塔赛节目再次和大家见面了。从这期节目开始,我们就正式的把节目改成了双周更新,就是我们准备每个月更新两次,分别在每个月的 1 号和每个月的 15 号。今天这期节目另外一个变化就是缺席我们的节目录制很多期的舒晏同学终于回来了。
- S
- 大家好,我终于回归了,我也非常想念大家呀。
- A
- 那么今天这期节目我们打算和大家聊一聊上周的 NIPS 学术会议期间发生的一个可以说是插曲。
- A
- 大家好,欢迎收听德塔赛,我是阿拉法特。
- S
- 我是舒晏。那么之前听过我们节目的观众应该是比较熟悉 NIPS 这个会议了,它可以说是机器学习领域的一个顶会,它所收录的文章可以说是代表了机器学习领域的最高水平的一些文章。今年 NIPS 颁了一个奖项,叫做 Test of Time Award,翻译成中文可以说是叫时间考验奖。也就是说在过去的十年中,哪一篇文章可以说是最经得住考验,有最大的影响力。这个奖项今年颁给了一篇文章,它的作者是 Ali Rahimi。在颁奖之后,Ali 就上台做了一个获奖感言,他获奖感言还非常的长,长达 20 多分钟。前一半他就是在介绍他自己的这篇工作,以及后来一些 follow up 的工作。说实话前一半我是一点没听懂,我看了一下这个文章也没太看明白,小阿你大概知道他的这个工作是在做什么吗?
- A
- 之前也不是特别了解这个工作,在准备这期节目我接触到的资料,我的理解是他在最早的工作中提出,如果你把你的训练数据随机地投射到一个新的向量空间中去,你就可以训练出一个更好的线性分类器。如果很简单的概括,就是这样一个听起来像一个魔术一样的算法,就在原本的向量空间中,如果你的这些样例是无法训练出一个线性的分类器,或者说训练的线性分类器效果不太好的话,你就把它投射到新的空间中去,它就非常魔术般的可以帮你在新的空间中找到一个更好的线性分类器。之后,他就从 kernel function 的角度去提出了一些理论上的解释,说随机投射的这个过程实际上是在近似一些 kernel function。他在解释这方面的时候,他开始提到后面比较有争议的部分了。说到这个就要讲起他整个感谢致辞的结构了,他当时感谢致辞的第一句就是说他忽然感觉自己非常老,因为得到了一个叫做时间考验奖的奖项,所以说他要回忆一下他年轻的时候,他就提到十年前的 NIPS 有一批人,他把他称之为这个理论正确警察,他还特地提到了几个教授的名字,说他们是这些理论正确警察的代表。他当时提出他的工作之后就很紧张,害怕这些理论正确警察会挑他的刺,他就对他的这个理论解释并不是特别的满意。 他不满意的原因是根据他给的理论上的解释,他要投射的空间应该是要有上万维的维度才可以足够好的近似他要近似的 kernel function。但实际上他做的实验发现他只要一个几百维的映射就足够了。所以他当时就在这种恐惧的驱动下,可以说是继续做一些后续的工作,然后在后续发表了两篇文章中更完善的解释了为什么这样的随机映射理论上是有道理的,就是不仅是可以近似 kernel function,它其实可以近似任何一个满足一定限制的函数的。并且他在最后的工作中是给出了近似程度的一个数学表达式的界。
- S
- 对,说到他的获奖感言的结构,我们可以说是先抑后扬,到目前为止他都在说这些理论正确警察让他多么的头疼多么的恐惧。结果说到这话锋一转,他后十分钟开始可以说是又开始后扬的部分,而且他怀念的这种方式几乎是可以说是以打击现在另一派这种,而且是很流行的这一派学术为前提的。那么他在后半部分几乎是树立了一个对立面,他说之前我们这些研究其实都是相对来说非常的严谨的,当时的整个学术风格也是这样的,不仅是他一个人,整个 community 都是很严谨的,不像现在很多的 machine learning 的方法已经变成炼金术了,他用了炼金术这个词。他说炼金术在过去长达 2000 年里好像都是一个很好的方法,大家都把它当成科学,就像现在大家都把 deep learning 当成科学。但是就像当时大家对炼金术没有任何的理解,那对这个深度学习现在大家也缺乏这个理论性的理解,并且感觉大家都已经放弃理解了,我好用就把它拿过来用。那么他的一个批评就是说深度学习有点过度重视实验,太少给理论解释一些关注了。
- A
- 从这里应该就是进入了我们最开始说的比较有争议性的部分。比较有趣的是,他给他的演讲给的一些小标题。我刚刚介绍的第一部分介绍自己的工作,他给的标题是当我们年轻的时候;然后到这个部分,他批评深度学习目前的研究现状,他给的标题是现在的这些小孩啊。
- S
- 说实话,我觉得我当时看到他那个标题的时候,我觉得他特别有一种老炮儿的感觉,就是:啊,现在的社会已经不是我们当年的社会了,然后他甚至有点无法理解,现在的学术环境让他有点摸不着头脑,他也没有办法适应。
- A
- 对,其实这部分还没有结束,他还没有发完他的牢骚,他就举了一个特定的深度学习的例子。他当时举的例子是:你在训练一个深度学习的模型过程中,你也不知道为什么你改一个参数,它忽然就对了,你再改一个参数,它忽然就错了。你也不知道为什么。
- S
- 对,然后他说如果你有这种情况的话,请举手。底下就哄堂大笑,对吧?咱也不知道到底有多少人举手,但是至少大家哄堂大笑,说明还是有一点认同的,对吧?
- A
- 对对。
- S
- 然后他说这个时候大家一定会说,天呐一定是我改错了,或者说这个是 SGD 的错吗?我是不是应该换一个 optimizer 试一试。他说其实我认为不是大家的错,更不是 SGD 的错,那到底是什么的错,是因为我们对 deep learning 的认识实在是太少了。所以我们用这种 hacking 的方法试图去解决一些非常 fundamental 的问题,从实质上来说是不合理的。
- A
- 之后他又举了更具体的例子,他的观点我觉得可以总结为说,我们在做这部分工作的时候,对于很多细节没有给出足够好的定义,然后对于很多阐述是过于从理解上或者说从感觉上而没有给出一个非常科学的实验上的方法去证明你的理解,你的解释是可以验证的。之后他就开始进到最后一节,他把最后一节的标题叫听你妈妈的话。他说如果我们想把机器学习或者其他的一个人工智能的算法用在各行各业,用在人们的生活当中去,那我们需要保证它能够满足一些要求。他给的例子,比如说他可以坐飞机去出行,他可以接受自己完全不理解这个飞机是怎么工作,怎么飞起来的。但是他一定要知道,这里有整个做研究飞行动力学的人,在确保整个飞机的每一部件的工作都是符合他们的一个理论的模型,他才会有信心去使用飞机这样的交通工具,他认为机器学习应该也对自己有这样的一个要求。 他最后提到的解决思路就是我们要设计简单的实验,提出简单的定理,把它作为用来搭建更复杂系统的一个基本的单位,然后这样一点一点的把非常复杂的系统给搭建起来。
- S
- 其实在这个过程中他给了另外一个例子,他专门拿出来了深度学习在近几年特别火的这么一篇文章,甚至是几乎所有的复杂的深度学习的模型都在用的这么一个工具。之前我们也提到过叫 batch nomalization。那么这个现在已经是 tensor flow 这些 platform 里面的一个 module 了,你不需要理解它,你直接去一行就可以把 module 写进来。他当时他就提了三个问题,batch nomalization,它的方法它一直在声称说我能够加速训练的原因是我减少了 internal covariate shift,他说你们就不想问一问 internal covariate shift 到底为什么可以加速训练?对吗?那么有什么样的证据可以证明它有这样的特征?这个东西它的定义到底是啥呢?你们连定义都不知道对不对?你就在 tensor flow 里面直接写这样一行,就用到了你的实验里面去。所以之后我特意去看了一下这篇文章,这篇文章其实一上来在 abstract 里面前三句话给了 Internal covariate shift 的一个定义,只不过它的定义是比较 high-level 的,他没有把它具体地写成 definition one。所以小阿你觉得他是觉得这样的定义不算是一个科学定义吗?
- A
- 我觉得他更多可能还是希望深度学习的这些研究也能够使用别的机器学习方法使用的那样非常严谨的,非常小的定义。举个例子,比如说你要定义 variance,你就给出一个数学上对于 variance 的定义,然后再说你的方法,它在数学上在做什么事情,然后再通过你的推理能够推出它对你的variance 的表达式产生什么样的影响,并且在实验上也去画出来一个统计图,说你 variance 在根据你训练的时间在不停的下降。
- S
- 那么故事说到这儿其实只说了一半,前一半就是说有一个人他得了一个 Test of Time 的奖,然后在发表获奖感言的时候,他先说了,说我的工作是如何如何,是多么的严谨。那么十年之后返看现在的机器学习学术界,有很多同事干事就不是这么严谨了,非常讲究这个实验,然后不太注重理论。那么有很多被他含沙射影说到的同行表示不满意了,其中最大名鼎鼎的给出回应的应该就是 Yann LeCun,他有很多很多的头衔,其中最响亮的一个头衔就是 Facebook AI 实验室的主管,在肯定了他的权威地位之后,我不得不说,我觉得他几乎也算是学术界的网红了,他经常在 Facebook 上跟各种人就 AI 上面的很多话题进行争论,那么这次他又 po 了一个可能有几百字,快要一千字的一个回应。
- A
- 他对 Ali Rahimi 的整个颁奖致词感觉是非常的具有羞辱性,但是本质上是错的,他认为在科学技术方面工程上的成就往往会先于理论上的成就而出现的。他举了很多别的一些科学技术上的发现:天文望远镜是先于光学理论出现的,蒸汽发动机也是先于热力学理论出现的,飞机也是先于飞行的动力学出现的,等等。
- S
- 那么他自己说,说他同意这个工程是先于这个理论的,也就是说他自己也同意他的工作是可能偏向工程更多一点的。
- A
- 在他的回复中他倒没有说他的工作更多是注重哪一方面,他只是说你不能够因为科学技术本身的特点而去批评整个学术界,说他们过于注重实验上的结果,而不够注重理论上的成果。他当时做的比喻是说,如果你非常注重于去找一些简单的理论上的成果去解释你的实验,而不去花更大的精力去推动这个实验上的结果,他的潜台词就是说实验上这些结果是更容易往前推进的,比起理论上的成果他会花更长的时间。他认为如果你因为理论没有跟上,所以你的实验就停下来开始等理论的进展,好像你在把车钥匙弄丢之后,在路灯下面找你的车钥匙,哪怕你知道你的车钥匙在一个远处一个黑暗的地方,但是就因为这个路灯现在只照到这么大一块区域,所以你就不愿意离开你这个看得到的区域,去黑暗的地方去摸索。他做了这样一个比喻,我觉得他可能是说这个实验更像是摸索,你虽然不能够解释它,但只要你能够找到一个前进的方向,看到一些成果,这个已经是足够的了。而他认为非常危险的原因在于他觉得之前的我们叫做人工智能冬天就是一定程度上是人们的这种类似的观点而导致的,就觉得因为神经网络它很难解释,所以就没有很多人对它产生足够的兴趣,导致有很多年这个技术没有得到人们太多的关注。
- S
- 对,其实我觉得这样的一个话题可以说是比较老生常谈的,我觉得在任何的一个时期,在科学技术上面我觉得多多少少都会有这样的问题,只不过现在在这个特定的时期,人工智能是最前沿的科技,所以这件事情就发生在了这个深度学习人工智能这个领域。其实就像 Yann LeCun 自己说的,天文望远镜也好,蒸汽机也好,甚至是一些再久远一点之前的例子,我想到了就是在可能五六百年前,当时有很多航海的水手都会得坏血病,在当时大家对什么维生素是没有一点的了解的,维生素是在 20 世纪才发现的,那么当时人们就找到了一种很快的解决病症的方法,就是喝柠檬汁!现在大家都知道了,因为柠檬汁里面含有丰富的维生素,当时没有人知道这个解释,只得到了一些现象,那就是说喝了柠檬这个病就能好!我在想说现在深度学习里面的这些 batch normalization 也好,或者说是什么 dropout,这些其实 work 的很好,但是没有什么科学解释的是不是也可以类比当时这些实践经验,那么可能在很长一段时间之后,我们才能够找到支持这些方法背后的这个理论解释,那么其实这个并不妨碍我们现在开始实验性地使用这些方法,但是从另一个角度 Ali 他自己也说了,他说如果我们只是用这些方法做照片推荐系统,那好,你是什么方法我都支持。但是现在问题是我们在用这些方法做一些人命关天的事,我们在做自动驾驶,甚至我们把它用到医疗手段上,那么我觉得我们是不能容忍有一点风险存在的。
- A
- 我在读了整个非常长的争论之后,就争论有很多不同的人参与,提出自己不同的意见。可以说几乎你能想到的每一个方面都被某一个人提到了,也有人提到医药的例子,当时 Yann LeCun 就说哪怕医疗界它也不是那么的注重理论上的解释。他举的例子是阿司匹林。他说阿司匹林为什么起作用?一直到 1970 年,人们才理解它的药理作用,但这并不妨碍人们之前已经用它几十年。他觉得像医药界之所以能够非常放心的在人类身上使用这些他们并不能够提出完美的药理学解释的药物,原因在于他们有一个非常完善的以及非常严格的一个药物批准的流程,只有药物经过这个流程之后,才会把它用在人体实验或者用在病人的治疗上,我们可以对所有的人工智能技术也采用同样的法律上的程序,就是说我们在每次把这些人工智能的技术用在我们现实生活中,用在和人的生活有关系的行业,比如说像自动驾驶这样的行业之前,我们建立一个非常严格的非常正式的法律流程,去确保它满足我们一定实验上的要求,就跟药物实验一样,这就足够了,Yann LeCun 说这就足够了。 我们并不需要提出完美的理论解释才能够去信任人工智能技术,我们只要看到有足够的科学实验的证据说它是正确的,我们应该就可以用了。Yann LeCun 的总结就是我们并不缺乏对模型的解释性,我们缺乏的是对解释模型的需求。
- S
- 对,从另一个角度来说,其实实验和理论它完全不是对立面。对吧?我觉得这两方也完全没有必要把这件事情当成一个对立的态度来争论。其实最后 Ali 自己也退了一步,他说其实我在这儿并没有要抨击谁的意思,我只是在呼吁大家说,我希望有更多的人可以来加入到我们的队伍里面,和我们一起做更多的理论性的研究。
- A
- 如果你上 Facebook Yann LeCun 的页面,你可以看到非常长的就是不同的人在维护这两方的观点。但我印象比较深的还有另外一个角度,这也是我在另外一个博客上看到的。对当前的深度学习,几乎主宰了的机器学习研究的一些批评,或者一些忧虑。我当时问了一个参加 NIPS 会议的一个同学说,到底现在在 NIPS 上有多少的比例的论文是跟深度学习有关系的?他说我也不知道多少比例,但是如果你想从早到晚只听深度学习的话,是可以做到的。他就说每时每刻都有人在讲深度学习,这是他给的比例。那么这个实验上由于深度学习非常的注重实验,带来的一个副作用就是说它的实验结果非常的好,在各种不同的数据集上,深度学习几乎都是能够达到最高的正确率。 为什么说这是一个不好的事情,就是它给所有做别的研究的人带来了非常大的障碍。如果我现在要研究一个别的方法,然后研究完之后,我得用一个数据集去做一个实验,然后做了实验之后,我的方法它可能有些别的优点,比如说它训练起来比较快,或者它的模型可解释性比较好,但是审稿人总是会给一个审稿意见,就是说你的结果好像没有某某人用深度学习训练出来的,我们叫 state of art 的正确率高,所以这个在一定程度上还是打击了机器学习别的领域的研究的积极性,或者说发论文的效率。人们过于的关注实验上的结果,但是没有给别的一些成就,比如说可解释性方面的成就,给足够多的奖励,说这样的论文其实也是值得发表的,当然不是说完全不给你发表了,只是说会这样挑战你,说你的结果不如某一个非常精心的调参过的,或者用非常强大的机器去训练的深度学习模型,训练出来的结果好。还有另外一种就是我自己其实没有看到证据说这种状况已经出现了。但是有人提到说,如果你过于重视实验,可能会出现一个问题,就是从理论上解释某一个深度学习的小技巧,它说理论上是不成立的,它会降低这个模型的泛化表现。但是当时审稿人给的意见,但是在实验上来看并没有出现这种事情。当时这篇文章的作者就提到说他当时很不高兴,因为你不能因为实验上的表现,实验上没有出现不好的表现,就否定我在理论上给你给的一个解释,说你这个方法是不好的,因为你实验上可以做很多事情都看起来是比较就碰巧运气好,所以产生了比较好的结果,但你还是应该就是当有好的理论出现,当有人想给出理论上解释的时候,你不应该直接去用这个实验上的结果去否认这些理论上的证明。 他给的原因是说,大家在写这个程序去验证自己的想法的时候,肯定会不停的调参数,甚至重复的做实验,选择最好的一个结果给你看。这样的实验结果,它是一个充满了偏见的,他是选择了运气最好的那一次实验,对吧?你如果做足够多的实验,碰巧有一次你可能运气好,你可以得到非常好的实验结果,但是你并看不到那些表现不好的地方,就回到我们一开始说的,你改一个参数实验就不好了。这种情况下,理论上这些解释可能可以告诉你,为什么会出现这种很神奇的实验结果,就是说不好的原因是你这种做法根本就是错的。但是如果有审稿人过于重视这个实验上的结果是好的,他去接受设定的话,他可能就会不够重视一些已经有人做出来的一些理论上的成果。
- S
- 这个其实也不能全部都怪到这个实验本身的头上,对吧?我觉得更多的是说我们需要把这个实验给出更多的标准化的这些规则。在你 report 你的一个实验结果的时候,你至少要确定这是我比如说十次或者是几十次的随机运行出来的结果,你必须要排除掉这些人为可操控的这些因素,所以我觉得这个不是实验本身的问题,而是说因为可能也是因为这个领域现在发展的太快了,所以这么一套标准化的规则还没有出现,大家在汇报实验结果的时候就会带入很多这种个人偏见的对吧?我觉得不能怪实验本身。
- A
- 你说到标准化的实验,然后就让我想到最近的经历。我最近做一个实验,它不是深度学习方面的,是更多跟 boosting 有关系的一个实验,然后当时我要做。我的算法主要耗时间是一个矩阵运算,当时查到有一个线性代数的一个库,它可以把这个矩阵运算放到显卡上去做,就不需要改太多代码,然后直接就用了新的库,然后放到我的电脑上,我有一个比较差的显卡是 Nvidia 1050,然后我就跑,发现效果很好,昨天晚些的时候我就和隔壁的一个同学他也在跑一些实验,他在跑一个深度学习的模型,然后他在大概两三块 1080 显卡上在同时跑多个实验,然后我当时就说:1080 要比 1050 快多少?然后我们查了一下,发现快很多很多。然后当时觉得这好像有点不公平,其实每一个人做实验,他的底层的硬件也不一样,所以有时候你可能会把更多的精力放在不去优化算法,而是说买更多钱去升级自己的硬件,然后可以很快的把我的实验结果跑出来。但是我能理解就是工业界可能有这样的需求,如果能够砸钱把这件事办好,那我们就砸钱把这件事办好,但是学术界是不是有这个必要去一定要把自己的模型训练出一个非常非常高的正确率,然后为了达到非常高的正确率,不惜要花非常非常多的钱去买最顶级的显卡,或者最顶级的其他一些实验设备。 我只是说我看不出这么做的必要性在哪里,对于学术界来说,因为就算法而言,对吧?只要我能够证明,如果有标准化的算法,说大家都用这样一块标准化的硬件,然后动用这样标准的时间,测试标准数据集,可能大家就不需要去做军备竞赛,说谁有更多的钱可以买更多的机器时间,可以买更高级的设备。当然如果你真的有无限多的资源,这么做是有道理的,但是可能说以我目前的见解,我并不能够理解,对于学术界而言,这么做的好处有太多。另外一方面来讲,可能也有人会说,那样会限制创新,对吧?你对研究做的限制越多,可能越会禁锢大家的思路,不如你就放开,大家想怎么做怎么做,这确实是一个每个人都能够提出自己的意见,并且辩护自己意见的一个问题。那么今天准备的内容就这么多,今天也是我们第一次,或严格来说其实是我们第二次只有我们两个人对最近看到的一些新闻或者看到的一些内容发表一些自己的看法,或者讨论一下各方的一些论点。如果大家对今天我们讨论的这个话题有一些自己的意见,想跟我们分享的话,也欢迎留言告诉我们。
- S
- 我们今天的节目就到这里结束了,非常感谢大家的支持,那么我们下期节目见。
- A
- 那我们下期节目见。
- S
- 再见。
00:48
11:45