改变科学的10个计算机代码
2019年,事件视界望远镜让世界第一次看到了黑洞的实际样子。但是,公布的图像并不是传统意义上的照片,而是通过数学“处理”之后的。处理的数据是射电望远镜在美国、墨西哥、智利、西班牙和南极等地区获得相关信息。数据处理团队也开源了相关的编程代码,并发表了相关文章。因此,科学界也可以在此基础上进一步深度探索。
开源逐渐成为一种趋势,并且越来越普遍。从天文学到动物学,现代每一项重大科学发现的背后,似乎都有计算机的身影。例如,加州斯坦福大学的计算生物学家Michael Levitt 凭借其计算化学结构建模策略获得了2013年诺贝尔化学奖,他指出,今天的笔记本电脑内存和时钟速度是1967年的10000多倍。1967年的时候,正是Michael Levitt创建实验室并开始“诺奖工作”的年份。“我们今天确实拥有相当可观的计算能力,但是问题在于,这仍然需要人类的思考。”
显然,如果没有能够解决研究问题的软件以及熟知如何编写和使用软件的研究人员,光有一台强大的计算机是毫无用处的。最近,《自然》杂志将目光投向了科学发现的幕后,着眼于过去几十年改变世界的关键代码。
语言先驱:Fortran编译器(1957)
第一代计算机对用户并不友好。编程靠手工完成的,通过用电线连接一排排电路。后来的机器语言和汇编语言允许用户用代码为计算机编程,但这两种语言都需要对计算机的架构有深入的了解,因此,许多科学家望洋兴叹。
20世纪50年代,随着符号语言的发展。约翰·巴克斯和他在加州圣何塞的IBM团队开发的“公式翻译”语言Fortran面世了,情况也逐渐发生了改变。使用Fortran,用户可以用人类可读的指令来编程,例如x = 3 + 5。然后编译器将其转换成快速、高效的机器代码。
但这仍然困难重重,一开始,程序员用穿孔卡输入代码,复杂的模拟可能需要数万张穿孔卡。不过,新泽西州普林斯顿大学(Princeton University)的气候学家Manabe Syukuro和他的同事们利用这种语言成功开发了第一批气候模型。他表示,Fortran让非计算机科学家也能编程。
现在已经80年了,Fortran仍然广泛应用于气候建模、流体动力学、计算化学。这意味着,任何涉及到复杂线性代数和需要强大的计算机来快速处理数字的学科都还需要Fortran的支持,古老的Fortran代码库仍然活跃在世界各地的实验室和超级计算机上。
信号处理器:快速傅立叶变换(1965)
当射电天文学家“观察”天空时,他们需要“看到”那些随着时间变化的信号背后的杂音。为了理解这些杂音的本质,天文学家还要了解这些信号作为频率的函数是什么样的。虽然有一种叫做傅里叶变换的数学过程允许研究人员这样做。但问题是它的效率很低,例如对于一个大小为N的数据集需要N^2次计算。
1965年,美国数学家詹姆斯·库利(James Cooley)和约翰·杜基(John Tukey)想出了一种加速方法:使用递归,这是一种分而治之的编程方法,其中算法可以实现重复地再运用。这种快速傅立叶变换(FFT)简化了计算傅立叶变换的问题,只需N log2(N)步。而且随着N的增加,速度也会提高。对于1000个点数,速度提升大约是100倍;100万个点,是5万倍。
英国牛津大学的数学家Nick Trefethen说,这个“发现”实际上是一个再发现。因为德国数学家Carl Friedrich Gauss在1805年得出了这个结论,但他从未发表过相关论文。但Cooley和Tukey发表了,并开启了快速傅立叶变换在数字信号处理、图像分析、结构生物学等领域的应用。Trefethen表示:“这真的是应用数学和工程领域的重大事件之一,FFT已经在代码中多次实现。一个流行的选择是FFTW,即“西方最快的傅里叶变换”。
分子编目:生物资料库(1965)
数据库在科学研究中非常重要,以至于人们很容易忽视它是由软件驱动的这一事实。在过去的几十年里,数据库资源的规模急剧膨胀,影响了许多领域,尤其生物学领域更加剧烈。
今天庞大的基因组和蛋白质数据库源于玛格丽特·戴霍夫(Margaret Dayhoff)的工作,她是马里兰州银泉市国家生物医学研究基金会(National Biomedical Research Foundation)的生物信息学先驱。20世纪60年代初,当生物学家们致力于梳理蛋白质的氨基酸序列时,戴霍夫开始寻找不同物种之间进化关系的线索。这项工作首次于1965年与三位共同作者发表,描述了当时已知的65种蛋白质的序列、结构和相似性。历史学家布鲁诺·斯特拉瑟(Bruno Strasser)在2010年写道,这是第一个“与特定研究问题无关”的数据集。将数据编码在穿孔卡片中,这使得扩大数据库和搜索成为可能。
其他计算机化的生物数据库紧随其后发布。加州大学圣地亚哥分校的进化生物学家Russell Doolittle在1981年创建了另一个名为Newat的蛋白质数据库。1982年数据库GenBank的发布,是美国国立卫生研究院(National Institutes of Health)维护的DNA档案。
这些数据库资源的价值在1983年7月得到了证实。当时,由伦敦帝国癌症研究基金会蛋白质生物化学家迈克尔·沃特菲尔德领导的团队,与杜利特尔的团队各自独立报道了一个特殊的人类生长因子序列与一种导致猴子出现癌症的病毒蛋白质之间的相似性。观察结果显示了一种病毒诱发肿瘤机制——通过模仿一种生长因子,病毒会诱导细胞不受控制地生长。美国国家生物技术信息中心(NCBI)前主任詹姆斯·奥斯特尔说:“这一结果让一些对计算机和统计学不感兴趣的生物学家头脑里灵光一闪:我们可以通过比较序列来了解有关癌症的一些情况。”
这一发现标志着“客观生物学的到来”。除了设计实验来测试特定的假设,研究人员还可以挖掘公共数据集,寻找那些实际收集数据的人可能从未想到过的联系。当不同的数据集连接在一起时,其威力就会得到急剧加强。
预测领导者:环流模式(1969)
在第二次世界大战结束时,计算机先驱约翰·冯·诺伊曼开始将几年前用于计算弹道轨迹和武器设计的计算机转向天气预测问题。在那之前Manabe解释说, “天气预报只是基于经验的”,用经验和直觉来预测接下来会发生什么。相比之下,冯·诺伊曼的团队“试图基于物理定律进行数值天气预测”。
新泽西州普林斯顿的国家海洋和大气管理局地球物理流体动力学实验室的建模系统部门的负责人Venkatramani Balaji说,这些方程式已经被人们熟知了几十年。但早期的气象学家无法实际解决这些问题。要做到这一点,需要输入当前的条件,计算它们在短时间内会如何变化,并不断重复。因此,此过程非常耗时,以至于在天气本身出现之前无法完成数学运算。1922年,数学家刘易斯·弗莱·理查森(Lewis Fry Richardson)花了几个月时间计算德国慕尼黑的6小时预报。根据一段历史记载,结果是“极不准确的”,包括“在任何已知的陆地条件下都不可能发生的”预测。计算机使这个问题变得容易解决了。
20世纪40年代末,冯·诺伊曼在普林斯顿高等研究院建立了他的天气预报团队。1955年,第二个团队——地球物理流体动力学实验室——开始进行他所谓的“无限预测”——也就是气候模拟。
Manabe于1958年加入气候建模团队,开始研究大气模型;他的同事柯克·布莱恩(Kirk Bryan)向海洋发表了演讲。1969年,他们成功地将两者结合起来,创造了《自然》杂志在2006年所说的科学计算的“里程碑”。
今天的模型可以将地球表面划分为25 × 25公里的正方形,将大气划分为几十个等级。相比之下,Manabe和Bryan的海洋-大气联合模型使用了500平方公里的面积和9个层次,只覆盖了地球的六分之一。研究小组也第一次测试了二氧化硅中二氧化碳含量上升的影响。
数值计算研究机:BLAS(1979)
科学计算通常涉及到使用向量和矩阵的相对简单的数学运算,但这样的向量和矩阵实在太多了。但在20世纪70年代,并没有一套普遍认可的计算工具来执行这些操作。因此,从事科学工作的程序员并未专注于科学问题,而是把大量的时间花在了设计代码进行基本的数学运算上。
编程世界需要的是一个标准。1979年,它有了一个:基本线性代数子程序,简称BLAS6。这个标准一直发展到1990年,定义了几十个向量和后来的矩阵数学的基本程序。
美国田纳西大学计算机科学家、BLAS开发团队成员杰克·唐加拉表示,事实上,BLAS把矩阵和向量数学简化成了和加法和减法一样基本的计算单元。
美国德克萨斯大学奥斯汀分校的计算机科学家Robert van de Geijn指出,BLAS“可能是为科学计算定义的最重要的接口”。除了为常用函数提供标准化的名称之外,研究人员可以确定基于BLAS 的代码在任何计算机上都可以以相同的方式工作。该标准还使计算机制造商能够优化BLAS实现,以实现在其硬件上的快速操作。
40多年来,BLAS代表了科学计算堆栈的核心,也就是使科学软件运转的代码。华盛顿大学的机械和航空航天工程师Lorena Barba称其为“五层代码中的机械”。而杰克·唐加拉说:“它为我们进行计算提供了基础。”
显微镜必备:NIH图像(1987)
上世纪80年代初,程序员韦恩·拉斯班德(Wayne Rasband)在马里兰州贝塞斯达的美国国立卫生研究院(National Institutes of Health)的一个脑成像实验室工作。该团队有一台扫描仪来数字化x光片,但无法在电脑上显示或分析它们。所以Rasband写了一个程序来完成这项任务。
该程序是专门为一台价值15万美元的PDP-11小型计算机设计的。随后,在1987年,苹果公司发布了麦金塔II,这是一个更友好、更实惠的选择。拉斯班德说:“在我看来,这显然是一种更好的实验室图像分析系统。”他将自己的软件移植到新平台上,并建立了一个图像分析生态系统。
国家卫生研究院的图像和它的后代授权研究人员在任何计算机上查看和量化任何图像。软件家族包括ImageJ,这是为Windows和Linux用户编写的基于java的版本,以及由Pavel Tomancak在德国德累斯顿的马克斯普朗克分子细胞生物学和遗传学研究所的团队开发的ImageJ的一个发行版,它包含了关键的插件。麻省剑桥Broad研究所成像平台的计算生物学家评价到:“ImageJ是最基础的工具,几乎没有生物学家没有使用过它。”
Eliceiri说:“这个程序的目的不是成为一切,而是服务于用户。不像Photoshop和其他程序,ImageJ可以是任何你想要的。
序列搜索:BLAST(1990)
可能没有比软件名称成为动词更好的文化相关性指示符了。提到搜索,会想到谷歌。提到遗传学,研究者的第一直觉会是BLAST。
通过诸如替代、删除、缺失和重排等方式,生物将进化中的改变蚀刻在分子序列中。通过寻找序列之间的相似性——特别是蛋白质之间的相似性——研究人员可以发现进化关系,并深入了解基因功能。关键是要在迅速膨胀的分子信息数据库中快速而全面地做到这一点。
迪霍夫在1978年提供了一个关键想法。她设计了一种“点接受突变”矩阵,使研究人员不仅可以根据两种蛋白质序列的相似程度,还可以根据它们之间的进化距离来为它们的亲缘关系评分。
1985年,位于夏洛茨维尔的弗吉尼亚大学的威廉·皮尔森和NCBI(国家编目局)的大卫·利普曼提出FASTP,这是一种结合了迪霍夫矩阵和快速搜索能力的算法。
数年后,Lipman与NCBI(国家编目局)的众人一起开发了一种更强大的改进:基本局部对齐搜索工具(BLAST)。BLAST发布于1990年,它结合了处理快速增长的数据库所需的搜索速度,以及寻找进化上更遥远匹配的能力。与此同时,该工具可以计算出这些匹配偶然发生的可能性有多大。
阿特舒尔表示,结果难以置信的快。“喝口咖啡的功夫,搜索就完成了。”但更重要的是,它很容易使用。在一个通过邮寄更新数据库的时代,沃伦·吉什建立了一个电子邮件系统,后来又建立了一个基于网络的架构,允许用户在NCBI计算机上远程运行搜索,从而确保搜索结果始终是最新的。
哈佛大学的计算生物学家肖恩·艾迪表示,BLAST系统为当时处于萌芽阶段的基因组生物学领域提供了一个变革性的工具,一种根据相关基因找出未知基因可能功能的方法。对于各地的测序实验室,它还提供了一个新颖的动词。“它是众多由名词变成动词的例子之一,”艾迪说,“你会说,你正准备BLAST一下你的序列。”
预印本平台:arXiv.org(1991)
在20世纪80年代末,高能物理学家们例行公事地将他们提交的手稿的物理副本邮寄给同事们,征求他们的意见,这是出于礼貌——但只发给少数人。物理学家保罗·金斯帕格在2011年写道:“那些处于食物链较低位置的人依赖于一线研究者的成果,而非精英机构中有抱负的研究人员往往完全脱离特权圈。”
1991 年,洛斯阿拉莫斯国家实验室(Los Alamos National Laboratory)的 Ginsparg 写了一个电子邮件自动回复器,尝试建立公平的竞争环境。邮件订阅者每天都会收到一份预印本列表,每份论文都带有标识符。如此一来,世界各地的用户都可以通过一封电子邮件提交或检索来自上述实验室计算机系统的论文。
Ginsparg的计划是将文章保留三个月,并将内容限制在高能物理社区。但一位同事说服他无限期地保留这些文章。他说:“就在那一刻,它从布告栏变成了档案馆。”论文从比高能物理学科更远的地方蜂拥而来。1993年,Ginsparg将这个系统迁移到万维网上,并在1998年给它取了个沿用至今的名字:arXiv.org。
至今arXiv已经成立30年了,它拥有约180万份预印本,全部免费提供,目前每月仍吸引超过1.5万份提交和3000万次下载。” Nature Photonics 的编辑曾表示:arXiv为研究者提供了一种快捷、方便的科研方式,可以告诉大家你在做什么、什么时间做的,省去了传统期刊同行评审的繁琐。
数据浏览器:IPython Notebook (2011)
Fernando Pérez在2001还是一名研究生的时候,开始探索拖延症,当时他决定使用Python的一个核心组件进行研究。
Python是一种解释语言,其程序是逐行执行的。程序员可以使用一种称为“读-评-输出循环”(REPL)的计算性调用和响应工具,在这个工具中输入代码,然后由一个称为解释器的程序来执行。REPL允许快速探索和迭代,但Pérez指出,Python的REPL不是为科学而构建的。例如,它不允许用户容易地预加载代码模块,或保持数据可视化打开状态。所以Pérez“写”了他自己的版本。
2001 年 12 月,Pérez 发布了交互式 Python 解释器 IPython,它共有 259 行代码。10 年后,Pérez 和物理学家 Brian Granger、数学家 Evan Patterson 合作,将该工具迁移到 Web 浏览器,创建了 IPython Notebook,掀起了一场数据科学的革命。
与其他notebook一样,IPython笔记本将代码、结果、图形和文本组合在一个文档中。但与其他类似的项目不同的是,IPython Notebook是开源的,它邀请了大量开发者社区的贡献,而且它支持Python。2014年,IPython演变为Project jupiter,支持大约100种语言,允许用户在远程超级计算机上如同在自己的笔记本电脑上一样轻松地探索数据。
《自然》杂志在2018年写道:“对于数据科学家来说,Jupyter已经成为事实上的标准。”当时,在GitHub代码共享平台上有250万个Jupyter Notebook;如今已有近一千万个,其中包括 2016 年发现引力波和 2019 年黑洞成像的记录。Pérez表示:“我们为这些项目做出了一点贡献,这是非常值得的。”
快速学习器:AlexNet(2012)
人工智能有两种类型。一种是使用成文的规则,另一种是通过模拟大脑的神经结构来让计算机“学习”。加拿大多伦多大学的计算机科学家Hinton表示,几十年来,人工智能研究人员认为后者是“一派胡言”。2012年,Hinton的研究生Alex Krizhevsky和Ilya Sutskever证明了事实并非如此。
在2012年的 ImageNet 的年度竞赛上,研究人员在一个包含100万张日常物体图像的数据库上训练人工智能,然后在单独的图像集上测试生成的算法。Hinton说,当时最好的算法错误地分类了大约四分之一的图像。Krizhevsky和Sutskever的AlexNet,一种基于神经网络的“深度学习”算法,将错误率降低到了16%。Hinton说:“我们基本上把错误率减半了,或者几乎减半了。
Hinton表示,该团队在2012年的成功反映了足够大的训练数据集、出色的编程和GPU能力的结合。GPU是最初设计用来加速计算机视频性能的处理器。“突然之间,我们可以更快地运行(算法)30倍,或者学习规模增加30倍后的数据。”
真正的算法突破实际上发生在三年前,当时Hinton的实验室创建了一个神经网络,可以比经过几十年改进的传统人工智能更准确地识别语音。“只是稍微好一点, 但这已经是’不祥之兆’了。”
AlexNet的成功代表着深度学习在实验室、临床和其他领域的崛起。这就是为什么移动电话能够理解语音查询,图像分析工具能够很容易地从照片显微图中挑选出细胞。这就是 AlexNet “入选”改变科学、改变世界工具之一的原因。
原文链接: