← Макалаларга кайтуу
August 5, 2026
5 мүн окуу

PDE негизиндеги каржылык моделдөө үчүн Фурье нейрондук оператору

PDE негизиндеги каржылык моделдөө үчүн Фурье нейрондук оператору
#deep-learning
#FNO
#PDE
#operator-learning
#options

PDE негизиндеги каржылык моделдөө үчүн # Фурье нейрондук оператору

Бул блогдогу ар бир нейрон тармагы буга чейин функцияга жакындалды: функциялар кириш, бир катар. Фурье нейрондук оператору операторду болжолдойт — чексиз өлчөмдүү функция мейкиндиктеринин ортосундагы карта, мында киргизүү бүтүндөй туруксуздуктун бети жана чыгаруу бүтүн баанын бети. Бул башка объект, ага ар кандай техника керек жана техника бул макаланын максаты: эң төмөнкү Фурье режимдеринде колдонулган, FFT тегерек сапары аркылуу бааланган үйрөнүүгө боло турган комплекстүү баалуу ядро. O(nlogn)O(n \log n).

Опциондун баасы - бул каржы тармагында. Блэк-Скоулз, Хестон, жергиликтүү туруксуздук - бардык PDEs, бардыгы бүгүн бир эле учурда бир параметр коюлган. Оператор бир эле учурда бардык параметр үй-бүлөсүн үйрөнөт жана натыйжада алдыга өтүү убакыттын өтүү циклине караганда, бир пакеттелген GPU ядросу болуп саналат.

Бул убада. Бул макаланын чынчыл версиясы төмөнкү коддон катуу жана кайталануучу механиканы, FNO адабиятында бул сериядагы эч ким текшерилбей кабыл албаган баштапкы көрсөткүчтөргө каршы билдирилген аткаруу талаптарын бөлүп турат. Механизаторлор биринчи орунда; өлчөө күн тартиби аяктады деп белгиленет.

Функцияны жакындатуудан операторду үйрөнүүгө

Классикалык нейрон тармактары болжолдуу функциялар: киргизүү берилген xRnx \in \mathbb{R}^n, алар продукция чыгарышат yRmy \in \mathbb{R}^m. Бул күчтүү, бирок кызыкчылыктын объектилеринин өзү функциялары болгондо түп-тамыры менен чектелген. Финансылык PDE чечүүдө киргизүү бир эле сан эмес — бул баштапкы/чек ара шарттарын, туруксуздуктун бетин же термин түзүмүн сүрөттөгөн функция. чыгаруу дагы бир милдети болуп саналат: үстүнөн баасы бети (S,t)(S, t) космос.

Операторду үйрөнүү көйгөйдү чексиз өлчөмдүү мейкиндиктерге көтөрөт. Окуунун ордуна f:RnRmf: \mathbb{R}^n \to \mathbb{R}^m, биз операторду үйрөнөбүз:

G:AU\mathcal{G}: \mathcal{A} \to \mathcal{U}

кайда A\mathcal{A} жана U\mathcal{U} функциялардын банах мейкиндиктери болуп саналат. Опциондун баасы үчүн, A\mathcal{A} туруксуздуктун беттеринин мейкиндиги болушу мүмкүн σ(S,t)\sigma(S,t) жана U\mathcal{U} тиешелүү баа беттеринин мейкиндиги V(S,t)V(S,t).

Оператордун окуу пейзажында эки архитектура үстөмдүк кылат:

  1. DeepONet (Lu et al., 2021): Киргизүү функциясын коддоо үчүн тармактык тармакты жана суроонун жайгашкан жерин коддоо үчүн магистралдык тармакты колдонот. Чыгуу алардын ички продуктусу. Чен жана Чен тарабынан операторлор үчүн универсалдуу жакындоо теоремасы негизделген (1995).

  2. Фурье нейрондук оператору (Li ж.б., 2021): натыйжалуу глобалдык айлануу үчүн FFT колдонуп, Фурье мейкиндигинде интегралдык ядрону параметрлештирет. Резолюция-конструкция боюнча инвариант.

Экөө тең үзгүлтүксүз операторлор үчүн универсалдуу аппроксиматорлор, бирок FNOнун PDE көйгөйлөрү үчүн структуралык артыкчылыгы бар: анын спектрдик багыты табигый түрдө PDE чечимдеринин жылмакай, глобалдык структурасын чагылдырат. Анын ошондой эле опциондун төлөмү үчүн структуралык кемчилик бар, биз ага кайра кайрылабыз - кыскартылган Фурье негизи жана иш таштоодогу ийилиш табигый союздаш эмес.

FNO архитектурасы майда-чүйдөсүнө чейин

Ли жана башкалар тарабынан киргизилген Фурье нейрондук оператору. ICLR 2021де жөнөкөй, бирок күчтүү байкоого негизделет: көптөгөн PDEлердин Грин функциясы (интегралдык ядро) Фурье мейкиндигинде компакттуу өкүлчүлүккө ээ. Физикалык мейкиндикте ядрону үйрөнүүнүн ордуна - бул талап кылат O(n2)O(n^2) үчүн параметрлер nn тор пункттары - FNO аны жыштык мейкиндигинде эң төмөнкүсү менен гана үйрөнөт kmaxk_{\max} режимдери, татаалдыгын азайтат O(nlogn)O(n \log n) FFT аркылуу.

Итеративдик архитектура

FNO төмөнкүлөрдөн турат:

  1. Көтөрүүчү катмар PP: Киргизүүнү баштапкы канал өлчөмүнөн жогорку өлчөмдүү жашыруун өкүлчүлүккө проекциялаган чекиттүү сызыктуу карта: v0(x)=P(a(x))v_0(x) = P(a(x)).

  2. Фурье катмарлары (кайталанган LL жолу): Ар бир катмар колдонулат:

vl+1(x)=σ(Wlvl(x)+Kl(vl)(x))v_{l+1}(x) = \sigma\left(W_l \, v_l(x) + \mathcal{K}_l(v_l)(x)\right)

кайда WlW_l локалдык сызыктуу трансформация болуп саналат (почта 1×11 \times 1 айлануу) жана Kl\mathcal{K}_l FFT аркылуу ишке ашырылган глобалдык интегралдык оператор:

Kl(vl)(x)=F1(RlF(vl))(x)\mathcal{K}_l(v_l)(x) = \mathcal{F}^{-1}\left(R_l \cdot \mathcal{F}(v_l)\right)(x)

Бул жерде F\mathcal{F} FFT билдирет, RlR_l эң төмөнкүгө колдонулуучу үйрөнүүчү татаал-баалуу салмак тензору kmaxk_{\max} Фурье режимдери, жана σ\sigma чекиттүү сызыктуу эмес активдештирүү (адатта GELU).

  1. Проекциялык катмар QQ: Жашыруун өкүлчүлүктү кайра чыгаруу өлчөмүнө түшүрөт: u(x)=Q(vL(x))u(x) = Q(v_L(x)).

Эмне үчүн Фурье мейкиндиги?

Спектрдик айлануу RlF(vl)R_l \cdot \mathcal{F}(v_l) физикалык мейкиндиктеги глобалдык айланууга барабар болгон жыштык домениндеги көбөйтүү, бирок O(nlogn)O(n \log n) ордуна O(n2)O(n^2). Бул жөн гана эффективдүү ыкма эмес. PDE чечимдери, адатта, жылмакай жана төмөнкү жыштыктагы компоненттерден басымдуулук кылат. чейин кыскартуу менен kmaxk_{\max} режимдеринде, FNO чечимди табигый түрдө жөнгө салуучу жана жогорку жыштыктагы артефакттарды болтурбай турган үйрөнүүчү төмөн өткөрүүчү чыпка катары иштейт.

Эң негизгиси, FNO **дискреттөө-инварианттуу ** деп ырасталат: бир жолу чоңдуктагы тордо үйрөтүлгөн nn, аны ар кандай резолюция боюнча баалоого болот mnm \neq n жөн гана FFT өлчөмүн тууралоо жана нөлдүк толтуруу же спектрдик салмактарды кыскартуу менен. Бул нөлдүк супер резолюция касиети нейрондук PDE чечүүчүлөрү арасында уникалдуу болуп саналат - жана бул макаладагы цитата эмес, өлчөөгө татыктуу болгон биринчи доомат. Төмөндө өлчөө күн тартибин караңыз.

Биз операторду үйрөнүп жаткан PDE

Блэк-Скоулз PDE — алынган, терминдер боюнча ажыратылган жана [The Black-Scholes Formula] (/ky/blog/post/black-scholes-options-pricing) ичинде жабык түрдөгү чакыруу/коюу чечими менен берилген — оператордун максаты:

Vt+12σ2S22VS2+rSVSrV=0\frac{\partial V}{\partial t} + \frac{1}{2}\sigma^2 S^2 \frac{\partial^2 V}{\partial S^2} + rS\frac{\partial V}{\partial S} - rV = 0

Андан кийинки бардык нерсе ага белгилүү жообу бар кара куту катары карайт. Бул белгилүү жооп так эмне үчүн туура сыноо болуп саналат: чектүү айырмачылыкты чыгаруу боюнча үйрөтүлгөн операторго каршы упай коюуга болот. norm.cdf адабиятта дээрлик эч кандай FNO эталондору кыла албайт так баалар.

FNO формуласы

