跳轉到

1990・BSDE 倒向方程:Pardoux–Peng 從終點倒著解#

「順著時間解方程是常識,倒著時間解方程是勇氣。」 本案時間:1990 年,地點:法國普羅旺斯與中國上海之間,報案人:非線性定價與隨機控制。

案件檔案 內容
案號 BSDE-1990-PP
年份 1990 年
主角 Étienne Pardoux、彭實戈(Shige Peng)
關鍵文獻 Adapted Solution of a Backward Stochastic Differential Equation(1990)
涉案對象 倒向方程 \(Y\) 、控制項 \(Z\) 、生成元 \(f\) 、終值 \(\xi\)
核心證物 適應解存在唯一性、比較定理、非線性 Feynman–Kac 公式
關聯舊案 1949 年 Feynman–Kac 公式、1951 年 Itô 公式、1979 年鞅定價
遺產 \(g\) 期望、動態風險度量、Deep BSDE(2017)

案發現場#

1990 年前後,金融與控制同時撞上一堵牆。

選擇權定價遇到市場摩擦:稅、借貸利差、賣空限制一出現,Black–Scholes 的線性世界就裂開了。隨機控制遇到非線性哈密頓量:Pontryagin 最大值原理在隨機版裡卡住,因為將來的不確定性會不斷回頭干擾現在的決策。

古典的 SDE 都是「向前解」:給初值 \(X_0\) ,順著布朗運動 \(W\) 往前走。但定價問題天生是倒向的:到期日的 payoff 是已知的 \(\xi\) ,今天的價格 \(Y_0\) 才是未知數。1970 年代 Bismut 曾提出線性倒向方程的雛形,卻沒能處理非線性生成元 \(f\) 。

案發現場因此很詭異:終點有一具「屍體」——已知的終值條件 \(\xi\) ,偵探卻要倒著走回案發之初,把整條軌跡重建出來。而且重建的每一步都必須「適應」:在時刻 \(t\) ,只能用當時已知的資訊 \(\mathcal{F}_t\) ,不許偷看未來。

Pardoux 與彭實戈接下了這樁逆行之案。

偵查過程#

偵探先把倒向方程的標準形式釘在白板上。設終值 \(\xi\) 在時刻 \(T\) 已知,求適應過程對 \((Y, Z)\) 滿足:

\[ -dY_t = f(t, Y_t, Z_t)\,dt - Z_t\,dW_t \]
\[ Y_T = \xi \]

讀法是: \(Y\) 是價格或價值, \(Z\) 是對沖或控制敏感度, \(f\) 是非線性驅動項。微分式裡的 \(-dY\) 提醒全案倒著走, \(-Z\,dW\) 則是為了保持適應性而付出的鞅修正。

第一個難關是存在唯一性。古典 SDE 用 Picard 迭代向前壓縮,倒向世界能不能照抄?兩人證明:只要生成元 \(f\) 對 \((y, z)\) 滿足 Lipschitz 條件,且終值 \(\xi\) 平方可積,則適應解存在且唯一。關鍵武器是加權範數下的壓縮映射,權重 \(e^{\beta t}\) 中的常數 \(\beta\) 取得夠大,倒向的 Picard 迭代照樣收縮。

第二個難關是比較定理,這是全案最漂亮的指紋。若兩組數據滿足 \(\xi^1 \ge \xi^2\) 且 \(f^1 \ge f^2\) ,則解保持序關係 \(Y^1 \ge Y^2\) 。線性化後的差過程滿足線性 BSDE,配上 Girsanov 換測度,正部期望被壓成零,序關係得證。

下表整理本案的三件核心證物及其偵查意義:

證物 數學陳述 探案意義
存在唯一性 Lipschitz 下適應解 \((Y, Z)\) 唯一 倒著解合法,不會分岔出多重真相
比較定理 終值與生成元保序則解保序 價格單調、風險單調的理論地基
非線性 Feynman–Kac \(Y_t = u(t, X_t)\) 解半線性拋物 PDE 拋硬幣解 PDE 的非線性升級版

