站在地圖的邊緣
你已爬完整道階梯。底層是浮點數與條件數;中段是線性系統、特徵值與最小平方法;接著是求根、內插、數值積分與時間步進;再往上則是偏微分方程求解器、最佳化、快速傅立葉轉換、蒙地卡羅,以及高效能運算。本級前四篇把這一切都派上了用場——用在流體與天氣、用在金錢、用在通往機器學習的雙向橋上。最後這一篇,氣質不同:它不是一個新方法,而是往地圖邊緣外的一次眺望,看看這個領域此刻正在角力的活生生問題。前面每一級那份誠實的主題,一路延伸到了前沿——它們之所以是未解難題,恰恰是因為還沒有人知道那個乾淨的答案。
三股大潮流界定了今日的前沿,這篇接下來的部分將逐一拆解。第一股是純粹的規模:電腦已跨進一個新境地,在那裡,關於什麼算快、什麼算慢的舊直覺,乾脆就崩潰了。第二股是演算法設計裡一場安靜的革命——我們越來越願意賭一把,用一個保證正確的答案,去換一個算得快得多、而且很可能正確的答案。第三股則是 AI 為科學的浪潮,它正在改寫某些問題究竟該如何被解開。墊在這一切之下的,是一個發人深省的提醒:根基尚未完工——這份提醒,由我們將在最後遇見的一道著名未解方程所具體承載。
前沿一:規模,以及浮點運算量為何不再是重點
如今最大的機器已達百萬兆級運算——每秒約 10^18 次浮點運算,也就是十億個十億。這個數字大到不再直觀,但它所開啟的前沿,其實並不在於做更多算術。正如高效能運算那一級所警告的,在真實硬體上,多數科學核心是受記憶體所限的,而非受計算所限:處理器枯坐著等資料從主記憶體送來,被快取未命中扼住喉嚨,而不是被那些乘法與加法本身的代價拖住。Roofline 圖把這點說得很具體——一個算術強度低(每抓進一個位元組只做幾次浮點運算)的核心,無論你丟進多少核心,都被記憶體頻寬封了頂。
規模還逼出了第二道、更難對付的天花板:平行性並不會永遠倍增。Amdahl 定律說,就算你程式裡只有一小部分是本質上序列的,那一小部分也會為總加速封頂,無論你再加多少處理器。假設 95% 的工作能完美平行、5% 不能;那麼即便有無窮多核心,你最多也只能達到 20 倍的加速,因為那頑固的 5% 永遠不會縮小。所以百萬兆級的前沿,與其說是一場爭奪浮點運算量的競賽,不如說是一場對抗序列瓶頸、資料搬移與同步的戰鬥——正是這些東西,攔著上百萬個核心不能同時開工。設計出能把通訊(而非算術)降到最低的演算法,是這個領域最熱門的問題之一。
前沿二:何時值得賭一把
資料時代丟給我們的矩陣,大到根本無法用經典的、確定性的常規方法去分解——一百萬乘一百萬,遠超過高斯消去法或完整 SVD 在任何機器上所能應付的。前沿的答案是隨機化數值線性代數:刻意注入隨機性,去換一個有高機率被證明準確、卻算得比精確解快上一大截的答案。其旗艦是隨機化 SVD。你不去碰整個矩陣,而是把 A 乘上一個小的隨機矩陣,去勾勒它的作用,捕捉 A 較大的那少數幾個方向,然後只在那個小小的草圖上去做昂貴的線性代數。
這之所以行得通,是因為實務上重要的矩陣幾乎都是低秩的:它們幾乎全部的資訊,都活在屈指可數的幾個主導方向裡,其餘的則是雜訊。隨機草圖能廉價地找到那些方向,而所得的近似,是最佳的低秩擬合,誤差在一個小而可控的倍數之內。你所做的這筆交易是明確而誠實的——你放棄了精確答案的保證,換來一個機率性的答案。運氣不好時,一張差勁的隨機草圖可能漏掉某些東西,但失敗的機率小到呈指數級,而且你只要多勾勒幾個額外的欄,就能把它壓得更低。對一個十億列的資料矩陣而言,這幾乎總是一筆值得做的交易。
隨機化所重塑的,不只是 SVD。如今「先草圖、再求解」的想法加速了最小平方法問題,而降維的手法則讓你能把一個高維資料集投影到少得多的維度裡,同時近似地保住每一對點之間的距離。這套思維與經典的那一套,是貨真價實的決裂。前面那幾級珍視的,是每次運行都回傳同一個精確答案的演算法;而前沿則越來越主張,對龐大的問題而言,一個以 0.9999999 機率正確的快答案,勝過一個精確正確卻要等到下週才送達的慢答案——前提是你對自己下的這場賭注,始終保持誠實。
前沿三:AI 為科學,炒作與實質
前沿上聲量最大的一股潮流是 AI 為科學:運用學習得來的模型,不只是去加速舊有的模擬,更是在根本沒有可解方程的地方做出預測。前一篇搭起了那座雙向橋——數值方法透過最佳化、自動微分與 GPU 驅動機器學習,而科學機器學習則藉由加速求解器把這份人情回報回去。前沿把那座橋延伸了出去。一個神經網路能學會從一條蛋白質的胺基酸序列預測它摺疊後的形狀,或是提議新的材料——在那些從頭寫下並求解控制方程已然無望的境地裡。當這個模型奏效時,一個過去要實驗室花上數月的問題,便塌縮成幾秒鐘的一次前向傳遞。
但前沿既令人振奮,也同樣被過度炒作,而一個具備數值素養的人,會同時握住這兩個真相。一個物理啟發神經網路把控制方程烤進它的損失函數裡,使網路因尊重物理(而非只是擬合資料)而獲得獎勵——這是一個漂亮的想法,卻可能訓練起來很脆弱,而且當它奏效時,往往不過是追平了一個你本來從一開始就能信賴的經典求解器。更深一層的警惕,來自最佳化與內插那兩級:一個神經網路骨子裡是一個內插器,在訓練資料之外毫無保證。要它外推到一個它從未見過的境地,它可能無聲而自信地失敗,產出一個看似合理、卻根本錯誤的答案——而且不像經典格式,它身上沒有 O(h^p) 的誤差界來向你示警。
所以務實的姿態是擴增,而非取代。最持久的勝利來自混合體:一個學習得來的代理模型,去處理一場計算裡輕鬆的大宗,而一個受信賴的經典求解器則守住那些非對不可的部分;或是用一個網路給出一個極好的初始猜測,再交給一個經過驗證的反問題求解器去精修。而貫穿整門學問的那份誠實,在這裡同樣鏗鏘有力地適用——一個你無法驗證或確認的結果,就還不是一個結果,無論產出它的模型有多麼令人印象深刻。
尚未完工的根基,與一道百萬美元的方程
若能以「根基全已底定、只剩工程待辦」來收尾,會是個齊整的故事。但那不是真相。墊在你所學那些方法底下的某些問題,是貨真價實地懸而未決——不只是實務上尚未解決,而是原則上尚未被證明。最乾淨也最令人吃驚的例子,就藏在本級點名的第一個應用裡:流體運動的方程。
這是用來收尾的完美象徵,因為它把整門學問的脾性結晶了出來。計算數學的方法在實務上運作得驚人地好——它們讓飛機飛行、預報風暴、為投資組合定價、重建你身體的內部——而與此同時,對「我們究竟證明了什麼」保持一份深刻的謙卑,從來都不會不合時宜。一場模擬產出的每一個數字,依然是近似;浮點數依然不是真正的算術;準確度依然是條件數乘以穩定度;而在這個領域最常被使用的那條方程底下某處,依然坐著一個價值百萬美元、無人能答的問題。
再往更遠處看,地平線上等著一種新的硬體:量子電腦對某些有結構的問題承諾了原則上能超越任何經典做法的量子線性代數演算法。那份承諾能否熬過雜訊與錯誤更正的殘酷現實,本身就是一個未解的問題——這很貼切,畢竟這條前沿界定自身的那份誠實,正是去頌揚行得通的東西,同時拒絕假裝那些難題已被解決。你已登上這道階梯的頂端;從這裡望出去,是一個仍在被建造中的領域。歡迎來到邊緣。