從Fortran到arXiv.org,從生物學的BLAST到人工智慧的AlexNet,這些技術進步改變了科學,也改變了世界。
2019年,事件視界望遠鏡(EHT)拍攝了人類第一張黑洞照片。這張有著明亮光環的圖像並非一張普通照片,而是由射電望遠鏡捕捉的數據通過演演算法合成的,相關的程式設計代碼也在隨後公佈。用計算機程式設計來合成圖像已經成為一種越來越普遍的模式。
從天文學到生物學,現代科學的每一項重大發現背後,都有一台電腦。然而,計算機並不能取代人類的思考。如果沒有能夠解決科學問題的軟體,以及知道如何編寫和使用軟體的研究人員,哪怕是最強大的計算機也會無用武之地。今天,這些強力的軟體已經滲透到科研工作的各個方面。
《自然》雜誌選出了對科學界產生重大影響的10種軟體工具。哪一款,你也曾經或正在使用?
1
程式設計語言先驅:Fortran 編譯器(1957)
第一台現代計算機並不容易操作。那時,程式設計真的是要手動“編”成的,研究人員需要用電線將成排電路連接起來。後來隨著機器語言和彙編語言的出現,使用者才得以使用代碼編寫計算機程式,但前提是需要對計算機架構有深入瞭解,這對許多科學家來說是望塵莫及了。
到了上世紀50年代,隨著符號語言逐漸發展,這種情況開始發生變化。尤其是 IBM 公司的工程師 John Backus 開發的“公式翻譯”語言 Fortran 出現了。有了 Fortran 語言,使用者可以使用人們可讀懂的指令(如x=3+5),來編寫計算機程式。編譯器會將這些指令轉換成快速高效的機器代碼。
1963年交付給美國國家大氣研究中心的這台 CDC 3600 型電腦使用 Fortran 語言程式設計。
不過,即使在發明 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)是位於澳大利亞西部的射電望遠鏡,使用快速傅里葉變換來處理數據。
事實上,德國數學家高斯在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)。|
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上工作的研究人員,並沒有用於線性代數計算的標準。
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 工具可以自動識別顯微鏡圖像中的細胞核。
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 的成功催生了其他論文預印本網站的繁榮,包括生物學、醫學、社會學等諸多學科。今天,從已發表的數萬份關於“新冠”病毒的預印本中,就可以看到它的影響。(編者注:參見《預印本論文靠譜嗎?》)這個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 也因此成為改變科學,也改變世界的工具之一。