第三步是非線性 Feynman–Kac 公式。設正向擴散 \(X\) 滿足通常 SDE,倒向對 \((Y, Z)\) 以 \(X\) 為輸入,則函數 \(u(t, x)\) 滿足半線性偏微分方程:

\[ \partial_t u + \mathcal{L}u + f(t, u, \nabla u\,\sigma) = 0 \]

其中 \(\mathcal{L}\) 為擴散生成元。這是 1949 年 Feynman–Kac 公式的非線性續集:線性 PDE 靠期望表示,非線性 PDE 靠倒向方程表示。

一個極簡的驗屍例子:取 \(f = 0\) ,則方程退化為 \(Y_t = \mathbb{E}[\xi \mid \mathcal{F}_t]\) , \(Z\) 正是鞅表示定理給出的被積函數。非線性 \(f\) 的存在,讓條件期望彎曲成 \(g\) 期望,為後來的動態風險度量埋下伏筆。

結案報告#

1990 年一案,把「從終點倒著解」變成了嚴格數學。

直接影響先落在金融:摩擦市場的定價、美式選擇權的反射 BSDE、動態一致風險度量,全都住進倒向方程的房子。彭實戈進一步提出 \(g\) 期望:由生成元 \(g\) 驅動的非線性期望,線性期望只是 \(g = 0\) 的特例。

控制理論同樣受益。隨機最大值原理的伴隨方程,本質就是一個線性 BSDE;非線性 HJB 方程的機率表示,則交給非線性 BSDE 處理。前向與倒向在此牽手,形成正倒向系統(FBSDE)。

在歷史年表裡,本案上承 1949 年 Feynman–Kac,下啟 2017 年 Deep BSDE。高維 PDE 的神經求解器,正是把 BSDE 的正向模擬與倒向迴歸搬上深度網路。沒有 1990 年的立案,就沒有高維時代的破局。

案件狀態:已破案,倒行者留下路標,後來者皆可跟行。

證據與工具#

證物一,線性 BSDE 的顯式解。若 \(f(t, y, z) = \alpha_t y + \beta_t z + \varphi_t\) ,則解有閉式:

\[ Y_t = \mathbb{E}\left[\Gamma_{t,T}\,\xi + \int_t^T \Gamma_{t,s}\,\varphi_s\,ds \;\Big|\; \mathcal{F}_t\right] \]

其中隨機指數 \(\Gamma\) 由係數 \((\alpha, \beta)\) 經 Doléans 指數構造。這是驗證數值格式的標準真值。

證物二,常用生成元對照表:

生成元 \(f\) 對應故事 解的性質
\(0\) 無摩擦定價 \(Y\) 為鞅, \(Y_0 = \mathbb{E}[\xi]\)
\(-rY\) 固定利率折現 \(Y_0 = e^{-rT}\mathbb{E}^Q[\xi]\)
\(k\lvert Z\rvert\) 不確定波動/漂移 區間定價,次線性期望
二次增長 指數效用、熵風險 需 BMO 鞅技術,Kobylanski 1997

證物三,數值偵查手冊。倒向方程不便直接離散,標準流程是向後迴歸:從 \(Y_T = \xi\) 出發,逐步估計條件期望 \(\mathbb{E}[\cdot \mid \mathcal{F}_t]\) ,以最小二乘蒙地卡羅或神經網路逼近 \(Z\) 。對應程式 _code/1990-linear_bsde.py 可驗證線性案的迴歸誤差。

探員守則:遇到「已知未來、反求現在」的案子,先寫下終值,再問生成元,最後才追 \(Z\) 。倒著走,路才通。

補充:程式實作#

對應程式#

  • 1990-linear_bsde.py:以最小平方蒙地卡羅向後迴歸求解線性倒向方程,並與閉式解對照。

理論呼應#

本文標準形為 \(-dY_t = f(t, Y_t, Z_t)\,dt - Z_t\,dW_t\) 配終值 \(Y_T = \xi\) ,程式即取 \(f = -rY\) 的線性特例。 此時證物一的閉式解退化為 \(Y_t = E[\xi e^{-r(T-t)} \mid \mathcal{F}_t]\) ,程式所用向後 Euler 商式 \(Y_k = E[Y_{k+1} \mid \mathcal{F}_k]/(1 + r\,dt)\) 正是它的離散影子。 終值取 \(\xi = \sin(W_T)\) 時解析解為 \(Y_t = \sin(W_t)e^{-(r+1/2)(T-t)}\) ,特別有 \(Y_0 = 0\) ,故 \(Y_0\) 誤差與 \(t = 0.5\) 處 RMSE 可直接驗收比較定理與存在唯一性的數值兌現。

