去年10月,一组天然产物化学家在一个广泛使用的核磁共振软件中发现了一个小故障。代码深处隐藏着一个简单的文件排序问题,在某些操作系统上,这导致化学位移预测的值不正确。这一发现把不确定性在五年的时间里,超过150篇科学论文发表了结果。

就架构开发、编译器开发以及各种开发而言,十年在这个领域是很长的一段时间

林恩·卡默林,乌普萨拉大学

这不是软件代码中的错误第一次给计算研究蒙上阴影,这类问题实际上令人惊讶地普遍。在一个著名的案例中,一个编码错误是一个七年的纠纷一些世界顶尖的理论化学家,他们试图模拟过冷水的相。最近,在流行的分子动力学软件Gromacs的旧版本中使用的一种算法被发现引入数量级错误在模拟。

理想情况下,代码将有良好的文档记录并公开可用,使研究人员能够仔细检查脚本并找到问题。但情况并非总是如此——传统的出版实践,以及对知识产权的担忧,往往意味着代码很难甚至不可能访问。

即使源代码对所有人开放,其他因素也会使问题复杂化。计算机程序往往依赖于一系列其他软件,这些软件不断地更新和推出新版本。这使得重复计算研究最初执行的确切条件变得异常困难。这些问题已经变得如此普遍,以至于现在出现了“可复制性危机”一个主要的问题在计算科学家中。

什么问题的答案?

“我的一个旧Python脚本直接或间接地依赖于200个软件包,所有这些都随着时间的推移而改变,”他说康拉德Hinsen他在法国国家科学研究中心(Orléans)开发分子动力学软件。“最终,运行这些东西变得非常困难,即使你能运行,也不意味着你能得到相同的数字。”Hinsen解释说,即使旧的科学项目仍在运行并产生结果,也并不总是清楚他们实际计算出了什么。这就像著名的银河系漫游指南答案是42,但它是哪个问题的答案呢?他说。

Hinsen对计算科学方法论特别感兴趣,并严重关注该领域的可重复性。几年前,他与人共同创办了这本杂志ReScience C创建一个空间,让那些负责重温旧代码的人可以分享他们的成果。欣森说:“我们想要改善的问题是,在论文中有许多计算处方是不完整的,代码是缺乏的,然后在某个时候没有人阅读正在做的事情。”“即使是在实验室里,前一个学生做了一些事情,下一个学生也无法接手,因为没有任何地方有适当的记录。”

十年挑战海报

来源:Nicolas P Rougier提供

ReScience C最近推出了一个挑战让作者回到过去,看看他们是否能重现他们至少10年前发表的研究结果。Hinsen解释说,挑战在于如何让计算科学“更容易理解、更透明、更持久”。为了亲自参加,Hinsen重新检查了他自己的两个旧程序——一个是10年前写的,另一个是90年代中期写的。奇怪的是,25年前的代码仍然可以完美地运行,而更复杂的10年前的代码却不能。现代代码的失败被证明是由于2014年对其所依赖的Python库进行了有意的更改。

计算生物化学家林恩Kamerlin解释当代码处于休眠状态时遗留问题往往更成问题。使用“活的”代码——研究社区积极使用的方法——错误往往会被发现并迅速修复。当重新审视封存的方法时,情况会变得更加困难。Kamerlin描述了她在使用已被遗忘的旧代码时遇到的问题。她回忆说:“这是(一位同事)15-20年前发明的东西,从来没有想过,他们把它录在了办公室某个积满灰尘的磁带上。”磁带最终被找到了,但其形式与现代硬件不兼容。卡默林说:“我们找不到一种真正读取磁带的方法——我们最终不得不从头开始重新执行。”

虽然这是一个极端的例子,但它说明了在快速发展的计算世界中可能出现的问题。卡默林说:“就架构开发、编译器开发以及各种开发而言,十年在这个领域是很长的一段时间。”“因此,如果你10年没有看过(一个程序),就不能保证你能真正运行它的代码——所以你基本上可以得到相当于我的磁带阅读器问题的软件。”

黑匣子问题

随着机器学习模型越来越多地用于解决化学问题,人工智能研究中的可重复性问题尤其令人担忧。辛森说:“显而易见的问题是,你需要大量的训练数据,理论上,你应该保留一份副本,并将其公开,以便人们以后可以重新做这些事情。”“这通常很困难,仅仅是因为数据的大小——你可能无法存储或发布它,它很容易丢失,而且它经常很快更新,然后你不知道你用的是哪个版本。”

基本上,团队合作、开放、透明——我认为这是确保代码安全的唯一途径

林恩·卡默林,乌普萨拉大学

一个问题是,许多计算化学程序编码员并不是受过正规培训的软件开发人员——他们往往是试图解决没有现成软件的问题的化学家。因此,编程实践常常落后于计算机科学界的最佳实践。

