從 Fortran 編譯器到 arXiv 預(yù)印本庫(kù)、AlexNet,這些計(jì)算機(jī)代碼和平臺(tái)改變了科學(xué)界。
2019 年,「事件視界望遠(yuǎn)鏡」團(tuán)隊(duì)拍下了第一張黑洞照片。這張照片并非傳統(tǒng)意義上的照片,而是計(jì)算得來(lái)的——將美國(guó)、墨西哥、智利、西班牙和南極多臺(tái)射電望遠(yuǎn)鏡捕捉到的數(shù)據(jù)進(jìn)行數(shù)學(xué)轉(zhuǎn)換。該團(tuán)隊(duì)公開了所用代碼,使科學(xué)社區(qū)可以看到,并基于此做進(jìn)一步的探索。
而這逐漸成為一種普遍模式。從天文學(xué)到動(dòng)物學(xué),每一個(gè)偉大的現(xiàn)代科學(xué)發(fā)現(xiàn)背后都有計(jì)算機(jī)的身影。斯坦福大學(xué)計(jì)算生物學(xué)家、2013 年諾貝爾化學(xué)獎(jiǎng)獲得主 Michael Levitt 表示,現(xiàn)在的筆記本電腦在內(nèi)存和時(shí)鐘速度方面是 1967 年其實(shí)驗(yàn)室計(jì)算機(jī)的一萬(wàn)倍。「今天,我們擁有大量算力。但問(wèn)題是,這仍然需要人類的思考。」
如果沒(méi)有能夠處理研究問(wèn)題的軟件以及知道如何編寫和使用軟件的研究人員,計(jì)算機(jī)再?gòu)?qiáng)大也是無(wú)用。「現(xiàn)在的研究與軟件緊密相關(guān),軟件已經(jīng)滲透到科研的方方面面。」軟件可持續(xù)性研究所(Software Sustainability Institute)負(fù)責(zé)人 Neil Chue Hong 如是說(shuō)。
最近,Nature 上的一篇文章試圖揭示科學(xué)發(fā)現(xiàn)背后的重要代碼,正是它們?cè)谶^(guò)去幾十年中改變了科研領(lǐng)域。這篇文章介紹了對(duì)科學(xué)界帶來(lái)重大影響的十個(gè)軟件工具,其中就包括與人工智能領(lǐng)域密切相關(guān)的 Fortran 編譯器、arXiv、IPython Notebook、AlexNet 等。
語(yǔ)言先驅(qū):Fortran 編譯器(1957)
首批出現(xiàn)的現(xiàn)代計(jì)算機(jī)對(duì)用戶并不友好。編程實(shí)際上是由手工完成的,通過(guò)電線連接一排排電路。后來(lái)的機(jī)器語(yǔ)言和匯編語(yǔ)言允許用戶使用代碼進(jìn)行計(jì)算機(jī)編程,但這兩種語(yǔ)言依然要求使用者對(duì)計(jì)算機(jī)架構(gòu)有深入了解,導(dǎo)致很多科學(xué)家無(wú)法使用它們。
20 世紀(jì) 50 年代,隨著符號(hào)語(yǔ)言的發(fā)展,尤其是「公式翻譯」語(yǔ)言 Fortran 的出現(xiàn),上述境況發(fā)生了改變。Fortran 語(yǔ)言由 IBM 的約翰 · 巴科斯(John Backus)團(tuán)隊(duì)開發(fā)。借助 Fortran,用戶可以使用 x = 3 + 5 等人類可讀的指令進(jìn)行計(jì)算機(jī)編程,之后編譯器將這類指令轉(zhuǎn)化為快速高效的機(jī)器碼。
這臺(tái)使用 Fortran 編譯器編程的 CDC 3600 計(jì)算機(jī)于 1963 年移送至美國(guó)國(guó)家大氣研究中心。(圖源:美國(guó)大氣科學(xué)研究大學(xué)聯(lián)盟 / 科學(xué)圖片庫(kù)。)
在早期,編程人員使用穿孔卡片(punch card)輸入代碼,復(fù)雜的模擬可能需要數(shù)萬(wàn)張穿孔卡片。不過(guò),F(xiàn)ortran 使得并非計(jì)算機(jī)科學(xué)家的研究者也能夠進(jìn)行編程。普林斯頓大學(xué)氣候?qū)W家 Syukuro Manabe 表示:「我們第一次靠自己進(jìn)行編程。」他和同事使用 Fortran 語(yǔ)言開發(fā)了首批成功的氣候模型之一。
60 多年過(guò)去了,F(xiàn)ortran 依然廣泛應(yīng)用于氣候建模、流體動(dòng)力學(xué)、計(jì)算機(jī)化學(xué),以及其他涉及復(fù)雜線性代數(shù)并需要強(qiáng)大計(jì)算機(jī)快速處理數(shù)字的學(xué)科。Fortran 代碼運(yùn)行速度很快,仍然有很多編程人員知道如何寫 Fortran。古老的 Fortran 代碼庫(kù)依然活躍在世界各地的實(shí)驗(yàn)室和超級(jí)計(jì)算機(jī)上。
信號(hào)處理器:快速傅里葉變換(1965)
當(dāng)天文學(xué)家掃描天空時(shí),他們捕捉到了隨時(shí)間變化的復(fù)雜信號(hào)的雜音。為了理解這些無(wú)線電波的性質(zhì),他們需要觀察這些信號(hào)作為頻率函數(shù)的樣子。一種被稱為傅里葉變換(Fourier transform)的數(shù)學(xué)過(guò)程允許科學(xué)家實(shí)現(xiàn)這一點(diǎn)。但問(wèn)題在于傅里葉變換并不高效,對(duì)大小為 N 的數(shù)據(jù)集它需要進(jìn)行 N 次運(yùn)算。
1965 年,美國(guó)數(shù)學(xué)家 James Cooley 和 John Tukey 開發(fā)了一種加速傅里葉變換過(guò)程的方法。借助遞歸(recursion)這種「分而治之」的編程方法(其中算法可以實(shí)現(xiàn)重復(fù)地再運(yùn)用),快速傅里葉變換(fast Fourier transform, FFT)將計(jì)算傅里葉變換問(wèn)題簡(jiǎn)化為 N log_2(N) 個(gè)步驟。速度也隨著 N 的增加而提升。對(duì)于 1000 個(gè)點(diǎn),速度提升約 100 倍;對(duì)于 100 萬(wàn)個(gè)點(diǎn),速度提升約 5 萬(wàn)倍。
牛津大學(xué)數(shù)學(xué)家 Nick Trefethen 表示,F(xiàn)FT 的發(fā)現(xiàn)實(shí)際上是一種「再發(fā)現(xiàn)」,因?yàn)榈聡?guó)數(shù)學(xué)家卡爾 · 弗里德里希 · 高斯在 1805 年就完成了該發(fā)現(xiàn),不過(guò)從未發(fā)表。但是,James Cooley 和 John Tukey 開啟了 FFT 在數(shù)字信號(hào)處理、圖像分析和結(jié)構(gòu)生物學(xué)等領(lǐng)域中的應(yīng)用。Trefethen 認(rèn)為 FFT「是應(yīng)用數(shù)學(xué)與工程領(lǐng)域偉大的發(fā)現(xiàn)之一。」FFT 已經(jīng)在代碼中實(shí)現(xiàn)了很多次,其中一種流行的變體是 FFTW(「西方最快的傅里葉變換」)。
默奇森天文望遠(yuǎn)鏡,使用快速傅里葉變換來(lái)收集數(shù)據(jù)。
勞倫斯伯克利國(guó)家實(shí)驗(yàn)室(Lawrence Berkeley National Laboratory)分子生物物理學(xué)和綜合生物成像部門主任 Paul Adams 回憶稱,當(dāng)他在 1995 年改進(jìn)細(xì)菌蛋白 GroEL 的結(jié)構(gòu)時(shí),即使使用 FFT 和一臺(tái)超級(jí)計(jì)算機(jī),也需要「很多很多個(gè)小時(shí),甚至是幾天」的計(jì)算。但要沒(méi)有 FFT,很難想象這件事要怎么做,花的時(shí)間將難以估量。
線性代數(shù)運(yùn)算標(biāo)準(zhǔn)接口:BLAS(1979)
科學(xué)計(jì)算通常涉及使用向量和矩陣的數(shù)學(xué)運(yùn)算,這些運(yùn)算相對(duì)簡(jiǎn)單,但計(jì)算量大。20 世紀(jì) 70 年代,學(xué)界并沒(méi)有出現(xiàn)一套普遍認(rèn)可的執(zhí)行此類運(yùn)算的工具。因此,科研工作者不得不花費(fèi)時(shí)間設(shè)計(jì)高效的代碼來(lái)做基礎(chǔ)的數(shù)學(xué)運(yùn)算,導(dǎo)致無(wú)法專注于科學(xué)問(wèn)題本身。
編程世界需要一個(gè)標(biāo)準(zhǔn)。1979 年,基礎(chǔ)線性代數(shù)子程序庫(kù)(Basic Linear Algebra Subprograms, BLAS)應(yīng)運(yùn)而生。直到 1990 年,該標(biāo)準(zhǔn)仍然在發(fā)展變化,定義了數(shù)十條涵蓋向量和矩陣運(yùn)算的基本程序。
田納西州大學(xué)計(jì)算機(jī)科學(xué)家、BLAS 開發(fā)團(tuán)隊(duì)成員之一 Jack Dongarra 表示,BLAS 實(shí)際上將矩陣和向量運(yùn)算簡(jiǎn)化成了像加減法一樣的基礎(chǔ)計(jì)算單元。
Cray-1 超級(jí)計(jì)算機(jī)。(圖源:科學(xué)歷史圖像 / Alamy)
德州大學(xué)奧斯汀分校計(jì)算機(jī)科學(xué)家 Robert van de Geijn 表示:「BLAS 可能是為科學(xué)計(jì)算而定義的最重要接口。」除了為常用函數(shù)提供標(biāo)準(zhǔn)名稱之外,研究者可以確保基于 BLAS 的代碼能夠以相同的方式在任何計(jì)算機(jī)上運(yùn)行。該標(biāo)準(zhǔn)也使得計(jì)算機(jī)制造商能夠優(yōu)化 BLAS 實(shí)現(xiàn),以實(shí)現(xiàn)硬件上的快速運(yùn)行。
40 多年來(lái),BLAS 代表了科學(xué)計(jì)算堆棧的核心,使得科學(xué)軟件持續(xù)發(fā)展。喬治華盛頓大學(xué)機(jī)械與航空航天工程師 Lorena Barba 將 BLAS 稱為「五層代碼內(nèi)的核心機(jī)制」。
預(yù)印本平臺(tái):arXiv.org(1991)
20 世紀(jì) 80 年代末,高能物理領(lǐng)域的研究者往往會(huì)把自己提交的論文郵寄給同行審閱,這是一種禮儀,但只郵寄給少數(shù)幾個(gè)人。「那些處于食物鏈底端的人依賴于頂端人的施舍,這往往會(huì)把非精英機(jī)構(gòu)中有抱負(fù)的研究者完全排除在特權(quán)圈之外,」物理學(xué)家 Paul Ginsparg 曾在 2011 年的一篇文章中寫道。
1991 年,洛斯阿拉莫斯國(guó)家實(shí)驗(yàn)室(Los Alamos National Laboratory)的 Ginsparg 寫了一個(gè)電子郵件自動(dòng)回復(fù)器,以建立公平的競(jìng)爭(zhēng)環(huán)境。郵件訂閱者每天都會(huì)收到一份預(yù)印本列表,每份論文都帶有標(biāo)識(shí)符。如此一來(lái),世界各地的用戶都可以通過(guò)一封電子郵件提交或檢索來(lái)自上述實(shí)驗(yàn)室計(jì)算機(jī)系統(tǒng)的論文。
Ginsparg 原本計(jì)劃將文章保留三個(gè)月,將范圍限制在高能物理社區(qū),但他的同事勸他去掉了這些限制。「就是在那一刻,它從布告欄轉(zhuǎn)變成了檔案庫(kù),」Ginsparg 表示。在這之后,大批論文開始涌入,其學(xué)科之廣遠(yuǎn)遠(yuǎn)超出了 Ginsparg 的預(yù)期。1993 年,Ginsparg 把這個(gè)系統(tǒng)移植到互聯(lián)網(wǎng)上。1998 年,他正式將該系統(tǒng)命名為 arXiv.org。
如今,30 歲的 arXiv 收錄了 180 萬(wàn)份預(yù)印本文章,且全部免費(fèi)閱讀,其每月論文提交量超過(guò) 15000 份,每月下載量高達(dá) 3000 萬(wàn)次。「不難看出 arXiv 為何如此受歡迎,」Nature Photonics 的編輯曾表示,「該系統(tǒng)為研究者提供了一種快捷、方便的科研方式,可以告訴大家你在做什么、什么時(shí)間做的,省去了傳統(tǒng)期刊同行評(píng)審的繁瑣。」
該網(wǎng)站的成功還對(duì)生物學(xué)、醫(yī)學(xué)、社會(huì)學(xué)等其他學(xué)科類似存儲(chǔ)庫(kù)的建立起到了助推作用,成千上萬(wàn)份新冠病毒相關(guān)研究預(yù)印本的發(fā)布就是一個(gè)例證。
數(shù)據(jù)探索器:IPython Notebook (2011)
Fernando Pérez 在 2001 年決定「探尋拖延癥」,當(dāng)時(shí)他是一名研究生,決定采用 Python 的核心組件。
Python 是一種解釋型語(yǔ)言,意味著程序會(huì)一行一行地執(zhí)行。編程人員可以使用一種被稱為「讀取 - 求值 - 輸出循環(huán)(REPL)」的計(jì)算型調(diào)用和響應(yīng)(call-and-response)工具,他們可以鍵入代碼,然后由解釋器執(zhí)行代碼。REPL 允許快速探索和迭代,但 Pérez 指出 Python 并不是為科學(xué)構(gòu)建的。例如,它不允許用戶輕松地預(yù)加載代碼模塊或保持?jǐn)?shù)據(jù)可視化的打開狀態(tài)。因此 Pérez 創(chuàng)建了自己的版本。
2001 年 12 月,Pérez 發(fā)布了交互式 Python 解釋器 IPython,它共有 259 行代碼。10 年后,Pérez 和物理學(xué)家 Brian Granger、數(shù)學(xué)家 Evan Patterson 合作,將該工具遷移到 Web 瀏覽器,創(chuàng)建了 IPython Notebook,掀起了一場(chǎng)數(shù)據(jù)科學(xué)的革命。
和其他計(jì)算型 notebook 一樣,IPython Notebook 將代碼、結(jié)果、圖形和文本組合到了單個(gè)文檔中。但與其他此類型項(xiàng)目不同的是,IPython Notebook 是開源的,歡迎廣大社區(qū)開發(fā)者為其發(fā)展做出貢獻(xiàn),并且支持 Python 這種科學(xué)家常用的語(yǔ)言。2014 年,IPython 演變成 Project Jupyter,支持約 100 種語(yǔ)言,并允許用戶像在自己計(jì)算機(jī)上一樣輕松地在遠(yuǎn)程超級(jí)計(jì)算機(jī)上探索數(shù)據(jù)。
Nature 在 2018 年指出:「對(duì)數(shù)據(jù)科學(xué)家而言,Jupyter 已經(jīng)成為一種實(shí)際標(biāo)準(zhǔn)」。那時(shí),GitHub 上已經(jīng)有 250 萬(wàn)個(gè) Jupyter notebook,如今已有近一千萬(wàn)個(gè),其中包括 2016 年發(fā)現(xiàn)引力波和 2019 年黑洞成像的記錄。Pérez 表示:「我們能為這些項(xiàng)目做出一點(diǎn)貢獻(xiàn)也是非常有意義的」。
快速學(xué)習(xí)器:AlexNet(2012)
人工智能(AI)可分為兩類,一類使用編碼規(guī)則,另一類讓計(jì)算機(jī)通過(guò)模擬大腦的神經(jīng)結(jié)構(gòu)來(lái)「學(xué)習(xí)」。多倫多大學(xué)計(jì)算機(jī)科學(xué)家、圖靈獎(jiǎng)獲得者 Geoffrey Hinton 表示:「幾十年來(lái),人工智能研究者一直將第二種研究方法視為『荒謬』」。2012 年,Hinton 的研究生 Alex Krizhevsky 和 Ilya Sutskever 證明了事實(shí)并非如此。
在當(dāng)年的 ImageNet 的年度競(jìng)賽上,研究者們被要求在包含 100 萬(wàn)張日常物品圖像的數(shù)據(jù)庫(kù)上訓(xùn)練 AI,然后在另一個(gè)圖像集上測(cè)試算法。Hinton 表示:「在當(dāng)時(shí),最佳算法會(huì)在 1/4 的圖像上出現(xiàn)分類錯(cuò)誤」。Krizhevsky 和 Sutskever 開發(fā)的 AlexNet 是一種基于神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)算法,該算法將誤差率降至 16%。Hinton 表示:「我們幾乎將誤差率降低了一半」。
Hinton 認(rèn)為,該團(tuán)隊(duì)在 2012 年的成功反映出足夠大的訓(xùn)練數(shù)據(jù)集、出色的編程和圖形處理單元(最初為了提高計(jì)算機(jī)視頻性能的處理器)新力量的結(jié)合。他表示:「突然之間,我們就能夠?qū)⒃撍惴ǖ乃俣忍岣?30 倍,或者說(shuō)可以學(xué)習(xí) 30 倍的數(shù)據(jù)」。
Hinton 表示真正的算法突破實(shí)際上發(fā)生在 3 年前。當(dāng)時(shí)他的實(shí)驗(yàn)室創(chuàng)建了一個(gè)比幾十年來(lái)不斷完善的傳統(tǒng) AI 更能準(zhǔn)確識(shí)別語(yǔ)音的神經(jīng)網(wǎng)絡(luò)。雖然準(zhǔn)確率只稍微提升了一點(diǎn),但已值得被記住。
AlexNet 及相關(guān)研究的成功帶來(lái)了實(shí)驗(yàn)室、臨床等多個(gè)領(lǐng)域深度學(xué)習(xí)的興起。它讓手機(jī)能夠理解語(yǔ)音查詢,也讓圖像分析工具能夠輕松地從顯微照片中挑選出細(xì)胞。這就是 AlexNet 在改變科學(xué)、改變世界的工具中占有一席之地的原因。
除了以上這些項(xiàng)目之外,入選該榜單的代碼還包括生物數(shù)據(jù)庫(kù)、大氣環(huán)流模型、圖像處理軟件 NIH Image / ImageJ / Fiji 和生物大分子序列比對(duì)搜索工具 BLAST。感興趣的同學(xué)可以去閱讀原文。