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