麻省理工学院(Massachusetts Institute of Technology)的研究人员说:“今天,你可以发表一篇关于化学领域机器学习的论文,你可以在一两个基准上测试(一个模型),只与选定的基准进行比较,这些基准不一定是最先进的。Regina,22他开发了用于药物研发的深度学习方法。“这是一个严重的问题,很难看出一种新方法是否真的是一种进步。Barzilay解释说,这样的方法在她的计算机科学核心学科中是不可接受的,在这个学科中,新模型必须根据尽可能多的公共数据集进行评估,以确保可重复性。“不幸的是,这种水平的测试在人工智能和化学领域仍然不常见。我希望情况会有所改变。”

那么,如何才能延长计算方法的寿命呢?

Hinsen建议,所有刚开始从事计算工作的学生都应该获得良好编程实践的基本训练,以帮助确保他们能够跟踪项目并避免意外丢失数据。他曾为软件木工该组织还组织了一个大规模的公开在线课程(MOOC),涵盖了文件管理、版本控制和数据备份等关键技术。Hinsen指出,尽管MOOC没有面对面培训那么全面,但一次课程可以覆盖数千人。

软件的囚徒

Kamerlin强调了记录计算研究中所有内容的重要性——不仅需要发布脚本,还需要发布其他细节,如所使用的编译器和软件的整体架构。她提到了免费的在线资料库,比如GitHub而且Zenodo研究人员可以在这里存储所使用的所有代码和额外数据。Kamerlin解释说,向社区开放代码可以帮助确保它被使用并保持活跃,而不是在它帮助解决了一个问题后就被丢弃。她说,基本上就是团队合作、公开透明——我认为这是确保代码安全的唯一途径。

可复制性问题——要解决它需要的不仅仅是开放的道德义务

亚历山大·霍克特,洛林大学

Hinsen同意记录计算方法的各个方面是必要的,但他认为,除了公开代码和数据文件外,还需要更多的东西。科学软件的源代码是内存管理、处理数据集和优化性能所需的计算、近似值和技术计算机制的复杂混合物。因此,除了原始开发人员之外,其他人几乎无法理解代码。根据Hinsen的说法,这导致了一种情况,即支撑许多计算研究的复杂模型已经被科学软件“囚禁”了——通常是这些模型实际存在的唯一地方。

为了说明这一点,Hinsen描述了蛋白质的双分子模拟,通常由包含数千个坐标的函数定义。他说:“理论上你应该把它放在纸上,但你不能,因为没有出版商想要一个50页的方程,描述5000个变量的函数,没有人想要阅读它,也没有人可以重新计算它。”“所以,在软件的某个地方有一个实现来运行它,但没有人知道它到底是做什么的。”

Hinsen所呼吁的一种新的数字科学符号帮助科学家重新控制他们的密码。这将创造一种正式语言,使编码信息能够以适合数字时代的方式发布和审查。这样的语言将是人类和机器都可读,以便对科学模型进行同行评审,并对计算方法进行软件验证。Hinsen希望这将防止科学软件包以“黑箱”的方式被使用,目前这种情况经常发生。

开源

围绕代码透明度的问题凸显了计算科学的一个基本困境——所有的代码都应该开放给所有人看吗?如果不是,那么如何复制这些方法并由对等体构建?但如果是这样的话,计算科学家会冒着免费放弃自己劳动成果的风险吗?它对开发人员或用户实用吗?这些问题在计算化学家之间已经激烈争论了几十年。

亚历山大Hocquet他曾经是计算化学家,现在是法国洛林大学的科学历史学家,这些问题揭示了商业和法律嵌入科学行为的复杂方式。Hocquet指出,虽然开放软件的驱动在很多层面上是有意义的,但商业软件的制造商会争辩说,他们的模式为维护软件提供了必要的资源。如果没有专利许可带来的收入,你怎么能支持一支更新程序并保持程序活力的员工队伍呢?为了证明这一点,霍克特强调了计算化学最著名的软件包之一的成功。高斯的严格许可条款已经很长了引起了许多科学家的愤怒然而,在该项目首次开发50多年后的今天,它仍然在该领域处于领先地位。

Hocquet说:“可重复性问题——要解决它需要的不仅仅是开放的道德义务。”他说,有很多治理问题,很多许可问题。并不是每一个自由软件许可证都是一样的——它们都包含政治因素。”

Hocquet指出,许多科学仪器都是由公司开发和维护的,而普通用户则不会质疑它们的内部工作原理。“当你买了一台布鲁克核磁共振光谱仪时,你不能指望确切地知道里面发生了什么。你依赖于公司实体的科学仪器的标准化,你相信它已经被开发、维护、标准化、校准。”Hocquet说。“这里有一个类似的问题,即‘软件是否应该开放?,以及“对科学仪器的信任是什么?”“例如,当我们谈论核磁共振波谱时,开放的道德义务就远远没有发展起来。”

也许,再现性危机的一个积极方面是,它开启了一场基本科学哲学可以占据中心舞台的对话。霍克特说:“计算化学领域实际上是一个科学领域,在这个领域中,关于什么是科学信任的两种观点实际上是有争议的。”在其他领域,你看不到这样的争论。