Биз көйгөйдү операторду үйрөнүү катары кайра чечтик. Аныктоо:

  • Киргизүү функциясы a(S,t)a(S, t): PDE параметрлерин коддойт. Бул туруксуздуктун бетин камтышы мүмкүн σ(S,t)\sigma(S, t), төлөм функциясы, жана тобокелдик-эркин чен каналдар боюнча үйүлгөн (S,t)(S, t) тор.
  • Чыгуу функциясы u(S,t)=V(S,t)u(S, t) = V(S, t): опциондун баасынын бети.

FNO үйрөнөт Gθ:au\mathcal{G}_\theta: a \mapsto u маалыматтар топтомунан (a(i),u(i))(a^{(i)}, u^{(i)}) салттуу чечүүчү тарабынан түзүлгөн жуптар. Тренингден кийин ар кандай жаңы параметр конфигурациясы үчүн бир гана алдыга өтүү болуп саналат.

Тренинг маалыматтарын түзүү

import numpy as np
from scipy.stats import norm

def black_scholes_fd(sigma, r, K, T, S_max=300, N_S=256, N_t=256):
    """Solve Black-Scholes PDE via explicit finite differences.

    NOTE: this is an interpreted double loop — the *worst* CPU baseline,
    exactly the kind called out in /en/blog/post/when-gpu-pays-off-sweep-roofline.
    It is fine for generating training data offline. It is NOT the baseline
    any speedup claim should be measured against; vectorize the inner loop
    over i (or use scipy sparse + implicit stepping) before timing anything.
    """
    dS = S_max / N_S
    dt = T / N_t
    S = np.linspace(0, S_max, N_S + 1)

    V = np.maximum(S - K, 0).astype(np.float64)

    for j in range(N_t):
        V_new = V.copy()
        for i in range(1, N_S):
            delta = (V[i+1] - V[i-1]) / (2 * dS)
            gamma = (V[i+1] - 2*V[i] + V[i-1]) / (dS**2)
            V_new[i] = V[i] + dt * (
                0.5 * sigma**2 * S[i]**2 * gamma
                + r * S[i] * delta
                - r * V[i]
            )
        V_new[0] = 0
        V_new[N_S] = S_max - K * np.exp(-r * (T - (j+1)*dt))
        V = V_new

    return S, V

Тренинг үчүн биз миңдеген параметр конфигурацияларын тандайбыз — ар кандай σ[0.05,0.80]\sigma \in [0.05, 0.80], r[0.01,0.10]r \in [0.01, 0.10], K[50,150]K \in [50, 150], T[0.1,2.0]T \in [0.1, 2.0] — жана ар бирин чектүү айырмачылык ыкмасы менен чечиңиз. Киргизүү-чыгарма түгөйлөрүнүн натыйжасында алынган маалыматтар топтому FNO үйрөнөт.

Масштабды жогорулатуу: Хстондун Стохастикалык өзгөрмөлүүлүгү модели

Туруктуу туруксуздук - бул белгилүү-жалган божомол жана эмне үчүн ал ишке ашпай калат - жылмаюу, майлуу куйруктар - [The Black-Scholes Formula] (/ky/blog/post/black-scholes-options-pricing) "Катаал чындык" бөлүмүнүн предмети. Хестон аны дисперсияны экинчи абал өзгөрмөсүнө айлантуу менен оңдойт:

dS=rSdt+vSdW1dS = rS\,dt + \sqrt{v}\,S\,dW_1 dv=κ(θv)dt+ξvdW2dv = \kappa(\theta - v)\,dt + \xi\sqrt{v}\,dW_2

менен Corr(dW1,dW2)=ρ\text{Corr}(dW_1, dW_2) = \rho. Опциондун баасы үчүн тиешелүү PDE V(S,v,t)V(S, v, t) мейкиндикте эки өлчөмдүү болуп саналат:

Vt+12vS22VS2+ρξvS2VSv+12ξ2v2Vv2+rSVS+κ(θv)VvrV=0\frac{\partial V}{\partial t} + \frac{1}{2}vS^2\frac{\partial^2 V}{\partial S^2} + \rho\xi vS\frac{\partial^2 V}{\partial S \partial v} + \frac{1}{2}\xi^2 v\frac{\partial^2 V}{\partial v^2} + rS\frac{\partial V}{\partial S} + \kappa(\theta - v)\frac{\partial V}{\partial v} - rV = 0

Бул жерде операторду үйрөнүү өз ордун табат жана аргумент эмпирикалык эмес, структуралык. А боюнча чектүү айырмачылык схемалары (S,v,t)(S, v, t) тордун масштабы катары O(NS×Nv×Nt)O(N_S \times N_v \times N_t), кайчылаш туунду термин 2V/Sv\partial^2 V / \partial S \partial v дискретизацияны жана ар бир жаңы параметрди татаалдантат (κ,θ,ξ,ρ,r)(\kappa, \theta, \xi, \rho, r) кайра толук наркын төлөйт. Оператор аны окутуу учурунда бир жолу төлөйт. Heston PDEнин 2D мейкиндик структурасы да Фурье катмарларында 2D FFTге түздөн-түз карталарды түзөт, ошондуктан төмөндөгү архитектура кайра долбоорлоонун ордуна өлчөмдү өзгөртүү менен жалпыланат.

