<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Uncertainty Quantification | Jonas Kneifl</title><link>https://jonaskneifl.com/tag/uncertainty-quantification/</link><atom:link href="https://jonaskneifl.com/tag/uncertainty-quantification/index.xml" rel="self" type="application/rss+xml"/><description>Uncertainty Quantification</description><generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><lastBuildDate>Tue, 14 Apr 2026 00:00:00 +0000</lastBuildDate><image><url>https://jonaskneifl.com/media/logo_hu03f9a0fa0db54419c4c274e8859d8cd7_28119_300x300_fit_lanczos_3.png</url><title>Uncertainty Quantification</title><link>https://jonaskneifl.com/tag/uncertainty-quantification/</link></image><item><title>VENI, VINDy, VICI</title><link>https://jonaskneifl.com/post/vindy/</link><pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate><guid>https://jonaskneifl.com/post/vindy/</guid><description>&lt;p>Complex physical systems — think fluid flows, structural vibrations, or chemical reactions — are typically modeled by partial differential equations (PDEs). Solving these PDEs numerically is accurate but expensive: a single simulation can take hours or days. Reduced-order models (ROMs) or deep learning surrogate models tackle this by finding a low-dimensional representation of the system that is cheap to evaluate. The catch is that most ROMs are deterministic and assume clean, reliable data, neither of which holds in practice; while data-driven approaches often lack interpretability.&lt;/p>
&lt;p>&lt;strong>VENI, VINDy, VICI&lt;/strong> [&lt;a href="https://doi.org/10.1016/j.neunet.2026.108543" target="_blank" rel="noopener">paper&lt;/a>] addresses those issues at once. It builds a generative ROM that (1) handles noisy input data, (2) identifies interpretable governing equations in a low-dimensional space, and (3) produces predictions with calibrated uncertainty estimates — all within a single probabilistic framework.&lt;/p>
&lt;figure id="figure-overview">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Overview of the VENI, VINDy, VICI framework: noisy snapshots are encoded into a probabilistic latent space (VENI), governing equations are identified as distributions over sparse coefficient vectors (VINDy), and predictions are decoded back into the full space with uncertainty intervals (VICI)."
src="https://jonaskneifl.com/post/vindy/featured.gif"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Figure&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Overview of the VENI, VINDy, VICI framework: noisy snapshots are encoded into a probabilistic latent space (VENI), governing equations are identified as distributions over sparse coefficient vectors (VINDy), and predictions are decoded back into the full space with uncertainty intervals (VICI).
&lt;/figcaption>&lt;/figure>
&lt;div class="alert alert-note">
&lt;div>
The code is available on GitHub: &lt;a href="https://github.com/jkneifl/VENI-VINDy-VICI" target="_blank" rel="noopener">github.com/jkneifl/VENI-VINDy-VICI&lt;/a>
&lt;/div>
&lt;/div>
&lt;hr>
&lt;h2 id="the-big-picture">The Big Picture&lt;/h2>
&lt;p>The framework consists of three tightly coupled components:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>VENI&lt;/strong> — &lt;em>Variational Encoding of Noisy Inputs&lt;/em>: compress high-dimensional, noisy state snapshots into a low-dimensional probabilistic latent space using a variational autoencoder.&lt;/li>
&lt;li>&lt;strong>VINDy&lt;/strong> — &lt;em>Variational Identification of Nonlinear Dynamics&lt;/em>: discover sparse governing equations in the latent space, where the equation coefficients are themselves probability distributions.&lt;/li>
&lt;li>&lt;strong>VICI&lt;/strong> — &lt;em>Variational Inference with Certainty Intervals&lt;/em>: propagate both latent dynamics and the coefficient uncertainty forward in time to produce predictions with confidence bounds.&lt;/li>
&lt;/ul>
&lt;p>What sets this apart from standard ROMs is that uncertainty is embedded into every step, from the encoding of raw data all the way to the final prediction.&lt;/p>
&lt;hr>
&lt;h2 id="veni-encoding-with-a-variational-autoencoder">VENI: Encoding with a Variational Autoencoder&lt;/h2>
&lt;p>A standard autoencoder maps each input snapshot
$\mathbf{x} \in \mathbb{R}^N$ to a single point
$\mathbf{z} \in \mathbb{R}^n$ in a low-dimensional latent space (
$n \ll N$). This works well for clean data, but when measurements are noisy, the encoder has no principled way to separate signal from noise.&lt;/p>
&lt;p>A &lt;strong>variational autoencoder&lt;/strong> (VAE) takes a different approach: instead of mapping to a point, the encoder
$\boldsymbol{\phi}$ maps each input to a &lt;em>distribution&lt;/em> over the latent space,&lt;/p>
$$
q_{\boldsymbol{\phi}}(\mathbf{z} \mid \mathbf{x}) = \mathcal{N}\!\left( \boldsymbol{\mu}_{\boldsymbol{\phi}}(\mathbf{x}),\, \text{diag}(\boldsymbol{\sigma}^2_{\boldsymbol{\phi}}(\mathbf{x}))\right).
$$
&lt;p>Concretely, the encoder network outputs two vectors — a mean
$\boldsymbol{\mu}$ and a standard deviation
$\boldsymbol{\sigma}$ — for every input snapshot. A latent state is then &lt;em>sampled&lt;/em> from this Gaussian rather than being read off directly. The decoder takes this sample and reconstructs the full-dimensional state.&lt;/p>
&lt;div class="alert alert-note">
&lt;div>
The encoder does not output a single latent vector. It outputs the &lt;strong>mean and variance of a Gaussian distribution&lt;/strong>. The latent state used for decoding is a &lt;em>sample&lt;/em> from that distribution.
&lt;/div>
&lt;/div>
&lt;p>Training maximises the &lt;strong>evidence lower bound&lt;/strong> (ELBO), where a reconstruction term encourages the decoder to faithfully recover the input and the KL divergence pulls the learned posteriors towards a standard Gaussian prior (see paper for details). The balance between the two forces the latent space to be both informative and smooth — any noise in the input is naturally absorbed by the width of the posterior.&lt;/p>
&lt;p>The practical effect is elegant: clean snapshots get narrow posteriors (the encoder is confident about where they live in the latent space), while noisy or ambiguous snapshots get wider posteriors (the encoder admits its uncertainty). This propagates naturally into downstream uncertainty estimates.&lt;/p>
&lt;hr>
&lt;h2 id="vindy-identifying-dynamics-as-distributions">VINDy: Identifying Dynamics as Distributions&lt;/h2>
&lt;h3 id="from-sindy-to-vindy">From SINDy to VINDy&lt;/h3>
&lt;p>Once we have a low-dimensional latent trajectory
$\mathbf{z}(t) \in \mathbb{R}^n$, we want to find the governing equations of its dynamics. &lt;strong>SINDy&lt;/strong> (Sparse Identification of Nonlinear Dynamics) does this by assuming the right-hand side of the latent ODE is a sparse linear combination of candidate functions:&lt;/p>
$$
\dot{\mathbf{z}}(t) = \boldsymbol{\Xi}\,\boldsymbol{\Theta}(\mathbf{z}),
$$
&lt;p>where
$\boldsymbol{\Theta}(\mathbf{z}) = [1,\, z_1,\, z_2,\, z_1^2,\, z_1 z_2,\, \dots] \in \mathbb{R}^{r} $ is a library of candidate functions and
$\boldsymbol{\Xi} \in \mathbb{R}^{n \times r}$ is a sparse coefficient vector — most entries are zero, meaning only a handful of terms actually drive the dynamics. This sparsity makes the identified model interpretable: we get an explicit equation rather than a black-box neural network.&lt;/p>
&lt;p>Standard SINDy fits a single coefficient vector, which is fine for clean data but fragile in the presence of noise: small errors in
$\dot{\mathbf{z}}$ can corrupt the identified equations.&lt;/p>
&lt;p>&lt;strong>VINDy&lt;/strong> replaces the point-estimate coefficients with &lt;em>distributions&lt;/em>:&lt;/p>
$$
\boldsymbol{\Xi}_i \sim \mathcal{L}(\mu_i, \sigma_i^2), \quad i = 1, \dots, n_\text{lib}.
$$
&lt;p>Each coefficient is now a Gaussian
$\mathcal{N}$ or Laplacian
$\mathcal{L}$ distribution parametrized by a learnable location
$\mu_i$ and scaling factor
$\sigma_i$. A coefficient with a large mean and small variance corresponds to a term that is confidently important. A coefficient near zero with large variance corresponds to a term that could be pruned — the model is uncertain whether it belongs in the equation at all.&lt;/p>
&lt;figure id="figure-coeffs">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="https://jonaskneifl.com/uploads/coefficient_evolution.gif" alt="Evolution of the coefficient distributions during training. Relevant terms converge to tight Laplacian distributions away from zero; irrelevant terms collapse towards zero with small variance, achieving automatic sparsification." loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Figure&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Evolution of the coefficient distributions during training. Relevant terms converge to tight Laplacian distributions away from zero; irrelevant terms collapse towards zero with small variance, achieving automatic sparsification.
&lt;/figcaption>&lt;/figure>
&lt;h3 id="training">Training&lt;/h3>
&lt;p>VINDy is trained jointly with the VAE by adding a dynamics term to the ELBO. Latent states
$\mathbf{z}(t)$ are sampled from the VAE encoder, latent time derivatives
$\dot{\mathbf{z}}$ are computed via the chain rule, and the coefficient distributions are optimized so that
$\boldsymbol{\Xi}\,\boldsymbol{\Theta}(\mathbf{z})$ matches
$\dot{\mathbf{z}}$ in expectation. A sparsity-promoting prior (analogous to the KL term in the VAE) further encourages most coefficients to shrink to zero, recovering interpretable, parsimonious dynamics.&lt;/p>
&lt;p>The animation above captures the key behaviour: as training progresses, most coefficient distributions collapse towards zero while a small subset converge to confident, non-zero values — the framework automatically discovers which terms matter.&lt;/p>
&lt;hr>
&lt;h2 id="vici-predictions-with-uncertainty-intervals">VICI: Predictions with Uncertainty Intervals&lt;/h2>
&lt;p>With a trained VAE and a distribution over governing equations in hand, making predictions is straightforward:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Sample&lt;/strong> multiple coefficient vectors
$\boldsymbol{\Xi}^{(k)} \sim \mathcal{L}(\boldsymbol{\mu}_\Xi, \text{diag}(\boldsymbol{\sigma}^2_\Xi))$ and latent initial conditions
$\boldsymbol{z}^{(k)}_0 \sim \mathcal{N}\!\left( \boldsymbol{\mu}_{\boldsymbol{\phi}}(\mathbf{x}),\, \text{diag}(\boldsymbol{\sigma}^2_{\boldsymbol{\phi}}(\mathbf{x}))\right)$.&lt;/li>
&lt;li>&lt;strong>Integrate&lt;/strong> the latent ODEs
$\dot{\mathbf{z}} = \boldsymbol{\Xi}^{(k)}\,\boldsymbol{\Theta}(\mathbf{z})$ forward from the latent initial conditions, giving a bundle of latent trajectories
$\{\mathbf{z}^{(k)}(t)\}$.&lt;/li>
&lt;li>&lt;strong>Decode&lt;/strong> each trajectory back to the full state space using the VAE decoder.&lt;/li>
&lt;li>&lt;strong>Summarise&lt;/strong> the resulting ensemble: the mean is the point prediction; the spread gives the uncertainty interval.&lt;/li>
&lt;/ol>
&lt;p>This yields not just a single trajectory but a &lt;em>predictive distribution&lt;/em> over future states. The uncertainty grows naturally for longer horizons or when the initial condition lies away from the training distribution — precisely the situations where a user most needs to know how much to trust the model.&lt;/p>
&lt;p>Two sources of uncertainty are represented separately and propagate independently:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Data noise&lt;/strong> (captured by
$\boldsymbol{\sigma}^2_{\boldsymbol{\phi}}$ of the VAE encoder)&lt;/li>
&lt;li>&lt;strong>Model uncertainty&lt;/strong> (captured by
$\boldsymbol{\sigma}^2_\Xi$ of the VINDy coefficients)&lt;/li>
&lt;/ul>
&lt;figure id="figure-vici">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="VICI inference for a new parameter: the encoder samples initial latent states and the VINDy coefficient matrices from their learned distributions, integrates the latent ODE forward in time, and decodes the resulting ensemble of trajectories back to the full state space. The spread across decoded snapshots (top row) directly reflects the model&amp;#39;s uncertainty." srcset="
/post/vindy/vici_hu646cb96c87a0a354aebe33d1bc7e6ba6_118747_a779f2f9fe3245a1a5b04bc5ef67c51d.webp 400w,
/post/vindy/vici_hu646cb96c87a0a354aebe33d1bc7e6ba6_118747_4f234967434a2012a197e00461e8487e.webp 760w,
/post/vindy/vici_hu646cb96c87a0a354aebe33d1bc7e6ba6_118747_1200x1200_fit_q75_h2_lanczos.webp 1200w"
src="https://jonaskneifl.com/post/vindy/vici_hu646cb96c87a0a354aebe33d1bc7e6ba6_118747_a779f2f9fe3245a1a5b04bc5ef67c51d.webp"
width="760"
height="336"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Figure&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
VICI inference for a new parameter: the encoder samples initial latent states and the VINDy coefficient matrices from their learned distributions, integrates the latent ODE forward in time, and decodes the resulting ensemble of trajectories back to the full state space. The spread across decoded snapshots (top row) directly reflects the model&amp;rsquo;s uncertainty.
&lt;/figcaption>&lt;/figure>
&lt;hr>
&lt;h2 id="example-reactiondiffusion-system">Example: Reaction–Diffusion System&lt;/h2>
&lt;p>We applied VENI, VINDy, VICI among others to a reaction–diffusion system that generates rotating spiral waves — a PDE with rich spatio-temporal dynamics that lives on a genuinely low-dimensional manifold.&lt;/p>
&lt;p>The full state is a spatial grid with thousands of degrees of freedom. The framework compresses this to just &lt;strong>two latent variables&lt;/strong>, finds an interpretable oscillatory equation governing their interaction via VINDy, and uses VICI to predict future states together with uncertainty bounds — closely matching the high-fidelity simulation while providing a measure of confidence in the prediction.&lt;/p>
&lt;p>The latent dynamics take the form of a simple nonlinear oscillator, and the VINDy coefficients cleanly identify the relevant coupling terms. This interpretability is a direct consequence of the sparse probabilistic identification: rather than a black-box neural ODE, we obtain an equation we can inspect, simulate cheaply, and reason about physically.&lt;/p>
&lt;figure id="figure-rd">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Application to the reaction–diffusion system. Top left: three snapshots of training data corrupted with 20% noise. Bottom left: the VENI encoder maps each snapshot to a two-dimensional latent state, tracing out a closed orbit in the phase portrait. Right: the identified posterior distributions over the VINDy coefficient matrix — a handful of terms carry tight, non-zero distributions while the rest collapse to zero, yielding a sparse and interpretable latent ODE." srcset="
/post/vindy/RD_huf75b0875fadd5a14bc0cf9b92f209bcb_215685_6a862f35530e1b405a262c6ccfcafbc9.webp 400w,
/post/vindy/RD_huf75b0875fadd5a14bc0cf9b92f209bcb_215685_eaf0783a1c034a152e4ed95ebe84dc03.webp 760w,
/post/vindy/RD_huf75b0875fadd5a14bc0cf9b92f209bcb_215685_1200x1200_fit_q75_h2_lanczos.webp 1200w"
src="https://jonaskneifl.com/post/vindy/RD_huf75b0875fadd5a14bc0cf9b92f209bcb_215685_6a862f35530e1b405a262c6ccfcafbc9.webp"
width="760"
height="535"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Figure&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Application to the reaction–diffusion system. Top left: three snapshots of training data corrupted with 20% noise. Bottom left: the VENI encoder maps each snapshot to a two-dimensional latent state, tracing out a closed orbit in the phase portrait. Right: the identified posterior distributions over the VINDy coefficient matrix — a handful of terms carry tight, non-zero distributions while the rest collapse to zero, yielding a sparse and interpretable latent ODE.
&lt;/figcaption>&lt;/figure>
&lt;hr>
&lt;h2 id="why-does-this-matter">Why Does This Matter?&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Property&lt;/th>
&lt;th>Standard ROM&lt;/th>
&lt;th>VENI, VINDy, VICI&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Handles noisy data&lt;/td>
&lt;td>✗&lt;/td>
&lt;td>✓&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Interpretable dynamics&lt;/td>
&lt;td>Partial&lt;/td>
&lt;td>✓ (sparse equations)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Uncertainty quantification&lt;/td>
&lt;td>✗&lt;/td>
&lt;td>✓ (end-to-end)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Generative&lt;/td>
&lt;td>✗&lt;/td>
&lt;td>✓&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Works without knowledge of PDE&lt;/td>
&lt;td>(✓)&lt;/td>
&lt;td>✓&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The combination of interpretability and probabilistic uncertainty quantification is what distinguishes this approach. An engineer using the model gets not just a fast surrogate, but also an explicit equation and a principled confidence estimate — both critical for any safety-relevant application.&lt;/p>
&lt;hr>
&lt;h3 id="did-you-find-this-page-helpful-consider-sharing-it">Did you find this page helpful? Consider sharing it!&lt;/h3></description></item></channel></rss>