Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >机器学习论文复现,这五大问题你需要注意

机器学习论文复现,这五大问题你需要注意

作者头像
机器之心
发布于 2020-11-04 07:35:57
发布于 2020-11-04 07:35:57
3K0
举报
文章被收录于专栏:机器之心机器之心

选自derekchia.com

作者:Zhiyuan Li 等

机器之心编译

编辑:小舟、魔王

论文复现一直是机器学习领域的难题,虽然最近多个学术会议提倡大家提交代码,但解决论文复现问题仍然任重而道远。在试图复现机器学习论文时,我们经常遇到哪些问题呢?新加坡机器学习工程师 Derek Chia 对此进行了总结。

我最初接触机器学习时,花费了大量时间来阅读论文,并尝试实现。当然,我不是天才。实现它意味着要执行 git clone 并尝试运行论文作者的代码。对于我感兴趣的概念,我可能还手动输入一些代码并进行注释,以便更好地理解论文和项目。

这样的学习方法令人沮丧。尝试复现论文的流程大致如下:

  • 一些达到新 SOTA 的论文在新闻媒体中引起关注;
  • 读者深入研究或快速浏览论文内容;
  • 读者对论文中的实验结果印象深刻,并产生复现的兴趣。

接下来就是疯狂搜索项目代码,并尝试在作者所用的数据集上运行代码。这时,你需要祈祷该项目具备以下要素:运行说明(README.md)、代码、参数、数据集、数据集路径、软件环境、所需依赖项以及硬件条件。了解这些,才能顺利复现论文中的 SOTA 结果。

而在这个过程中,你可能会遇到很多常见问题(参见下文)。遇到问题之前先了解它们是很有帮助的,毕竟,没人喜欢空手而归。

复现机器学习论文时的常见问题

复现过程中的常见问题如下所示:

  • README 文件不完整或缺失;
  • 未定义依赖项、代码存在 bug、缺少预训练模型;
  • 未公开参数;
  • 私有数据集或缺少预处理步骤;
  • GPU 资源的需求不切实际。

README 文件不完整或缺失

如果一篇论文在发表时开源了代码,那么 README 就是你着手开始复现项目的文档之一。好的 README 文件通常具备以下几个组成部分:依赖项列表、训练脚本、评估脚本、预训练模型以及运行脚本得到的结果。

实际上,这些内容已经在 Papers with Code 发布的《机器学习代码完整性自查清单》中列出(该清单已成为 NeurIPS 2020 代码提交流程的一部分)。该清单受到麦吉尔大学副教授、Facebook 蒙特利尔 FAIR 实验室负责人 Joelle Pineau 的启发。

Papers with Code 提供的 README 样例参见:https://github.com/paperswithcode/releasing-research-code

不完整的 README 文件对运行代码而言是一个坏的开端。

一个需要注意的信号是示例 notebook 或示例代码。notebook 的用途是演示代码的使用。理想情况下,除了点击「Run all」以外,不需要任何其他调整就能够运行 notebook。预填充参数和数据路径的命令行也能够实现同样的效果。

还有一些次要但有用的信息,比如作者的联系方式或展示模型架构或数据转换流程的 gif 图片等,这些都是完备的 README 文件应该包含的。如果代码库托管在 GitHub 上,请检查 Issue 区域的问题是否得到了积极回复,以及 pull request 是否定期被查看。这些事项均能证明库得到精心维护,确保后续复现工作得到有效支持。当然会有例外,但请慎重考虑以上各项出现缺失的情况。

