Nature盤點:從Fortran、arXiv到AlexNet,這些程式碼改變了科學界

機器之心發表於2021-01-21

從 Fortran 編譯器到 arXiv 預印本庫、AlexNet,這些計算機程式碼和平臺改變了科學界。

2019 年,「事件視界望遠鏡」團隊拍下了第一張黑洞照片。這張照片並非傳統意義上的照片,而是計算得來的——將美國、墨西哥、智利、西班牙和南極多臺射電望遠鏡捕捉到的資料進行數學轉換。該團隊公開了所用程式碼,使科學社群可以看到,並基於此做進一步的探索。

而這逐漸成為一種普遍模式。從天文學到動物學,每一個偉大的現代科學發現背後都有計算機的身影。史丹佛大學計算生物學家、2013 年諾貝爾化學獎獲得主 Michael Levitt 表示,現在的膝上型電腦在記憶體和時鐘速度方面是 1967 年其實驗室計算機的一萬倍。「今天,我們擁有大量算力。但問題是,這仍然需要人類的思考。」

如果沒有能夠處理研究問題的軟體以及知道如何編寫和使用軟體的研究人員,計算機再強大也是無用。「現在的研究與軟體緊密相關,軟體已經滲透到科研的方方面面。」軟體可持續性研究所(Software Sustainability Institute)負責人 Neil Chue Hong 如是說。

最近,Nature 上的一篇文章試圖揭示科學發現背後的重要程式碼,正是它們在過去幾十年中改變了科研領域。這篇文章介紹了對科學界帶來重大影響的十個軟體工具,其中就包括與人工智慧領域密切相關的 Fortran 編譯器、arXiv、IPython Notebook、AlexNet 等。

Nature盤點:從Fortran、arXiv到AlexNet,這些程式碼改變了科學界

語言先驅:Fortran 編譯器(1957)

首批出現的現代計算機對使用者並不友好。程式設計實際上是由手工完成的,透過電線連線一排排電路。後來的機器語言和組合語言允許使用者使用程式碼進行計算機程式設計,但這兩種語言依然要求使用者對計算機架構有深入瞭解,導致很多科學家無法使用它們。

20 世紀 50 年代,隨著符號語言的發展,尤其是「公式翻譯」語言 Fortran 的出現,上述境況發生了改變。Fortran 語言由 IBM 的約翰 · 巴科斯(John Backus)團隊開發。藉助 Fortran,使用者可以使用 x = 3 + 5 等人類可讀的指令進行計算機程式設計,之後編譯器將這類指令轉化為快速高效的機器碼。

Nature盤點:從Fortran、arXiv到AlexNet,這些程式碼改變了科學界

這臺使用 Fortran 編譯器程式設計的 CDC 3600 計算機於 1963 年移送至美國國家大氣研究中心。(圖源:美國大氣科學研究大學聯盟 / 科學圖片庫。)

在早期,程式設計人員使用穿孔卡片(punch card)輸入程式碼,複雜的模擬可能需要數萬張穿孔卡片。不過,Fortran 使得並非電腦科學家的研究者也能夠進行程式設計。普林斯頓大學氣候學家 Syukuro Manabe 表示:「我們第一次靠自己進行程式設計。」他和同事使用 Fortran 語言開發了首批成功的氣候模型之一。

60 多年過去了,Fortran 依然廣泛應用於氣候建模、流體動力學、計算機化學,以及其他涉及複雜線性代數並需要強大計算機快速處理數字的學科。Fortran 程式碼執行速度很快,仍然有很多程式設計人員知道如何寫 Fortran。古老的 Fortran 程式碼庫依然活躍在世界各地的實驗室和超級計算機上。

訊號處理器:快速傅立葉變換(1965)

當天文學家掃描天空時,他們捕捉到了隨時間變化的複雜訊號的雜音。為了理解這些無線電波的性質,他們需要觀察這些訊號作為頻率函式的樣子。一種被稱為傅立葉變換(Fourier transform)的數學過程允許科學家實現這一點。但問題在於傅立葉變換並不高效,對大小為 N 的資料集它需要進行 N 次運算。

1965 年,美國數學家 James Cooley 和 John Tukey 開發了一種加速傅立葉變換過程的方法。藉助遞迴(recursion)這種「分而治之」的程式設計方法(其中演算法可以實現重複地再運用),快速傅立葉變換(fast Fourier transform, FFT)將計算傅立葉變換問題簡化為 N log_2(N) 個步驟。速度也隨著 N 的增加而提升。對於 1000 個點,速度提升約 100 倍;對於 100 萬個點,速度提升約 5 萬倍。

