Nature:十个改变科学史的计算机程序
2019年,事件视界望远镜(Event Horizon Telescope, EHT)团队首次向世界展示了黑洞的真实外观。这张发光的黑色光环图像其实并不是传统意义上的照片,而是经过计算模拟出来的。
EHT团队对美国、墨西哥、智利、西班牙和南极的射电望远镜捕获的数据进行收集,并经过大规模的数学计算将数据转化成图像。在随后发表的文章中,EHT团队公开了所使用的程序代码,为整个科学界对外太空天体的研究打下了基础。
现代科学每一项伟大的研究背后,都离不开计算机的支持,从天文学到生态学,这已经变成了一种越来越普遍的现象。斯坦福大学的计算生物学家迈克尔·莱维特(Michael Levitt)因用计算机建模的方式发展了复杂化学结构的多尺度模型而获得了2013年诺贝尔化学奖,他表示,现在的笔记本电脑的存储量和时钟频率(clock time)是1967年刚刚开始这项研究的10000倍。莱维特说:“当今,我们确实掌握了相当数量的计算方法,但是仍需要人的思维”。
科学突破,前沿进展理应受到媒体的关注。背后的研究过程也同样值得探讨。再强大的超级计算机也只是工具,没有处理特定问题的软件和创建并执行软件的研究人员,也是无用的。
最新的《自然》杂志深入探索了科学研究背后的故事,带我们回顾过去几十年来,改变科学史的关键性计算机程序。他们在过去的一年中,《自然》编辑部访问了几十个享誉世界的科学家,从不同领域中选出了科学家们心中10个影响世界科学进展的计算机工具。
01
计算机语言先驱者:Fortran编译器 (1957)
Language pioneer: the Fortran compiler (1957)
第一台现代计算机如果从用户友好度评价的话,堪称“失败”。编程事实上是用电线连接电路组手工完成的, 随后的机器语言和汇编语言允许用户使用代码对计算机进行编程,但是仍然需要对计算机的体系结构有深入的了解,学习成本过高,使得许多科学家无法使用这些语言望而却步。
随着符号语言的发展,这种情况在1950年代发生了变化,特别是由IBM公司John Backus及其团队开发的“数学公式编辑语言” — Fortran编译器。
Fortran是一项革命性的发明,是当时统治计算机世界的高级语言之王。通过Fortran编译器,用户可以将“人类可以阅读书写”的数学语言输入在文本编辑器中,然后编译器自动将这些指令转换成快速高效的二进制的机器代码,进行运算。
CDC 3600超级计算机,于1963年运送到位于科罗拉多的美国原子能研究中心,正式投入使用。这台超级计算机搭载了Fortran编译器。Credit: University Corporation for Atmospheric Research/Science Photo
普林斯顿大学气象学家真锅淑郎(Syukuro Manabe)分享道:“在早些年,程序员用打孔卡来输入代码,一个复杂的模拟模型可能需要成千上万张打孔卡。Fortran语言帮助没有计算机背景的科学家顺利使用超级计算机。第一次真正的由我们自己操控计算机。”在Fortran编译器的辅助下,真锅教授和同事成功开发出了世界上第一个气象模型。
如今八十年过去了,Fortran仍被广泛应用于气象建模、流体动力学、计算化学等涉及到复杂线性代数且需要计算机快速处理数据的学科中。Fortran语言简练,运行速度快效高,很多资深程序员将使用这种语言的习惯延续至今。无论超级计算机如何更新迭代,代码库中一定会有Fortran语言的位置。
02
信号处理器:快速傅立叶变换 (1965)
Signal processor: fast Fourier transform (1965)
当射电天文学家扫描天空时,他们捕获了不同时间段中嘈杂的复杂电波。为了了解这些无线电波的性质,他们需要查看这些信号绘制成频率函数。数学中的傅立叶变换可以帮助研究者做到这一点。但问题是,当需要计算的样本量为N时,需要进行N2次计算,例如当N=1024时,需要进行N2=1048576次运算,耗时极长,效率极低。
1965年,美国数学家James Cooley和John Tukey提出了一种加快计算过程的方案。通过递归(一种分而治之,层层转化的方法)的策略,程序不断的调用自身,把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,这就是快速傅立叶变换(fast Fourier transform ,FFT)。
FFT只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。例如原本需要N2次的计算过程,可以简化为N log2(N)次计算的问题,当N=1024时,仅需10240次运算,步骤节约为之前的1%,大大的提高了效率。并且 速度随着N的增长而提高。 当N为1000时,速度提升约为100倍;当 N为一百万时,速度提升约五万倍。
牛津大学数学系教授Nick Trefethen追溯历史发现,快速傅立叶变换的发明,以1805年德国数学家高斯未发表的理论为基础。 但Cooley和Tukey的革新,青出于蓝而胜于蓝,开创了在电子设备上进行信号处理,图像分析,生物建模的先河。Trefethen教授评价这个发明为“应用数学与工程领域最伟大的发现之一”。
默奇森宽场阵列射电望远镜,位于澳大利亚西,使用快速傅立叶变换收集数据。Credit: John Goldsmith/Celestial Visions
加州大学劳伦斯伯克利国家实验室,分子生物物理学与综合生物成像部负责人Paul Adams,也是快速傅立叶变换的支持者。他回忆起在1995年改进细菌蛋白GroEL的结构时,即使在超级计算机和FFT算法的帮助下也耗费了大量的时间。
“我不敢想象没有FFT算法的情形,我们的研究永远不会完成,可能会计算数据到永远。”Paul Adams说到。
03
分子编目员:生物数据库(1965)
Molecular cataloguers: biological databases (1965)
数据库存在于当今科学研究的方方面面,人们可能很容易忽略它们本质上是一个计算机软件。 在过去的几十年中,各个科学领域的数据资源指数级激增激增,生物学领域的变化尤其巨大。
如今庞大的基因组和蛋白质数据库源于Margaret Dayhoff的工作。Dayhoff是马里兰州银泉市国家生物医学研究基金会的生物信息学先驱。20世纪60年代初期,生物学家解开了蛋白质氨基酸序列的面纱,Dayhoff开始整理数据,来寻找不同物种之间进化关系的线索。她于1965年与其他三位合作者共同发表了《蛋白质序列和结构图谱》,描述了当时发现的65种蛋白质的序列,结构和相似性研究。
科学史研究者Bruno Strasser于2010年写道:“Dayhoff的生物数据库是科学史上第一个,没有受限于特定问题的广泛性科学数据库。” Dayhoff在进行研究时的设备还比较落后,她使用打孔卡进行编码,使之成为一个可以扩展,可以检索的,名副其实的电子数据库。
在此之后,各种电子化生物数据库应运而生。1971年创立的蛋白质数据银行,至今已有超过17万份大分子结构数据。1981年,加州大学圣地亚哥分校的生物学家Russell Doolittle创建了更先进的蛋白质数据库,起名叫:Newat。1982年,美国国家健康署成立DNA数据库GenBank,这一切都离不开最初Dayhoff的努力。
蛋白质数据银行有超过170000份大分子结构样本包括图片所示的结合了RNA和蛋白质综合体的细菌表达子。Credit: David S. Goodsell and RCSB PDB (CC BY 4.0)
在当时,计算机技术并没有被大多数科学家所熟知,许多人对花费大量时间和精力建立的生物数据库产生了质疑。终于在1983年7月,数据库立了大功。英国生物化学家Michael Waterfield和美国生物学家Doolittle分别进行研究,并得出了相似的结论:特定的人类生长因子和病毒中的蛋白质可以导致猴子患癌。这个观察提出了一种由病毒导致癌症的机制 — 通过模仿生长因子,病毒诱导细胞癌变。
“这一革命性的突破为不了解计算机和统计学的生物学家点亮了一盏明灯。”美国国家生物技术信息中心前主管James Ostell评论道,“我们可以通过电脑计算概率来了解更多关于癌症的信息。”
除此之外,生物数据库的建立标志着客观生物学的问世。以往的生物学研究需要针对某个特定的假设组织实验。但在数据库的支持下,科学家可以寻找数据之间的联系,会发现很多超越以往的科学突破。
04
气象预测领航者:大气环流模式(1969)
Forecast leader: the general circulation model (1969)
战争推动出大批先进科技的发展,计算机在二战中被用来计算弹道轨迹和设计武器。二战结束后,计算机先驱John von Neumann开始改进原有的计算机程式,用于预测天气。关于这一点,真锅淑郎教授解释说:“天气预测是经验性的。” 运用以往的经验和预感来预测接下来要发生什么。von Neumann的团队希望可以在物理学规律的基础上,通过数学计算来准确预测天气。
美国海洋与大气管理局,地球物理流体动力学实验室负责人Venkatramani Balaji说,预测天气的数学公式早就已经存在了,但早期的科学家无法将其实际应用于天气预测领域,因为天气预测要做到及时迅速,需要短时间内进行大量的重复性计算,人工根本没有办法完成。
曾有科学家做过尝试。
1922年,德国数学家刘易斯·弗莱·理查森(Lewis Fry Richardson)收集数据,打算预测六个小时后慕尼黑的天气,结果手工计算过程持续了几个月,早就超过了六个小时。并且这个计算出的结果和实际天气比,非常不准确。
计算机的发明,使得这样的计算过程可以付诸实践。
1940年代后期,von Neumann在普林斯顿前沿科学中心建立了天气预测团队。1955年又建立了第二只团队—地球物理流体动力学实验室,开始研究气候预测模型。真锅淑郎教授1958年加入气候预测模型团队,开始研究大气模型,他的同事Kirk Bryan负责研究海洋模型。1969年该团队成功的结合大气模型与海洋模型,创造了被《自然》杂志在2006年评为“计算机科学里程碑”的大气环流模式(general circulation model,GCM)。
现在的GCM模型可以将地球表面精确到25×25千米的方块网格,将大气精确到几十层。1969年时的GCM模型精确度是500×500千米网格和9层,这项技术仅能覆盖1/6个地球。可以看出,发展到今日,已经有了极大的飞跃。
05
数字处理器:基础线性子数据库(1979)
Number cruncher: BLAS (1979)
科学计算通常使用向量和矩阵来进行相对简单的数学运算。但是1970年代,还没有一套普遍认可的用于执行此类操作的计算工具。因此从事科学工作的程序员花费大量时间写代码来进行基本的数学运算,而不是有效率地研究科学问题。
程序世界需要一套准则。1979年,基础线性代数子程序库(Basic Linear Algebra Subprograms, BLAS)终于问世。BLAS包含几十种向量和矩阵数学公式的基础运算。田纳西大学诺克斯维尔分校计算机科学家杰克·东纳拉(Jack Dongarra)说:“实际上,BLAS将矩阵和矢量运算简化为像加减法一样基础的计量单位。”
Cray-1超级计算机:在BLAS程序库还没有发明的1979年,线性代数计算并没有标准的算法,研究人员只能用Cray-1这样的超级计算机运算数据。Credit: Science History Images/Alamy
德克萨斯大学奥斯汀分校的计算机科学家Robert van de Geijn评价说:BLAS可能是科学计算最重要的发明之一。BLAS数据库不仅创立了一套标准化运算公式,还确保了可以在任何电脑上兼容,几乎每一个科学家都可以在自己的电脑上运行,不再受硬件的限制
06
数字处理器:基础线性子数据库(1979)
Number cruncher: BLAS (1979)
1980年代初期,程序员Wayne Rasband在马里兰州贝塞斯达的美国国立卫生研究院的脑成像实验室工作。他的工作主要是使用扫描仪将X射线胶片储存成电子版,但也仅仅是储存而已,无法在计算机上浏览或分析。因此,Rasband决定编写了一个程序来实现浏览和分析的目的。
在当时,实验室中通用的电脑还是价值15万美元的PDP-11电脑。Rasband也是以这个电脑为平台编写。但1987年,苹果推出第二代采用图形界面的Macintosh一体式电脑,定位专业级生产力,价格却更低。Rasband意识到苹果电脑的推出是革新性的改变,因此,便改变了编程平台,开始打造适用于Macintosh电脑的图像处理系统,NIH 图片分析软件应运而生。
NIH图片分析软件几乎能够在任何计算机上查看或量化任何图像。现有的NIH 图片分析软件有:可在Windows和Linux系统使用的,基于java的版本—ImageJ;和由德国德累斯顿马克斯·普朗克分子细胞生物学与遗传学研究所的Pavel Tomancak小组开发的,带有多种插件,功能更丰富的软件—Fiji。这两个软件普及率非常高,已经成为了科学家处理图片的必备神器。
ImageJ 软件及其插件,可以自动识别显微图片中的细胞核Credit: Ignacio Arganda-Carreras/ImageJ
为什么ImageJ这么受欢迎? 创始人Rasband开玩笑说: “可能因为是免费的。” 而更大的原因是因为ImageJ可以按照用户的需求定制软件,不断革新。ImageJ从1990年代开始就一直保持着极简的用户界面,并且软件可以无限扩展,只需要鼠标点击或菜单栏选项便可以轻松记录下工作流程。整个软件架构用户友好且灵活。
并且ImageJ是一个开源平台,人人可以自己设计插件,使软件的工具集更加丰富。例如自动辨别视频中物体的插件,和自动从图片中辨别细胞的插件,都非常受科学家欢迎。
07
数序列搜索器:BLAST (1990)
Sequence searcher: BLAST ( (1990)
互联网时代有一种特殊的文化现象,将软件名称当作动词用,例如,google 一下,百度一下。也就代表着这个软件真的家喻户晓。对于遗传学来,BLAST就是这样的存在。
人类的进化会影响分子系列的改变,会产生替换,删除,缺口和重新排列的情况。通过搜索序列之间的相似性,尤其是蛋白质,研究人员可以发现基因进化的过程,对基因功能有更深的理解。在庞大的生物数据库中精准搜索分子信息并迅速比对尤为重要。
组建第一个生物数据库的科学家Dayhoff发明了一种处理信息的方法:可接受点突变矩阵(PAM矩阵),可以量化两种蛋白质之间的关连,不仅可以测试出序列的相似性,还可以测量出两种蛋白质的进化距离。
1985年,弗吉尼亚大学的William Pearson和美国健康署的David Lipman发明了FASTP,是一种结合了Dayhoff的PAM矩阵的,具有快速搜索能力的算法。在此基础上,1990年,Lipman及其合作者,发明了更强大的搜索应用:基于局部比对算法的搜索工具(the Basic Local Alignment Search Tool ,BLAST)。BLAST既可以快速处理数据,还可以挑选出进化距离最匹配的序列。同时,还可以筛查出高匹配的样本中仅仅是巧合的样本。
BLAST的计算速度快到难以置信。你只要点击“搜索”,喝一口咖啡的功夫,就可以计算完成。最重要的是,操作很简便。
哈佛大学的计算生物学家西恩·埃迪说,BLAST系统的出现加速了基因组生物学领域的发展,研究人员可以根据相关基因推导出未知基因的情况。全世界的生物学家都已经将这个系统当作了动词用,“我刚刚blast了一下我的序列”。
08
预打印动力源:电子预印本文献库 (1991)
Preprint powerhouse: arXiv.org (1991)
1980年代还没有在线论文数据库。高能物理学者在发表论文之后,经常会将纸质版文章寄给一些同行浏览,由于人力物力的限制,只有少数有幸获得手稿。但同行业学者之间也存在着食物链,食物链下游的学者需要引用顶尖学者的文献来为自己的文章背书,但顶尖学者并不会给他们邮寄论文,他们也没有其他的获得渠道。顶尖学者汗牛充栋,普通学者无人问津,形成一种恶性循环。
1991年,洛斯阿拉莫斯国家实验室的Ginsparg邮件自动发送程序,编写了一套纠正这样不平等的恶性循环。订阅用户每天可以自动收到更新的文献。通过这个系统,全世界的学者只要通过邮件便可以收到最新鲜的论文咨询。
在Ginsparg的计划中,这个系统可以自动存储3个月的文章,仅涵盖高能物理领域的文章。但一个同事给他提建议,说希望不设时间限制,无限的储存文章。因此,这个系统就从公告栏模式改成了档库模式,涵盖的领域也逐渐扩展。1993年,Ginsparg将这个系统迁移到万维网上,1998年命名为:arXiv.org,这个名字使用至今。
Source: arXiv.org
30年过去了,如今的arXiv.org储存了180万份文稿,全部免费,每个月有15000份新稿上传,3000万份下载。不仅物理领域,arXiv.org还涵盖了生物,医药,社会学和其他领域的文献。系统中至今已经收录了成千上万篇新冠病毒的文章。
Ginsparg说:30年前,arXiv.org还被看作是挑战传统物理社群的异端,但如今,已经成为了研究必不可少的工具。在他看来,这是一个成功的项目。
09
数据探索者:IPython Notebook (2011)
Data explorer: IPython Notebook (2011)
Fernando Pérez在2001年时,还是一名有拖延症的研究生。 他想学习Python来帮助科研。但他发现,Python是一种低效的解释性语言,程序按顺序逐行执行。Pérez觉得Python不适合科研,用户不能预加载代码模块,数据可视化功能也不是很好用,因此,Pérez决定要重新写一个版本。因此他在2001年创建了IPython,一个交互式Python解释器。10年后,Pérez和同事又发布了网页版工具—IPython Notebook,开启了数据科学革命。
像其他代码解释器一样,IPython Notebook结合了代码,结果,图形和文本功能。但是与其他同类程序不同,IPython Notebook是开源的,用户可以自己开发自己想要的功能。2014年,IPython升级为Project Jupyter,支持约100种语言,用户在自己的个电脑上也可以进行超级计算机一样的计算。
现在,开源平台GitHub有超过100万个应用在Jupyter notebooks的开源代码。包括2016年发现引力波的代码和19年黑洞图片的代码。
10
快速学习工具:AlexNet (2012)
Fast learner: AlexNet (2012)
人工智能(AI)有两种方式。一种使用代码编程,另一种使用计算机通过模拟大脑的神经结构来“学习”。图灵奖得主,计算机科学家Geoffrey Hinton说,几十年来,人工智能研究人员一直致力于研究第一种方式,认为第二种方式不靠谱。2012年,Hinton的学生, Alex Krizhevsky 和Ilya Sutskever的研究证实了第二种方法可行性。
在当年的ImageNet竞赛中,参赛者被要求在包含了100万张常见物品呢的图片的数据库中训练AI,然后在另一路图片中测试算法。最好的算法出现了1/4的失误。而Krizhevsky和Sutskever设计的基于神经网络的深度学习AI—AlexNet,将误差减小到16%。
Hinton表示,AlexNet反映了,成功的人工智能算法需要足够大的训练数据集,出色的编程和新型图形处理单元的结合,图形处理器可以提高计算机视频性能。
人工智能质的提升,应该追溯到2009年,当时他的实验室创建了第一个神经网络。这个神经网络比传统的人工智能准确率有了一些提升,虽然进步很小,但足以载入史册。
2012年 AlexNet的一鸣惊人引发了全世界机器学习的热潮。SIRI等手机内置人工智能助手也是基于机器学习技术。AlexNet在所有的AI工具中尤为重要,因为他从根本上改变了科学,进而改变了整个世界。