科學計算實務:軟體、驗證與可重現性

不確定性量化(uncertainty quantification)

/ you-kew /

每個模擬都吃進輸入、產出一個輸出:餵進材料性質、荷載與參數,出來一個預測的應力、溫度或價格。但輸入從來都不是被精確知道的——量到的剛度有誤差範圍,某個參數只是估計值,餵給模型的天氣預報本身就充滿不確定。不確定性量化(UQ)就是把那個輸入的不確定性帶著穿過模擬,並把它報告在輸出上的學問,這樣你產出的不是一個光禿禿的數字,而是一句誠實的陳述:「答案是 42,正負 5,分佈如此」。在本領域看來,一個沒有附上不確定性的計算預測,只算半個結果。

核心任務是前向傳播:給定不確定輸入的一個分佈,輸出的分佈會是什麼?最簡單而穩健的工具是蒙地卡羅:從輸入的分佈中抽出許多隨機樣本,在每一個樣本上執行完整的模擬,再看輸出的散佈——它的平均值估計期望答案,它的標準差估計不確定性。蒙地卡羅好在極其通用(它把模擬當成黑盒子),但它的誤差只以 1/sqrt(N) 下降,所以把誤差減半要花四倍的樣本——不過關鍵是,那個速率與不確定輸入的個數無關,這正是蒙地卡羅在高維度中勝出的原因。當模擬是光滑的、不確定輸入又少時,多項式混沌(polynomial chaos)與其他隨機展開方法,可以藉由建立一個捕捉輸出如何依賴輸入的代理模型,收斂得快得多。與傳播並肩的是「敏感度分析」——究竟是哪些輸入真正驅動了輸出的不確定性——它告訴你該把降低不確定性的力氣花在哪裡。

UQ 是把一個數字變成證據的東西,它也接上了前向與反問題這更廣的版圖。一個「前向」問題把已知輸入推向一個輸出;UQ 的前向傳播為它加上誤差範圍。一個「反」問題反向而行——從觀測資料推斷不確定的參數——它的輸出自然也是不確定的,在貝氏框架下往往用一個後驗分佈來描述。誠實的告誡:UQ 傳播的是你「建模了」的那些不確定性,不是你忘掉的那些——一個未被建模的偏差,或一個對輸入分佈的錯誤假設,無論計算得多麼細心,都不會出現在誤差範圍裡。垃圾假設進去,看起來很有自信的垃圾誤差範圍出來。而且 UQ 量化的是不確定性;它本身並不認證模擬已被驗證或模型已被確認——那些必須先被確立,誤差範圍才有意義。

一根樑的預測撓度,取決於它的彈性模量 E,而 E 只知道是 200 GPa 正負 10 GPa。蒙地卡羅 UQ 從那個分佈中抽出 10000 個隨機的 E 值,在每一個上執行撓度模型,並報告輸出的散佈:撓度 2.0 mm,標準差 0.1 mm。想單靠取樣把那個輸出不確定性的條子減半?你大約需要四倍的樣本——這就是 1/sqrt(N) 的稅。

蒙地卡羅把一個輸入的分佈推過模型,得到一個輸出的分佈。

UQ 只傳播你真正建模了的那些不確定性。一個未被建模的偏差或一個錯誤的輸入分佈,會給出看起來很有自信、但本身就是錯的誤差範圍——而且 UQ 預設程式已被驗證、模型已被確認。

又稱
UQuncertainty propagation不確定性傳播誤差傳播分析