System identification in continuous time
Learning in continuous ODEs, SDEs and CDEs
August 1, 2016 — November 30, 2023
Learning the parameters of a dynamical system in continuous time. Gets extra tricky for stochastic systems.
1 Recursive estimation
See recursive identification for generic theory of learning a Markovian under the distribution shift induced by a moving unobserved state vector.
2 Introductory reading
See the writings of the indefatigable Chris Rackauckas (Rackauckas et al. 2018), plus his tutorial implementations and whole MIT course. Chris Rackauckas’ lecture notes christen this area “scientific machine learning,” which is a confusing and ambiguous choice, but let us run with it.
3 Basic SDEs
TBD.
4 In PDEs
Learning stochastic partial differential equations where a whole random field evolves in time is something of interest to me; see spatiotemporal nets and spatiotemporal dynamics for more on that theme.
See differentiable PDE solvers for now.
5 With sparse SDEs
For least-squares system identification see sparse stochastic processes.
6 Neural approximation
7 Via simulations only
8 Controlled differential equations
TBD
9 Method of adjoints
A trick in differentiation which happens to be useful in differentiating likelihood (or other functions) of time-evolving systems e.g. Errico (1997). If the system is deterministic, this is not too bad. It is complicated in stochastic systems.
For now, see the method of adjoints in the autodiff notebook.
10 Tooling
10.1 Python
Diffrax is a JAX-based library providing numerical differential equation solvers.
Features include:
- ODE/SDE/CDE (ordinary/stochastic/controlled) solvers
- lots of different solvers (including
Tsit5
,Dopri8
, symplectic solvers, implicit solvers)- vmappable everything (including the region of integration)
- using a PyTree as the state
- dense solutions
- multiple adjoint methods for backpropagation
- support for neural differential equations.
From a technical point of view, the internal structure of the library is pretty cool — all kinds of equations (ODEs, SDEs, CDEs) are solved in a unified way (rather than being treated separately), producing a small tightly-written library.
10.2 Julia
Chris Rackauckas is a veritable wizard with this stuff; read his blog.
Here is a tour of fun tricks with stochastic PDEs. There is a lot of tooling for this; DiffEqOperators … does something. DiffEqFlux (EZ neural ODEs works with Flux and claims to make neural SDE simple.
+1 for Julia here.