Joelle Pineau 发布的机器学习可复现性检查清单(图源:https://www.cs.mcgill.ca/~jpineau/ReproducibilityChecklist.pdf)

未定义依赖项、代码存在 bug、缺少预训练模型

当你对示例 notebook 觉得满意后,你或许想尝试用不同的参数在自己的数据集上试用模型。在这一阶段,你或许会调用示例 notebook 中未用到的函数,或者在自己的数据集上尝试预训练模型,这时可能会遇到问题。

例如,你可能注意到 requirements.txt 缺失,或者软件包版本未固定(如 tensorflow==2.2)想象一下当你发现 TensorFlow 版本是 1.15 而不是 2.2,原因只是作者没有指定版本时的爆炸心态吧。

假设你检查过了依赖项,然而现在却发现预训练模型失踪了!这种情况下,你要么 debug 代码,要么提交 bug 报告,要么忽略代码。请谨慎选择第一个选项,因为你可能会在这上面花费好几个小时。当然有的 bug 很容易解决,如果我能修复的话,我会提交 pull request。但并不是每次都那么好运,这些随手可及的果子有时候很难摘。

预训练模型缺失是一个危险信号,但这其实并不罕见。毕竟,论文作者没有义务发布模型。那么,另一个替代方法是使用公开的参数训练模型进行复现。不过参数也不总是公开……

未公开参数

根据模型情况来看,超参数对于实现 SOTA 结果是非常重要的。下图展示了不同参数产生不同的 f1 分数(范围从 0.5 到 1.0)。模型中的参数通常是学习率(learning rate)、嵌入尺寸(embedding size)、层数、dropout 量、批处理大小、训练 epoch 数量等。

因此,如果作者没有提供他们使用的确切参数,你可能必须自己进行所有实验才能复现 SOTA 结果。

顺便说一句,Facebook 的 HiPlot 是一个很好的工具,帮助你在使用不同参数组合时将模型结果可视化。

HiPlot 地址:https://github.com/facebookresearch/hiplot

私有数据集或缺少预处理步骤

从很多方面来说,我们很幸运地拥有世界各地研究者提供的开源数据集。事实就是如此,数据的收集绝非易事,而清理这些数据并将其格式化以供研究使用,就更加麻烦一些。在此需感谢学术机构和 Kaggle 免费托管这些开源数据集,因为带宽和存储成本是很高的。

然而想使用私有数据集,并非易事。数据集可能包含受版权保护的信息,比如 ImageNet。通常你需要填写一份申请表,版权所有者将自行决定是否批准。

某些时候这个过程会很麻烦,如果你所需的数据集不可用,在申请行动之前要先认真考虑一下。或者你可以从其他渠道搜索或者下载数据,比如 Academic Torrents:https://academictorrents.com/。

对 GPU 资源的需求不切实际

近期出现了一股趋势:模型越大性能越好。一些论文使用了整个数据中心的算力才达到 SOTA 结果,这些论文复现起来当然很难。例如,2019 年 10 月谷歌发表论文《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》,尝试通过将参数扩展到 110 亿来探索 Transformer 模型架构的局限性。然而几个月后微软用 170 亿参数创建了 Turning-NLG,不久 OpenAI 放出 1750 亿参数的预训练语言模型 GPT-3……

要想训练数十亿参数的模型,你需要使用分布式训练方法以及某种形式的高性能计算(HPC)或 GPU 集群。具备 110 亿和 170 亿参数的模型分别需要约 44GB 和 68GB 的内存,因此这些模型无法仅使用一块 GPU 完成训练。

简而言之,尽早发现论文所用大模型是否超出你的个人能力。

微软训练 Turning-NLG。

总结

复现论文代码并非易事,不过越来越多的项目尝试标准化 SOTA 模型。我个人最喜欢的是 HuggingFace 的 Transformers,它为研究者和开发者提供了足够低的进入门槛。另外,TensorFlow 的 Model Garden 和 PyTorch 的 Model Zoo 也发展迅速(其中分别是 TensorFlow 和 PyTorch 团队构建的预训练模型)。

这些库旨在标准化预训练模型的使用,并为模型贡献和分发提供合适的条件。它们对代码质量提供了保障,并且具备不错的文档。我希望社区能从这些库中获益,并帮助复现 SOTA 结果,轻松地使用 SOTA 模型。

参考文献

  • Why Can’t I Reproduce Their Results (http://theorangeduck.com/page/reproduce-their-results)
  • Rules of Machine Learning: Best Practices for ML Engineering (https://developers.google.com/machine-learning/guides/rules-of-ml)
  • Curated list of awesome READMEs (https://github.com/matiassingers/awesome-readme)
  • How the AI community can get serious about reproducibility (https://ai.facebook.com/blog/how-the-ai-community-can-get-serious-about-reproducibility/)
  • ML Code Completeness Checklist (https://medium.com/paperswithcode/ml-code-completeness-checklist-e9127b168501)
  • Designing the Reproducibility Program for NeurIPS 2020 (https://medium.com/@NeurIPSConf/designing-the-reproducibility-program-for-neurips-2020-7fcccaa5c6ad)
  • Tips for Publishing Research Code (https://github.com/paperswithcode/releasing-research-code)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器之心 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PapersWithCode发布代码完整性自查清单:想获得更多星,你需要注意这五项
可复现性是科学领域长期关注的话题,近期人工智能和机器学习社区也对此投入了更多关注。例如 ICML、ICLR 和 NeurIPS 这些顶级学术会议都在努力推进将实验代码和数据作为评审材料的一部分提交,并鼓励作者在评审或出版过程中提交代码以帮助结果可复现。
机器之心
2020/05/19
5230
PapersWithCode发布代码完整性自查清单:想获得更多星,你需要注意这五项
论文无法复现!真公开处刑!PapersWithCode上线「论文复现报告」
现在,越来越多的机器学习(ML)研究者选择在论文发表时同步公开自己的代码,像 arXiv 这样的论文预印本平台也选择与机器学习资源网站 Papers with Code 合作,支持研究者在 arXiv 页面上添加代码链接。ICML、ICLR、NeurIPS 等一些顶会也要求投稿人在提交论文的时候附上代码,以供审稿人测试,确保其研究结果的可复现性。
Amusi
2021/06/09
2.6K0
论文无法复现!真公开处刑!PapersWithCode上线「论文复现报告」
公开处刑:研究者自建Papers Without Code网站,张贴复现不了的论文
二十几天前,Reddit 用户「ContributionSecure14」在机器学习社区疯狂吐槽:「我花了一个星期尝试复现一篇论文,结果失败了。上网搜了一下才发现,也有其他人说这篇论文的结果无法复现。」
机器之心
2021/03/15
9140
公开处刑:研究者自建Papers Without Code网站,张贴复现不了的论文
公开处刑:PapersWithCode上线“论文复现报告”,遏制耍流氓行为!
这不,就在昨日,PapersWithCode官宣其上线了新功能,在单篇论文的详情页面展示“公开处刑判决书”——论文复现报告。
AI科技评论
2021/07/02
7280
[翻] ML 代码完整性检查清单
翻译 ML Code Completeness Checklist 完整版请戳原文查看。
caoqi95
2020/04/14
1.1K0
[翻] ML 代码完整性检查清单
可复现性?稳健性?Joelle Pineau无情揭示强化学习的问题
Joelle Pineau,图源:https://research.fb.com/why-diversity-matters-in-ai-research/
机器之心
2018/12/26
5490
NLP简报(Issue#10)
Google AI和DeepMind的研究人员发布了一个有趣的多任务基准,称为XTREME[1],旨在评估语言模型的跨语言泛化能力,学习多语言表示形式。基准测试benchmark对40种语言和9种不同的任务进行了测试,这些任务需要在语法或语义上对不同级别的含义进行推理。本文还使用最新的模型为多语言表示提供基线结果,例如mBERT,XLM和MMTE。
NewBeeNLP
2020/08/26
8800
NLP简报(Issue#10)
2020年,那些「引爆」了ML社区的热门论文、库和基准
不平凡的 2020 年终于过去了!这一年,由于新冠肺炎疫情的影响,CVPR、ICLR、NeurIPS 等各大学术会议都改为线上举行。但是,机器学习社区的研究者和开发者没有停下脚步,依然贡献了很多重大的研究发现。
机器之心
2021/03/15
5370
2020年,那些「引爆」了ML社区的热门论文、库和基准
NeurIPS 2019投稿规则大变化!必须回答研究可复现问题,倡导提交论文代码
谷歌研究员hardmaru评论称,虽然不强制执行,但也给了评审依据,来快速拒绝那些不承诺披露代码的论文。
量子位
2019/04/22
1.2K0
NeurIPS 2019投稿规则大变化!必须回答研究可复现问题,倡导提交论文代码
【复现谷歌论文,成为共同作者】Facebook AI Lab负责人发起ICLR可重复性竞赛
【新智元导读】如今机器学习论文可复现性低成了研究界愈发关注的问题。为此,Facebook蒙特利尔AI Lab负责人联合全球5所大学,发起了机器学习可复现挑战赛,让参与者复现ICLR-18提交的论文。今年参赛者主要是学生,他们将复现的研究来自世界各地,其中不乏顶级人工智能实验室的论文。不仅如此,如果复现结论对原论文贡献重大,在原作者的要求下,参赛者还有可能作为共同作者被接收。 我们相信科学,因为我们可以验证科学结论的准确性。而验证准确性时,我们的方法是重复科学家的原始实验。那么,当原始实验无法复现的时候会发生
新智元
2018/03/21
8890
【复现谷歌论文,成为共同作者】Facebook AI Lab负责人发起ICLR可重复性竞赛
英国AI学者Michael Lones独家避坑指南,破解机器学习五大陷阱
近日,Michael A. Lones教授在arXiv提交了一篇论文,全面论述了机器学习在实际应用中的常见陷阱以及对应方法,以帮助机器学习的学术小白们快速入门。
AI科技评论
2021/08/25
5010
英国AI学者Michael Lones独家避坑指南,破解机器学习五大陷阱
MLK | 机器学习论文搜索利器推荐
简单介绍:arXiv是个提交论文预印本(preprint)的平台,里面的论文都没有经过同行评审(peer review),所以文章质量参差不齐,但却会比较新颖,可以从里面看下别人研究的新玩意。
Sam Gor
2019/08/16
7510
MLK | 机器学习论文搜索利器推荐
收藏|最优论文+代码查找神器,覆盖AI全领域(966个ML任务、8500+论文)
查找论文及对应源码的神器 Papers With Code 刚刚推出了最新版本,可以用图形界面查找你想要的 SOTA 实现,从应用领域到具体任务再到实现代码一步到位。据网站开发者介绍,里面包含了 966 个机器学习任务、515 个评估排行榜(以及当前最优结果)、8625 篇论文(带源码)、704 个数据集。
数据派THU
2019/03/08
1.4K0
收藏|最优论文+代码查找神器,覆盖AI全领域(966个ML任务、8500+论文)
机器学习工业复现的 12 个要素!
过去二十年来,我们对软件开发的理解有了大幅提升。其中一大部分原因是 DevOps 概念的出现及其在软件开发行业的广泛应用。 领先的软件公司都遵循着同样的模式:首先是在软件开发过程中快速迭代,然后进行持续集成、持续交付、持续部署。每个特性都要经过测试,看其提供价值的能力如何,而且软件始终要处于就绪的状态,并且通过自动化方法进行部署。 机器学习这个领域虽不同于传统的软件开发,但我们也能从软件开发行业汲取很多实用的经验教训。过去几年里,我们一直在开发生产型机器学习项目。我们的目标并不只是概念验证,而是与软件开发一样的可复现能力(reproducibility)。因此,我们构建了一套流程协调器、强大的自动化能力并建立了一套用于实现该目标的工作流程。 为什么不直接使用 Jupyter Notebook?从头开始构建一组包含所有处理步骤的笔记需要多长时间?为团队纳入新成员的难易程度如何?你现在可以复现两个月前的结果吗?能以多快的速度复现?你能将今天的结果和历史结果进行对比吗?你能在训练过程中关注到数据的出处吗?如果你的模型过时了又会发生什么? 我们遇到过所有这些问题。现在,我们将这些经验进行了归纳总结,得到了成功构建生产型机器学习的 12 个要素(类似于软件开发中的十二要素应用/12 factor app)。
Datawhale
2020/11/09
4200
一行代码即可调用18款主流模型!PyTorch Hub轻松解决论文可复现性
机器学习论文的可复现性一直是个难题。许多机器学习相关论文要么无法复现,要么难以重现。有时候论文读者经常为了调用各种经典机器学习模型,还要重复造轮子。
Python数据科学
2019/06/19
1.7K0
一行代码即可调用18款主流模型!PyTorch Hub轻松解决论文可复现性
17篇论文,详解图的机器学习趋势 | NeurIPS 2019
本文来自德国Fraunhofer协会IAIS研究所的研究科学家Michael Galkin,他的研究课题主要是把知识图结合到对话AI中。
AI科技评论
2019/12/18
1.7K0
当Git和Git-LFS无法解决机器学习复现问题时,是时候祭出DVC了
有人认为,由于软件工具的不充分,无法保证完全复现机器学习模型的结果,机器学习领域正「陷入危机」。这个危机可以通过为机器学习从业者提供更好的软件工具来解决。
机器之心
2019/06/20
2.2K0
当Git和Git-LFS无法解决机器学习复现问题时,是时候祭出DVC了
创立仅一年多,ML资源网站Papers with Code宣布加入Facebook AI
Papers with Code 正式加入 Facebook,这足以说明随着机器学习领域论文数量的剧增,如何快速获取想要的论文极其重要。机器之心之前也从 state-of-the-art 出发,尝试采集各领域的顶级论文,并希望有助于读者获取最新的研究成果。
机器之心
2019/12/24
6800
机器学习模型部署 | 剑桥研究者梳理了99篇相关研究(附论文下载)
在生产环境中部署机器学习模型是一个复杂的过程,需要考虑诸多因素,也存在很多挑战。近日,来自剑桥的研究者梳理了该流程常见的问题。
计算机视觉研究院
2022/01/25
2870
机器学习模型部署 | 剑桥研究者梳理了99篇相关研究(附论文下载)
[资源推荐] 必须收藏的两个查找论文和代码实现的网站!
无论是研究方向是 AI 方面的学生,或者是做机器学习方面的算法工程师,在掌握基础的机器学习相关知识后,都必须掌握搜索论文的技能,特别是研究或者工作领域方向的最新论文,更进阶一点的技能,就是可以复现论文的算法,这是在论文作者没有开源代码的时候的一个解决办法,但是在能够掌握这项技能前,我们希望能够搜索到其他人复现的代码。
kbsc13
2019/08/16
4.5K0
推荐阅读
PapersWithCode发布代码完整性自查清单:想获得更多星,你需要注意这五项
5230
论文无法复现!真公开处刑!PapersWithCode上线「论文复现报告」
2.6K0
公开处刑:研究者自建Papers Without Code网站,张贴复现不了的论文
9140
公开处刑:PapersWithCode上线“论文复现报告”,遏制耍流氓行为!
7280
[翻] ML 代码完整性检查清单
1.1K0
可复现性?稳健性?Joelle Pineau无情揭示强化学习的问题
5490
NLP简报(Issue#10)
8800
2020年,那些「引爆」了ML社区的热门论文、库和基准
5370
NeurIPS 2019投稿规则大变化!必须回答研究可复现问题,倡导提交论文代码
1.2K0
【复现谷歌论文,成为共同作者】Facebook AI Lab负责人发起ICLR可重复性竞赛
8890
英国AI学者Michael Lones独家避坑指南,破解机器学习五大陷阱
5010
MLK | 机器学习论文搜索利器推荐
7510
收藏|最优论文+代码查找神器,覆盖AI全领域(966个ML任务、8500+论文)
1.4K0
机器学习工业复现的 12 个要素!
4200
一行代码即可调用18款主流模型!PyTorch Hub轻松解决论文可复现性
1.7K0
17篇论文,详解图的机器学习趋势 | NeurIPS 2019
1.7K0
当Git和Git-LFS无法解决机器学习复现问题时,是时候祭出DVC了
2.2K0
创立仅一年多,ML资源网站Papers with Code宣布加入Facebook AI
6800
机器学习模型部署 | 剑桥研究者梳理了99篇相关研究(附论文下载)
2870
[资源推荐] 必须收藏的两个查找论文和代码实现的网站!
4.5K0
相关推荐
PapersWithCode发布代码完整性自查清单:想获得更多星,你需要注意这五项
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档