Score SDE: Score-Based Generative Modeling through Stochastic Differential Equations
Gradually noising data is a stochastic differential equation, and running that equation backward with a learned score generates new data.
Score matching with Langevin dynamics and denoising diffusion turn out to be two discretizations of one family of equations. The same learned score then gives a sampler with an error-correcting step, a deterministic ODE with exact likelihoods, and conditional generation from an unconditional model.
Explaining the paperScore-Based Generative Modeling through Stochastic Differential EquationsIn 2019 a score-matching model reached an FID (a distance between generated and real image statistics; lower is better) of 25.32 on CIFAR-10; in 2020 a denoising diffusion model reached 3.17, by what looked like a different method. Treating both as limits of continuous noising processes, the paper gets the FID down to 2.20.
By late 2020 two families of generative models trained on noised images. Score matching with Langevin dynamics (SMLD), the line of NCSN, added Gaussian noise at a ladder of growing scales, trained one network to estimate the gradient of the log-density at every scale, and generated by walking down the ladder with a noisy gradient-following sampler. DDPM defined a 1000-step chain that shrinks an image slightly and adds a little noise at each step, trained a network to undo one step, and generated by running the chain in reverse.
Song and coauthors let the number of noise scales go to infinity. Infinitely many, infinitely close scales make the noising a continuous process driven by random noise, which is a stochastic differential equation (SDE). A 1982 result of Brian Anderson gives the SDE that runs any such process backward in time, and that reverse equation contains exactly one unknown: the gradient of the log-density of the noised data, called the score, at every noise level. SMLD and DDPM were both already training networks to estimate that quantity.
The page follows the paper's order:
- the forward SDE, which turns data into noise and has nothing to learn;
- the reverse SDE, which turns noise into data and needs the score;
- denoising score matching, which learns the score by regression;
- VE, VP and sub-VP, the three forward SDEs the paper uses, two of which are SMLD and DDPM;
- the probability-flow ODE, a deterministic process with the same marginals, and its exact likelihoods;
- predictor-corrector sampling, and conditional generation by adding one gradient.
The forward SDE: noising data as a continuous process
A 32×32 color image is a vector of 3072 numbers, a point in 3072-dimensional space. Real images occupy a tiny region of that space: pick 3072 random numbers and you get static. Generating an image means producing a point inside that region, starting from something easy to sample.
The paper builds the path in the opposite direction first. A process runs over time . At it is a data sample, drawn from . Noise is mixed in continuously, and by the distribution is a fixed Gaussian, the prior, which carries no information about the data and is trivial to sample. The rule for one infinitesimal step is an Itô SDE:
is the drift, a deterministic velocity that can depend on position. is the diffusion coefficient, a scalar that sets how much noise enters at time . is a standard Wiener process (Brownian motion): over a step of length , its increment is Gaussian with variance in every coordinate. The paper takes to be a scalar that does not depend on for ease of presentation and generalizes to a matrix in its Appendix A. The forward SDE has no trainable parameters. The designer picks and so that ends up close to a known Gaussian.
To simulate (5) on a computer, replace with a small step and with , (the Euler-Maruyama method). For a worked step, take the forward SDE that DDPM turns into, with , , and the paper's schedule on . At , , and with one step is
A pixel at 0.8 moves to 0.796 plus a Gaussian kick of standard deviation 0.10. A thousand such steps from to multiply the original signal by (half of in the exponent), which is 0.0066, so what remains at is 0.66% of the image plus noise of variance , a standard Gaussian to four decimals.
Drag in Figure 1 to run this SDE on three clusters of 2D points. The clusters spread and merge into one blob at the origin, and the white path is one particle's simulated trajectory, which wanders because every step adds a fresh kick.
At the cloud no longer depends on which cluster a particle started in. Going back has to restore that information at every noise level, and the next section shows that the one quantity it needs is the score.
How the reverse-time SDE generates data
A random process played backward in time is in general a different kind of process. Anderson (1982) proved that diffusions are an exception: the time-reversal of a diffusion is again a diffusion, with the same noise coefficient and a drift that can be written down. For the forward SDE (5), the reverse-time SDE is
Time runs from down to , so is a negative step, and is a Wiener process for time flowing backward. is the distribution of the noised data at time , the cloud in Figure 1 at that slider position. The noise term is the same as in the forward SDE. The drift is the forward drift minus times one new quantity, . The coefficient is the full , with no factor of one half; the half appears later, in the ODE (13).
is the score of : the gradient of the log-density with respect to the data point , not with respect to any model parameters. It is a vector field with one arrow per point in data space, and each arrow points in the direction in which the noised density increases fastest. With the score known at every , generation is simulation: draw from the prior and integrate (6) down to .
The score does not need the density's normalizing constant. A model density is usually written , where is the integral of over all 3072 dimensions and cannot be computed for a neural network. Taking the gradient of the log removes it:
because is a constant. A network that outputs a 3072-dimensional vector can represent a score directly, with no constraint on its architecture. Normalizing flows, which model the density itself, have to restrict their layers to invertible maps with cheap Jacobian determinants so that the density stays normalized and computable.
For one concrete reverse step, use the noising SMLD turns into, which has and noise levels . Discretizing (6) between adjacent levels gives the paper's reverse-diffusion update for this case (Algorithm 2, lines 3 and 5):
Take one-dimensional data distributed as . Noised to level , it is , whose score is . The CIFAR-10 schedule spaces 1000 levels geometrically from 0.01 to 50, so adjacent levels differ by a factor of 1.00856. Stepping from to gives . A particle at has score , so the drift moves it toward zero, and the noise adds a kick with standard deviation . Each single step is mostly noise; the inward drift adds up over hundreds of steps and shrinks the spread from 50 at the prior to 1 at the data.
Figure 2 draws the score of a noised mixture of six clusters. Move the noise level and watch where the arrows point.
Generation therefore needs at every , sharp near the end of generation and smooth at the start, estimated from samples of the data alone.
Learning the score by denoising
Nobody has ground-truth score vectors to regress on, since is unknown. Score matching (Hyvärinen, 2005) gives an objective whose minimizer is the score anyway, and its denoising form (Vincent, 2011) needs nothing but noised training pairs. The paper trains a time-conditioned network with
Read from the inside out: draw a clean sample from the data, draw uniformly from , noise the sample with the forward process to get , and regress the network's output onto the score of the transition kernel , the distribution of given that particular starting point. weights the noise levels.
The target is not the score of , so why does the minimizer equal it? The noised distribution is a mixture, one kernel per data point, averaged:
The gradient of the log of a mixture is the average of the components' gradients, each weighted by the posterior probability that this component produced :
So each training target is a noisy sample whose conditional mean, at that , is the true score, and the squared-error regression converges to that conditional mean. Vincent showed the per-pair objective and the objective with the true score differ by a constant that does not depend on , so they have the same gradients. At the optimum the network equals for almost all and . For Gaussian kernels the identity has a geometric reading (Tweedie's formula): times the score of the noised data points from to , the average clean point that could have produced it.
Figure 3 shows the averaging with seven clean points. Drag the white probe to a noisy location, then press draw a training pair a few times to see single targets.
The target is cheap whenever the drift is affine in , because the kernel is then Gaussian with a closed-form mean and standard deviation . The score of at is , with the variance in the denominator. Writing , the target is , the drawn noise divided by the noise level.
The weighting fixes a scale problem. The expected squared norm of that target is for dimensions. On CIFAR-10 () with noise levels from 0.01 to 50, that runs from down to 1.23, a spread of seven orders of magnitude, and an unweighted loss would spend almost all its gradient on the smallest noise levels. The paper sets , which here is , and the loss becomes , a quantity of order at every noise level. The official code computes exactly that:
# one training step of the score network (VE SDE, CIFAR-10 settings)
x0 = next(loader) # clean images, shape (128, 3, 32, 32)
t = rand(128) * (1 - 1e-5) + 1e-5 # one time per image, t ~ U(1e-5, 1)
mean, std = marginal_prob(x0, t) # VE: mean = x0, std ~ 0.01 * 5000**t
z = randn_like(x0)
x_t = mean + std[:, None, None, None] * z # noised images, same shape
s = score_net(x_t, t) # predicted score, shape (128, 3, 32, 32)
# target score of the kernel is -z / std; lambda(t) = std**2 turns
# lambda * |s - (-z/std)|^2 into |s * std + z|^2
loss = ((s * std[:, None, None, None] + z) ** 2).mean()
loss.backward() # gradient reaches score_net's weights onlyTraining has no sampling loop, no adversary and no chain to unroll: one noise draw, one forward pass and one squared error per image. The objective works for any SDE with an affine drift, and the paper notes that sliced score matching (Song et al., 2019) can replace the denoising target when the kernel has no closed form.
VE, VP and sub-VP: SMLD and DDPM as two SDEs
Choosing and chooses a model family. The paper takes the noising chains of SMLD and DDPM, lets their number of steps go to infinity, and reads off the SDE each one becomes.
SMLD noises a clean sample by adding independent Gaussian noise of growing size and never rescales the signal:
with , so after steps the total added variance is . As the chain becomes an SDE with no drift:
Nothing pulls the signal back, so the variance grows with without bound, and the paper names (9) the Variance Exploding (VE) SDE. In the experiments with and, for CIFAR-10, . The kernel has mean and variance per coordinate (Eq. 31), and the prior is , wide enough that pixel values in are lost in it. Because tends to as while the chain starts from , the VE SDE is undefined at , so the paper solves it on ; that is the 1e-5 in the training code above.
DDPM shrinks the signal at every step as it adds noise:
Scaling by multiplies the variance by , the fresh noise adds , and the two sum to 1, so unit-variance data keeps unit variance at every step. Write , where samples a continuous schedule on ; as the limit is
the Variance Preserving (VP) SDE. The drift pulls toward the origin at the rate that offsets the injected noise. The paper uses and as the endpoints of a linear , which is the used above. With these give DDPM's own schedule of rising linearly to . Its kernel has mean and variance , and its prior is . The names VE and VP are this paper's; neither SMLD nor DDPM used them.
The paper also proposes a new SDE, the sub-VP SDE. It keeps the VP drift and scales down the noise term:
The extra factor is 0 at and approaches 1 as grows, so sub-VP has the same mean as VP, injects less noise early, and reaches the same prior. The paper proves its variance is at most the VP variance at every time. For unit-variance data, writing , Appendix B's formula gives
which is 1 at both ends ( and ) and has its minimum, 0.75, at . That dip is our derivation from the paper's formula, not a number the paper prints. In experiments sub-VP always gave higher likelihoods than VP; the paper reports this result without proposing a mechanism for it. Scrub Figure 4 to compare the three variances.
With one codebase, swapping the forward SDE changes only the kernel's mean and standard deviation in training and the drift and diffusion in sampling. The paper uses that to compare SMLD-style and DDPM-style models with the same samplers and to find better architectures for each (NCSN++ for VE, DDPM++ for VP and sub-VP), which is how SMLD, previously well behind DDPM on FID, catches up with it.
The probability-flow ODE
The reverse SDE adds fresh noise at every step, so two runs from the same prior sample end at different images. The paper shows that every diffusion of the form (5) has a deterministic counterpart, an ordinary differential equation, whose solutions have the same marginal densities at every time:
The paper calls it the probability flow ODE. Compared with the reverse SDE (6), the noise term is gone and the score's coefficient is exactly half, instead of . Individual trajectories differ from the SDE's; the distribution of particles at each is the same.
Both coefficients come out of the Fokker-Planck equation, which describes how the density of an SDE evolves. For (5) with scalar , it reads
The first term moves probability along the drift; the second spreads it. The comes from the second-order Taylor term in Itô's formula, applied to a Wiener increment whose variance is . Since , the spreading term can be rewritten as a flow:
This is the continuity equation for particles moving deterministically with velocity , which is the ODE (13); Appendix D.1 of the paper does this calculation in general form, an idea it credits to Maoutsa et al. (2020). The reverse SDE keeps a noise term, and in reversed time that noise spreads the density by while the reversed process has to contract it by the same amount. The drift has to cancel the noise's spreading and also supply the contraction, two halves, so its score coefficient is the full of Anderson's result. The argument checks that (6) and (13) agree with each other; Anderson (1982) has the rigorous proof of (6).
Figure 5 runs both on a one-dimensional mixture, where is known exactly. The upper panel integrates the reverse SDE, the lower one the ODE, from the same 3000 prior draws with 400 steps. Play it, then switch to the swapped coefficients.
With a learned score in place of the true one, (13) is a neural ODE (Chen et al., 2018): a deterministic, invertible map from data to prior whose velocity is a network, and four properties follow from that.
First, the ODE gives exact likelihoods. As the flow carries a small volume of probability, the density inside changes by the divergence of the velocity (the instantaneous change-of-variables formula):
Take 1D data under the VE SDE. With and , the ODE (13) becomes, after the cancels against the 2 in ,
a form the paper does not print but which follows from (13) directly. DDIM's deterministic sampler is an Euler step of this equation in rescaled coordinates, and Karras et al. (2022, EDM) write their ODE in this form. Here the score is , so and is proportional to . The data point flows to , one standard deviation of the data to one standard deviation of the prior. The divergence integrates to nats. The prior density at 50.01 is , and adding 3.912 gives , which is exactly. A VAE's ELBO only bounds this number from below. The divergence of a real network over 3072 dimensions is too expensive to compute exactly, so the paper estimates it with the unbiased Skilling-Hutchinson trace estimator and averages runs to reach the needed accuracy: exact in the sense of no bound, but computed with random probes.
Second, the encoding is unique. The forward SDE has no trainable parameters, so for a given data distribution, integrating (13) forward maps each data point to one latent in the prior, the same for any model that learns the score accurately. Third, mixing two latents and decoding gives images in between, the interpolation familiar from flows and VAEs. Fourth, a black-box ODE solver (the paper uses RK45) picks its own step sizes and cuts score-network evaluations by more than 90% without visible loss in sample quality.
Predictor-corrector sampling
A discretized reverse SDE carries error: after each finite step the samples are distributed slightly differently from , and the errors accumulate. Smaller steps reduce the error at a proportional cost. The paper adds a different kind of step that uses the score to pull the samples back toward at a fixed noise level.
That step is Langevin dynamics, a Markov chain Monte Carlo method that needs only the score of its target. In this paper's convention, one Langevin step at level is
The score term alone is gradient ascent on and would pull every sample onto a mode. The noise term spreads them out. With step on the drift and on the noise, the two balance so that, as and the number of steps grows, the samples are distributed as (under regularity conditions). The pairing is specific to this convention; the NCSN paper writes the same dynamics as , so its equals here.
A finite step does not land exactly on . For a Gaussian mode of variance , the update is
and the variance it settles at solves
larger than for any , and unbounded once . Small steps have small bias but need many iterations to move the samples; large steps move fast and settle on the wrong spread. Figure 6 starts from a predictor output packed too tightly around each mode. Raise , the number of Langevin steps, then try the smallest and largest .
A predictor-corrector (PC) sampler alternates the two. The predictor is any numerical solver of the reverse SDE and takes one step down in time; the corrector runs Langevin steps at the new time with the same score network. The earlier methods are special cases: SMLD is an identity predictor (no time step from the SDE) with annealed Langevin as the corrector, and DDPM is its ancestral sampler as the predictor with an identity corrector. DDPM's ancestral sampling is one particular discretization of the reverse VP SDE; the paper's reverse-diffusion predictor discretizes it the way the forward SDE is discretized and does slightly better.
The corrector's step size comes from a signal-to-noise ratio (0.16 for VE on CIFAR-10), with norms averaged over the batch:
If the network's score has the size of the kernel score, , while , so , which is : the step scales with the noise variance, which is how NCSN set its Langevin steps. The full loop for VE, as in the paper's Algorithm 2:
# PC sampling for the VE SDE (Algorithm 2), N = 1000, M = 1
x = randn(shape) * sigma[N] # prior N(0, 50^2 I)
for i in range(N - 1, -1, -1): # noise level runs down to sigma[0]
# predictor: one reverse-diffusion step of Eq. (6)
d = sigma[i + 1] ** 2 - sigma[i] ** 2
x = x + d * score_net(x, sigma[i + 1]) + sqrt(d) * randn_like(x)
# corrector: M Langevin steps at the new level, step size from r = 0.16
for _ in range(M):
g = score_net(x, sigma[i])
z = randn_like(x)
eps = 2 * (r * norm(z) / norm(g)) ** 2
x = x + eps * g + sqrt(2 * eps) * z
return xTable 1 of the paper compares samplers on CIFAR-10 at 1000 and 2000 score evaluations. For the VE model with the reverse-diffusion predictor, 1000 predictor steps give FID 4.79, 2000 give 4.74, 2000 corrector-only steps give 20.43, and PC1000 (1000 of each, 2000 evaluations) gives 3.60. For the VP model the same four are 3.21, 3.19, 19.06 and 3.18. Adding one corrector step per predictor step always improved on P1000 and was typically better than doubling the predictor steps; corrector-only was worst in both columns. With the probability-flow ODE as the predictor, the VE FID drops from 15.41 to 3.51 when correctors are added.
Conditional generation: class labels, inpainting, colorization
To sample from for some condition , the reverse SDE needs the conditional score. Bayes' rule gives
and the last term has no in it, so its gradient vanishes. The conditional reverse SDE is
The first gradient is the unconditional score already trained. The second is the gradient of how likely the condition is given the noisy sample, and both are multiplied by the same . Equation (14) has no extra scale factor on the second term; the guidance scale came later, with Dhariwal and Nichol (2021).
Where the second gradient comes from depends on the task. For class labels, is a classifier that has to work on noised inputs, so the paper trains a separate time-dependent classifier on samples from the forward SDE, with a cross-entropy loss mixed over time steps. The score model is not retrained. For inpainting (imputation) and colorization the paper needs no auxiliary model: the known pixels are replaced at each step by a copy of their true values noised with the forward kernel to the current time, and the unconditional score of the combined image moves the unknown pixels along the reverse SDE. Appendix I.2 derives this as an approximation to the conditional score. Colorization is the same imputation in an orthogonally transformed color space. The demonstrations are class-conditional samples on 32×32 CIFAR-10 and inpainting and colorization on 256×256 LSUN.
In Figure 7, pick a class. The unconditional score sends particles to all three clusters; selecting a class adds the gradient of a classifier's log-probability to the same score.
Every class-conditional sampling step costs a backward pass through the classifier, to get , on top of the score evaluation, and the classifier has to be accurate on images at every noise level. Classifier-free guidance later removed the separate classifier by training one network with and without the condition.
Results and limits
The best sample quality came from NCSN++ cont. (deep, VE): on unconditional CIFAR-10, an Inception score of 9.89 and an FID of 2.20, with PC samplers. The Inception score rewards samples that a classifier labels confidently and that cover many classes (higher is better). The path there was incremental: NCSN++ with PC sampling reached 2.45, training it with the continuous objective (7) brought 2.38, and doubling the residual blocks per resolution ("deep") brought 2.20.
| CIFAR-10 model | FID ↓ | IS ↑ | bits/dim ↓ |
|---|---|---|---|
| NCSN (2019) | 25.32 | 8.87 | – |
| NCSNv2 (2020) | 10.87 | 8.40 | – |
| DDPM (2020) | 3.17 | 9.46 | – |
| StyleGAN2-ADA, conditional | 2.42 | 10.14 | – |
| DDPM++ (VP), PC | 2.78 | 9.64 | – |
| NCSN++ (VE), PC | 2.45 | 9.73 | – |
| NCSN++ cont. (deep, VE) | 2.20 | 9.89 | – |
| DDPM++ cont. (deep, sub-VP), ODE | 2.92 | – | 2.99 |
An FID of 2.20 without labels beat the best class-conditional model then reported, StyleGAN2-ADA at 2.42, on FID. The conditional GAN's Inception score of 10.14 is still higher than 9.89; unconditional StyleGAN2-ADA scores 2.92 and 9.83.
The best likelihood came from a different model, DDPM++ cont. (deep, sub-VP): 2.99 bits per dimension, computed with the probability-flow ODE, with an ODE-sampled FID of 2.92. Bits per dimension is the average number of bits the model needs to encode one pixel channel of a test image, so lower means test images are more probable under the model. The paper calls 2.99 a record for uniformly dequantized CIFAR-10, a comparison that leaves out models evaluated with variational dequantization or on discrete data, and it was reached without maximum-likelihood training. The two sets of numbers also use different checkpoints: Table 3 (2.20 and 9.89) reports the checkpoint with the lowest FID during training, sampled with PC; Table 2 (2.99 and 2.92) reports the last checkpoint, sampled with a black-box ODE solver. VE SDEs gave better samples and worse likelihoods than VP and sub-VP, so the choice of SDE depends on which number matters.
At higher resolution, an NCSN++-style model trained with (7) produced 1024×1024 CelebA-HQ faces, sampled with 2000 PC steps, the first high-fidelity images at that size from a score-based model. The authors note the samples are not perfect, with visible flaws in facial symmetry.
The paper names sampling speed as its main limitation: PC1000 calls the score network 2000 times per sample, and the 1024×1024 sampler runs 2000 predictor steps plus a corrector step after each, where a GAN generates with one forward pass. The paper leaves combining stable score-model training with fast sampling to future work, and lists the samplers' many hyperparameters (step counts, signal-to-noise ratios) as a second limitation. The follow-ups split along those lines: deterministic samplers built on the ODE, such as DDIM, cut the step count; Flow Matching trains an ODE's velocity field directly; and Latent Diffusion runs the same machinery in a compressed latent space. DiffusionBlocks reads the blocks of an ordinary residual network as steps of a reverse diffusion.
Questions you might still have
If the reverse SDE and the probability-flow ODE produce the same distributions, why keep both?
They share the marginal densities at every time, not the paths. The SDE adds fresh noise at each step, which can wash out earlier errors; in the paper's Table 1 the reverse-diffusion SDE predictor gives FID 4.79 for the VE model at 1000 steps where the ODE predictor gives 15.41. The ODE is deterministic and invertible, which gives exact likelihoods, a unique latent per image, interpolation, and adaptive solvers that cut network evaluations by over 90%.
Why does the ODE have half the score coefficient of the SDE?
In the Fokker-Planck equation the noise spreads the density by one half g squared times the Laplacian of p. The ODE replaces that spreading with a deterministic velocity, which costs one half g squared times the score. The reverse SDE keeps its noise, so its drift has to cancel the noise's spreading and also undo the forward spreading: two halves, the full g squared. Writing one half in the reverse SDE samples a distribution that is too wide.
Is this just DDPM in continuous time?
DDPM is one point in it: its noising chain is a discretization of the VP SDE and its ancestral sampler is one discretization of the reverse VP SDE. The paper adds the VE SDE (the limit of SMLD/NCSN), the new sub-VP SDE, the probability-flow ODE with exact likelihoods, predictor-corrector sampling, and conditional generation from an unconditional score model.
How does conditional generation work without retraining?
The conditional reverse SDE adds the gradient of log p_t(y | x) to the unconditional score. For class labels that gradient comes from a separately trained classifier that works on noised images, so something is trained, but the score model is reused as is. Inpainting and colorization need no extra model: at each step the known pixels are replaced by their true values noised to the current time, and the unconditional score moves the rest, an approximation the paper derives in its Appendix I.2.
What does the score network actually predict for an image?
A tensor the same shape as the input, 3 by 32 by 32 for CIFAR-10, at a given noise level. Trained with the denoising loss, it approximates minus the added noise divided by the noise level, averaged over all clean images that could have produced this noisy one. Multiplied by sigma squared it points from the noisy image to that average clean image.
How slow is sampling?
The CIFAR-10 PC sampler takes 1000 predictor steps and one Langevin corrector step after each, 2000 score-network evaluations per batch of samples. The 1024 by 1024 CelebA-HQ sampler uses 2000 predictor steps. An adaptive ODE solver reduces the count by more than 90%, and later samplers such as DDIM reduce it further.
Footnotes & further reading
- The paper: Song, Sohl-Dickstein, Kingma, Kumar, Ermon, Poole, Score-Based Generative Modeling through Stochastic Differential Equations (ICLR 2021). Code (JAX), code (PyTorch).
- The time-reversal of a diffusion: Anderson, Reverse-time diffusion equation models (Stochastic Processes and their Applications 12(3), 1982).
- The two ancestors: Song & Ermon, Generative Modeling by Estimating Gradients of the Data Distribution (NCSN / SMLD, 2019), and Ho et al., Denoising Diffusion Probabilistic Models (DDPM, 2020), which builds on Sohl-Dickstein et al., Deep Unsupervised Learning using Nonequilibrium Thermodynamics (2015).
- Score matching and its denoising form: Hyvärinen, Estimation of Non-Normalized Statistical Models by Score Matching (2005), and Vincent, A Connection Between Score Matching and Denoising Autoencoders (2011).
- The probability-flow ODE as a neural ODE: Chen et al., Neural Ordinary Differential Equations (2018); the deterministic-flow construction for Fokker-Planck equations in Maoutsa et al. (2020).
- Guidance after this paper: Dhariwal & Nichol, Diffusion Models Beat GANs on Image Synthesis (2021), which adds a scale to the classifier gradient, and Ho & Salimans, Classifier-Free Diffusion Guidance (2022).
- What the framework grew into: DDIM (2020); Latent Diffusion (Stable Diffusion); the VE-style parameterization and samplers of Karras et al., EDM (2022); Flow Matching (2022); and the residual-network reading in DiffusionBlocks.
How could this explainer be improved? Found an error, or something unclear? I read every message.