前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Google大脑科学家吐槽深度学习:瓶颈就是太不重视工程!

Google大脑科学家吐槽深度学习:瓶颈就是太不重视工程!

作者头像
量子位
发布2018-01-30 14:58:26
5450
发布2018-01-30 14:58:26
举报
文章被收录于专栏:量子位

Google Brain团队成员Denny Britz在博客上发表了一篇文章,对深度学习研究界进行了一番吐槽,转到twitter后收获了数百转发,可见共鸣之广。

量子位 舒石编译。

我之前读研搞NLP和信息提取的时候,大部分时间,都用来把科研想法变成代码。当时可能95%的研究生和导师们都不愿意碰代码。当我提出对某个问题的疑问时,得到的回复通常是:“这只是一个工程问题,先掠过吧”。后来我才知道,这种说辞的潜台词是:我不认为一篇与此有关的论文,能够通过同行评审。这种心态在学术界的人中似乎普遍存在。但作为一个工程师,我不禁注意到,缺乏工程实践产生的阻碍。

比方说以深度学习群体作为例子,因为这是我熟悉的,但这可能也适用于其他群体。作为研究人员的群体,我们都有一个共同的目标:推动领域进步,追求最新技术。有多种方法可以做到这一点,但最常见的是发表研究论文。绝大多数已发表论文的贡献都是渐进式的,我这么说并不是一种侮辱。我相信研究是一种增量工作,换句话说,新的工作是建立在前人工作的基础上。这也是应该的。我读过的大多数论文,超过90%的内容都是既有的成果,包括数据集,预处理技术,评估指标,基线模型架构等。作者通常只是增加一些新的想法,并展示改进后的成果。

上述种种并没有什么好吐槽的。我要说的问题不是过程本身,而是如何实现。我觉得有两个特别突出的问题,而且这两个问题都可以只通过“工程”的方式解决:1、研究时间被浪费 2、缺乏严谨性和可再现性。下面分别进行吐槽。

研究时间被浪费

研究人员是受过专业培训的人员。许多人花了几年或几十年的博士学位,并成为各自领域的专家。只有那些人应该花大部分时间做他们擅长的事情 - 通过提出新颖的技术进行创新,这才有意义。就像你不想要一个训练有素的外科医生每天花几个小时从纸质表格输入病人数据。但这就是目前的现状。

在理想的世界里,一个研究有了想法之后,有90%的工作可以很容易的建立在前人研究的基础上,只有10%的工作要做,以验证他/她的假设。(除非是一些真正的突破,但是大多数已发表的研究都属于这一类)。在实践中,恰恰相反的情况正在发生。研究人员花费数周时间重复数据预处理和后处理以及重新实施和调试基准模型。这通常包括跟踪相关论文的作者,以弄清楚使用什么技巧使它工作。论文往往不提到精细的部分,因为这将使结果看起来不那么令人印象深刻。在这样做的过程中,研究人员引入了几十个混杂变量,这基本上使比较没有意义。而且以后还会更多。

发现,我们之所以不知道已有哪些研究成果,一个很重要的原因是基于他人成果展开研究有困难。大多数研究人员一再基于自己原有的研究工作,继续展开研究。当然,人们可能会认想要成为某个特定领域的专家,需要持续专注在类似的问题上。但我不认为这是根本的原因,尤其是在深度学习领域,这个领域有非常多知识可以融会贯通的子领域。

所以我相信主要原因是,从实验的角度来看,延续自己既有的研究最容易。比方,可以发表更多的作品,花费更少的修改时间;基线已经在熟悉的代码中实现,评估设置已经就绪,相关工作已经完成等等。这也导致较少的竞争 - 没有其他人可以访问你的实验设置,并轻易地与你竞争。如果基于他人的研究也能如此简单,我们可能会看到更多的研究多样性。

当然也不全都是坏消息。有几个趋势正走在正确的方向。例如,发布代码变得越来越普遍;类似OpenAI的Gym以及Universe这类软件包,至少让评估和数据集简化。Tensorflow和其他深度学习框架通过实现低级原语来移除很多潜在的混杂变量。说到这里,我们仍然离理想状态很远。想象一下,如果我们有标准化的框架,标准的数据仓库,完善的标准代码库和编码风格,以及严格的自动化评估框架和在完全相同的数据集上操作的实体,那么研究将何等的高效。从工程角度来看,所有这些都是简单的事情 - 但它们可能产生巨大的影响。

我想我们正在低估我们正在处理纯软件的事实。这听起来很明显,但它实际上是一个大事。在医学或心理学等领域建立严格控制的实验几乎是不可能的,涉及非常大量的工作。而软件领域几乎没什么限制。它比我们大多数人认识到的更加独特。但我们不是这样做的。我觉得这些改变之所以没有发生,是激励机制的失调。说实话,大多数研究者更关心他们的出版物,引文和任期轨迹,而不是实际上推动研究领域向前。他们很满足于这种现状。

缺乏严谨性

第二个问题与第一个密切相关。我上面提到了:缺乏严谨性和可重复性。理想的状态是,研究人员应该保持所有不相关的变量,来实施一项新的技术,然后在一定范围的基线内,展示出一些改进。这听起来很清楚吧?好吧,如果你碰巧读了很多深度学习论文,那么这种理想状态,听起来像是一部科幻电影。

在实践中,每个人都使用不同的框架和流水线,重新进行技术实现,这让比较变得无意义。在几乎每个深度学习模型实现中,都存在大量可以影响结果的“隐藏变量”。这些包括嵌入到代码中的非显而易见的模型超参数,data shuffle seeds,可变初始化器,以及通常在论文中未提及但明显影响最终测量的其他事物。

当你重新实现你的LSTM时,使用一个不同的框架,预处理你自己的数据,写几千行代码,你会创建多少混淆变量?我的猜测是,它在数百到数千。如果你在一些基准模型上显示出0.5%的边际改善(数字通常取自过去的论文,甚至不是多次运行的平均数),你如何证明因果关系?你怎么知道这不是混杂变量的一些组合的结果?

就个人而言,我根本不相信论文结果。我倾向于阅读论文寻找灵感—— 我关注的是想法,而不是结果。但不应该是这样。如果所有研究人员都能发布代码,难道不能解决问题吗?其实不行。把10,000行没有注释的代码放在Github上,然后说“在这里,运行这个命令来重现我的结果”,与人们正常阅读、理解、验证、搭建的代码流程并不一样。这就像是望月新一提出的ABC猜想,除了他自己没有别人明白。

再次强调,仅用“工程”的办法就有望解决问题。解决方案几乎等同于上面第一个问题(标准代码,数据集,评估实体等),但困难也是一样。事实上,它甚至可能不符合研究人员发布可读代码的最佳利益。如果人们在其中发现错误,并需要收回你的论文,怎么办?发布代码是有风险的,无论你为谁工作,除了PR之外没有明显的好处。

吐槽结束。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量子位 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 研究时间被浪费
  • 缺乏严谨性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档