Neural Network Solvers for Kolmogorov Backwards Equations

A Kolmogorov PDE is of the form :

Considering S to be a solution process to the SDE:

then the solution to the Kolmogorov PDE is given as:

A Kolmogorov PDE Problem can be defined using a SDEProblem:

SDEProblem(μ,σ,u0,tspan,xspan,d)

Here, u0 is the initial distribution of x. Here, we define u(0,x) as the probability density function of u0.μ and σ are obtained from the SDE for the stochastic process above. d represents the dimensions of x. u0 can be defined using Distributions.jl.

Another way of defining a KolmogorovPDE is to use the KolmogorovPDEProblem.

KolmogorovPDEProblem(μ,σ,phi,tspan,xspan,d)

Here, phi is the initial condition on u(t,x) when t = 0. μ and σ are obtained from the SDE for the stochastic process above. d represents the dimensions of x.

To solve this problem use:

  • NNKolmogorov(chain, opt , sdealg): Uses a neural network to realize a regression function which is the solution for the linear Kolmogorov Equation.

Here, chain is a Flux.jl chain with a d-dimensional input and a 1-dimensional output.opt is a Flux.jl optimizer. And sdealg is a high-order algorithm to calculate the solution for the SDE, which is used to define the learning data for the problem. Its default value is the classic Euler-Maruyama algorithm.

Using GPU for Kolmogorov Equations

For running Kolmogorov Equations on a GPU, there are certain aspects that are need to be taken care of:

Convert the model parameters to CuArrays using the fmap function given by Flux.jl:

m = Chain(Dense(1, 64, σ), Dense(64, 64, σ) , Dense(5, 2))
m = fmap(cu, m)

Unlike other solvers, we need to specify explicitly that the solver is to run on the GPU. This can be done by passing the use_gpu = true into the solver.

solve(prob, NeuralPDE.NNKolmogorov(m, opt, sdealg, ensemblealg), use_gpu = true,  verbose = true, dt = dt, dx = dx , trajectories = trajectories , abstol=1e-6, maxiters = 1000)