ML论文可复现性危机:60%代码存在致命Bug,顶会该强制提交代码吗

一位审稿人的警示:12篇论文仅1篇代码完整
随着 NeurIPS 评审季落幕,一位在今年参与了三大顶会评审工作的研究者在 Reddit 上发出了一份令人不安的观察报告。他的核心诉求非常直接:是时候直接拒绝(desk reject)那些不提供可复现代码的论文了。
NeurIPS(Neural Information Processing Systems)与 ICML(International Conference on Machine Learning)、ICLR(International Conference on Learning Representations)并称机器学习领域三大顶级会议。NeurIPS 每年收到超过一万篇投稿,录取率通常在 25% 左右。每篇论文一般由 3-4 位审稿人独立评审,审稿人通常是该领域的在读博士生、博士后或教授,他们在数周内需要完成对分配论文的详细评估。在审稿人之上,还有 Area Chair(领域主席)负责协调同一篇论文的多位审稿人意见并做出最终推荐,以及 Senior Area Chair 和 Program Chair 层层把关。论文与审稿人之间的匹配依赖于自动化的亲和度评分系统(如 Toronto Paper Matching System 和 OpenReview 内置的语义相似度算法),这些系统通过分析审稿人的历史发表记录与投稿论文的主题相似性来进行分配。然而,由于投稿量的急剧增长,审稿人的工作负担日益加重——每位审稿人每个审稿周期通常需要评审 4-8 篇论文,每篇需要投入 4-10 小时的仔细阅读和评估,这也是代码审查难以推行的现实原因之一。
所谓 desk reject(编辑台拒稿),是学术出版中的一种快速筛选机制,指论文在进入正式同行评审之前,由程序委员会主席或领域编辑直接拒绝。这通常用于处理明显不符合投稿要求的论文,如主题不相关、格式严重不符或违反投稿规则。将缺乏可复现代码列为 desk reject 的条件,意味着这不再是一个由审稿人自由裁量的质量问题,而是上升为与格式要求同等级别的硬性准入门槛。
这个提议看似激进,但背后是扎实的数据支撑。在这位审稿人今年审阅的 12 篇论文中,只有 1 篇提供了完整代码——即能够从输入数据集一路跑到输出 AUROC 指标的完整训练流水线。这里的 AUROC(Area Under the Receiver Operating Characteristic Curve)是机器学习中衡量分类模型性能的核心指标之一,它通过绘制不同阈值下真正率与假正率的关系曲线,计算曲线下面积来评估模型的区分能力。AUROC 的取值范围在 0 到 1 之间,0.5 表示模型没有任何区分能力(等同于随机猜测),1.0 表示完美分类。该指标的优势在于它不依赖于分类阈值的选择,能够全面反映模型在所有可能阈值下的综合表现。在医学诊断、欺诈检测等类别不平衡的场景中,AUROC 比简单的准确率更能反映模型的真实性能。然而,AUROC 的计算方式本身也存在实现上的陷阱——例如在多标签分类中采用宏平均还是微平均,对于不同数据划分策略下计算方式的差异等,这些都是论文中常被忽略但影响结果的细节。
所谓"完整训练流水线"则指从原始数据加载、预处理、模型定义、训练循环到最终评估指标输出的全链路代码,缺少任何一环都会导致实验无法端到端复现。值得强调的是,现代 ML 实验的复现性不仅依赖于核心算法代码本身,还高度依赖于运行环境的精确配置——包括 Python 版本、深度学习框架版本(PyTorch 或 TensorFlow 的不同版本之间存在行为差异)、CUDA 和 cuDNN 版本(GPU 计算库的版本直接影响浮点运算的数值精度)、甚至操作系统层面的随机数生成器实现差异。这就是为什么越来越多的可复现研究倡导使用 Docker 容器或 conda 环境配置文件来"冻结"完整的运行环境。一篇仅提供核心模型代码但缺少环境配置文件(如 requirements.txt、environment.yml 或 Dockerfile)的论文,其复现成本可能比预期高出数倍,因为审稿人或后续研究者需要花费大量时间调试版本兼容性问题。另有 4 篇提供了片段式的部分代码,但无法端到端复现实验,剩下的 7 篇则完全没有提供任何代码。

