Nelder-Mead 法(Nelder-Mead method)
/ NEL-der MEED /
如果你想最小化一個函數,卻沒有它斜率的公式——只有一個黑箱,給它一個輸入、它回傳一個數(也許來自實驗、模擬或雜亂的程式碼)呢?你算不出梯度,所以梯度下降與牛頓法都用不上。Nelder-Mead 法正是解這個:它只用函數「值」來最小化,讓一個柔軟的形狀像變形蟲一樣摸索著爬下地形。
那個「形狀」是一個單純形——對 n 個變數,是一個有 n+1 個頂點的圖形(二維是三角形、三維是四面體)。每一步方法在所有頂點計算 f,找出「最差」(最高)的那個,並試著把它穿過對面把它改善:它把最差頂點「反射」到單純形的另一側;若該點極佳就再「擴張」;若反射不佳就向內「收縮」;若都無濟於事就把整個單純形朝最佳頂點「縮小」。透過這四個動作——反射、擴張、收縮、縮小——單純形翻滾、伸展、擠壓著朝極小前進,依地形調整自己的大小與形狀,全程不需要一個導數。
Nelder-Mead 受歡迎且廣泛使用,正因為它免導數、簡單,且對輕微雜訊穩健——很適合調校黑箱目標的少數幾個參數、校準模擬,或任何梯度不可得或不可靠的低維問題。誠實的限制很重要。它基本上「沒有」收斂保證:有記錄在案的例子顯示它收斂到非駐點(它可能停滯在遠離任何極小之處),且當單純形塌縮成低維的薄片時它會卡住。它擴展性「差」——只對小的 n(譬如至多 10 或 20 個變數)實用,在高維中單純形變得笨重。當導數「確實」可得時,基於梯度的方法快得多、也更有根據。Nelder-Mead 是免導數、低維問題的便利的最後手段,而非通用的優化器。
要最小化一個無導數可用、有雜訊的二維實驗產率 f(溫度, 壓力),從三個 (T, P) 試驗構成的三角形開始。計算三者,把產率最差的角越過另外兩個反射到一個新試驗,若極佳就擴張、若不佳就收縮。三角形朝最佳操作點爬行並重塑——純粹用函數值,沒有梯度。
一個單純形反射、擴張、收縮、縮小——不需要導數。
Nelder-Mead 沒有一般的收斂保證——它可能停滯在非駐點,且在約 10 到 20 個變數以上嚴重退化。只在導數確實不可得、且維度很小時使用它;若你能計算或自動微分出梯度,基於梯度的方法更快、也更有根據。