Опция баасы үчүн FNO: PyTorch ишке ашыруу

Төмөндө Black-Scholes операторун үйрөнүү үчүн толук, өз алдынча FNO ишке ашыруу болуп саналат. Архитектура Li et al. (2021) каржылык абалга ылайыкташтыруу менен.

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.fft import rfft, irfft

class SpectralConv1d(nn.Module):
    """1D Fourier layer: spectral convolution via FFT."""

    def __init__(self, in_channels: int, out_channels: int, modes: int):
        super().__init__()
        self.in_channels = in_channels
        self.out_channels = out_channels
        self.modes = modes  # Number of Fourier modes to keep

        scale = 1.0 / (in_channels * out_channels)
        self.weights = nn.Parameter(
            scale * torch.randn(in_channels, out_channels, modes, dtype=torch.cfloat)
        )

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        batch_size = x.shape[0]

        x_ft = rfft(x, dim=-1)

        out_ft = torch.zeros(
            batch_size, self.out_channels, x_ft.size(-1),
            dtype=torch.cfloat, device=x.device
        )
        out_ft[:, :, :self.modes] = torch.einsum(
            "bix,iox->box", x_ft[:, :, :self.modes], self.weights
        )

        return irfft(out_ft, n=x.size(-1), dim=-1)


class FNOBlock(nn.Module):
    """Single Fourier Neural Operator block."""

    def __init__(self, channels: int, modes: int):
        super().__init__()
        self.spectral_conv = SpectralConv1d(channels, channels, modes)
        self.pointwise = nn.Conv1d(channels, channels, kernel_size=1)
        self.norm = nn.InstanceNorm1d(channels)

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        return F.gelu(self.norm(self.spectral_conv(x) + self.pointwise(x)))


class FNO1d(nn.Module):
    """
    Fourier Neural Operator for 1D PDE problems.

    Learns the mapping: PDE parameters -> solution function
    """

    def __init__(
        self,
        in_channels: int = 3,    # e.g., sigma(S), payoff(S), grid(S)
        out_channels: int = 1,   # V(S)
        hidden_channels: int = 64,
        modes: int = 32,
        num_layers: int = 4,
    ):
        super().__init__()
        self.lift = nn.Linear(in_channels, hidden_channels)
        self.blocks = nn.ModuleList(
            [FNOBlock(hidden_channels, modes) for _ in range(num_layers)]
        )
        self.proj = nn.Sequential(
            nn.Linear(hidden_channels, 128),
            nn.GELU(),
            nn.Linear(128, out_channels),
        )

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        x = self.lift(x)                    # -> (batch, spatial, hidden)
        x = x.permute(0, 2, 1)              # -> (batch, hidden, spatial)

        for block in self.blocks:
            x = block(x)

        x = x.permute(0, 2, 1)              # -> (batch, spatial, hidden)
        return self.proj(x)                  # -> (batch, spatial, out_channels)

Тренинг цикли

import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset

def train_fno_black_scholes():
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

    N_samples = 5000
    N_S = 256
    S_max = 300.0
    S_grid = np.linspace(0, S_max, N_S + 1)

    inputs, targets = [], []
    for _ in range(N_samples):
        sigma = np.random.uniform(0.05, 0.80)
        r = np.random.uniform(0.01, 0.10)
        K = np.random.uniform(50, 150)
        T = np.random.uniform(0.1, 2.0)

        _, V = black_scholes_fd(sigma, r, K, T, S_max=S_max, N_S=N_S)

        sigma_field = np.full(N_S + 1, sigma)
        payoff = np.maximum(S_grid - K, 0)
        grid_norm = S_grid / S_max

        inp = np.stack([sigma_field, payoff, grid_norm], axis=-1)
        inputs.append(inp)
        targets.append(V[:, None])

    X = torch.tensor(np.array(inputs), dtype=torch.float32)
    Y = torch.tensor(np.array(targets), dtype=torch.float32)

    dataset = TensorDataset(X, Y)
    loader = DataLoader(dataset, batch_size=64, shuffle=True)

    model = FNO1d(in_channels=3, out_channels=1, hidden_channels=64, modes=32).to(device)
    optimizer = optim.AdamW(model.parameters(), lr=1e-3, weight_decay=1e-4)
    scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=200)

    for epoch in range(200):
        model.train()
        total_loss = 0.0
        for batch_x, batch_y in loader:
            batch_x, batch_y = batch_x.to(device), batch_y.to(device)

            pred = model(batch_x)
            loss = torch.mean(
                torch.norm(pred - batch_y, dim=1)
                / torch.norm(batch_y, dim=1).clamp(min=1e-8)
            )

            optimizer.zero_grad()
            loss.backward()
            optimizer.step()
            total_loss += loss.item()

        scheduler.step()
        if (epoch + 1) % 20 == 0:
            avg = total_loss / len(loader)
            print(f"Epoch {epoch+1:3d} | Relative L2 Loss: {avg:.6f}")

    return model

