Diffusion models for inverse problems and data assimilation
Before this lesson: lesson 11 (the score split of classifier guidance; here the classifier becomes a likelihood), lesson 08 (Tweedie's formula and its second-order form), lesson 09 (the PF-ODE and DDIM), lesson 06 (Langevin corrector steps) and lesson 14 (rank histograms and CRPS). You also need the multivariate Gaussian (conditioning a joint Gaussian). The classical side of data assimilation is in ml-for-science lesson 06 (Kalman filter, EnKF, 4D-Var). Time: about 100 minutes, plus the notebook.
Why this matters #
In an inverse problem you recover an unknown from measurements , where the forward operator maps the unknown to what the sensors see and is measurement noise. Examples: deblurring and inpainting, MRI and CT, seismic imaging, ground-motion maps from a sparse station network, and data assimilation for weather, which estimates the state of the atmosphere from observations. These problems are ill-posed: many fit equally well. The posterior is the honest answer, and the prior decides which solutions are plausible.
A diffusion model is a strong learned prior. The promise is to train the prior once and then solve many inverse problems zero-shot: only the likelihood term changes at sampling time. The problem is that the likelihood term needed at noise level is intractable. Every method approximates it, and the errors make the posterior over-confident or biased. In science you report uncertainty, so you must know what each method computes, where it is exact, and how to test it.
1. Predict first #
2. The picture #
Notation. Noising with ; in VP form and . The measurement noise has standard deviation . Do not confuse the two: is the diffusion noise that the sampler adds and removes, is the noise of the real sensors.
Bayes at every noise level #
The noising does not involve . So the noised posterior is , and its score splits into two terms:
This is the same split as classifier guidance in lesson 11, with the measurement model in place of a classifier. If both terms are exact at every level, any sampler of lesson 09 (reverse SDE, DDIM, PF-ODE) run with this score produces samples of .
The noisy likelihood is the likelihood blurred by the denoiser's uncertainty #
- At low noise, almost fixes , so : sharp.
- At high noise, says little about . Then is close to the prior, and is almost flat in : the guidance should be weak.
- At high noise can also have several modes. Its mean can then lie between them, where neither mode is.
The simplest case. A scalar prior and . Everything is Gaussian, and (Theorem 2 below)
DPS keeps the mean and drops . That single omission explains most of its behavior.
Move the noise level . Top: the exact noisy likelihood of the observation as a function of , and its DPS and ΠGDM approximations. At high noise (small ) the exact curve is wide and flat, but the DPS curve stays as narrow as the measurement noise allows. Bottom: how many times too large the DPS and ΠGDM likelihood scores are; the ratio is for DPS. Make small (precise sensors) and the DPS error at high noise grows. Switch to : ΠGDM becomes exact. Everything is computed in closed form.
The prior is and . At very high noise (), how does the exact noisy likelihood behave as a function of ?
with and . So it tends to the constant : no guidance at the start, which is correct. DPS instead keeps the variance .
3. Definitions and main results #
Setup. The unknown has the prior , learned by a diffusion model. The observation is with . In the linear case with , often with (fewer measurements than unknowns). The denoiser is the Tweedie mean (lesson 08): . The results below hold for any .
Theorem 1 (the posterior score splits) #
Proof.
- Given , the forward noise and the measurement noise are independent. So and are independent given : .
- Marginalize over : .
- Bayes' rule: . Take the log and the gradient in ; does not depend on .
Step 1 also shows that, given , the forward process is the same Gaussian kernel. So the posterior is reversed by the usual reverse process with the conditional score.
Why is intractable. is the full denoising posterior. The network gives only its mean (and, through derivatives, its covariance). Sampling from would mean running the whole reverse process from to 0 inside every step, and the gradient of the log of a Monte Carlo estimate is biased. For a nonlinear , even a Gaussian gives no closed form. So zero-shot methods approximate. One case is exactly solvable.
Which statement about the posterior score is correct?
Theorem 1. The clean likelihood at is a different function (wrong scale and too sharp at high noise). is constant in , so its gradient is 0. A zero-shot method uses the unconditional prior plus the noisy likelihood; no retraining is needed if that term can be computed or approximated.
Theorem 2 (the exact noisy likelihood of a linear-Gaussian problem) #
Let , with , , and . Then
Proof.
- is jointly Gaussian with means and , and . Gaussian conditioning (the Schur complement) gives and . Note that does not depend on .
- By Theorem 1, given we have with and independent. So is Gaussian with mean and covariance .
- is affine in with Jacobian , and does not depend on . The gradient of is . ( is symmetric, because and commute.)
Two checks.
- Adding the prior score gives the score of , where is the exact posterior of given (the Kalman update). So the noised posterior is the exact posterior pushed through the same noising. Section 5 checks this numerically.
- Second-order Tweedie. . This is the general identity , which holds for any prior (lesson 08): the Jacobian of the denoiser gives the posterior covariance.
The family of approximations #
Replace by a Gaussian . For a linear this gives and, treating as constant in ,
The methods differ only in :
| Method | Exact when | |
|---|---|---|
| DPS (Chung et al. 2023) | only in the limit | |
| ΠGDM (Song et al. 2023) | with in VP form | data |
| Moment matching: TMPD (Boys et al. 2023), MMPS (Rozet et al. 2024) | (second-order Tweedie) | Gaussian, for example a Gaussian prior |
| SDA (Rozet and Louppe 2023) | with a fixed (for example ) | a heuristic |
(ΠGDM writes with the VE noise level ; in VP form this is .)
DPS (diffusion posterior sampling, Chung et al. 2023) uses . It works for any differentiable , linear or not. It needs a vector–Jacobian product through the denoiser network at every step, so each step costs a forward and a backward pass. The exact log-likelihood has the factor ; in practice DPS replaces it by a step size with a tuned (the paper uses values from 0.1 to 1). Its biases:
- Too strong at high noise. In the linear-Gaussian case DPS has the right direction but a scale too large (scalar case). As this tends to , which is huge for precise measurements. Early steps are pushed to fit too soon.
- Over-confident samples. The samples are not calibrated posterior samples: their spread is too small and their mean can be biased. In the 1D problem of section 4 (exact posterior ), DPS with the true , no step-size tuning and an accurate PF-ODE solver ends at mean and variance : it overshoots and has a tenth of the right variance (notebook exercise 2). The figure below shows the same effects in 2D.
- The mean lies between modes. For a multimodal , guidance through can point the wrong way; section 5 shows a sign error.
- Step-size tuning hides the scale error. The result can look good while it is not a posterior.
Switch the sampler between the closed-form posterior, the diffusion sampler with the exact conditional score, and DPS. The prior is the 8 Gaussians (blue, exact scores, nothing learned); we observe only the first coordinate, , shown as the yellow band . The exact posterior is again a Gaussian mixture, and the exact-score sampler reproduces it. The DPS samples are too concentrated: compare the standard deviations in the panel. Move down to 0.1: DPS pulls too close to . Set and : the DPS weights of the four plausible modes are wrong.
Covariance-corrected methods. ΠGDM is cheap (an isotropic variance) and exact for white data of unit variance. For data with another variance its is wrong, most at high noise: there the true tends to the data variance, while tends to 1. Moment matching uses the second-order Tweedie covariance, so it is exact for Gaussian priors and recovers Theorem 2. It never forms the Jacobian: it solves by conjugate gradients, where each product with costs one Jacobian–vector product through the network. Its remaining bias: is not Gaussian at high noise.
What exactly does DPS drop, compared with the exact noisy likelihood of a linear-Gaussian problem?
DPS uses : the right mean, but it treats as if it were the true . It keeps the Jacobian (it backpropagates through the denoiser). Because the dropped covariance is large at high noise, its score is too large there by the factor (scalar case).
Zero-shot guidance, amortized training and SDEdit #
- Zero-shot guidance (all methods above). One unconditional prior serves every and at test time. It costs gradients through the network at every step, and the posterior is approximate.
- Amortized conditional model. Train a conditional diffusion model of with as a network input, on simulated or paired data (super-resolution models, CorrDiff downscaling). It is fast at test time (no gradients through the network) and can be well calibrated for the operators and noise levels it was trained on. It must be retrained when the operator, the noise level or the sensor layout changes, and it has an amortization gap: one network must fit the posterior for every .
- SDEdit (Meng et al. 2022). Take a guess (for example itself, or ), noise it to a level , and run the unconditional reverse process. This projects the guess toward the prior and keeps its coarse structure; trades faithfulness against realism. It uses no likelihood and no noise model, so it is not posterior sampling. It fails when is far from the identity, for example with sparse sensors: the guess then does not look like a noisy sample of the data.
A colleague takes a blurry photo, adds noise up to level and runs the unconditional diffusion sampler (SDEdit). The results look sharp and realistic. Are they posterior samples given the blurry photo?
SDEdit projects a guess toward the prior. Small keeps the blur; large forgets the photo. Posterior sampling needs the likelihood with the blur operator and the noise level, through the noisy-likelihood term.
Score-based data assimilation #
Data assimilation estimates the trajectory of a dynamical system from sparse, noisy observations . The classical tools are the Kalman filters (Gaussian, sequential updates) and 4D-Var (the most probable trajectory of a time window, found with an adjoint model); see ml-for-science lesson 06 and the Kalman filter in the time-series track.
Score-based data assimilation (SDA, Rozet and Louppe 2023) has four parts:
- A prior over trajectories. A diffusion model trained on simulated or reanalysis trajectories. It learns the joint law of whole windows, not a one-step forecast.
- Local scores for long trajectories (their section 3.1). The dynamics are Markov, so the score of state depends mainly on a window around . A score network is trained on short windows and slid along the trajectory to assemble the full score, for any length .
- Observation guidance (section 3.2): , with the Jacobian of (as in the extended Kalman filter). The extra covariance term keeps the guidance from being too strong at high noise, without tuning a step size.
- Predictor–corrector sampling (section 3.3): DDIM-type steps plus a few Langevin corrector steps per level (lesson 06), so that errors of the approximate score do not accumulate.
The link to the Kalman smoother. If the prior over trajectories is Gaussian and the observations are linear, the exact posterior over the whole trajectory is Gaussian, and its mean and variance are those of the Kalman smoother (Theorem 2 with = the trajectory). So a diffusion sampler with the exact noisy likelihood must reproduce the Kalman smoother. This is the known-posterior test of SDA.
Switch the sampler. The prior over the 48-step trajectory is a stationary AR(1) process, so the exact posterior is known: its mean (dashed grey) and 90% band (grey) come from the Kalman smoother. The true trajectory is blue and the observations are yellow. The orange lines are samples of the chosen method and its 90% band (dashed). The diffusion sampler with the exact noisy likelihood matches the Kalman smoother. DPS is over-confident: its spread is too small, most at the observations, and its band misses the truth more often than 10% of the time. Change the observation spacing and and compare the coverage numbers.
Compared with the EnKF, SDA needs no Gaussian analysis step and no localization or inflation tuning, and it smooths a whole window at once. Compared with 4D-Var, it needs no tangent-linear or adjoint model, and it returns samples instead of one trajectory. Both classical methods also handle a new observation operator without retraining. The costs of SDA: a trained prior that is only as good as its training trajectories, many network evaluations, and an approximate posterior that must be tested. Manshausen et al. (2024) applied SDA, with a diffusion prior trained on km-scale weather analyses, to observations of 40 weather stations in a central-US test region; they report 10% lower errors at left-out stations than a baseline, and also an ensemble that is not spread out enough.
Checking posterior calibration #
A posterior method can produce sharp, realistic samples and still be wrong. The tests, from the strongest to the weakest:
- Known-posterior tests. Linear-Gaussian problems (as in the figures), Gaussian-process priors with a matched covariance, or small problems where MCMC gives the reference. Compare means, covariances or whole distributions.
- Simulation-based calibration (SBC; Talts et al. 2018). Repeat many times: draw from the prior (or from held-out simulations), simulate , draw posterior samples, and record the rank of among them (per variable or for a summary statistic). For an exact sampler the ranks are uniform on : given , the truth and the samples are exchangeable draws from . Read the rank histogram as in lesson 14: a U-shape means over-confident (like DPS), a dome under-confident, a slope biased.
- Coverage of central credible intervals at several levels (50%, 90%). With test cases, the sampling error of a coverage is .
- Proper scores on held-out synthetic truths (CRPS per variable, energy and variogram scores for fields, spread–skill), and on real data, scores at held-out stations.
A trap. SBC averages over the prior. A sampler that ignores and returns prior samples also gives uniform ranks. So SBC and coverage test calibration but not sharpness. Always add a proper score, which rewards both.
You run 2000 simulated test cases and draw posterior samples for each. The 90% credible intervals contain the truth in 61% of the cases, and the rank histogram has high bars at both ends. What is the most likely problem?
The sampling error is , so 61% is far below 90%. A U-shaped rank histogram means the truth often falls outside the samples: the spread is too small. A sampler that ignores would give about 90% coverage and a flat histogram; only a proper score would expose it.
Answers to section 1. (1) Too strong. In the linear-Gaussian case the exact likelihood score has the covariance and DPS has , so DPS is larger by the factor , up to as . (2) The amortized model takes as an input with a fixed layout, so it must be retrained or fine-tuned. A zero-shot method only changes (one more row of ).
4. Worked example #
Scalar prior , observation with , observed .
(a) Exact posterior. Precisions add: , so the posterior variance is . The mean is .
(b) One noise level, : and .
- .
- .
- . Second-order Tweedie: ✓.
- .
(c) Likelihood scores at . , so .
- Exact: .
- DPS (): , three times too large.
- ΠGDM (, which assumes unit prior variance; here it is 4): , still 1.67 times too large.
- Moment matching (): , exact.
(d) Check with the noised posterior. The prior score is . The sum is . The noised posterior is , and its score at is ✓.
(e) How the DPS error depends on the noise level. The ratio DPS/exact is : for , at , at , at .
5. In code #
NumPy and SciPy check Theorem 2 and the score split in 2D, compare the exact likelihood score with DPS and moment matching for a prior with two modes, and run a calibration check.
import numpy as np
from scipy.special import logsumexp
from scipy.stats import kstest, multivariate_normal, norm
# (1) Theorem 2 in 2D: the formula vs direct Gaussian conditioning of the joint (x_t, y)
S = np.array([[1.0, 0.6], [0.6, 2.0]]); m = np.array([0.5, -1.0])
A = np.array([[1.0, 0.0]]); sy2 = 0.25 # observe the first coordinate only
ab = 0.3; a, s2 = np.sqrt(ab), 1 - ab # a_t and sigma_t^2
St = a**2 * S + s2 * np.eye(2)
J = a * S @ np.linalg.inv(St)
Sig0t = S - a**2 * S @ np.linalg.inv(St) @ S
C = sy2 + A @ Sig0t @ A.T
xt = np.array([0.2, 0.7])
mu0t = m + J @ (xt - a * m)
mean_y = A @ m + a * A @ S @ np.linalg.solve(St, xt - a * m) # Cov(y, x_t) = a A S
var_y = A @ S @ A.T + sy2 - a**2 * A @ S @ np.linalg.solve(St, S @ A.T)
print(np.allclose(A @ mu0t, mean_y), np.allclose(C, var_y)) # True True
print(np.allclose(Sig0t, s2 / a * J)) # True (second-order Tweedie)
# The score split: prior score + likelihood score = score of the noised exact posterior
y = np.array([1.2])
lik = J.T @ A.T @ np.linalg.solve(C, y - A @ mu0t)
prior = -np.linalg.solve(St, xt - a * m)
K = S @ A.T @ np.linalg.inv(A @ S @ A.T + sy2) # Kalman gain
mp, Sp = m + K @ (y - A @ m), S - K @ A @ S # exact posterior of x0
post = -np.linalg.solve(a**2 * Sp + s2 * np.eye(2), xt - a * mp)
print(np.allclose(prior + lik, post)) # True
# (2) A prior with two modes (at -2 and +2): exact likelihood score vs DPS vs moment matching
w, mk, v0, sy2, y = np.array([0.5, 0.5]), np.array([-2.0, 2.0]), 0.25, 0.25, 1.0
def log_pt(x, ab): # log p_t(x_t): a mixture of Gaussians
return logsumexp(np.log(w) + norm.logpdf(x, np.sqrt(ab) * mk, np.sqrt(ab * v0 + 1 - ab)))
def log_joint(x, ab): # log p_t(x_t, y): a mixture of 2D Gaussians
a = np.sqrt(ab)
cov = np.array([[ab * v0 + 1 - ab, a * v0], [a * v0, v0 + sy2]])
return logsumexp([np.log(wk) + multivariate_normal.logpdf([x, y], [a * mu, mu], cov) for wk, mu in zip(w, mk)])
def scores(ab, x, h=1e-5):
a, s2 = np.sqrt(ab), 1 - ab
d = lambda f, z: (f(z + h) - f(z - h)) / (2 * h)
exact = d(lambda z: log_joint(z, ab) - log_pt(z, ab), x)
x0_hat = lambda z: (z + s2 * d(lambda u: log_pt(u, ab), z)) / a # Tweedie mean
J = (x0_hat(x + 1e-3) - x0_hat(x - 1e-3)) / 2e-3 # d x0_hat / d x_t
var = s2 / a * J # second-order Tweedie
return exact, J * (y - x0_hat(x)) / sy2, J * (y - x0_hat(x)) / (sy2 + var)
print("alpha_bar exact DPS moment-matched")
for ab in [0.05, 0.3, 0.7, 0.95, 0.999]:
print(f"{ab:9.3f}" + "".join(f"{v:8.3f}" for v in scores(ab, 0.3)))
# 0.050 0.284 2.717 0.157
# 0.300 0.528 2.078 0.162
# 0.700 0.330 -1.059 -0.259
# 0.950 1.344 1.644 1.363
# 0.999 2.758 2.769 2.758
Near all three agree. At high noise DPS is far too strong. At both Gaussian approximations have the wrong sign. There puts 89% of its mass near and 11% near . Its mean, , is above , so both approximations push down. The exact score pushes up: a larger moves mass away from the mode near , which explains very badly. A single Gaussian cannot represent "which mode".
Third, a calibration check on the problem of section 4. The value of the truth under the claimed posterior distribution function (the PIT, probability integral transform) is the continuous version of the rank:
rng = np.random.default_rng(0)
n = 20000
x_true = rng.normal(0.0, 2.0, n) # x ~ N(0, 4)
y = x_true + rng.normal(0.0, 1.0, n) # exact posterior: N(0.8 y, 0.8)
samplers = {"exact": (0.8 * y, np.sqrt(0.8)),
"too narrow": (0.8 * y, 0.5 * np.sqrt(0.8)),
"biased": (0.8 * y + 0.3, np.sqrt(0.8))}
for name, (mu, sd) in samplers.items():
u = norm.cdf(x_true, mu, sd)
cover = [np.mean(np.abs(u - 0.5) <= p / 2) for p in (0.5, 0.9)]
hist = np.histogram(u, bins=5, range=(0, 1))[0]
print(f"{name:10s} cover50={cover[0]:.3f} cover90={cover[1]:.3f} KS p={kstest(u, 'uniform').pvalue:.2f}", hist)
# exact cover50=0.504 cover90=0.898 KS p=0.84 [3952 4075 4038 3888 4047]
# too narrow cover50=0.268 cover90=0.590 KS p=0.00 [6694 2310 2074 2228 6694]
# biased cover50=0.475 cover90=0.882 KS p=0.00 [6098 4623 3726 3117 2436]
The narrow sampler covers only 27% and 59% instead of 50% and 90% (theory: 0.264 and 0.589), and its histogram is U-shaped. The biased one has nearly correct coverage but a sloped histogram: coverage alone would miss it.
6. Where it shows up #
- Imaging. Super-resolution, inpainting and deblurring benchmarks (DPS, ΠGDM), and MRI and CT reconstruction with score-based priors. In latent diffusion (lesson 13) the guidance also passes through the decoder (latent DPS).
- Weather and climate. SDA was demonstrated on the Lorenz 63 system and a Kolmogorov flow; Manshausen et al. (2024) assimilate weather-station data at km scale. Amortized conditional diffusion is used for downscaling (CorrDiff) and forecasting (GenCast conditions on previous states).
- Seismology. Diffusion priors regularize full-waveform inversion. Conditioning generated ground-motion fields on station recordings is the same inverse problem: selects the station locations, models recording and site noise, and a calibrated posterior gives uncertainty maps between stations.
- Inverse problems with adjoints (ml-for-science lesson 04). A diffusion prior replaces a hand-made regularizer; the forward model and its gradient stay the same.
- Practice. Start with a linear-Gaussian version of your problem, where the exact posterior is known. Then run SBC on simulations, then check held-out real observations.
7. Common mistakes #
- Reading DPS samples as posterior samples. They are over-confident, and the step size was tuned.
- ΠGDM's for data that is not unit-variance. It assumes ; standardize the data or rescale .
- Mixing VP and VE variables. ΠGDM's noise level is in VP terms, and SDA's covariance is . A wrong scale makes the guidance too strong or too weak by that factor.
- Judging samples by PSNR to the truth. The posterior mean maximizes PSNR. A correct posterior sample has twice the expected squared error of the posterior mean ( against ).
- Calling SDEdit posterior sampling. It has no likelihood and no noise model.
- SBC or coverage alone. A sampler that ignores passes both; add a proper score.
- Testing on the prior's own training simulations. That hides a wrong prior; use held-out data.
8. Check yourself #
- Same scalar model as section 4, at . Give , and the ratio DPS/exact.
Answer
; ; ratio . The DPS error shrinks as the noise goes down. - Why does not appear in the posterior score, and why does the forward process not depend on ?
Answer
is a constant in , so its gradient is 0. Given , the forward noise and the measurement noise are independent, so : the same Gaussian kernel. - For the Gaussian prior, show that with .
Answer
, using that and commute. - 2D prior with ; you observe only (). Does the likelihood score move ?
Answer
Yes if . points along , but has off-diagonal entries when , so it spreads the update to . For , is diagonal and keeps its prior: an unobserved, independent variable learns nothing. - Why does SDEdit fail when only 5% of the pixels are observed?
Answer
The starting guess (observed pixels, zeros elsewhere) is not a noisy version of a real image. Noising it to and denoising either keeps the holes (small ) or forgets the observations (large ). Without a likelihood term nothing enforces with the right noise model. - In an SBC run (1000 synthetic cases, 99 posterior samples each), the rank histogram of the truth is U-shaped. What does it mean? What would a sampler that ignores give?
Answer
U-shape: the truth often falls outside the samples, so the posterior is over-confident (as with DPS). A sampler that returns prior samples gives a flat histogram, because averaged over the prior it is calibrated. A proper score such as the CRPS exposes it: the prior is far less sharp than the posterior.
Write the posterior score at noise level for an inverse problem.
.
Define the noisy likelihood .
: the clean likelihood averaged over the denoising posterior.
Why is intractable in general?
It needs the whole denoising posterior , but the network gives only its mean (and covariance through derivatives); sampling it would need a full reverse run per step.
Give for and , .
with , , .
What approximation does DPS make?
: it drops .
Scalar linear-Gaussian case: by which factor is the DPS likelihood score too large?
; it tends to at high noise and to 1 at low noise.
State the second-order Tweedie identity used by moment-matching methods.
.
What is SDEdit, and why is it not posterior sampling?
Noise a guess (for example ) to a level and run the unconditional reverse process; it uses no likelihood and no noise model.
What does a U-shaped SBC rank histogram mean?
The truth often falls outside the posterior samples: the sampler is over-confident (too narrow).
Why can SBC and coverage not detect a sampler that ignores ?
Averaged over the prior, prior samples are calibrated, so ranks are uniform; only a proper score (sharpness) exposes it.
9. Interview angle #
- "How do you solve an inverse problem with an unconditional diffusion model?" — Split the posterior score (Theorem 1); approximate through the Tweedie mean (DPS) or a Gaussian with a covariance; run the usual sampler.
- "What does DPS approximate, and when does it fail?" — It sets : too strong at high noise, over-confident samples, wrong direction for a multimodal .
- "Derive for a linear-Gaussian problem." — Theorem 2: .
- "Guidance or a conditional model?" — Guidance: one prior, any operator, approximate, slow. Conditional: fast and calibrated for its training operators, but retrained for new ones.
- "How do you know your generative data assimilation is calibrated?" — Known-posterior tests, SBC ranks and coverage, proper scores on synthetic truths, held-out stations.
10. Practice #
The notebook for this lesson has five exercises, each with a check cell and a folded solution:
- Compute the exact noisy likelihood of a linear-Gaussian problem and check it against Monte Carlo.
- Run a diffusion sampler with the exact and with the DPS likelihood score on the 1D Gaussian problem and measure the posterior variance bias of DPS.
- Sample the posterior of the 8-Gaussians prior with the exact conditional score and compare the mode weights with the closed-form posterior mixture.
- Write a coverage and rank-histogram test, and apply it to an exact, a too-narrow and a biased sampler.
- Check that the Kalman update gives exactly the Gaussian posterior (gain form against precision form).
11. Watch and read #
- Daras et al., A Survey on Diffusion Models for Inverse Problems (2024): section 2.4 (conditional models vs pre-trained priors), section 3.1 (DPS, ΠGDM, moment matching).
- Chung et al., Diffusion Posterior Sampling for General Noisy Inverse Problems (2023): section 3.1 and Algorithm 1.
- Song, Vahdat, Mardani, Kautz, Pseudoinverse-Guided Diffusion Models for Inverse Problems (ΠGDM, ICLR 2023).
- Boys et al., Tweedie Moment Projected Diffusions For Inverse Problems (2023) and Rozet et al., Learning Diffusion Priors from Observations by Expectation Maximization (2024): moment matching with the second-order Tweedie covariance.
- Rozet and Louppe, Score-based Data Assimilation (2023): local scores, the likelihood approximation and predictor–corrector sampling.
- Manshausen et al., Generative Data Assimilation of Sparse Weather Station Observations at Kilometer Scales (2024).
- Meng et al., SDEdit: Guided Image Synthesis and Editing with Stochastic Differential Equations (2022).
- Talts et al., Validating Bayesian Inference Algorithms with Simulation-Based Calibration (2018).
Runs in your browser with nothing to install. The notebook repeats the key demos and has exercises with checks; solutions are inside, folded.
No Google account needed: Python runs inside your browser. The first start downloads about 40 MB; your changes are saved in this browser only.