Module 1·Part F — The process·14 min
The forward process, and why it is Gaussian
The closed-form marginal is the whole design. Tweedie turns denoising into score estimation, and that identity is what makes everything downstream work.
The core mental model
The forward process adds Gaussian noise on a schedule, and the single property that everything else is built on is that its marginal has a closed form:
You can jump to any noise level in one step without simulating the chain. That is what makes training a cheap Monte Carlo estimate: sample , sample , sample , take one gradient step. Without the closed form you would have to unroll hundreds of steps per training example and the whole approach would be uncompetitive. Every design choice in the forward process exists to protect this property.
Gaussian is not an aesthetic preference either. Three things have to hold simultaneously, and the Gaussian is essentially the only convenient family where they all do. Marginals stay in the family under composition, giving the closed form above. The reverse of a sufficiently small forward step is itself approximately Gaussian — a classical result going back to Feller — so the reverse process is representable by a model that predicts a mean and a variance, rather than something arbitrarily complicated. And the score of a Gaussian-smoothed distribution is recoverable from the conditional mean, which is Tweedie’s formula:
Read that identity in the direction that matters: a denoiser is a score model. Train a network to predict the clean sample (or equivalently the noise) under MSE, and the optimum is the conditional expectation, which is an affine function of . You did not train a denoiser and then cleverly repurpose it; the denoiser was always estimating the score of the noise-perturbed data distribution, and the score is exactly the quantity the reverse SDE needs. This is the hinge the entire field turns on, and it is why “denoising diffusion” and “score-based generative modelling” turned out to be the same paper written twice.
The formulas and the numbers
The definitions worth being able to write down without looking them up:
| Quantity | Definition / value |
|---|---|
| Marginal | |
| SNR | |
| Tweedie | |
| Score from noise prediction | |
| DDPM default | , linear |
| (DDPM linear) | — not zero |
| Karras range | |
| log-SNR | half signal, half noise — the middle of the process |
Two formulations, one process:
| Variance preserving (DDPM) | Variance exploding (NCSN) | |
|---|---|---|
| Marginal | ||
| held at ~1 | grows to | |
| Terminal | ||
| Relation | with |
Critical thinking
Why Gaussian noise? Give the reasons that would actually break if you chose something else.
Three requirements have to hold at once.
- Closed-form marginals. Composing Gaussians gives a Gaussian, so is known analytically and training samples directly. With almost any other noise family you would have to simulate the chain per example — hundreds of forward passes per gradient step.
- Gaussian reverse steps. For a small enough step, the reverse conditional is approximately Gaussian. This is what licenses a model that outputs a mean (and optionally a variance) rather than an arbitrary distribution. If reverse steps were not approximately Gaussian you would need a far more expressive per-step model, and the step count could not be traded against quality the way it is.
- Tweedie. The score is recoverable from the posterior mean, so an MSE-trained denoiser is a score model. This is a property of the exponential family, not a general fact.
Discrete corruption processes — masking, absorbing states, multinomial diffusion — drop the second and third and replace them with a categorical machinery. They work, and they are the right choice for genuinely discrete data, but they lose the ODE view in Module 4 and with it most of the fast samplers.
What exactly does Tweedie's formula buy you?
It collapses two apparently different research programmes into one, and it tells you what your network is really computing.
Concretely: train under . The Bayes-optimal predictor of an MSE objective is the conditional expectation, so at convergence . Substituting the forward marginal and rearranging,
So the noise prediction is the score up to a known scalar. Three consequences follow immediately. The reverse SDE and the probability-flow ODE (Module 4) can be written directly in terms of the network output, so every ODE solver in the numerical analysis literature becomes available. Guidance (Module 6) is score arithmetic — you add scaled score terms, which is only meaningful because the output is a score. And you can convert freely between -, -, - and score-parameterisations at inference, because they are affine reparameterisations of one quantity (Module 2).
The mental shift worth making: the network is not learning “how to remove noise”. It is learning a vector field — the gradient of the log-density of the data blurred at scale — and denoising is simply the cheapest supervised way to fit it.
Are VP and VE actually different models?
No. They are the same family under a change of variables, and treating them as rival designs is a historical artefact of the two lineages meeting late.
Set . Then the VP sample is exactly the VE sample rescaled: , and the scores relate by the same factor. Karras et al. made this explicit by writing all of them as one ODE with a choice of scaling and noise , then arguing those choices should be made on numerical grounds rather than probabilistic ones.
What genuinely differs is conditioning of the numerics, and that is not nothing. VP keeps the network’s input variance around 1 at every noise level, which is friendly to normalisation layers. VE inputs span orders of magnitude, so it needs explicit input scaling and a -dependent output skip connection to stay well-conditioned — the preconditioning that the EDM formulation makes explicit.
So the right question is never “VP or VE” but “what scaling keeps the network’s inputs, targets and loss weighting well-conditioned across noise levels”, which is Module 2.
Why can many diffusion models not generate a genuinely black image?
Because the terminal signal-to-noise ratio is not actually zero, so training and sampling start from different distributions.
With the standard linear schedule, , giving . Tiny — but the mean brightness of an image is a very low-frequency, high-variance-across-dataset quantity, so that small surviving component is informative. During training the model always sees an that quietly encodes the image’s mean level, and it learns to rely on it. At sampling time you hand it pure , whose mean is zero. The model duly produces images with roughly average brightness, and cannot be prompted out of it.
The fix is to rescale the schedule so exactly, which requires also switching to a -parameterisation (Module 2), because -prediction is degenerate at zero SNR — if there is no signal, predicting the noise is trivial and gives no gradient toward .
The general lesson is worth more than the specific bug: any mismatch between the training distribution of and the sampling prior shows up as a systematic bias in the output, and because it lives at the highest noise level it affects the most global attributes — brightness, colour balance, overall composition.
Self-check
Write the forward marginal and say which property of it makes training cheap.
with . Being closed-form means you can jump to any in one step, so training is: sample , sample , sample , one forward pass. Without it you would simulate the chain per example and pay hundreds of passes per gradient step.
State Tweedie's formula and convert a noise prediction into a score.
. Rearranged for a noise-prediction network, . So an MSE-trained denoiser is a score model up to a known scalar — the identity that makes ODE samplers and guidance possible.
Give the three properties of Gaussian noise that the framework depends on.
Closed-form composition, so marginals stay Gaussian and training can sample directly; small reverse steps are approximately Gaussian, so a mean-predicting network suffices; and Tweedie, so the score is recoverable from the posterior mean. Discrete corruption processes give up the second and third, which is why they lose the ODE view and the fast solvers built on it.
Relate VP and VE.
They are one process under a change of variables: with , . What genuinely differs is numerical conditioning — VP holds input variance near 1, while VE spans orders of magnitude and needs explicit input scaling and a -dependent skip connection to stay well-behaved.
Why does a non-zero terminal SNR bias the output, and why does fixing it force a parameterization change?
leaves a faint trace of in — enough to encode mean brightness. Training uses that leak; sampling starts from pure noise which has none, so outputs regress to average brightness. Enforcing fixes the mismatch, but at zero SNR predicting is trivial and carries no information about , so the objective must move to -prediction.