2017 -- Buehler 等人的深度避險:用深度學習取代動態避險#
案件描述#
2017 年,J.P. Morgan 的 Hans Buehler、Luca Gonon、Teichmann 與 Wood 發表《Deep Hedging》(arXiv 2018,Quantitative Finance 刊出)。他們挑戰了金融計算 44 年來的基石:
Black–Scholes 的動態避險(1973)假設「完美市場 + 常態波動 + 無交易成本」。真實世界不是這樣。深度避險的主張:別再解 PDE 了——直接用深度學習,在真實的(有摩擦、有約束、有厚尾的)市場中學出最優避險策略。
這是金融計算進入機器學習時代的宣言。
前因:Black–Scholes 避險的實務困境#
- Black–Scholes 的動態避險(delta hedging)假設:
- 連續交易(實際只能離散)
- 無交易成本(實際有價差與衝擊)
- 常態波動(實際有跳躍與聚類——見 1982-EngleARCH模型.md、1993-Heston隨機波動率模型.md)
- 完美流動性(2010 閃電崩盤證明流動性會蒸發——見 2010-閃電崩盤與高頻交易.md)
- 實務中,避險策略必須處理:交易成本、避險工具的有限性(只能用期貨避險)、風險度量不是變異數而是 CVaR、法規約束。
- 線索:深度學習在 2012–2016 年爆發(AlexNet、AlphaGo)。Buehler(J.P. Morgan 全球資產定價主管)意識到:避險本質上是一個隨機控制問題,而神經網路是逼近任意控制策略的通用工具。
推理過程#
線索一:把避險寫成隨機控制問題#
設避險策略 \(\pi = (\pi_0, \pi_1, \dots, \pi_{n-1})\) (每期的避險部位),目標:最小化「避險後損失」的風險度量:
其中: - \(F_T\) :衍生品的到期支付(負債) - \(\pi_k \Delta S_{k+1}\) :避險的損益 - \(c(\pi_k, \pi_{k-1})\) :交易成本(與調倉量成正比——Black–Scholes 沒有的項) - \(\rho\) :風險度量(可以是 CVaR,而不只是變異數)
線索二:神經網路作為策略的通用逼近器#
關鍵技巧:把每期的避險決策 \(\pi_k\) 寫成神經網路:
- 輸入:當前價格、隱含波動率、時間、其他市場狀態
- 輸出:避險部位
- \(\theta = (\theta_0, \dots, \theta_{n-1})\) :所有網路的參數,用隨機梯度下降(在蒙地卡羅模擬的路徑上)直接最小化目標函數。
數學基礎:神經網路的通用逼近定理(Cybenko 1989、Hornik 1991)保證:足夠大的網路可以逼近任意連續的控制策略——所以「學出來的策略」可以逼近理論最優策略。
與 LSM 的傳承:Longstaff–Schwartz(2001,見 2001-LongstaffSchwartz蒙地卡羅.md)用「迴歸估計條件期望」把動態規劃變成學習問題;深度避險用「神經網路逼近控制策略」把隨機控制變成學習問題——同一個邏輯:蒙地卡羅 + 函數逼近 = 解決一切動態問題。
線索三:為什麼「直接學」比「解 PDE」好#
- 市場摩擦:交易成本、價差直接寫進目標函數——不用近似。
- 任意風險度量:CVaR、半變異數、甚至自訂效用——Black–Scholes 只能處理二次效用。
- 任意價格動態:厚尾、跳躍、隨機波動率、隨機利率——只要是可模擬的過程就行。
- 任意約束:避險工具有限、法規限制、資金約束——PDE 方法無法處理。
現代程式重現:深度避險的極簡版#
import numpy as np
import torch
import torch.nn as nn
def simulate_paths(S0, sigma, r, T, n, M):
dt = T/n
Z = torch.randn(M, n)
logS = torch.log(torch.tensor(S0)) + torch.cumsum((r-0.5*sigma**2)*dt + sigma*torch.sqrt(torch.tensor(dt))*Z, dim=1)
return torch.exp(logS)
class HedgeNet(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(nn.Linear(3, 32), nn.ReLU(), nn.Linear(32, 1))
def forward(self, S, v, t):
return self.net(torch.stack([S, v, t], dim=-1)).squeeze(-1)
def deep_hedge(S0=100, K=100, sigma=0.2, r=0.0, T=1, n=50, M=50_000, cost=0.001):
paths = simulate_paths(S0, sigma, r, T, n, M)
nets = nn.ModuleList([HedgeNet() for _ in range(n)])
opt = torch.optim.Adam(nets.parameters(), lr=1e-3)
for epoch in range(500):
pnl = -torch.clamp(paths[:, -1] - K, min=0) # 負債:賣權支付
prev = torch.zeros(M)
for k in range(n):
t_k = torch.full((M,), k/n)
pi = nets[k](paths[:, k], torch.full((M,), sigma), t_k)
pnl = pnl + pi * (paths[:, k+1] - paths[:, k]) # 避險損益
pnl = pnl - cost * torch.abs(pi - prev) # 交易成本
prev = pi
loss = pnl.pow(2).mean() # 二次風險度量(可換成 CVaR)
opt.zero_grad(); loss.backward(); opt.step()
return nets, paths
# 學出來的避險策略 ≈ delta hedging(在無摩擦、常態波動下),
# 但在真實摩擦與厚尾下,學出的策略明顯更優
後果#
- 機器學習進入金融計算的宣言:深度避險之後,「用學習代替解析」成為新的研究綱領:
- 深度定價:用神經網路逼近定價函數(DeepPricing、Deep Optimal Stopping,Chen–Wan 2019)
- 深度市場模擬:用生成模型(GAN、Normalizing Flows)學習真實市場的價格動態
- 強化學習執行:把最佳執行變成 RL 問題(見 2000-AlmgrenChriss最佳執行.md 的延伸)
- 業界採用:J.P. Morgan、多家歐洲銀行開始在生產環境試驗深度避險。
- 理論的回響:Buehler 等後續證明深度避險在有摩擦市場中收斂到理論最優(2019–2022 的數學工作)。
- 與 AlphaGo 的同構:避險 = 隨機控制 = 「在模擬中學策略」——強化學習的邏輯(見 ../強化學習/)。
- 盲點:神經網路的可解釋性差(監管挑戰)、訓練不穩定、對「沒見過的市場狀態」外推能力弱——2010 閃電崩盤那種極端狀態,訓練資料裡可能沒有。
偵探筆記#
- 動機:Black–Scholes 動態避險假設與真實市場的落差
- 工具:隨機控制、神經網路通用逼近、蒙地卡羅 + SGD
- 遺產:ML 進入金融計算的宣言、深度定價/模擬/執行的綱領
- 盲點:可解釋性、外推能力、訓練穩定性
參考資料#
- Buehler, H., Gonon, L., Teichmann, J., Wood, B. (2019). "Deep Hedging". Quantitative Finance, 19(8), 1271–1291.
- Chen, L., Wan, H. (2019). "DeepPricing: Pricing Financial Options with Deep Learning".