Корутунду: реалдуу убакыттагы баа

@torch.no_grad()
def price_option(model, sigma, K, S_grid, device="cuda"):
    """
    Price a European call for given sigma and strike.
    Returns prices for all S in S_grid — single forward pass.
    """
    S_max = S_grid[-1]
    payoff = np.maximum(S_grid - K, 0)
    grid_norm = S_grid / S_max
    sigma_field = np.full_like(S_grid, sigma)

    inp = np.stack([sigma_field, payoff, grid_norm], axis=-1)
    x = torch.tensor(inp, dtype=torch.float32).unsqueeze(0).to(device)

    pred = model(x)
    return pred.squeeze().cpu().numpy()

FNO vs. PINNs: Практикалык салыштыруу

Физика-маалыматталган нейрон тармактары жана Фурье нейрондук операторлору нейрон тармактары менен PDEлерди чечүү үчүн түп-тамырынан бери башка философияларды билдирет. Алардын соодасын түшүнүү - бул операторду үйрөнүүгө кам көрүүнүн практикалык себеби.

PINNs: Ар бир инстанцияны оптималдаштыруу

PINNs PDE калдыктарын түздөн-түз жоготууга салат — Навье-Стокс маселеси механизмди, автодиффти камтыйт. physics_loss ишке ашыруу, жана DeepMind сингулярлык-издөө натыйжасы. Бул жерде маанилүү болгон жалгыз касиет структуралык болуп саналат: а PINN ар бир параметр топтомун үйрөтөт. Өзгөртүү σ\sigma, rr, KK же TT жана сиз нөлдөн баштап кайра оптималдаштыруу.

Күчтүү жактары: Белгиленген маалымат талап кылынбайт. PDE түзүмүн түздөн-түз ишке ашырат. Сиз жаза турган бардык PDE үчүн иштейт.

Алсыз жактары: Ар бир жаңы параметр топтому үчүн кайра даярдоо керек (σ,r,K,T)(\sigma, r, K, T). Окутуу көп учурда оптималдаштыруу патологиясын алып келген бир нече жоготуу шарттарын (PDE калдыктары, чек ара шарттары, баштапкы шарттар) тең салмактуулукту камтыйт. Конвергенция жай болушу мүмкүн — адатта ар бир көйгөй үчүн 10 000–100 000 градиент кадамдары. Жоготуу пейзажы өтө томпок эмес болуп калган көп масштабдуу жана башаламан системаларда иштен чыгат.

FNO: Амортизацияланган операторду үйрөнүү

FNO маалыматтардан чечим операторун үйрөнөт. Ал классикалык чечүүчү тарабынан түзүлгөн окутуу маалымат топтомун талап кылат, бирок үйрөтүлгөндөн кийин, ал бүт параметр мейкиндигинде жалпыланат.

Күчтүү жактары: Жарыяланган эталондордо миллисекунддук жыйынтык. Кайра даярдоосуз эле көрүнбөгөн параметрлерге жалпылайт. Резолюция-инвариант — төмөнкү резолюцияда машыгуу, жогорку чечилиште баалоо. Табигый түрдө жылмакай PDE чечимдерин спектралдык багыт аркылуу иштетет.

Алсыз жактары: Классикалык чечүүчүдөн окутуу маалыматтарын талап кылат (чыныгы жаңы PDE үчүн тоок-жумуртка маселеси). Жакындоо катасы чектелген, бирок нөлгө барабар эмес. PDE-чектелген ыкмаларга караганда азыраак чечмеленет. Жана жылмакай чечимдерге жардам берген спектрдик бурмалоо - бул кирешелүүлүктө жоопкерчилик.

Бетме-бет салыштыруу

Төмөнкү таблица ** адабияттар боюнча билдирилген, бул жерде өлчөнгөн эмес** - тактык жана ылдамдык саптары Li et al. (2021) жана биздин аппараттык жабдыктагы опциондун баасынан эмес, суюктуктун эталондору боюнча кийинки иш. Ишенимдүү катары структуралык саптарды (керектүү маалыматтар, жалпылоо, резолюциянын инварианты) окуңуз.

Критерий PINN FNO
Тренинг маалыматтары зарыл Жок (көзөмөлсүз) Чечүүчү тарабынан түзүлгөн жуптар
Корутунду баасы Инстанцияга толук кайра даярдоо Бир алдыга өтүү
Жалпылоо Жалгыз параметр топтому Бүтүндөй параметр үй-бүлөсү
Резолюциянын инварианты Жок Ооба деп ырасталган — төмөндөгү күн тартибин караңыз
Көп масштабдуу PDEs Көбүнчө ишке ашпай калат Кабарланган бекем
Тактык (салыштырмалуу L2L^2, адабият) 10310^{-3} чейин 10210^{-2} 10410^{-4} чейин 10310^{-3}

