跳轉到

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})\) (每期的避險部位),目標:最小化「避險後損失」的風險度量:

\[ \min_{\pi} \; \rho\left(F_T + \sum_{k=0}^{n-1} \pi_k \, \Delta S_{k+1} + \sum_k c(\pi_k, \pi_{k-1})\right) \]

其中: - \(F_T\) :衍生品的到期支付(負債) - \(\pi_k \Delta S_{k+1}\) :避險的損益 - \(c(\pi_k, \pi_{k-1})\) :交易成本(與調倉量成正比——Black–Scholes 沒有的項) - \(\rho\) :風險度量(可以是 CVaR,而不只是變異數)

線索二:神經網路作為策略的通用逼近器#

關鍵技巧:把每期的避險決策 \(\pi_k\) 寫成神經網路:

\[ \pi_k = \mathcal{N}_{\theta_k}(S_k, \text{其他狀態}) \]
  • 輸入:當前價格、隱含波動率、時間、其他市場狀態
  • 輸出:避險部位
  • \(\theta = (\theta_0, \dots, \theta_{n-1})\) :所有網路的參數,用隨機梯度下降(在蒙地卡羅模擬的路徑上)直接最小化目標函數。

數學基礎:神經網路的通用逼近定理(Cybenko 1989、Hornik 1991)保證:足夠大的網路可以逼近任意連續的控制策略——所以「學出來的策略」可以逼近理論最優策略。

與 LSM 的傳承:Longstaff–Schwartz(2001,見 2001-LongstaffSchwartz蒙地卡羅.md)用「迴歸估計條件期望」把動態規劃變成學習問題;深度避險用「神經網路逼近控制策略」把隨機控制變成學習問題——同一個邏輯:蒙地卡羅 + 函數逼近 = 解決一切動態問題。

線索三:為什麼「直接學」比「解 PDE」好#

  1. 市場摩擦:交易成本、價差直接寫進目標函數——不用近似。
  2. 任意風險度量:CVaR、半變異數、甚至自訂效用——Black–Scholes 只能處理二次效用。
  3. 任意價格動態:厚尾、跳躍、隨機波動率、隨機利率——只要是可模擬的過程就行。
  4. 任意約束:避險工具有限、法規限制、資金約束——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".