一座橋,兩個方向的車流
本級的開篇曾給過你一瞥這門學問與機器學習之間那座橋的、僅僅一段話的剪影。在這裡,我們要慢慢地把它走過一遍,因為這是當今計算數學裡發生的、最有分量的一件事——也因為幾乎每個人都把它誤讀成一條單行道。他們只看見機器學習正當紅、而數值方法很老,便下了結論說一個正在取代另一個。真相是一座貨真價實的雙向橋:車流雙向往來,而少了任何一側,另一側都站不住。整趟橫越的名字,叫做科學機器學習,簡稱 SciML。
由左往右過橋,標語是數值方法在驅動機器學習:把品牌外衣從一個神經網路上剝掉,剩下的就是最佳化、自動微分與稠密線性代數——正是前面各級的機具。由右往左過橋,標語則翻轉成神經網路在加速科學計算:一個訓練好的模型,能頂替一個原本要讓超級電腦算上好幾天的求解器。誠實的讀法,是把這兩句標語同時收在眼裡。我們會逐一走過每個方向,再走到兩條車道匯合之處——反問題——最後以「這座橋做不到什麼」作結。
由左往右:數值方法是機器學習的機房
訓練一個神經網路,在數學上就是一個無約束最佳化:挑出那數百萬個權重 w,去極小化一個損失函數 L(w),它衡量網路把訓練資料擬合得有多糟。這正是最佳化那一級裡的問題形狀,只是放大到了龐然的規模。要極小化,你就下降:朝著負梯度方向往下坡走一步,w_{n+1} = w_n - step * gradient。每一個著名的訓練演算法——SGD、動量法、Adam——都是你早已研讀過的最陡下降想法的某種變奏,盛裝打扮起來,去應付吵雜的梯度與彆扭的損失地景。
可是下降需要 L 對那數百萬個權重中每一個的梯度,而你既無法手算、也無法用有限差分求得。對一個有數百萬參數的網路而言,手算毫無指望;有限差分則要為每一個權重付出一次完整的網路求值,更糟的是,它還受步長權衡之苦——h 取太大,你得到截斷誤差;取太小,捨入誤差又把答案淹沒。脫身之道是自動微分:藉著沿計算圖機械式地施用連鎖律,反向模式的自動微分把整個梯度——全部上百萬個分量——以與一次前向傳遞相當的成本一併送回。反向模式的自動微分,正就是深度學習所稱的反向傳播。它並非由機器學習世界發明;它在科學計算裡長大成人,早就在架上等著了。
那麼每一層究竟在算什麼?一個矩陣與向量的乘積,後面接上一個簡單的非線性。所以訓練的內層迴圈,是滿滿一整面的數值線性代數——稠密矩陣相乘,成批跑在 GPU 上,而 GPU 不過就是為了把那些乘法做得快,而打造的非常寬的引擎。這正是為什麼 HPC 那一級的兩句誠實叮嚀,可以原封不動地搬過來。其一,一個大的矩陣相乘往往是受記憶體所限的:被資料從記憶體穿過快取串流的速度所限,而非被浮點運算量所限,所以一個核心可以跑得遠低於晶片的峰值。其二,每一個權重都是一個浮點數(在機器學習裡,通常是較低精度的那種),所以訓練也繼承了捨入誤差,而「加法不滿足結合律」這件事,意味著把一百萬個梯度項以不同的順序相加,會給出一個略有不同的答案。
由右往左:學著當求解器的網路
現在,走回來。那條五步模擬流程線可以慢得殘酷:單單一次高保真度的 CFD 或分子動力學運行,就能佔住一台超級電腦好幾天。算一次,這代價還算公道,但當你必須把同一類問題跑上千次時——把一個機翼掃過一萬種形狀去最佳化它,或藉著用許多隨機輸入反覆重跑來傳播不確定性——它就成了傾家蕩產的開銷。橋上整條由右往左的車道,存在的目的就是打破這個迴圈,而它提供了三種愈來愈大膽的策略。
最溫和的策略,保留經典求解器,只去壓縮它的輸出。一個降階模型利用了一個安靜的事實:儘管一場模擬可能扛著數百萬個未知數,它的解卻很少在那全部的維度裡遊蕩——它們聚攏在一張薄薄的、低維的曲面附近。於是你把那昂貴的求解器跑上少少幾次,把得出的解快照當成一個矩陣的各個欄堆疊起來,再取它的奇異值分解。少數幾個領頭的奇異向量,構成一組小小的基底,攫取住本質性的運動;接著你把控制方程投影到那組基底上,去解一個只有幾十個、而非幾百萬個未知數的問題。正是低秩那一級裡「奇異值分解再截斷」的同一招,如今替你買來了一個取代數日運行的、毫秒級的代理。
再大膽些,你可以乾脆用一個訓練好的網路把求解器整個換掉。一個物理啟發神經網路,簡稱 PINN,是其中優雅的版本:用一個網路來表示未知的解 u(x, t),而由於自動微分能對網路輸出相對於其輸入取精確的導數,你便能把網路直接插進微分方程裡,並在一撒的取樣點上量測殘差——也就是它離滿足那方程還有多遠。把那殘差加進損失,訓練本身就逼著網路去服從物理,而不只是去擬合資料。更大膽的,則是神經算子,它學的不是一個由數字到數字的映射,而是一個由一整個函數到一整個函數的映射:餵它任意一個初始條件,它便送回整個解的場——它早已在許多由可信賴的經典求解器所生成的輸入—輸出對上,訓練過一回了。
車道匯合之處:反問題與資料同化
有一種問題形狀,讓橋上兩條車道同時忙碌起來,而它是整個應用計算裡最重要的問題之一:反問題。一個正問題由因跑向果——給定機翼形狀,算出氣流。一個反問題則倒著跑——給定量測到的果,回推因。一台 CT 掃描儀從不替你的體內拍照;它從數百個角度量測每束 X 光被減弱了多少,再必須重建出那些恰好能投出這些陰影的密度分布。從地震回波回推地下的油藏、或從一個材料如何振動回推它的性質,都是這同一種倒著跑的形狀。
反問題通常是不適定的:量測裡微小的雜訊,可以爆炸成回推出的因裡狂亂的擺盪——這正是病態問題的定義,其中一個接近 10^8 的條件數,會悄悄吃掉你約十六位雙精度數字裡的大約八位。所以你絕不能天真地去解它們。解藥是加進先驗知識——一種對光滑或簡單的解的偏好——透過 Tikhonov 正則化,正是最小平方法那一級的同一件工具,它用對吵雜資料的一點點忠實度,去換來大量的穩定性。在這裡,誠實尤其要緊:一個被正則化的重建,是一個與資料相符的、貌似合理的答案,而不是那唯一的真理,而換掉先驗,圖像就跟著變。
反問題那動態、永不止息的版本,是資料同化:你有一個把某系統向前行軍的模型——大氣、海洋、一具太空船的軌道——以及在它運行時,一道吵雜、不完整的量測之流陸續抵達。模型與資料總是不一致,所以你必須不停地把它們融合。原則是一個加權的折衷:用與各自不確定性成反比的程度去信任每個來源,於是一個精準的感測器,把估計強力地拉向自己,而一個模糊的,幾乎推不動它。把這包進一個整齊的「先預測、再修正」迴圈裡,就是卡爾曼濾波器——那帖把你手機抖動的 GPS 平滑成一顆滑行藍點的食譜,也正是當年把阿波羅引向月球的同一帖。它也正是衛星觀測被摺進你每天早晨讀到的天氣預報的方式,把本篇直接繫回了本級的第二篇。
這座橋做不到什麼
每一趟對 SciML 誠實的巡禮,都必須以它的極限作結,因為炒作會把這些跳過去。最深的一點:一個訓練好的網路,本質上是一個在訓練資料之外毫無保證的內插器。一個經典求解器帶著一個被證明過的收斂階——把網格加密,誤差便可證地以 O(h^p) 縮小——而你能跑一場驗證研究去確認它。一個神經代理則不帶這樣的承諾。在它受訓的那片區域之內,它可以好得出奇;把輸入推到那片區域之外,它卻可能既自信又無聲地失敗,送回一個光滑、貌似合理、卻錯誤的答案,沒有半面警告旗。解方不是信仰,而是你早已熟知的紀律:只要做得到,就拿去和那個可信賴的經典求解器確認。
也請留意,這座橋從未讓機器學習逃出數值數學——它只是把數值數學往下埋了一層。訓練一個 PINN,你依然在做最佳化、依然在用自動微分算梯度、依然在解線性系統、依然與浮點捨入和條件數共處。隨機梯度下降甚至繼承了取樣那一級的蒙地卡羅性格:它對損失的估計是吵雜的,因為它用的是隨機的小批次,所以它的準確度只緩慢地改善,大致以批次大小的 O(1/sqrt(N)) 在進步。網路並不取代這門學問的根基;它站在那些根基之上——而這正是為什麼一門計算數學的課,是為現代 AI 所做的正確準備,而非它一個過時的替代品。
所以這座橋,最好被想成一場夥伴關係,而非一場接管。數值方法給機器學習它的機房——最佳化、自動微分,以及那少了它便沒有任何網路能訓練的、由 GPU 驅動的線性代數。機器學習則給數值方法一具渦輪增壓器——把負擔不起的模擬,變成互動式模擬的代理與算子。下一篇也是最後一篇,將通向這座橋所屬的、更廣闊的前沿——百萬兆級的機器、隨機化演算法、宏觀的「AI 為科學」,以及那些讓整個領域保持誠實的未解難題——但從這裡要帶著向上走的教訓很簡單:這兩者是同一門技藝,從一道跨距的兩端望去的兩個樣子。