Гибрид: физикадан маалымат алган нейрондук операторлор (PINO)

PINO (Li et al., 2024) эки ыкманы тең айкалыштырат. Ал FNO архитектурасын колдонот, бирок маалыматка негизделген жоготууларды PDE калдык термини менен көбөйтөт:

LPINO=Ldata+λLPDE\mathcal{L}_{\text{PINO}} = \mathcal{L}_{\text{data}} + \lambda \, \mathcal{L}_{\text{PDE}}

ажыроо пайдалуу бөлүгү болуп саналат. Ldata\mathcal{L}_{\text{data}} операторду сизде бар жерде чечүүчү чыгарууга бекитет; λLPDE\lambda \mathcal{L}_{\text{PDE}} аны сиз эч качан тандабаган параметр мейкиндигинин аймактарын кошкондо сиз кылбаган бардык жерде чектейт. Опциондун баасы үчүн, бул экинчи мөөнөт каржылоого мүнөздүү себептерден улам жагымдуу: PDE калдыгы - бул катуу чектөө, сиз тыянак чыгаруу учурунда өзүн-өзү текшерүү катары да баалай аласыз, бул төмөндөгү калдык мониторингинин негизи болуп саналат.

Өндүрүштү жайылтуу боюнча практикалык ойлор

Мунун жалпы жарымы — күтүү бюджеттерин чыгаруу, маалымат түтүгүн куруу, дрейфке мониторинг жүргүзүү, мезгил-мезгили менен кайра даярдоо — [DeepLOB: Limit Order Books] (/ky/blog/post/deeplob-deep-learning-order-book) өндүрүш бөлүмүндөгү соода системасындагы нейрон модели үчүн камтылган. Төмөнкү нерсе операторго тиешелүү гана.

Маалымат түтүгү: Параметр мейкиндигин тандоо

Окутуу маалыматтарын түзүү негизги кыйынчылык болуп саналат жана рыноктук маалыматтар моделинен айырмаланып, сиз өзүңүздүн бөлүштүрүүңүздү тандайсыз - демек, сиз аны жоготууда көрүнбөгөн жол менен туура эмес кылып ала аласыз. 4 параметри бар Блэк-Скоулз оператору үчүн 5000–10000 үлгү жетиштүү. 5 параметри жана 2D мейкиндик домени бар Хстон үчүн 20,000–50,000 үлгүлөр мүнөздүү. Адаптивдүү тандап алууну колдонуңуз: үлгүлөрдү чечим тез өзгөрүп турган параметр аймактарында концентратыңыз - акчага жакын, кыска мөөнөттүү, жогорку туруксуздук - анткени кутудан бирдиктүү үлгү алуу бюджетинин көбүн терең ITM жана терең OTM аймактарына жумшайт, мында оператор дээрлик сызыктуу жана өтө аз мисалдардан жакшы үйрөнөт.

Архитектура тюнинг

  • Ржимдер (kmaxk_{\max}): менен баштаңыз N/4N/4 кайда NN мейкиндик торчо өлчөмү болуп саналат. үчүн N=256N=256, 32–64 режимдерин колдонуңуз. Өтө аз режимдер иш таштоо чектерине жакын деталдарды жоготот; ызы-чуу үчүн өтө көп.
  • Кабаттар: 4 Фурье катмарлары стандарттуу. Тереңирээк тармактар ​​(6–8) Heston сыяктуу 2D көйгөйлөрүнө жардам берет, бирок эс тутумун жогорулатат.
  • Жашыруун каналдар: 1D Black-Scholes үчүн 64, 2D Heston үчүн 128. Көйгөйдүн татаалдыгы менен масштаб.

Тактык: fp32 суроосу

SpectralConv1d бөлүп берет torch.cfloat — бир тактык комплекси — жана ар бир FFT айланма сапары ошол тактыкта ​​иштейт. Бул блог буга чейин The GPU Precision Trap ичинде fp32 каржы түтүгүнүн унчукпай таштандыларды кайтарып жатканын көргөн, мында математикалык жактан туура префикс-суммасы fp32 магнитудасында катастрофалык түрдө жоголгон. Бул жерде окшош суроо түз: at S100S \approx 100 центке келтирилген баалар менен, fp32 спектрдик тегерек сапарды кармап турат 10210^{-2} абсолюттук, же FFTтин орто чоңдуктун өсүшү акыркы маанилүү цифраларды жейби?

Error Control

Өндүрүштүк опциондун баасы үчүн, сиз коргой турган ката чеги керек.

  1. Калибрленген белгисиздик: ансамблдин стандарттык четтөө камтууга кепилдик * эмес* жана бул блогдо аны талаптагыдай аткара турган техника бар — конформды кармалып турган параметр торуна бөлүү, алмашылбаган жагдай үчүн ACI/DtACI менен, Тобокелдикти түшүнүү үчүн ылайыктуу болжолдоо Өлчөмдү аныктоо. FNOну экиге бөлүү (σ,r,K,T)(\sigma, r, K, T) тор баада бөлүштүрүүсүз интервалдарды берет.
  2. Калдык мониторинг: FNO божомолунун PDE калдыгын пост-hoc текшерүү катары эсептеңиз. Эгерде residual>ϵ\|\text{residual}\| > \epsilon, классикалык чечүүчүгө кайра түшүңүз. Бул тыянак чыгарууда бекер — калдык бул сизде бар массивдеги чектүү айырмачылык трафарет.
  3. Активдүү окутуу: Классикалык чечүүчүгө жогорку белгисиздиктеги киргизүүлөрдү багыттаңыз, натыйжаларды окуу топтомуна кошуңуз жана мезгил-мезгили менен кайра үйрөтүңүз. (1) конформдык интервалдын туурасы табигый маршруттук сигнал болуп саналат.

Өлчөө күн тартиби

Бул жогорудагы архитектураны жайылтууга татыктуубу же жокпу, чечүүчү бөлүк жана анын бири дагы аткарыла элек. Ал көмүлгөндүн ордуна бул жерде келтирилген, анткени альтернатива - баш сапты тездетүү - бул блогду болтурбоо үчүн бар болгон регистр.

1. Ылдамдатуу - бул сан эмес, ийри сызык. When the GPU Pays Off форманы аныктайт: S(B)=aB/(O+bB)S(B) = aB/(O + bB), устубуздегу жылы жогору-лайт B=1B=1 эсептөө менен байланышкан платого чейин жана ал 167x 27x алгоритмге 6,2x аппараттык жабдыкка ажыраган баш сапты көрсөтөт. FNO өлчөөсү ошол шаблонго ылайык болушу керек: дубал сааты алдыга өтүү B{1,8,64,512}B \in \{1, 8, 64, 512\} жана бүт ийри сызык жөнүндө кабарлайт. Критикалык жактан алганда, базалык сызык вектордоштурулган, көп ядролуу чектүү айырмаларды чечүүчү болушу керек — black_scholes_fd жогоруда чечмеленген кош цикл, макаланын аттары аталган так "Эң начар CPU ишке ашыруу" базасы жана ага каршы пакеттелген GPU операторун салыштыруу эч нерсе билдирбеген санды чыгарат.

2. Жабык формага каршы тактык. Бул Блэк-Скоулздун эксперименти дээрлик бекер кылат жана суюктук динамикасынын эталондору такыр кыла албайт: FD тарабынан түзүлгөн маалыматтар боюнча машыгып, андан кийин так каршы балл norm.cdf боюнча баалар (σ,r,K,T)(\sigma, r, K, T) куту. Тууганына кабар бер L2L^2, жана катаны кабарлаңыз *бөлүштүрүү * — өзгөчө соккуга жакын жана мөөнөтү бүтө турган жерде, бул жерде чечим эң аз жылмакай жана кесилген спектрдик негиз эң көп күрөшүшү керек.

3. Арбитраждык бузуулар жок. Үйрөнгөн оператордун баанын бети канааттандырууга тийиш болгон формалык чектөөлөрдү урматтоого структуралык негизи жок: монотондуулук KK, ичинде томпоктук KK, жана Vmax(SK,0)V \geq \max(S-K, 0). Параметр кутучасы боюнча бузуу көрсөткүчүн өлчөө бул макаланын өзүнүн ачык суроосуна айланат — үйрөнгөн оператордо арбитраждын жоктугуна кепилдик бере алабызбы? — кол булгалоодон санга.

4. Дискреттештирүүнүн инварианты, ырасталгандан көрө текшерилген. Тренинг дар NS=128N_S = 128, баалоо NS=512N_S = 512, ката жөнүндө кабарлаңыз. Күтүлгөн ката режиминин аталышы жана конкреттүү: Гиббс кыйшайып жатканда шыңгырап жатат max(SK,0)\max(S-K, 0). Үзгүлтүксүз биринчи туундусу бар функцияны реконструкциялоочу кесилген Фурье негизи анын айланасында термелет жана нөлдүк супер резолюция машыгуу резолюциясы эч качан көрбөгөн режимдерди ачып, жакшыраак эмес, начарлатышы мүмкүн. Эгерде супер-резолюция иш таштоо алдында начарлап кетсе, анда ал терс натыйжа ал алмаштырган маркетинг дооматынан алда канча баалуу болот - FNO адабиятында эч ким кирешелүүлүк менен баа варианттарын айта албайт.

1-4 эксперименттерди жүргүзүү мүмкүн болбосо, бул макаланы жөнөтпөш керек. Аларсыз калган нерсе башка бирөөнүн ICLR кагазынын жакшы жазылган экспозициясы.

Ваниль опцияларынан тышкары

Жогорудагы күн тартиби өлчөө менен байланышта болот деп ойлосок, FNO алкагы табигый түрдө татаалыраак инструменттерге жайылтылат:

  • Америкалык опциялар: Кошумча чыгаруу каналы катары эрте машыгуу чектерин кошуңуз. FNO бир эле учурда баанын үстүн да, оптималдуу көнүгүү чектерин да үйрөнөт.
  • Тоскоолдук параметрлери: Тоскоолдук деңгээлдерин киргизүү каналдары катары коддоңуз. Көңүл бургула, тосмо экинчи үзгүлтүк болуп саналат жана өлчөө күн тартибинен Гиббс тынчсыздануусу аз эмес, көбүрөөк күч менен колдонулат.
  • Мульти-актив себеттери: 2–3 негизги себеттеги себет опциялары үчүн 2D же 3D FNO колдонуңуз. Өлчөмдүүлүктүн каргышы торго негизделген чечүүчүлөргө караганда азыраак, анткени FNO белгиленген режимдердин саны боюнча иштейт.
  • Жергиликтүү туруксуздук: толук Dupire жергиликтүү туруксуздуктун бетин киргизиңиз σloc(S,t)\sigma_{\text{loc}}(S,t) мейкиндик функциясы катары. Бул операторду үйрөнүү үчүн эң табигый колдонуу учуру — киргизүү * бул скаляр параметр эмес, функция.

Корутунду

Фурье нейрондук операторунун салымы эсептөөдөн мурун концептуалдык: бир эле учурда бир PDE чечүүнүн ордуна, сиз чечим операторунун өзүн параметрлештиресиз жана Фурье мейкиндигинде муну жасоо архитектураны берет. O(nlogn)O(n \log n), үзгүлтүксүз операторлор боюнча универсалдуу, жана курулуш боюнча чечим ийкемдүү. Бул Ли жана башкалардан келип чыккан. (2021) жана жогоруда иштеген коддон.

Артынан келбеген нерсе - бул ылдамдыктын саны. Адабияттын 100x–1000x көрсөткүчтөрү сапаты сейрек айтылган базалык көрсөткүчтөр менен суюктук эталондор менен өлчөнөт жана бул серия мындай аталыштын канчасы аппараттык эмес, адатта алгоритм экенин көрсөткөн бүтүндөй макаланы өткөрдү. Операторду баа кыймылдаткычына киргизүүнү актай турган дооматтар - цент деңгээлиндеги fp32 тактыгы, чектелген арбитраждык бузуулардын ылдамдыгы, кирешелүү катадан аман калган супер резолюция жана компетенттүү CPU чечүүчүгө каршы ылдамдыктын ийри сызыгы - баары өлчөнөт, баары Блэк-Скоулда арзан, анткени бул жерде баары жабык жана жабык формада бар.

Бул долбоордун абалы мына ушунда: механизм реалдуу, убада ишеничтүү, далилдер күтүүдө.


** Шилтемелер жана андан ары окуу:**

  • Ли, З., Ковачки, Н., Азиззаденешели, К., ж.б. «Параметрдик жарым-жартылай дифференциалдык теңдемелердин Фурье нейрондук оператору». ICLR 2021. arXiv:2010.08895
  • Лу, Л., Джин, П., Панг, Г., Чжан, З., & Карниадакис, Г.Э. "DeepONet аркылуу сызыктуу эмес операторлорду үйрөнүү." Nature Machine Intelligence, 2021. doi:10.1038/s42256-021-00302-5
  • Ли, З., жана башкалар. «Жарым-жартылай дифференциалдык теңдемелерди үйрөнүү үчүн физикалык маалыматка ээ нейрондук оператор». ACM/IMS Journal of Data Science, 2024. OpenReview
  • neuraloperator PyTorch китепканасы: github.com/neuraloperator/neuraloperator
  • Сальвадор, М., жана башкалар. "Нейрондук тармакты Опциондук баалоо үчүн Блэк-Скоулз теңдемесин үйрөнүү." arXiv:2405.05780
  • Бай, Ы., жана башкалар. "AI Black-Scholes: Финансы-маалыматтуу нейрон тармагы." arXiv:2412.12213
blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

Рынктан бир кадам алдыда болуңуз

AI соода аналитикасы, рынок талдоолору жана платформа жаңылыктары үчүн биздин жаңылыктар бюллетенине жазылыңыз.

Биз сиздин купуялыгыңызды урматтайбыз. Каалаган убакта жазылымдан чыга аласыз.