更值得警惕的是,在那 5 篇至少提供了部分代码的论文中,有 3 篇存在明显的 bug,且这些 bug 足以彻底推翻论文结论。至于那 7 篇没有代码的论文里究竟藏着什么,谁也不得而知。
小Bug大灾难:代码错误如何推翻论文结论
机器学习是一个高度技术化的领域,一个看似微不足道的代码错误,如果出现在关键位置,就可能对最终结果产生巨大影响。
复现性为何如此脆弱
在 ML 研究中,实验结果往往依赖于大量的实现细节:数据预处理方式、随机种子、批次归一化、评估指标的计算逻辑等等。这些细节很难在论文正文中完整描述清楚。
以批次归一化(Batch Normalization)为例,它是深度学习中广泛使用的技术,由 Ioffe 和 Szegedy 在 2015 年提出,通过对每个小批次的输入进行标准化来加速训练并稳定梯度流动。然而其行为在训练模式和推理模式下有本质区别——训练时使用当前批次的统计量(均值和方差),推理时使用训练过程中累积的移动平均值。这意味着不同的批次大小、数据顺序甚至是否正确切换模式,都会导致不同的实验结果。一个常见的错误是在评估阶段忘记调用 model.eval(),导致模型仍然使用当前批次的统计量而非累积的全局统计量,这在批次较小时会严重影响推理结果的稳定性。类似的陷阱还存在于 Dropout 层——这种通过随机丢弃神经元来防止过拟合的正则化技术,在推理时需要关闭随机丢弃并对权重进行相应缩放,如果忘记切换模式,模型在评估时的表现将严重低于其真实能力,导致实验对比结果失真。
随机种子则控制着权重初始化、数据打乱顺序、dropout 掩码等所有随机操作,即便代码完全相同,不同的随机种子也可能产生显著不同的结果。研究表明,在某些任务上,仅因随机种子不同导致的性能波动幅度,就可能超过某些论文声称的"方法创新"所带来的提升。2020 年 Dodge 等人发表在 EMNLP 上的研究系统性地展示了这一问题:在 GLUE 基准的多个任务上,BERT 微调的性能波动范围可达 2-3 个百分点,而许多论文声称的改进幅度恰好落在这一范围内。这些细节在论文中通常只是一句话带过,却对复现性有决定性影响。
一个更为典型的例子是数据泄露(data leakage)——测试集信息不慎混入训练过程,这类错误在纸面描述中几乎无法察觉,但在代码中往往一目了然。数据泄露的常见形式包括:在划分训练/测试集之前对整个数据集进行标准化(使得训练集的标准化参数包含了测试集的统计信息)、在时间序列预测中使用了未来数据进行特征构造、或者在交叉验证的折叠外进行了特征选择。更为隐蔽的泄露形式出现在图神经网络(GNN)研究中——由于图结构中节点之间的消息传递机制,测试节点的特征可能通过邻居关系间接影响训练过程(即所谓的 transductive 设置下的信息泄露),这种泄露在代码中体现为训练时是否对图进行了正确的子图采样和边屏蔽。在时间序列领域,正确的做法是采用前向链式验证(walk-forward validation),即训练集只能包含验证时间点之前的数据,模型不能"看到"任何未来信息,但许多研究者错误地使用了标准的随机划分交叉验证。这类错误在论文方法论的文字描述中极难被发现,因为作者往往只描述"我们将数据划分为 80/20 训练测试集",而不会提及标准化的具体实施顺序。但在代码中,这种错误通常表现为几行代码的顺序问题,训练有素的审稿人可以迅速识别。
发帖者指出,正因为如此,仅凭论文文字描述来判断一项工作的可靠性,是极其危险的。当 60% 提供了代码的论文都被发现存在致命 bug 时,我们有理由怀疑那些完全不提供代码的论文中,实际的错误率恐怕只高不低。
结果无法验证的连锁风险
无法复现的研究成果会污染整个学术生态。后续研究者可能在错误的基线(baseline)上构建自己的工作,浪费大量时间和算力去追赶一个根本不存在的性能高度。
在机器学习研究中,基线是指用于对比的参照方法,新方法的贡献通常通过超越基线来证明。如果一篇广被引用的论文报告了虚高的性能数字(无论是因为代码 bug 还是数据泄露),后续研究者就会将这个错误数字作为"需要超越的目标"。这会导致一种恶性循环:为了超越一个不真实的基线,研究者可能不得不采用过度拟合、cherry-picking 结果或其他可疑做法。
过度拟合(Overfitting)是指模型在训练数据上表现优异但在新数据上泛化能力差的现象,这可能是因为模型记住了训练数据中的噪声而非真正的模式。Cherry-picking 则是一种选择性报告的做法——研究者可能运行了数十次实验,但只报告表现最好的那一次结果,而不报告平均性能或失败案例。这两种做法都会导致论文中报告的性能数字高于方法的真实水平。在缺乏代码的情况下,审稿人几乎不可能判断作者是否进行了充分的消融实验和多次重复实验。消融实验(Ablation Study)是机器学习研究中的标准做法,通过逐一移除系统中的组件来验证每个组件的贡献,但如果没有代码,审稿人无法验证作者报告的消融结果是否真实反映了各组件的独立贡献。
更严重的是,当整个子领域的多篇论文都建立在同一个有缺陷的基线之上时,纠错的成本将呈指数级增长,因为承认基线有误意味着大量已发表工作的结论都需要重新审视。这种系统性的资源浪费,最终损害的是整个领域的科研效率。历史上已经有过多次这样的教训——例如某些自然语言处理基准测试被发现存在标注噪声或数据泄露后,大量基于该基准声称取得进步的论文都不得不重新评估其贡献的真实性。一个广为人知的案例是 2019 年 Bisk 等人对 Winograd Schema Challenge 的分析,发现该基准中存在大量可通过表面统计线索(而非真正的常识推理)解决的样本,这意味着之前许多声称在"常识推理"上取得进步的论文,实际上可能只是学会了利用数据集的统计偏差。类似地,在计算机视觉领域,ImageNet 测试集被发现存在约 6% 的标注错误,这虽然不会颠覆整体排名,但对于那些声称取得微小改进的论文来说,其贡献的统计显著性就值得怀疑了。
激励机制失灵:为何隐藏代码反而更安全
发帖者一针见血地指出,这场危机的本质是激励机制的失灵。
在当前的评审流程中,隐藏代码几乎没有任何代价。相反,公开代码反而会增加被拒稿的风险——因为审稿人可能会在代码中发现 bug。这就形成了一个扭曲的博弈:
- 公开代码:面临审稿人挑出实现问题、进而导致拒稿的风险;
- 隐藏代码:审稿人无从核查,反而更"安全"。
在这种规则下,理性的投稿者自然倾向于不公开代码。诚实和透明反而成了一种竞争劣势。这是一个典型的"劣币驱逐良币"式的逆向选择困境。
逆向选择(Adverse Selection)最初由经济学家乔治·阿克洛夫在其著名的"柠檬市场"论文中提出,他因此获得了 2001 年诺贝尔经济学奖。该理论描述了信息不对称如何导致市场中高质量商品被低质量商品驱逐的现象——在二手车市场中,卖家比买家更了解车况,买家因无法区分好车和坏车而只愿支付平均价格,这导致好车车主退出市场,最终市场上只剩下"柠檬"(次品)。在学术出版的语境下,"质量"对应的是研究的真实性和可靠性。当评审系统无法有效区分真实可靠的研究和存在隐性缺陷的研究时,前者反而承担了更高的"成本"(公开代码带来的被拒风险),而后者通过信息隐藏获得了不正当的竞争优势。
在博弈论中,这种情境被称为"信息不对称下的道德风险"——当隐藏信息的行为无法被有效监测和惩罚时,理性个体会倾向于选择对自身有利但对整体有害的策略,最终导致系统性的信任崩塌。长此以往,诚实公开的研究者在竞争中处于劣势地位,这将逐步侵蚀整个学术共同体的信任基础。值得注意的是,这种博弈困境并非 ML 领域独有——社会心理学在 2010 年代经历了著名的"复现危机"(Replication Crisis),当时大量经典研究被发现无法复现,其根源同样是发表偏见和透明度不足。这场危机催生了预注册制度(Pre-registration)的兴起——研究者在收集数据之前就公开注册其假设、方法和分析计划,从而限制事后选择性报告的空间。这一制度已在心理学和医学领域广泛推行,ML 领域是否需要借鉴类似机制,值得深入探讨。
改变游戏规则:从加分项到硬性门槛
发帖者认为,唯一的解决办法是改变游戏规则本身——对隐藏代码的行为施加真实的惩罚。也就是说,将"提供可复现代码"从一个加分项,转变为投稿的硬性门槛。如果不提供,直接 desk reject。
只有当隐藏代码的代价高于公开代码所带来的潜在风险时,投稿者的行为才会发生根本性转变。这一逻辑在制度设计中被称为"机制设计"(Mechanism Design),即通过改变游戏规则来引导参与者的行为向社会最优方向收敛。机制设计理论由 Leonid Hurwicz、Eric Maskin 和 Roger Myerson 发展,三人因此获得 2007 年诺贝尔经济学奖。其核心思想是:在无法直接改变个体偏好的情况下,可以通过设计激励相容(incentive-compatible)的制度规则,使得个体追求自身利益的行为恰好与社会整体利益一致。在学术出版的语境中,这意味着设计一个制度,使得"提供高质量可复现代码"成为个体层面的最优策略,而非需要依赖道德自觉的"美德"。
强制代码提交的现实争议与折中方案
尽管这一提议在追求科研诚信的层面上极具正当性,但在实际执行中仍面临不少现实挑战,这也是社区讨论中容易出现分歧的地方。
支持强制代码提交的理由
- 强制代码提交能显著提升复现性,过滤掉大量存在实现错误的工作;
- 目前 NeurIPS、ICML 等顶会已经开始鼓励甚至要求提交复现性检查清单(reproducibility checklist),强制代码是自然的下一步。自 2019 年起,NeurIPS 开始要求作者提交此类清单,涵盖实验设置、超参数搜索范围、计算资源、代码可用性等方面,ICML 和 ICLR 随后也采纳了类似做法。NeurIPS 还设立了专门的复现性挑战赛(Reproducibility Challenge),鼓励学生尝试复现已发表论文的实验结果,这一活动自 2018 年启动以来已经揭示了大量已发表工作中的复现问题。此外,Papers with Code 平台通过系统性地关联论文与其代码实现,已经建立了涵盖数万篇论文的代码索引数据库,其统计显示附带代码的论文获得的引用量显著高于无代码论文,这从另一个角度证明了代码公开对学术影响力的正向作用。然而这些措施目前仍以"鼓励"和"自我报告"为主,并不构成强制性约束,检查清单中"是否提供代码"一项,作者只需勾选"是/否"并给出简短理由,不提供代码并不会直接导致拒稿;
- 匿名代码仓库(如匿名 GitHub 链接)等技术手段已经能够较好地兼顾双盲评审的需求。双盲评审(Double-blind Review)是指审稿人和作者互不知晓身份的评审制度,旨在减少评审偏见——研究表明,知名研究者和知名机构的论文在单盲评审中获得的评分显著高于匿名评审。在这种制度下公开代码面临一个技术难题:代码仓库中的提交历史、用户名、组织信息都可能暴露作者身份。为解决这一矛盾,社区发展出了多种匿名化方案:Anonymous GitHub 允许创建去除身份信息的仓库镜像,OpenReview 平台支持匿名附件上传,部分会议允许在补充材料中以 zip 包形式提交代码。这些技术手段虽不完美,但已能在大多数情况下有效平衡透明性与匿名性的需求。
需要考量的现实约束
- 部分研究涉及专有数据集、商业敏感数据或超大规模算力,代码即便公开也难以真正复现。例如,训练大型语言模型可能需要数千块 GPU 运行数周,即便代码完全公开,绝大多数研究机构也不具备复现的算力条件。以 GPT-3 为例,其训练据估计消耗了约 3.14×10²³ 次浮点运算,按当时云计算价格折算约需 460 万美元的算力成本——这显然不是通过"提供代码"就能解决的复现问题;
- 工业界研究团队可能受限于知识产权政策,无法开源核心代码。来自 Google、Meta、Microsoft 等公司的研究论文占据了顶会论文的相当比例(据统计约占 NeurIPS 论文的 20-30%),强制代码公开可能导致这些团队减少向学术社区贡献论文,这对领域发展同样不利。不过值得注意的是,开源许可证的多样性实际上为工业界提供了灵活选择:Apache 2.0 许可证允许商业使用但要求声明修改;MIT 许可证几乎没有任何限制;而即便是最严格的 GPL 许可证,对于仅用于学术验证目的的代码公开也通常不构成商业威胁。部分公司已经发展出"研究代码"与"生产代码"分离的策略——公开用于复现论文结果的简化实现,同时保留内部优化的生产版本。这种做法既满足了可复现性要求,又保护了核心商业利益;
- 审稿人本身的工作负担已经很重,逐一运行和审查代码会进一步增加评审成本。考虑到审稿工作通常是无偿的志愿服务,进一步增加工作量可能导致更多高质量审稿人退出评审工作。一种可能的缓解方案是引入自动化的代码验证工具——例如自动检查代码是否可以成功安装和运行、是否包含必要的随机种子设置、是否覆盖了论文中报告的所有实验——这可以在不增加审稿人负担的情况下完成基本的代码质量检查。事实上,部分期刊(如 Journal of Machine Learning Research)已经开始试验类似的自动化验证流程。
对于这些约束,一个折中方案或许是:将"是否提供可复现代码"作为评审的显式打分项,而非一刀切的硬性拒稿标准,同时对确有正当理由无法公开代码的工作给予豁免通道。此外,还可以考虑引入分级制度:理论贡献为主的论文可以豁免代码要求,但以实验结果为核心贡献的论文则必须提供可复现代码。这种分级制度可以参考临床医学研究中的做法——随机对照试验(RCT)必须在 ClinicalTrials.gov 注册并公开数据,而纯理论分析或综述则无此要求。
透明是科学的底线
这场关于代码复现性的讨论,触及了当代 ML 研究一个深层的结构性矛盾:在论文数量爆炸式增长、发表压力空前的今天,我们如何保证研究成果的真实性和可靠性?
机器学习领域论文数量的增长速度令人震惊。以 arXiv 上 cs.LG(机器学习)和 cs.AI(人工智能)分类为例,年度论文提交量从 2015 年的约 5000 篇增长到 2023 年的超过 50000 篇,十年内增长了近十倍。NeurIPS 的投稿量也从 2016 年的约 2500 篇攀升至 2023 年的超过 12000 篇。这种增长部分源于深度学习的成功吸引了大量新入行者,部分源于"不发表就淘汰"(publish or perish)的学术评价体系。在如此海量的论文面前,传统的同行评审机制面临前所未有的压力,审稿质量难以保证,而代码审查这种需要大量时间投入的环节更是难以系统性落实。这种压力已经导致了审稿人池的稀释——为了匹配不断增长的投稿量,会议不得不招募越来越多的审稿人,其中许多人经验不足或专业背景与所分配论文不完全匹配,这进一步降低了评审的平均质量,形成了一个恶性循环。
代码不是论文的附属品,而是实验结论的证据本身。当一个领域的顶会论文中,超过一半连基本的可复现代码都无法提供,这本身就是一个值得整个社区严肃反思的信号。或许正如发帖者所言,是时候通过改变规则,让透明重新成为科研的默认选项,而非例外。科学方法的核心原则之一是可证伪性——一项声称如果无法被他人独立验证或反驳,就不具备科学意义。在实验科学中,这种可验证性历来通过详细的方法描述来保证;而在计算科学中,代码就是那个不可替代的"详细方法描述"。当我们的论文越来越依赖于复杂的计算实验,而这些实验的核心证据却被锁在作者的私有电脑里时,我们距离科学精神的初心就渐行渐远了。
核心要点
核心要点
相关推荐

Go微服务实战:商城、AI Agent与IM系统集成架构详解
深入解析Go微服务架构下商城、AI Agent与IM即时通讯系统的集成方案,涵盖统一鉴权、gRPC通信、组件化Agent引擎设计、群聊机器人等生产级落地场景,适合希望掌握存量系统集成能力的Go开发者。

X平台推荐算法被曝过滤巴西选举内容,算法透明度再引争议
X平台(原Twitter)被用户发现在For You推荐流中过滤巴西选举相关内容,引发算法透明度与言论自由争议。本文深入分析事件背景、技术实现方式及对平台治理的深层影响。

抗投毒概念锚定:防御AI数据污染的新思路
深入解析Poison-Resistant Concept Anchoring方案,通过签名锚点与有界更新机制防御数据投毒攻击。实验显示该方法可隔离62%投毒数据,同时保持0%正常数据误拦率,为联邦学习和开源模型协作提供可行的安全防御框架。