从Fortran到arXiv.org,从生物学的BLAST到人工智能的AlexNet,这些技术进步改变了科学,也改变了世界。
编译 | 乌鸦少年
2019年,事件视界望远镜(EHT)拍摄了人类第一张黑洞照片。这张有着明亮光环的图像并非一张普通照片,而是由射电望远镜捕捉的数据通过算法合成的,相关的编程代码也在随后公布。用计算机编程来合成图像已经成为一种越来越普遍的模式。
从天文学到生物学,现代科学的每一项重大发现背后,都有一台计算机。然而,计算机并不能取代人类的思考。如果没有能够解决科学问题的软件,以及知道如何编写和使用软件的研究人员,哪怕是最强大的计算机也会无用武之地。今天,这些强力的软件已经渗透到科研工作的各个方面。
近日,《自然》杂志选出了对科学界产生重大影响的10种软件工具。哪一款,你也曾经或正在使用?
图片来源:Pawel Jońca/Nature
1
编程语言先驱:Fortran 编译器(1957)
第一台现代计算机并不容易操作。那时,编程真的是要手动“编”成的,研究人员需要用电线将成排电路连接起来。后来随着机器语言和汇编语言的出现,用户才得以使用代码编写计算机程序,但前提是需要对计算机架构有深入了解,这对许多科学家来说是望尘莫及了。
到了上世纪50年代,随着符号语言逐渐发展,这种情况开始发生变化。尤其是 IBM 公司的工程师 John Backus 开发的“公式翻译”语言 Fortran 出现了。有了 Fortran 语言,用户可以使用人们可读懂的指令(如x=3+5),来编写计算机程序。编译器会将这些指令转换成快速高效的机器代码。
1963年交付给美国国家大气研究中心的这台 CDC 3600 型计算机使用 Fortran 语言编程。| University Corporation for Atmospheric Research/Science Photo Library
不过,即使在发明 Fortran 以后,编程仍然不是一件容易的事。那时还没有键盘与屏幕,程序员必须将代码记录在打孔卡上,一个复杂的模拟可能需要数万张打孔卡。即便如此,Fortran 仍然让编程变得不再那么遥不可及,许多非计算机专业的科学家能够自己编写代码,解决所在领域的科学问题。
如今,Fortran 已经走过了60多个年头,仍然广泛应用于气候建模、流体动力学、计算化学等诸多领域。由于运行迅速、占用内存小等优点,在任何涉及到复杂的线性代数,且需要强大的计算机来快速处理数字的学科,都可以看到 Fortran 的踪迹,那些古老的代码仍活跃在世界各地的实验室和超级计算机上。
2
信号处理器:快速傅立叶变换(1965)
当射电天文学家巡视天空时,他们会捕捉到随时间变化的复杂信号。为了理解这些射电波的本质,他们需要看到信号作为频率的函数是如何变化的。傅里叶变换就可以将信号从时间的函数转换为频率的函数。问题是,傅里叶变换不够高效,对于大小为N的数据集,需要N2次运算。
1965年,美国数学家James Cooley和John Tukey想出快速傅里叶变换(FFT)的方法来加速这个过程。FFT 使用递归这种“分而治之”的策略,让一个函数反复调用自身,从而将计算傅里叶变换的问题简化到N log2(N) 步。N越大,速度提高越明显。对于1000个数据,速度提升大约是100倍;对100万个数据,速度提升大约则可以达到5万倍。
默奇森宽场阵列(Murchison Widefield Array)是位于澳大利亚西部的射电望远镜,使用快速傅里叶变换来处理数据。|John Goldsmith/Celestial Visions
事实上,德国数学家高斯在1805年就发明了FFT ,只是从未发表过。Cooley 和 Tukey 重新发现了这一方法,并开启了 FFT 在数字信号处理、图像分析、结构生物学等领域的应用。在很多人看来,这是应用数学和工程领域中最伟大的发明之一。
美国劳伦斯伯克利国家实验室的 Paul Adams 回忆说,他在1995年解析细菌蛋白质 GroEL 的结构时,即使使用 FFT 和超级计算机,计算过程还是花费了数天时间,“如果没有 FFT,很难想象需要多长时间才能做出来。”
3
分子编目:生物数据库(1965)
今天,数据库已经成为科学研究中不可或缺的部分,以至于人们很容易忽略一个事实——数据库是由软件驱动的。在过去几十年中,数据库的规模急剧膨胀,影响波及诸多领域,但恐怕没有哪个领域的变化像生物学那样大。
如今庞大的基因组和蛋白质数据库起源于生物信息学先驱玛格丽特·戴霍夫(Margaret Dayhoff)的工作。上世纪60年代初,正当生物学家们致力于梳理蛋白质的氨基酸序列时,戴霍夫开始整理这些信息,从中寻找不同物种间演化关系的线索。1966年,她与合作者发表论文《蛋白质序列与结构图谱》(Atlas of Protein Sequence and Structure),描述当时已知的65种蛋白质的序列、结构和相似性,并将数据编目成打孔卡,使得检索和扩展数据库成为可能。
数字化的生物数据库(Biological database)紧随其后出现了。1971年,蛋白质数据库(PDB)投入使用,如今它详细记录了超过17万个大分子结构。1982年,美国国家卫生研究院(NIH)发布基因银行(GenBank)数据库,为DNA及其编码的蛋白质建立档案。
这些资源很快就显示出了价值。1983年,两个独立的团队都注意到,人体内一种特定的生长因子与导致猴子患癌的病毒蛋白质在序列上非常相似。这个发现揭示出,一种病毒致癌的机制是通过模仿生长因子,诱导细胞不受控制地生长。
因为这个发现,许多原本对计算机和统计学不感兴趣的生物学家突然眼前一亮,意识到可以通过序列比对来理解有关癌症的一些事情。研究者也被启发:除了设计实验来验证特定的假设,还可以去挖掘那些开放的数据库,从中找出人们从未想到的联系。
当不同数据库关联到一起时,这种力量还会急剧增长。例如,一种名为 Entrez 的联合搜寻引擎可以帮助研究者在DNA、蛋白质和文献之间自由穿行。
蛋白质数据库拥有超过17万个分子结构的档案,包括图中的细菌表达体(expressome)。| David S. Goodsell and RCSB PDB
4
气象预报:大气环流模型(1969)
第二次世界大战结束时,计算机先驱冯·诺伊曼开始将几年前用于计算弹道轨迹和武器设计的计算机转向天气预测问题。在此之前,人们都只能根据经验和直觉来做天气预报,冯·诺伊曼的团队则试图通过基于物理学定律的数值计算来预测天气。
事实上,科学家在很多年前就熟知相关的数学方程式,但早期气象学家在解决实际问题时仍然束手无策,因为天气变幻莫测,远非数学家的计算能力相比!1922年,英国物理学家Lewis Fry Richardson最早发表了用数学模型预测天气的工作,要预测未来的天气,需要输入当前的大气条件,计算它们在短时间内会如何变化,并不断重复——这个过程非常耗时。他用几个月时间才能预测未来几个小时的天气情况,而且很不靠谱,甚至是“在任何已知陆地条件下都不可能发生的预测”。
计算机的出现使这个数学应用真正变得可行。上世纪40年代末,冯·诺伊曼组建了一个天气预报团队,1955年,第二个团队——地球物理流体动力学实验室(Geophysical Fluid Dynamics Laboratory,GFDL)也开始进行气候建模,之后他们做出首个成功预测的大气环流模型(General circulation model,GCM)。到了1969年,他们成功将大气和海洋模型结合起来。
当时GCM模型相对来说还很粗糙,只覆盖了地球表面的六分之一,将其划分为500平方公里的方块,大气也只分成了9层。而今天的气象模型会将地球表面划分为25×25公里的正方形,将大气划分为几十个层级。尽管如此,这个模型仍然创造了科学计算的里程碑,它第一次用计算机测试了二氧化碳含量上升对气候的影响。
5
科学计算的基础:BLAS (1979)
科学计算常常会涉及到向量和矩阵这些相对简单的数学运算,但在上世纪70年代以前,并没有一套普遍认可的计算工具来执行这些操作。因此,从事科学工作的程序员需要花很多时间来设计代码,只为做基本的数学运算,而不是专注于整体的科学问题。
编程领域需要的是一个标准。1979年,这个标准出现了,它就是基础线性代数子程序库(Basic Linear Algebra Subprograms),简称BLAS。BLAS 把矩阵和向量计算简化成加法、减法这样基本的计算单元。这个标准一直发展到1990年,定义了数十个向量和矩阵数学的基本子程序。
BLAS 或许是为科学计算而定义的最重要的接口。它为常用函数提供了标准化名称;基于 BLAS 的代码在任何计算机上都以相同的方式工作;此外,确立标准也使得计算机制造商可以优化 BLAS,实现在不同硬件上的快速运算。可以说,BLAS 为科学计算提供了基础。
在编程工具 BLAS 于1979年问世前,美国劳伦斯利弗莫尔国家实验室的超级计算机Cray-1上工作的研究人员,并没有用于线性代数计算的标准。| Science History Images/Alamy
6
显微镜必备:NIH Image(1987)
上世纪80年代初,美国国家卫生研究院(NIH)脑成像实验室有一台扫描仪可以将 X 光片数字化,但无法在电脑上显示或分析这些图像。于是,在这里工作的程序员 Wayne Rasband 便写了一个程序来实现这个目标。
最初这个程序是专门为一台价值15万美元的 PDP-11计算机而设计,之后在1987年,苹果公司发布 Macintosh II,Rasband 又将软件移植到这个便于个人使用的新平台上,建立了一个图像分析系统,也就是NIH Image。
NIH Image的后继者包括 ImageJ 和 Fiji,研究人员可以在任何计算机上查看和分析图像,已成为生物学家的基础工具,任何一个使用过显微镜的生物学家对它们都不会陌生。
ImageJ 提供一个看似简单的极简主义用户界面,自上世纪90年代以来几乎没有改变。然而,这个工具实际上具有无限的可扩展性——兼容广泛的文件格式,具有灵活的插件架构,还有宏记录器,可以通过记录鼠标操作来保存工作流程。人们设计了各种独特的插件,有的可以自动识别细胞,有的可以追踪目标,用户可以很容易地按照自己的需求,使 ImageJ 工具更个性化。
在插件的帮助下,ImageJ 工具可以自动识别显微镜图像中的细胞核。| Ignacio Arganda-Carreras / ImageJ
7
序列搜索:BLAST (1990)
说到搜索,我们会说去Google一下;在遗传学中,科学家则会说去BLAST一下某个分子序列。从软件名称变成动词,大概是说明使用广泛性的最好指标了。(编者注:关于人名的动词化或形容词话,参见《厄米特:路途坎坷的天才数学家丨贤说八道》第5节)
进化带来的改变记录在分子序列中,比如替代、缺失、重排等。通过搜寻分子序列,特别是蛋白质的氨基酸序列之间的相似性,研究人员可以发现它们的演化关系,并深入了解基因的功能。不过,问题的关键是要在迅速膨胀的分子信息数据库中,快速而全面地做到这一点。
生物信息学先驱玛格丽特·戴霍夫(就是前文建立生物数据库原型那位)在1978年作出了关键性的贡献。她设计了一种PAM矩阵,其各个格点上的数值为一种氨基酸被另一种氨基酸替换的概率。这使得研究人员在对两种蛋白质的亲缘关系进行评分时,不仅可以依据其分子序列的相似程度,还可以依据它们之间的演化距离。
1985年,人们进一步结合PAM矩阵和快速搜索能力,引入了一种叫作FASTP的算法。几年之后,功能更强大的BLAST诞生,并于1990年发布。
BLAST不仅可以快速搜索日益庞大的数据库,还可以找到那些在演化关系上距离更遥远的匹配,并计算这些匹配偶然发生的可能性有多大。它速度飞快且容易使用。对于当时处于萌芽阶段的基因组生物学而言,BLAST是一个变革性的工具,科学家可以根据相关基因的功能,找出未知基因可能发挥什么作用。
8
预印本平台:arXiv.org(1991)
上世纪80年代末,高能物理学家通常会将已递交的论文副本邮寄给同行征求意见,也出于一种礼节,但这往往只局限于少数人。处于“食物链”较低位置的科学家不得不依赖大牛们的慷慨,而许多同样有抱负的研究人员,却常常因为他们并非来自顶尖机构而被排除在圈子之外。
1991年, 当时在洛斯阿拉莫斯国家实验室工作的物理学家 Paul Ginsparg 写了一封自动回复电子邮件,试图建立更公平的竞争环境。订阅者可以收到每日的预印本清单,每一个都与文章标识符相关联。通过一封电子邮件,世界各地的用户就可以通过实验室的计算机系统,提交或检索一篇文章,获得新文章的列表,也可以按作者或标题进行搜索。
Ginsparg 的计划是将文章保留三个月,并将内容限制在高能物理领域。但一位同事说服他无限期保留这些文章。就在那一刻,它从通报栏变成了档案馆。论文蜂拥而至,高能物理之外的其他领域也涌入进来。1993年,Ginsparg 将系统迁移到万维网上, 在1998年给它取了现在的名字—— arXiv.org。
今年,arXiv 已经成立30年,拥有约180万份预印本,全部免费提供,每月吸引超过1.5万份提交和3000万次下载。它为研究人员提供了一种展示学术工作的快速便捷的方式,从而避免了传统的同行评议期刊所需的时间和种种麻烦。
从1991年到2021年,arXiv每月吸引提交的预印本数量持续增长。| arXiv.org
arXiv 的成功催生了其他论文预印本网站的繁荣,包括生物学、医学、社会学等诸多学科。今天,从已发表的数万份关于“新冠”病毒的预印本中,就可以看到它的影响。(编者注:参见《预印本论文靠谱吗?》)这个30年前在粒子物理学界之外被认为是异端的方法,如今早已被视为自然而然的存在。
9
数据浏览器:IPython Notebook(2011)
Python是一种解释型语言,程序会将代码一行一行直接运行。程序员可以使用一种被称为“读取-求值-输出循环”(REPL)的交互式工具,在其中输入代码,然后由被称为解释器的程序执行它。REPL允许快速探索和迭代,但 Python 的REPL 并不适合做科学计算,例如,它不允许用户轻易预加载代码模块,或开放数据可视化。
于是在2001年,当时还是研究生的 Fernando Pérez 写了自己的版本,这就是 IPython,一个交互式 Python 解释器,一共259行代码。十年后,IPython被迁移到浏览器上,成为 IPython Notebook,并开启了一场数据科学革命。
IPython Notebook 确实像笔记本一样,将代码、结果、图像和文本都放在一个文档中。与其他类似项目不同的是,它是开源的,欢迎所有开发者贡献一己之力。而且它支持 Python 这个广受科学家欢迎的编程语言。2014年,IPython 演变为 Jupyter,支持大约100种语言,允许用户便捷地在远程超级计算机上探索数据。
对于数据科学家来说,Jupyter 实际上已经成为一个标准。2018年,在 GitHub 代码共享平台上有250万个Jupyter笔记本;今天则有近1000万个,包括 2016 年发现引力波和2019年拍摄黑洞第一张照片的代码。
10
快速学习者:AlexNet (2012)
人工智能(AI)有两种类型:一种使用成文的规则,另一种通过模拟大脑的神经结构来让计算机“学习”。在很长时间里,人工智能研究者都认为,后一种类型的AI是行不通的。但是2012年,著名计算机科学家 Geoffrey Hinton 的两名研究生 Alex Krizhevsky 和 Ilya Sutskever 证明,事实并非如此。
他们基于深度学习的神经网络算法设计了 AlexNet,参加2012年的 ImageNet 大规模视觉识别挑战赛。研究者要用包含100万张日常物体图像的数据库来训练 AI,然后用另一个独立的图像集测试生成的AI算法,最后评估算法对图像作出正确分类的比率。当时最好的算法会错误地分类大约1/4的图像,AlexNet 基本上将错误率几乎减半,降低到了约16%。
AlexNet在2012年的成功得益于三个因素:足够大的训练数据集、出色的编程和 GPU 的强大功能,即使后者实际是为了提升计算机图形性能的。但研究人员依此将算法的运行速度提高了30倍。但这还不够,算法上的真正突破实际上发生在三年前。当时 Hinton 实验室创建了一个神经网络,可以比经过数十年改进的传统AI更准确地识别语音。虽然只是稍微进步了一点,却标志着真正的技术突破。
这些成果预示了深度学习在各个领域的崛起。如今,我们的手机能理解语音查询,生物学实验室中的图像分析工具能在显微照片中识别出细胞,都依赖于深度学习算法。AlexNet 也因此成为改变科学,也改变世界的工具之一。