執行方式#

在 隨機微積分 目錄下執行 python3 _code/1990-linear_bsde.py 。

實測輸出#

Y0_true = 0.000000
Y0_lsmc = 0.002081
abs_err_Y0 = 0.002081 (tol 0.02)
RMSE@t=0.5 = 0.003550 (tol 0.05)
VERIFY Y0_abs_err=0.002081 rmse_half=0.003550

讀者實驗#

將年利率 r 由 0.05 改為 0.10 再重跑,觀察 \(Y_0\) 理論值仍為 \(0\) 而迴歸誤差是否維持在容忍帶內。

完整程式如下:

"""1990 線性 BSDE:最小平方蒙地卡羅 (LSMC) vs 解析解。
對應 wiki:Pardoux–Peng (1990) BSDE 解存在唯一;線性 BSDE 顯式解
  Y_t = E[ ξ * exp(-r(T-t)) | F_t ](此處 f = -rY, b = 0)。
本檔:終值 ξ = sin(W_T), T = 1, r = 0.05, W 為標準布朗運動。
解析:E[sin(W_T)|F_t] = sin(W_t) exp(-(T-t)/2),故
  Y_t = sin(W_t) exp(-(r+0.5)(T-t)),特別 Y_0 = 0。
數值:向後 Euler 隱式格式 Y_k = E[Y_{k+1}|F_k] / (1+r dt),
條件期望以 W_k 的 5 次多項式基函數最小平方迴歸近似。
驗證:Y_0 真值為 0,「誤差 < 2%」採絕對誤差 |Y0_hat| < 0.02
(尺度:ξ∈[-1,1],2% 尺度即 0.02);另檢 t=0.5 路徑 RMSE < 0.05。
只用 numpy,固定種子,不畫圖。
"""
import numpy as np

rng = np.random.default_rng(0)
r = 0.05
T = 1.0
N = 20
dt = T / N
M = 100000
DEG = 5

dW = np.sqrt(dt) * rng.standard_normal((M, N))
W = np.zeros((M, N + 1))
W[:, 1:] = np.cumsum(dW, axis=1)

Y_next = np.sin(W[:, N])
Y_at_half = None
HALF_K = N // 2  # t = 0.5

for k in range(N - 1, 0, -1):
    Wk = W[:, k]
    X = np.vander(Wk, DEG + 1, increasing=True)  # [1, w, ..., w^5]
    beta, *_ = np.linalg.lstsq(X, Y_next, rcond=None)
    Yk = (X @ beta) / (1.0 + r * dt)
    if k == HALF_K:
        Y_at_half = Yk.copy()
    Y_next = Yk  # Y_1 的各路徑估計

Y0_hat = float(np.mean(Y_next) / (1.0 + r * dt))
Y0_true = 0.0
abs_err = abs(Y0_hat - Y0_true)

# t = 0.5 解析解對照(非退化檢驗)
t_half = HALF_K * dt
Y_true_half = np.sin(W[:, HALF_K]) * np.exp(-(r + 0.5) * (T - t_half))
rmse_half = float(np.sqrt(np.mean((Y_at_half - Y_true_half) ** 2)))

print(f"Y0_true = {Y0_true:.6f}")
print(f"Y0_lsmc = {Y0_hat:.6f}")
print(f"abs_err_Y0 = {abs_err:.6f} (tol 0.02)")
print(f"RMSE@t=0.5 = {rmse_half:.6f} (tol 0.05)")
print(f"VERIFY Y0_abs_err={abs_err:.6f} rmse_half={rmse_half:.6f}")
assert abs_err < 0.02, f"Y0 誤差過大: {abs_err}"
assert rmse_half < 0.05, f"t=0.5 RMSE 過大: {rmse_half}"