源 | AI科技评论 译 | 杨晓凡
由于深度神经网络的成功,机器学习的整个领域也愈发热门、愈发茁壮。机器学习的繁荣以及 arXiv 助推下的知识和技巧快速更新当然是好事,不过这也会带来一些烦恼,那就是随之涌现的质量不高的论文。
之前已经有两类没营养的论文被广泛吐槽过,一类是调整改进现有模型和超参数,只为了刷 benchmark 数据的「灌水」论文;另一类是在某个新兴的细分领域做出了一点粗制滥造的成果,就马上传到 arXiv 上成为「这个领域突破性/开创性进展」的「占坑」论文。前者对系统工程师和研究者们都参考价值很小,后者「成果价值不高但不得不引用」也让后来者如鲠在喉。
近期,reddit 的机器学习版上也出现了一个热门帖子,聚集了很多人留言讨论。这个帖子的主题就是谈谈深度学习文献里常见的、令人讨厌的投机取巧的做法。「论文质量的评定靠的是审稿人的好评价」这事本来没错,但许多作者已经把「审稿人的好评价」作为了写作的目标,那么在写论文的过程中,为了探求真理的初衷就开始走样,开始出现各种「为了好看」而故意策划的做法。AI 科技评论就把网友们眼中的种种「罪状」列举如下,我们来看看,并一起谴责这些不道德的论文作者们吧。
做法一:精心设计的测试条件
网友 FutureIsMine:选了一个很小的数据集来测试模型,模型在上面有很好的表现是因为已经可以记住这个数据集了,这样就只剩正则化了。接下来会发生的事情就是,当别人尝试复现这个算法解决自己的问题的时候,就会发现它的表现其实要比之前更广为接受的顶级模型的表现差得多。
网友 reservedsparrow:同意 FutureIsMine 的说法,而且我觉得这事的另一个极端也很可怕。用一个非常复杂的数据集来比较自己的方法 A 和之前的方法 B;给 A 调参花的时间精力比 B 多得多;论文里面写“所有实验都用了 α=0.1,β=0.0001,……等参数值”;最后呈现出来的结果就显得 A 更好。
网友 p-morais:有种做法在我看来特别黑心。在强化学习的连续控制方面,一直调整自己的物理模型,直到达到了想要通过算法达到的结果已经成了惯用做法(起码「纯粹的」强化学习论文是这样的,下面我会列举几篇),但同时又并不会说明物理模型的细节;甚至更糟糕的是,展示的图像或者视频中的物理模型看起来和其它论文中的差不多,但其实完全不同。
1707.02286、1502.05477、1509.02971、1604.06778、1707.06347 还有 openreview.net/pdf?id=S1ANxQW0b 这几篇论文都是这样。具体来说,仔细看看他们的「行走机器人」或者「仿人类」运动环境设置吧。你要是觉得,『因为几个模型看起来没多大区别,而且这几篇论文没有一篇说明了物理模型的详细设置,那它们就肯定解决的是等价的问题、不同论文中的结果可以直接拿来对比』的话,那你就大错特错了。
他们这种做法就好像「做 CV 的人为了让结果更好看所以开始修改数据集」一样,接下来展现测试结果的时候又对所有这些改动的细节闭口不谈。我能理解强化学习研究者们一般不把自己看作有足机器人的研究者,而且相比具体的动作,他们更关注的是反馈最大化;但是如果要展示算法学到的有足机器人的实际步态的话,那就有必要展示出所有重现这个步态所需的细节,包括物理模型的规格细节。纯粹的强化学习理论研究者可不是这些论文的唯一读者。
网友 kyndder_blows_goats:在很小的数据集上,如果你没有用很强的正则化(不管是算法中隐式的还是显式的),那你的模型就会过拟合得一塌糊涂。所以如果这时候把它和一个没有用同样正则化的基准模型做对比,你的模型就会看起来特别棒。然而在真实的数据集上,正则化很大一部分都是数据自己带来的,你的隐式正则化的模型就很可能表现不怎么样。
网友 elder_price666:在测试中顺手就把当前的顶级方法漏掉,这样自己的方法就是看起来最好的那个。
网友 Bhananana:拿来做对比的其它模型都是自己随便挑的,比如和顶级模型的第二好的版本做对比,理由是这个版本的「硬件配置和自己的最为接近」,又或者和一组老模型和顶尖模型的更差的版本做对比但同时给不出任何统计角度的正当理由,这不是乱来吗。就为了能在摘要里写「达到了和顶级模型近似的结果」就精心挑选和要哪些模型做对比,论文就不该这么写。能不能自觉点,尊重一下统计方法。
网友 tomvorlostriddle:
不和恰当的基准模型做对比。举个例子,和最新、最好的 5 个半监督学习算法做比较其实挺好的,但是如果一个简单的随机森林算法,忽略了数据集里没有标签的那部分,而且还不怎么需要调参就跟你的方法达到了差不多的表现的话,那你就不应该在论文中省略掉它。
手工对数据集做了很多调整以便自己的算法跑出好的结果,然后对外宣称自己选择的数据集非常有代表性。
测量数据集预测的准确率,同时准确率和资源消耗之间有明显的不平衡。
只选用类别和资源消耗之间没有不平衡状况的数据集,以此来评价本来就应该运用在不平衡数据上的算法。这虽然避免了上一个问题吧,但是这让别人怎么评价你的算法呢。
不做任何调节以便进行多次对比。
不做任何调节以便进行假想复现,比如要多次运行的 CV 任务里就需要这个。
做法二:故意用复杂的方法
网友 reservedsparrow:这是在两篇 2017 VQA Challenge 冠军论文的 PyTorch 实现(http://t.cn/RHzbHXD)中受到启发的。代码作者们在 README.md 中写到:「(我们改进的)第三点是因为,我们就是觉得原论文中的两个流分类器和预训练过于复杂了,而且没有什么必要性。」
-
此处的投机取巧:从开头就写得很复杂,而且根本不屑于花费时间逐项确认是哪个因素在起作用,也不会尝试简化它。
-
这种做法能提升测量指标/达到目标的原因:审稿人通常更喜欢抱怨论文写得太简单(「小步渐进的研究」),而不怎么抱怨论文写得太复杂。
-
这对作者以外的所有人都不是好事的原因:会带来过于复杂的模型,同时几乎无法帮助人弄明白哪些部分是真正有用的。
网友 elder_price666:用多余的证明过程(比如把已有的证明小修小改再做一遍)让论文看起来具有更强的数学性,即便这根本不是必要的。NIPS 论文在这方面最糟糕。
做法三:精心点缀的结果
网友 PresentCompanyExcl:在论文摘要里写「只花了 x 个小时就训练完毕」,然后只在正文里才说明了并行计算用了一万个 CPU 并且花费了多少墙上时间。
网友 invariant_crypto:我怀疑有种做法在强化学习界非常盛行,尤其是在连续控制方面,只看看算法的稳定性有多差就能理解为啥这样做:从 50 个随机种子开始训练 50 个模型,取了最好的 5 个结果。然后在论文里写「我们下面介绍 5 个随机种子得到的结果」。
网友 LiteFatSushi:说自己达到了顶尖表现,但是闭口不谈参数的搜索空间有多大、用了多少 CPU/GPU 时间进行搜索。想要超过当前的顶尖表现很容易(但是专门为了这个发论文就很没劲了),用一个同等的甚至超微差一点的模型都可以做到,只要用随机种子多试几次、或者针对要跑的数据集多搜索搜索参数空间。要是你论文里的「新的顶尖表现模型」过于复杂、需要的微调也大幅度增加,那就没人会对它感兴趣。从这个角度讲,手头有很多资源的大公司(谷歌、微软、百度等等)的论文有很大嫌疑。
网友 rgalbo:为了找到一个好的模型架构,自己做了数不清的迭代实验。然后在论文里写得好像自己凭直觉就得到了这个架构一样。
网友 tomvorlostriddle:对算法的明显局限性闭口不提。就简单写句「这是一种直推式的方法,对新数据的泛化性不好」。拜托,不管是谁,仔细看看论文都能发现这个。故意不写局限性,唯一能骗到的人就是对论文本来就不太感兴趣的人。
做法四:不道德地宣传论文
网友 schmidhubernet:1)往 arXiv 传被拒绝的论文。2)在审稿流程开始前就无耻地在 reddit 的 ML 版上宣传自己的论文。
网友 invariant_crypto:其实上传被拒绝的论文到 arXiv 并不是错的,但是如果论文没有修正审稿人指出的致命的纰漏、错误等等,就很可能会造成误导,甚至让读者尝试在它的基础上继续研究。
网友 _MandelBrot:arXiv 到底是 arXiv,如果读未经评议的论文的时候没有谨慎一点,那得怪自己。
网友 torvoraptor:我考虑过这样,如果有经过评议的论文,那我就忽略 arXiv 上的论文,因为它们毕竟没经过评议(引用它们当然没问题)。我还遇到过几次自己论文的审稿人要求引用未经正式发表的 arXiv 论文(基本上就是他们自己的工作)。
不得不说,网友们提到的有些做法让 AI 科技评论也开了眼界,原来还有人这样写论文的。我们日后看论文的时候要多加小心,避免被出现这些投机取巧的时候被骗到;自己写论文的时候也可以更真诚、更全面一点,免得让读者/审稿人不由自主地戒备起来。如果读者们也有一些自己的想法,欢迎大家在评论区共同交流。
-END-