牛津大學數學家 Nick Trefethen 表示,FFT 的發現實際上是一種「再發現」,因為德國數學家卡爾 · 弗里德里希 · 高斯在 1805 年就完成了該發現,不過從未發表。但是,James Cooley 和 John Tukey 開啟了 FFT 在數字訊號處理、影像分析和結構生物學等領域中的應用。Trefethen 認為 FFT「是應用數學與工程領域偉大的發現之一。」FFT 已經在程式碼中實現了很多次,其中一種流行的變體是 FFTW(「西方最快的傅立葉變換」)。

Nature盤點:從Fortran、arXiv到AlexNet,這些程式碼改變了科學界

默奇森天文望遠鏡,使用快速傅立葉變換來收集資料。

勞倫斯伯克利國家實驗室(Lawrence Berkeley National Laboratory)分子生物物理學和綜合生物成像部門主任 Paul Adams 回憶稱,當他在 1995 年改進細菌蛋白 GroEL 的結構時,即使使用 FFT 和一臺超級計算機,也需要「很多很多個小時,甚至是幾天」的計算。但要沒有 FFT,很難想象這件事要怎麼做,花的時間將難以估量。

線性代數運算標準介面:BLAS(1979)

科學計算通常涉及使用向量和矩陣的數學運算,這些運算相對簡單,但計算量大。20 世紀 70 年代,學界並沒有出現一套普遍認可的執行此類運算的工具。因此,科研工作者不得不花費時間設計高效的程式碼來做基礎的數學運算,導致無法專注於科學問題本身。

程式設計世界需要一個標準。1979 年,基礎線性代數子程式庫(Basic Linear Algebra Subprograms, BLAS)應運而生。直到 1990 年,該標準仍然在發展變化,定義了數十條涵蓋向量和矩陣運算的基本程式。

田納西州大學電腦科學家、BLAS 開發團隊成員之一 Jack Dongarra 表示,BLAS 實際上將矩陣和向量運算簡化成了像加減法一樣的基礎計算單元。

Nature盤點:從Fortran、arXiv到AlexNet,這些程式碼改變了科學界

Cray-1 超級計算機。(圖源:科學歷史影像 / Alamy)

德州大學奧斯汀分校電腦科學家 Robert van de Geijn 表示:「BLAS 可能是為科學計算而定義的最重要介面。」除了為常用函式提供標準名稱之外,研究者可以確保基於 BLAS 的程式碼能夠以相同的方式在任何計算機上執行。該標準也使得計算機制造商能夠最佳化 BLAS 實現,以實現硬體上的快速執行。

40 多年來,BLAS 代表了科學計算堆疊的核心,使得科學軟體持續發展。喬治華盛頓大學機械與航空航天工程師 Lorena Barba 將 BLAS 稱為「五層程式碼內的核心機制」。

預印本平臺:arXiv.org(1991)

20 世紀 80 年代末,高能物理領域的研究者往往會把自己提交的論文郵寄給同行審閱,這是一種禮儀,但只郵寄給少數幾個人。「那些處於食物鏈底端的人依賴於頂端人的施捨,這往往會把非精英機構中有抱負的研究者完全排除在特權圈之外,」物理學家 Paul Ginsparg 曾在 2011 年的一篇文章中寫道。

1991 年,洛斯阿拉莫斯國家實驗室(Los Alamos National Laboratory)的 Ginsparg 寫了一個電子郵件自動回覆器,以建立公平的競爭環境。郵件訂閱者每天都會收到一份預印本列表,每份論文都帶有識別符號。如此一來,世界各地的使用者都可以透過一封電子郵件提交或檢索來自上述實驗室計算機系統的論文。

Ginsparg 原本計劃將文章保留三個月,將範圍限制在高能物理社群,但他的同事勸他去掉了這些限制。「就是在那一刻,它從佈告欄轉變成了檔案庫,」Ginsparg 表示。在這之後,大批論文開始湧入,其學科之廣遠遠超出了 Ginsparg 的預期。1993 年,Ginsparg 把這個系統移植到網際網路上。1998 年,他正式將該系統命名為 arXiv.org。

如今,30 歲的 arXiv 收錄了 180 萬份預印本文章,且全部免費閱讀,其每月論文提交量超過 15000 份,每月下載量高達 3000 萬次。「不難看出 arXiv 為何如此受歡迎,」Nature Photonics 的編輯曾表示,「該系統為研究者提供了一種快捷、方便的科研方式,可以告訴大家你在做什麼、什麼時間做的,省去了傳統期刊同行評審的繁瑣。」

