夏乙 问耕 发自 凹非寺
量子位 出品 | 公众号 QbitAI
谁能想到,NIPS这种顶会都能风波乍起。
Ali Rahimi(阿里·拉希米),因为2007年发表的一篇论文,获得今年的“Test of Time”最具时间价值大奖。当然,阿里作为最佳论文作者理所应当的登台演讲。
起初,这个演讲主要介绍之前的研究成果。阿里说从很多方面来讲,我们的状况都比10年前好多了。在技术上,取得了很大的进步,街上跑着自动驾驶汽车,人工智能可以干很多事情……基于机器学习技术,能产生出几十亿美元的公司。
后来,火药味逐渐浓烈起来,阿里朝着整个深度学习界开了一枪,他说:
但某些方面更糟糕了。
空气中飘荡着一种自鸣得意的感觉,我们会说“人工智能是新的电力”。(安德鲁老师最爱的说法)
我想换个比方:机器学习已经成了炼金术。
炼金术挺好的,炼金术没毛病,它自有它的地位,炼金术“管用”。
炼金术带来了冶金、纺织、现代玻璃制造工艺、医疗等等领域的发明。但同时,炼金术还相信水蛭能治病,廉价金属能变成金子。
从当年的炼金术到现在的物理、化学,到我们现在对宇宙的认识,科学家们要消解掉2000年的炼金术理论。
如果你要做个照片分享系统,用“炼金术”就行。但我们现在所做的远远超出了这个范围,我们所做的系统用在医疗领域,用在社交媒体上,甚至能影响大选。
我希望我所生活的世界里,这些系统都建立在严格、周密、可验证的知识之上,而不是基于“炼金术”。
我有点怀念十年前NIPS上质疑各种想法够不够严谨的“学术警察”,希望他们回来。
(不关心技术细节的可以跳过下面的例子)
举个例子,不知道你有没有经历过这样的情况:从零开始搭建、训练了一个神经网络,然后发现它不管用的时候,总觉得是自己的错。这种状况我大约每三个月就要经历一次,我想说,这不是你的错,是梯度下降的错。
比如说这个最简单的深度神经网络,两层线性网络:
左边是我的模型,右边是损失函数,底下是不同参数设置下梯度下降的过程。有时候loss一开始下降得很快,后来就不动了。你可能会觉得遇到了局部最小值,或者鞍点,loss和0相差还很远。
换一个下降的方向,很快就能优化到最低。
你可能会觉得这个例子不自然,或者说梯度下降在更大的神经网络上表现得不错,我的回答是:第一,很多人都被梯度下降坑过;第二,我们把自己的工具用在简单的例子上,从中学习知识,然后应用到更复杂的场景,这正符合我们建立知识的方式。
梯度下降带来的痛苦是真实存在的。
上个月,我的朋友Boris给我发了封邮件:
周五,另一个组有人改动了TensorFlow内部的默认舍入模式,从“舍到0”改成了“四舍五入到偶数”。
我们的训练就崩溃了,误差从<25%飙升到了~99.97%。
这样的邮件我收到过不少,网上也有人在讨论类似的问题。
会发生这种情况,是因为我们把脆弱的优化技巧用到了我们不理解的loss上, 我们的解决方案在本来就已经很神秘的技术上增加了更多神秘性。
Batchnorm是加速梯度下降的一种方法,把Batchnorm插入到深度神经网络的层中,梯度下降的速度就会更快。
我不排斥使用一些自己不懂的技术,比如说我是坐飞机来的,并不完全清楚它的工作原理,但知道有整个航空界都在研究这项技术就很安心了。
而对于Batchnorm的工作原理,我们只知道它的功能是“reducing internal covariate shift”。
可是为什么这样就能加速梯度下降了?有没有相关的理论或者实验?你甚至都不清楚internal covariate shift是什么,就不想要一个定义吗?
Batchnorm已经成了构建深度神经网络的一个基础工具,但我们对它几乎一无所知。
想想过去一年里你为了刷竞赛榜单而做的实验、尝试的新技术;再想想过去一年里你为了解释奇怪现象、寻找其根源而做的努力。前者,我们做得很多,后者,我们应该再多做一些。简单的实验和理论是帮我们理解复杂系统的基础。
我们还有一件事可以做。现在,所有商用硬件上运行的成熟计算引擎都是梯度下降的变体,处理着数百亿的变量。
想象一下,如果我们有能在标准商用硬件上运行,处理数百亿变量线性解算器或者矩阵分解引擎,想象一下这样我们能做出多好的优化算法,用多好的模型来做实验,当然,这在数学上和系统上都很难,但这正是我们要解决的问题。
我对这个圈子有真挚的爱,这也是为什么我会站在这儿,号召大家更严格精确,别那么像炼金术师。
希望我们可以共同努力,将机器学习从“炼金术”变成“电力”。
完整演讲,参见下面这段视频: