← Мақалаларға оралу
August 5, 2026
5 мин оқу

PDE негізіндегі қаржылық модельдеуге арналған Фурье нейрондық операторы

PDE негізіндегі қаржылық модельдеуге арналған Фурье нейрондық операторы
#deep-learning
#FNO
#PDE
#operator-learning
#options

PDE негізіндегі қаржылық модельдеуге арналған # Фурье нейрондық операторы

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

Опциондық баға - бұл қаржыға түсетін жер. Блэк-Скоулз, Хестон, жергілікті құбылмалылық — барлық PDE, барлығы бүгін бір уақытта бір параметр жиынтығын шешеді. Оператор барлық параметрлер тобын бірден үйренеді және нәтижесінде алға өту уақыт бойынша цикл емес, бір пакеттік 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 және т.б., 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

Black-Scholes PDE — алынған, термин бойынша бөлінген және The Black-Scholes Formula ішінде жабық пішінді шақыру/қойту шешімімен берілген — оператордың мақсаты:

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 үйренетін нәрсе болып табылады.

Масштабтау: Хстонның стохастикалық құбылмалылық моделі

Тұрақты құбылмалылық белгілі-жалған болжам және оның неге сәтсіздікке ұшырауы — күлімсіреу, майлы құйрық — [Блэк-Скоулз формуласы] (/kk/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 іске асырылуы берілген. Архитектура Ли және т.б. (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 және PINN: практикалық салыстыру

Физикалық ақпараттандырылған нейрондық желілер және Фурье нейрондық операторлары нейрондық желілермен PDE шешудің түбегейлі әртүрлі философиясын білдіреді. Олардың өзара тиімді жақтарын түсіну операторды үйренуге мүлдем мән берудің практикалық себебі болып табылады.

PINN: әр дананы оңтайландыру

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 шектелген тәсілдерге қарағанда азырақ түсіндіріледі. Ал біркелкі шешімдерге көмектесетін спектрлік бұрмалану - бұл өтеу кезіндегі жауапкершілік.

Бетпе-бет салыстыру

Төмендегі кесте әдебиетпен берілген, мұнда өлшенбейді — дәлдік пен жылдамдық қатарлары Ли т.б. (2021) және біздің аппараттық құралдағы опциялардың бағасынан емес, сұйықтық көрсеткіштері бойынша кейінгі жұмыс. Сенімді жолдар ретінде құрылымдық жолдарды (қажетті деректер, жалпылау, ажыратымдылықтың инварианты) оқыңыз.

Критерий PINN FNO
Қажетті оқу деректері Ешбір (қадағаланбайтын) Шешуші арқылы жасалған жұптар
Қорытынды құны Бір данаға толық қайта даярлау Бір реттік алға өту
Жалпылау Бір параметр жиыны Барлық параметр тобы
Ажыратымдылықтың өзгермелілігі Жоқ Мәлімделген иә — төмендегі күн тәртібін қараңыз
Көп масштабты PDE Көбінесе сәтсіздікке ұшырайды Берілген сенімді
Дәлдік (салыстырмалы L2L^2, әдебиет) 10310^{-3} дейін 10210^{-2} 10410^{-4} дейін 10310^{-3}

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

PINO (Li және т.б., 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] (/kk/blog/post/deeplob-deep-learning-order-book), және оны шығару бөліміндегі сауда жүйесіндегі нейрондық модель үшін қарастырылған. Бұдан әрі операторға тән нәрсе ғана.

Деректер құбыры: Параметр кеңістігін таңдау

Жаттығу деректерін жасау басты қиыншылық болып табылады және нарықтық деректер үлгісінен айырмашылығы, сіз өзіңіздің таратуыңызды таңдайсыз - бұл жоғалтуда көрінбейтін жолмен қателесуіңіз мүмкін дегенді білдіреді. 4 параметрі бар Black-Scholes операторы үшін 5000–10000 үлгі жеткілікті. 5 параметрі және 2D кеңістіктік домені бар Heston үшін 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 аралық шамасының өсуі соңғы маңызды сандарды жейді ме?

Қатені басқару

Өндіріс опциясының бағасы үшін сізге қорғай алатын қате шекаралары қажет.

  1. Калибрленген белгісіздік: ансамбльдің стандартты ауытқуы қамту кепілдігі емес* және бұл блогта оны дұрыс орындайтын техника бар — конформды ұстап тұрған параметр торы бойынша бөлу, ауыстырылмайтын жағдай үшін ACI/DtACI бар Тәуекелді ескеретін жағдайға арналған конформды болжау Өлшемдер. Үстіңгі жағына бөлінген конформальды FNO орау (σ,r,K,T)(\sigma, r, K, T) тор баға бойынша таратусыз интервалдарды береді.
  2. Қалдық бақылау: FNO болжамының PDE қалдығын кейінгі тексеру ретінде есептеңіз. Егер residual>ϵ\|\text{residual}\| > \epsilon, классикалық шешушіге қайта оралыңыз. Бұл қорытынды жасау үшін тегін — қалдық сізде бұрыннан бар массивтегі соңғы айырмашылығы бар трафарет болып табылады.
  3. Белсенді оқыту: белгісіздігі жоғары кірістерді классикалық шешушіге бағыттаңыз, нәтижелерді оқу жинағына қосыңыз және мерзімді түрде қайта оқытыңыз. (1) конформды интервал ені табиғи бағыттау сигналы болып табылады.

Өлшеу күн тәртібі

Бұл жоғарыдағы архитектураны қолдануға тұрарлық па екенін шешетін бөлік және оның ешқайсысы әлі жасалмаған. Ол жерленгеннен гөрі осында келтірілген, өйткені балама — тақырыпты жылдамдату — бұл блогты болдырмау үшін бар тіркеу.

1. Жылдамдық - бұл сан емес, қисық. GPU төлеген кезде пішінді белгілейді: S(B)=aB/(O+bB)S(B) = aB/(O + bB), жоғарыдан көтерілу үстемдікте B=1B=1 есептеуге байланысты платоға және ол 27x алгоритмге 6,2x аппараттық құралға ыдырайтын 167x тақырыбын көрсетеді. FNO өлшеуі осы үлгіге сәйкес болуы керек: алға өтуді қабырға сағаты B{1,8,64,512}B \in \{1, 8, 64, 512\} және бүкіл қисықты хабарлаңыз. Сыни тұрғыдан алғанда, базалық сызық векторланған, көп ядролы соңғы айырмашылықты шешуші болуы керек — black_scholes_fd жоғарыда интерпретацияланған қос цикл, мақала аттары аталған дәл «процессордың ең нашар іске асырылуы» базалық сызық және оған қарсы пакеттелген 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 дәлдігі, арбитражды бұзудың шектелген жылдамдығы, өтемді бұзған кезде аман қалатын супер ажыратымдылық және компетентті процессорды шешушіге қарсы жылдамдықты арттыру қисығы — бәрі өлшенетін, Блэк-Скоулзда бәрі арзан, өйткені мұнда әлі жабық және жабық формада бар.

Бұл жобаның жай-күйі мынада: механизм нақты, уәде сенімді және дәлелдеме күтуде.


Анықтамалар және қосымша оқу:

  • Ли, З., Ковачки, Н., Азиззаденешели, К., т.б. «Параметрлік ішінара дифференциалдық теңдеулер үшін Фурье нейрондық операторы». ICLR 2021. arXiv:2010.08895
  • Лу, Л., Джин, П., Панг, Г., Чжан, З., & Карниадакис, Г.Е. «DeepONet арқылы сызықтық емес операторларды үйрену». Nature Machine Intelligence, 2021. doi:10.1038/s42256-021-00302-5
  • Ли, З., т.б. «Жартылай дифференциалдық теңдеулерді үйренуге арналған физикадан хабардар нейрондық оператор». ACM/IMS Деректер туралы ғылым журналы, 2024. OpenReview
  • neuraloperator PyTorch кітапханасы: github.com/neuraloperator/neuraloperator
  • Сальвадор, М., т.б. «Опциондық баға белгілеу үшін Блэк-Шолз теңдеуін нейрондық желіні үйрену». arXiv:2405.05780
  • Бай, Ы., т.б. «Блэк-Шкоулз AI: қаржыдан хабардар нейрондық желі». 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 сауда талдаулары, нарық аналитикасы және платформа жаңалықтары үшін біздің ақпараттық бюллетеньге жазылыңыз.

Біз сіздің жекелігіңізді құрметтейміз. Кез келген уақытта жазылымнан шығуға болады.