Nature盤點:從Fortran、arXiv到AlexNet,這些程式碼改變了科學界

該網站的成功還對生物學、醫學、社會學等其他學科類似儲存庫的建立起到了助推作用,成千上萬份新冠病毒相關研究預印本的釋出就是一個例證。

資料探索器:IPython Notebook (2011)

Fernando Pérez 在 2001 年決定「探尋拖延症」,當時他是一名研究生,決定採用 Python 的核心元件。

Python 是一種解釋型語言,意味著程式會一行一行地執行。程式設計人員可以使用一種被稱為「讀取 - 求值 - 輸出迴圈(REPL)」的計算型呼叫和響應(call-and-response)工具,他們可以鍵入程式碼,然後由直譯器執行程式碼。REPL 允許快速探索和迭代,但 Pérez 指出 Python 並不是為科學構建的。例如,它不允許使用者輕鬆地預載入程式碼模組或保持資料視覺化的開啟狀態。因此 Pérez 建立了自己的版本。

2001 年 12 月,Pérez 釋出了互動式 Python 直譯器 IPython,它共有 259 行程式碼。10 年後,Pérez 和物理學家 Brian Granger、數學家 Evan Patterson 合作,將該工具遷移到 Web 瀏覽器,建立了 IPython Notebook,掀起了一場資料科學的革命。

和其他計算型 notebook 一樣,IPython Notebook 將程式碼、結果、圖形和文字組合到了單個文件中。但與其他此型別專案不同的是,IPython Notebook 是開源的,歡迎廣大社群開發者為其發展做出貢獻,並且支援 Python 這種科學家常用的語言。2014 年,IPython 演變成 Project Jupyter,支援約 100 種語言,並允許使用者像在自己計算機上一樣輕鬆地在遠端超級計算機上探索資料。

Nature 在 2018 年指出:「對資料科學家而言,Jupyter 已經成為一種實際標準」。那時,GitHub 上已經有 250 萬個 Jupyter notebook,如今已有近一千萬個,其中包括 2016 年發現引力波和 2019 年黑洞成像的記錄。Pérez 表示:「我們能為這些專案做出一點貢獻也是非常有意義的」。

快速學習器:AlexNet(2012)

人工智慧(AI)可分為兩類,一類使用編碼規則,另一類讓計算機透過模擬大腦的神經結構來「學習」。多倫多大學電腦科學家、圖靈獎獲得者 Geoffrey Hinton 表示:「幾十年來,人工智慧研究者一直將第二種研究方法視為『荒謬』」。2012 年,Hinton 的研究生 Alex Krizhevsky 和 Ilya Sutskever 證明了事實並非如此。

在當年的 ImageNet 的年度競賽上,研究者們被要求在包含 100 萬張日常物品影像的資料庫上訓練 AI,然後在另一個影像集上測試演算法。Hinton 表示:「在當時,最佳演算法會在 1/4 的影像上出現分類錯誤」。Krizhevsky 和 Sutskever 開發的 AlexNet 是一種基於神經網路深度學習演算法,該演算法將誤差率降至 16%。Hinton 表示:「我們幾乎將誤差率降低了一半」。

Hinton 認為,該團隊在 2012 年的成功反映出足夠大的訓練資料集、出色的程式設計和圖形處理單元(最初為了提高計算機影片效能的處理器)新力量的結合。他表示:「突然之間,我們就能夠將該演算法的速度提高 30 倍,或者說可以學習 30 倍的資料」。

Hinton 表示真正的演算法突破實際上發生在 3 年前。當時他的實驗室建立了一個比幾十年來不斷完善的傳統 AI 更能準確識別語音的神經網路。雖然準確率只稍微提升了一點,但已值得被記住。

AlexNet 及相關研究的成功帶來了實驗室、臨床等多個領域深度學習的興起。它讓手機能夠理解語音查詢,也讓影像分析工具能夠輕鬆地從顯微照片中挑選出細胞。這就是 AlexNet 在改變科學、改變世界的工具中佔有一席之地的原因。

除了以上這些專案之外,入選該榜單的程式碼還包括生物資料庫、大氣環流模型、影像處理軟體 NIH Image / ImageJ / Fiji 和生物大分子序列比對搜尋工具 BLAST。感興趣的同學可以去閱讀原文。

原文連結:https://www.nature.com/articles/d41586-021-00075-2


相關文章