编译 蔡立英
2019年,事件视界望远镜团队首次让世界一睹黑洞的真容。不过,研究人员公布的这张发光环形物体的图像并不是传统的照片,而是经过计算获得的图片。利用位于美国、墨西哥、智利、西班牙和南极的射电望远镜捕获的数据,研究人员进行了数据转换,最终合成了这张标志性的图片。研究团队在撰文记录这一发现的同时,还发布了实现这一壮举所用的编程代码,供科学界了解来龙去脉并在此基础上进行深入研究。
这种模式正变得越来越普遍。从天文学到动物学,现代每一项重大科学发现的背后都有计算机的贡献。美国斯坦福大学的计算生物学家迈克尔·莱维特(Michael Levitt)因“为复杂化学系统创立了多尺度模型”与另两位研究者分享了2013年诺贝尔化学奖。他指出,当今的笔记本电脑的内存和时钟速度大约是1967年实验室制造的计算机的1万倍,他获诺奖的研究工作就是从那时开始的。他说:“我们今天确实拥有相当可观的计算能力,但我们仍然需要思考。”
如果没有能够解决研究问题的软件,以及知道如何编写和使用软件的研究人员,那么,功能再强大的计算机也毫无用处。总部位于英国爱丁堡、致力于改善科学软件开发利用的软件可持续研究所所长尼尔·洪(Neil Chue Hong)指出:“现在的科学研究与软件紧密相关,软件已经渗透到科研的方方面面。”
科学发现理应获得媒体的关注,不过近期的《自然》杂志转而将目光投向了幕后,盘点了过去几十年来改变科学研究的十大关键计算机代码。
尽管这样的榜单难有定论,不过《自然》杂志花了一年时间,对数十名研究人员进行了调查,以多元化的视角评选出对科学界产生重大影响的十种软件工具。
最初的现代计算机对用户并不友好,当时的编程实际上是手工将电线连接成一排排电路来实现的。后来出现了机器语言和汇编语言,允许用户使用代码进行计算机编程,但是这两种语言都需要对计算机的架构有深入的了解,使得许多科学家难以掌握。
1963年,科罗拉多州博尔德美国国家大气研究中心获得这台CDC 3600型计算机,研究者在Fortran编译器的帮助下对其进行了编程
20世纪50年代,随着符号语言的发展,特别是约翰·巴克斯(John Backus)及其团队在加州圣何塞的IBM开发了“公式翻译”语言Fortran(Formula Translation)之后,这种情况发生了变化。利用Fortran,用户可以使用人类可读的指令来编程,例如x = 3 + 5,然后由编译器将这些指令转换为快速高效的机器代码。
不过,这个过程仍然不容易。早期,程序员使用打孔卡来输入代码,而复杂的模拟可能需要数万张打孔卡。尽管如此,新泽西州普林斯顿大学的气候学家真锅淑郎(Syukuro Manabe)还是指出,Fortran使得非计算机科学家也能编程,“这是我们第一次能够自己对计算机进行编程”。他和同事利用这种语言开发的气候模型是最早取得成功的模型之一。
Fortran至今仍广泛应用于气候建模、流体动力学、计算化学等学科,这些学科都涉及复杂线性代数且需要强大的计算机来快速处理数字。Fortran生成代码很快,并且仍然有很多程序员知道如何编写。古老的Fortran代码库仍然活跃在世界各地的实验室和超级计算机上。加州蒙特雷美国海军研究生院的应用数学家和气候模型师弗兰克·吉拉尔多(Frank Giraldo)说:“老资格的程序员知道他们在做什么,他们非常注重内存,因为早期计算机的内存非常少。”
当射电天文学家扫描天空时,他们捕捉到的是随时间变化的复杂信号杂音。为了理解这些无线电波的性质,他们需要看到这些信号作为频率的函数时的样子。研究人员可以通过一种叫作“傅立叶变换”的数学过程来做到这一点,但问题是效率低下,大小为N的数据集需要进行计算N2的次数。
1965年,美国数学家詹姆斯·库利(James Cooley)和约翰·杜基(John Tukey)想出了一种加速该过程的方法——快速傅立叶变换(FFT),通过递归(一种“分而治之”的编程方法,同一种算法重复应用其自身)将计算傅立叶变换的问题简化为N log2(N)步。随着N的增加,变换速度也会提高。对于1 000个点,速度提升大约是100倍;对于100万个点,则是5万倍。
澳大利亚西部的射电望远镜阵列—默奇森宽视场阵列的部分夜景,该望远镜使用快速傅立叶变换来收集数据
英国牛津大学数学家尼克·特雷菲森(Nick Trefethen)指出,这个“发现”实际上是一次再发现,因为德国数学家高斯(Carl Friedrich Gauss)早在1805年就研究出来了,但他从未发表过研究结果。而詹姆斯·库利和约翰·杜基做到了,他们开启了FFT在数字信号处理、图像分析、结构生物学等领域的应用。特雷菲森认为:“FFT的发现确实是应用数学和工程领域的重大事件之一”。FFT已经多次应用于代码中,一个流行的选择是FFTW,即“西方最快的傅立叶变换”( Fastest Fourier Transform in the West,FFTW)。
保罗·亚当斯(Paul Adams)是加州劳伦斯伯克利国家实验室分子生物物理学和综合生物成像部门的主任,他回忆说,当他在1995年改进细菌蛋白质凝胶的结构时,即使使用FFT和超级计算机,也需要“很多小时甚至数天”时间。他说:“如果在没有FFT的情况下尝试做这些,我不知道应该如何做到,可能永远做不到。”
数据库是当今科学研究中不可或缺的组成部分,以至于人们很容易忘记它们也是由软件驱动的。在过去几十年中,数据库资源的规模激增,并影响了许多领域,但或许没有哪个领域的变化会超过生物学。
当今庞大的基因组和蛋白质数据库源于美国国家生物医学研究基金会的玛格丽特·戴霍夫(Margaret Dayhoff)的工作,她是生物信息学的先驱。20世纪60年代初,当生物学家致力于梳理蛋白质的氨基酸序列时,戴霍夫开始整理这些信息,以寻找不同物种之间进化关系的线索。1965年,她与三位合著者发表了《蛋白质序列和结构图册》(Atlas of Protein Sequence and Structure),描述了当时已知的65种蛋白质的序列、结构和相似性。历史学家布鲁诺·斯特拉瑟(Bruno Strasser)在2010年写道,这是第一个“与特定研究问题无关”的数据集,它将数据编码在打孔卡中,从而有可能扩展数据库并进行搜索。
蛋白质数据库拥有超过17万个分子结构的档案,包括这种细菌的“表达体”,其功能是联接RNA和蛋白质合成的过程
其他“计算机化”的生物数据库紧随其后。1971年,蛋白质数据库投入使用,至今已详细记录了超过17万个大分子结构。加州大学圣迭戈分校的进化生物学家拉塞尔·杜利特尔(Russell Doolittle)在1981年创建了另一个名为Newat的蛋白质数据库。1982年,美国国立卫生研究院(NIH)与多个机构合作,成立了GenBank数据库,这是一个开放获取的DNA序列数据库。
1983年7月,这些数据库资源证明了其存在价值。当时,由伦敦帝国癌症研究基金会的蛋白质生物化学家迈克尔·沃特菲尔德(Michael Water field)领导的团队,与杜利特尔的团队各自独立报道了一个特殊的人类生长因子序列与一种导致猴子出现癌症的病毒蛋白质之间的相似性。观察结果显示了一种病毒诱发肿瘤机制——通过模仿一种生长因子,病毒会诱导细胞不受控制地生长。美国国家生物技术信息中心(NCBI)前主任詹姆斯·奥斯特尔(James Ostell)说:“这一结果点燃了对计算机和统计学不感兴趣的生物学家的头脑——我们可以通过比较序列来了解有关癌症的一些情况。”
奥斯特尔还表示,这一发现标志着“客观生物学的到来”。除了设计实验来验证特定的假设,研究人员还可以挖掘公共数据集,寻找那些实际收集数据的人可能从未想到的联系。当不同的数据集连接在一起时,这种力量就会急剧增长。例如,NCBI的程序员在1991年通过Entrez(Entrez是一个可以让研究人员在DNA、蛋白质和文献之间自由检索和比对的工具)实现了这一点。
NCBI现任的代理主任史蒂芬·谢利(Stephen Sherry)认为Entrez相当于一位研究生。他回忆说:“我记得当时以为Entrez是魔术。”
第二次世界大战结束时,计算机先驱冯·诺伊曼(John von Neumann)开始将几年前一直用于计算弹道轨迹和武器设计的计算机转向天气预报。真锅淑郎解释说,在那之前,“天气预报只是经验性的”,即利用经验和直觉来预测接下来会发生什么。相比之下,冯·诺依曼的团队“试图根据物理定律进行数值天气预报”。
新泽西州普林斯顿的美国国家海洋和大气管理局(NOAA)地球物理流体动力学实验室的建模系统部门负责人文卡塔拉玛尼·巴拉吉(Venkatramani Balaji)表示,几十年来,人们已经熟知这些方程式;但早期的气象学家无法实际解决这些问题。要做到这一点,需要输入当前的条件,计算它们在短时间内会如何变化,并不断重复。这个过程非常耗时,以至于在天气状况实际出现之前还无法完成数学运算。1922年,数学家刘易斯·理查森(Lewis Fry Richardson)花了几个月时间计算,以实现德国慕尼黑6小时的预报。根据一段历史记载,他的结果“极不准确”,包括预测“在任何已知的陆地条件下都不可能发生”。计算机使这个问题变得很容易解决。
20世纪40年代末,冯·诺伊曼在普林斯顿高等研究院建立了天气预报团队。1955年,第二个团队——地球物理流体动力学实验室——开始进行所谓的“无限预测”,也就是气候建模。
真锅淑郎于1958年加入气候建模团队,开始研究大气模型;他的同事柯克·布莱恩(Kirk Bryan)将这一模型应用在海洋研究中。1969年,他们成功将二者结合起来,创造了《自然》杂志在2006年所说的科学计算“里程碑”。
今天的模型可以将地球表面划分为一个个25千米×25千米的正方形,并将大气层划分为数十层。相比之下,真锅淑郎和布莱恩的海洋-大气联合模型划分的面积为500平方千米,将大气分为9个层次,只覆盖了地球的1/6。尽管如此,文卡塔拉玛尼·巴拉吉表示,“这个模型做得很好”,使研究团队第一次能够通过计算机预测二氧化碳含量上升的影响。
评审方式:改变评审方式。吸收各行业专家,采取各行业联合评审,根据专家自身专业优势,分章节进行主审和整体内容评审相结合的方式,这样能充分发挥各专家的专长,也能更好地整合各个专家的观点。
科学计算通常涉及使用向量和矩阵进行相对简单的数学运算,但这样的向量和矩阵实在太多了。在20世纪70年代,还没有一套普遍认可的计算工具来执行这些运算。因此,从事科学工作的程序员会将时间花在设计高效的代码来进行基本的数学运算,而不是专注于科学问题。
编程世界需要一个标准。1979年,这样的标准出现了:基本线性代数子程序库(BLAS)。这是一个应用程序接口(API)标准,用以规范发布基础线性代数操作的数值库,如矢量或矩阵乘法。该标准一直发展到1990年,为向量数学和后来的矩阵数学定义了数十个基本例程。
美国田纳西大学计算机科学家、BLAS开发团队成员杰克·唐加拉(Jack Dongarra)表示,事实上,BLAS把矩阵和向量数学简化成了与加法和减法一样基本的计算单元。
美国得克萨斯大学奥斯汀分校的计算机科学家罗伯特·盖杰(Robert van de Geijn)指出,BLAS“可能是为科学计算定义的最重要接口”。除了为常用函数提供标准化的名称之外,研究人员还可以确保基于BLAS的代码在任何计算机上以相同方式工作。该标准还使计算机制造商能够优化BLAS的安装启用,以实现在硬件上的快速操作。
40多年来,BLAS代表了科学计算堆栈的核心,也就是使科学软件运转的代码。美国乔治·华盛顿大学的机械和航空航天工程师洛雷娜·巴尔巴(Lorena Barba)称其为“五层代码中的机械”。而杰克·唐加拉则说:“BLAS为我们的计算提供了基础结构。”
加州劳伦斯利弗莫尔国家实验室的Cray-1超级计算机。在BLAS编程工具于1979年问世之前,并没有线性代数标准可供研究人员在Cray-1超级计算机等机器上工作
20世纪80年代初,程序员韦恩·拉斯班德(Wayne Rasband)在美国国立卫生研究院的脑成像实验室工作。该实验室拥有一台扫描仪,可以对X光片进行数字化处理,但无法在电脑上显示或分析。为此,拉斯班德写了一个程序。
这个程序是专门为一台价值15万美元的PDP-11小型计算机设计的,这是一台安装在架子上的计算机,显然不适合个人使用。然后,在1987年,苹果公司发布了Macintosh II,这是一个更友好、更实惠的选择。拉斯班德说:“在我看来,这显然是一种更好的实验室图像分析系统。”他将软件转移到新的平台上,并重新命名,建立了一个图像分析生态系统。
NIH Image及其后续版本使研究人员能在任何计算机上查看和量化几乎任何图像。该软件系列包括ImageJ(拉斯班德为Windows和Linux用户编写的基于Java的版本)、Fiji(这是ImageJ的分发版,由德国德累斯顿的马克斯·普朗克分子细胞生物学和遗传学研究所的帕维尔·托曼恰克团队开发)。“ImageJ无疑是我们所拥有的最基础的工具,”美国博德研究所成像平台的计算生物学家贝丝·奇米尼(Beth Cimini)说,“我从来没有和只使用显微镜但没有使用ImageJ或Fiji的生物学家说过话。”
在插件的帮助下,ImageJ工具可以自动识别显微镜图像中的细胞核
凯文·埃里克伊里说:“这个程序的目的不是做到一切或终结一切,而是服务于用户的需求。不像Photoshop和其他程序,ImageJ可以成为你想要的任何东西。”
可能没有什么能比把软件名称变成动词更能说明文化的相关性了。提到搜索,你会想到谷歌;而提到遗传学,研究者会立刻想到BLAST。
通过诸如替代、删除、缺失和重排等方式,生物将进化中的改变刻蚀在分子序列中。寻找序列之间的相似性——特别是蛋白质之间的相似性——可以让研究人员发现进化关系,并深入了解基因功能。在迅速膨胀的分子信息数据库中,想要快速而准确地做到这一点并不容易。
玛格丽特·戴霍夫在1978年提供了关键的进展。她设计了一种“点接受突变”(Point Accepted Mutation)矩阵,使研究人员不仅可以根据两种蛋白质序列的相似程度,还可以根据进化距离来评估它们的亲缘关系。
1985年,弗吉尼亚大学的威廉·皮尔森(William Pearson)和NCBI的大卫·李普曼(David Lipman)引入了FASTP,这是一种结合了戴霍夫矩阵和快速搜索能力的算法。
数年后,李普曼与NCBI的沃伦·吉什(Warren Gish)和史蒂芬·阿特舒尔(Stephen Altschul),宾夕法尼亚州立大学的韦布·米勒(Webb Miller),以及亚利桑那大学的吉恩·迈尔斯(Gene Myers)一起开发了一种更强大的改进技术:BLAST(Basic Local Alignment Search Tool)。BLAST发布于1990年,将处理快速增长的数据库所需的搜索速度,与提取进化上更为遥远的匹配结果的能力结合起来。与此同时,该工具还可以计算出这些匹配发生的概率。
阿特舒尔表示,计算结果会非常快,“你可以输入搜索内容,喝一口咖啡,搜索就完成了”。但更重要的是,BLAST很容易使用。在通过邮寄更新数据库的时代,沃伦·吉什建立了一个电子邮件系统,后来又建立了一个基于网络的架构,允许用户在NCBI计算机上远程运行搜索,从而确保搜索结果始终是最新的。
哈佛大学的计算生物学家肖恩·艾迪(Sean Eddy)表示,BLAST系统为当时处于萌芽阶段的基因组生物学领域提供了变革性的工具,即根据相关基因找出未知基因可能功能的方法。对于各地的测序实验室,它还提供了巧妙的动词。艾迪说:“它是众多由名词变成动词的例子之一,你会说,你正准备BLAST一下你的序列。”
20世纪80年代末,高能物理学家经常将他们已投稿的论文手稿副本邮寄给同行,征求他们的意见——但只发给少数人。物理学家保罗·金斯帕格(Paul Ginsparg)在2011年写道:“处于食物链较低位置的人依赖于一线研究者的成果,而非精英机构中有抱负的研究人员则往往身处特权圈以外。”
1991年,当时在新墨西哥州洛斯阿拉莫斯国家实验室工作的金斯帕格编写了一个电子邮件自动应答程序,希望建立一个公平的竞争环境。订阅者每天都会收到预印本列表,每一篇都与文章标识符相关联。只需通过一封电子邮件,世界各地的用户就可以从实验室的计算机系统中提交或检索论文,并获得新论文的列表,按作者或标题进行搜索。
金斯帕格的计划是将论文保留三个月,并将内容限制在高能物理学界。但一位同事说服他无限期保留这些文章。他说:“就在那一刻,它从布告栏变成了档案馆。”于是,论文开始从各个领域如潮水般涌来。1993年,金斯帕格将这个系统迁移到互联网上,并在1998年将其命名为arXiv.org,沿用至今。
arXiv成立已近30年,拥有约180万份预印本,全部免费提供,而且每月有超过1.5万份论文提交,下载量达3 000万次。十年前,《自然-光子学》(Nature Photonics)的编辑在评论arXiv创立20周年时写道:“不难看出为什么arXiv的服务会如此受欢迎,这个系统让研究人员用快速和方便的方式插上旗帜,显示他们所做的工作,同时避免传统期刊上同行评议的麻烦和时间。”
arXiv网站的成功也促进了生物学、医学、社会学和其他学科同类预印本网站的繁荣。在如今已出版的数万份关于新冠病毒的预印本中就可以看到这种影响。
金斯帕格说:“很高兴看到30年前在粒子物理学界之外被认为是异端的方法,现在被普遍接受,从这个意义上说,它就像一个成功的研究项目。”
2001年,费尔南多·佩雷斯(Fernando Pérez)还是 “寻找拖延症”的研究生,当时他决定采用Python的一个核心组件。
Python是一种解释型语言,这意味着程序是逐行执行的。程序员可以使用一种称为“读取-评估-打印循环”(REPL)的计算调用和响应工具,在其中输入代码,然后由解释器执行代码。REPL允许快速探索和迭代,但佩雷斯指出,Python的REPL并不是为科学目的而构建的。例如,它不允许用户方便地预加载代码模块,也不允许打开数据可视化。因此,佩雷斯自己编写了另一个版本。
结果就是IPython的诞生,这是一个“交互式”Python解释器,由佩雷斯在2001年12月推出,共有259行代码。10年后,佩雷斯与物理学家布莱恩·格兰杰(Brian Granger)和数学家埃文·帕特森(Evan Patterson)合作,将该工具迁移到web浏览器上,推出了IPython Notebook,开启了一场数据科学革命。
与其他计算型Notebook一样,IPython Notebook将代码、结果、图形和文本合并在一个文档中。但与其他类似项目不同的是,IPython Notebook是开源的,邀请了大量开发者社区的贡献。而且它支持Python,一种很受科学家欢迎的语言。2014年,IPython演变为Jupyter,支持大约100种语言,允许用户在远程超级计算机上浏览数据,就像在自己的笔记本电脑上一样轻松。
《自然》杂志在2018年写道:“对于数据科学家,Jupyter实际上已经成为一个标准。”当时,在GitHub代码共享平台上有250万个Jupyter Notebook。如今,这一数字已经发展到1 000万个,在2016年的引力波发现,以及2019年的黑洞成像工作中,它们都发挥了重要的作用。佩雷斯说:“在这些项目中,我们做的贡献很小,但非常有价值。”
人工智能有两种类型:一种是使用编码规则,另一种则通过模拟大脑的神经结构来让计算机“学习”。加拿大多伦多大学的计算机科学家杰弗里·辛顿(Geoffrey Hinton)表示,几十年来,人工智能研究人员一直认为后者是“一派胡言”。但在2012年,他的研究生亚力克斯·克里泽夫斯基(Alex Krizhevsky)和伊尔亚·苏茨克维(Ilya Sutskever)证明了事实并非如此。
在一年一度的ImageNet比赛中,要求研究人员在一个包含100万张日常物体图像的数据库中训练人工智能,然后在一个单独图像集上测试生成的算法。辛顿表示,当时最好的算法错误分类了大约1/4的图像。克里泽夫斯基和苏茨克维的AlexNet是一种基于神经网络的“深度学习”算法,它将错误率降低到了16%。辛顿说:“我们把错误率几乎减半。”
辛顿还指出,该团队在2012年的成功反映了足够大的训练数据集与出色的编程,以及新出现的图形处理单元的强大能力的结合。图形处理单元是最初设计用来加速计算机视频性能的处理器。他说:“突然之间,我们可以将算法运行速度提高30倍,或学习多达30倍的数据。”
真正的算法突破实际上发生在三年前,当时辛顿的实验室创建了一个神经网络,可以比经过几十年改进的传统人工智能更准确地识别语音。辛顿说:“只是稍微好一点,但这已经预示了某些东西。”
这些成功预示着深度学习在实验室研究、临床医学和其他领域的崛起。通过人工智能的深度学习,手机能够理解语音查询,图像分析工具能够很容易在显微照片中识别出细胞。这就是为什么AlexNet会成为众多从根本上改变科学和改变世界的工具之一。
资料来源 Nature