One forward step is xt=1−βtxt−1+βtϵ, where ϵ∼N(0,I) is standard Gaussian noise (so Var(ϵ)=1) and is independent of xt−1. Variance of a scaled-plus-independent-noise sum adds the squared scales:
WHY it matters: the shrink factor 1−βtpulls the old variance down by exactly as much as the new noise βtpushes it up. If Var(xt−1)=1, then Var(xt)=(1−βt)⋅1+βt=1 — a perfect fixed point. That is why the signal never explodes.
The figure below makes this a race: the teal curve (with the shrink factor) hugs the value 1 forever, while the orange curve (naively adding noise with no shrink) climbs without bound. The dotted plum line marks the fixed point at 1 that the teal curve is pinned to.
The two noise terms αt(1−αt−1)ϵt−2 and 1−αtϵt−1 (each with ϵ∼N(0,I)) are independent Gaussians, and independent Gaussians combine into one Gaussian whose variance is the sum of theirs:
So after two steps the surviving signal is αtαt−1 and the noise is 1−αtαt−1. Repeating down to x0 turns the product αtαt−1⋯α1 into αˉt:
xt=αˉtx0+1−αˉtϵ
WHY this is beautiful: every intermediate noise collapses into one effective standard-Gaussian noise ϵ, because Gaussians-on-Gaussians never make anything but a Gaussian. The signal fraction αˉt and noise fraction 1−αˉt always satisfy (αˉt)2+(1−αˉt)2=1.
The figure draws this as a point sliding down a quarter circle: the horizontal axis is the surviving signal αˉt, the vertical axis is the noise 1−αˉt. At t=0 (plum dot, far right) the point is "all signal"; by t=T (plum dot, top) it is "all noise"; the orange dot at t=250 is a mid-journey mix. Because the two fractions always square-sum to 1, the teal path can only travel along the dotted unit circle.
The parent note shows the true reverse conditional (when x0 is known) is a Gaussian N(xt−1;μ~t,β~tI). To sample from a Gaussian with mean μθ and variance β~t you draw a fresh standard Gaussianz∼N(0,I) and form xt−1=μθ+β~tz — the z is the randomness, β~t scales it to the right width. Two pieces:
WHERE β~t comes from: run Bayes' rule on the two known Gaussians q(xt∣xt−1) and q(xt−1∣x0). Multiplying two Gaussians in xt−1 gives another Gaussian whose inverse-variance is the sum of the two inverse-variances; simplifying that sum yields exactly β~t=1−αˉt1−αˉt−1βt.
WHY that specific form: the factor 1−αˉt1−αˉt−1 is at most 1 (for a schedule where αˉt decreases), so the reverse step is no wider than the raw forward noise βt. Knowing xt pins down xt−1 more tightly than a blind step would — the leftover uncertainty is only what xt failed to reveal. At t=1, αˉ0=1 makes the numerator 0, so β~1=0: the final step is deterministic, exactly as it must be to land on a clean x0.
The figure compares the two schedules: the orange curve is the forward noise βt, the teal curve is the reverse width β~t sitting on or below it. The plum dot at t=1 sits on zero — the last reverse step adds no noise at all.
The forward process needs a trained neural network.
False. The forward process is a fixed recipe — it just adds Gaussian noise on a schedule βt. Only the reverse process is learned; nothing is trained going forward.
At t=T the sample xT still secretly contains the original image.
Practically false. Since αˉT≈0, we have xT≈ϵ, pure noise. A trace remains in theory, but it is below any usable signal, which is exactly why generation can start from noise.
Because xt=αˉtx0+1−αˉtϵ skips intermediate steps, the forward process is not really a Markov chain.
False. It is a Markov chain (each xt depends only on xt−1). The closed-form jump is a mathematical consequence of Gaussians composing (Warm-up 2), not a violation of the Markov structure. See the Markov chains note for why memorylessness still holds.
The variance schedule βt increases over time so that early steps damage the image gently.
True. Small β1 keeps early xt almost identical to x0 (easy to learn near clean data); larger late βt finishes the job of reaching noise. The ordering matters for training stability.
The reverse process is deterministic — you plug in xt and get xt−1.
False (for the standard sampler). Each reverse step samples xt−1=μθ+β~tz with fresh z∼N(0,I) (see Warm-up 3 for μθ, β~t and z). The stochasticity is what produces different images from the same starting noise. (DDIM sampling makes it deterministic instead.)
Training minimizes the distance between generated images and real images.
False. The simple loss E∥ϵ−ϵθ∥2 compares predicted noise to true noise — never images to images. There is no image-space comparison during training at all.
Every training step simulates the full chain from x0 to xt.
False. Thanks to the direct-sampling formula (Warm-up 2), we jump to any xt in one shot. This is the whole point of deriving q(xt∣x0) — training a single random t costs one noising, not t steps.
Predicting the noise ϵ and predicting the clean image x0 are fundamentally different training targets.
False in content, true in practice. They are algebraically equivalent (you can convert one to the other via x0=(xt−1−αˉtϵ)/αˉt). But empirically predicting ϵ trains better (see the "Why questions" for the gradient-scale reason).
Diffusion is basically a many-step VAE with a fixed encoder.
True — a useful analogy. The forward process is a non-learned "encoder" to noise; the reverse is a learned "decoder." The full training objective is even derived as a variational bound, just like the VAE ELBO.
"Since Gaussian noise is added each step, Var(xt) grows without bound, so we clip it."
Error: the shrink factor is ignored. By Warm-up 1, Var(xt)=(1−βt)Var(xt−1)+βt; the 1−βt shrink cancels the injected βt, so variance sits near 1. No clipping is needed.
"The reverse mean is μθ=αt1(xt−αˉtβtϵθ)."
Error: wrong denominator. It is 1−αˉt, not αˉt (compare Warm-up 3). The correction subtracts the noise fraction1−αˉt, which is what remains to be removed — swapping it changes the removed amount dramatically.
"We add noise back at every reverse step, including the very last one into x0."
Error: the last step is noise-free. At t=1, β~1=0 (numerator 1−αˉ0=0), so we output the mean directly with no β~1z term; adding noise there would corrupt the final clean sample.
"αˉt is a sum of the αs up to t."
Error: it is a product.αˉt=∏s=1tαs. Signal survival is multiplicative — each step keeps a fraction of what remained, so surviving fractions multiply, not add.
"To reverse a step exactly we just use q(xt−1∣xt) from the forward process."
Error: q(xt−1∣xt) is intractable without x0. The tractable reverse is q(xt−1∣xt,x0), which needs the clean image. Since x0 is unknown at generation, we approximate it via the network's noise prediction.
"A larger predicted noise ϵθ always means the model thinks the image is closer to done."
Error: it means the opposite. A large ϵθ says "most of xt is noise," so more must be subtracted — the estimated image is less clean, not more.
Why do we predict noise instead of directly predicting xt−1?
Because the noise target is always unit Gaussian regardless of t or dataset, so its gradient magnitude stays roughly constant across all noise levels; predicting xt−1 would give targets whose scale drifts with t, making some timesteps dominate the loss.
Why does predicting ϵ (not x0) give better-conditioned gradients across t?
The ϵ target has fixed variance 1 at every timestep, so early (near-clean) and late (near-noise) steps contribute comparably to E∥ϵ−ϵθ∥2; predicting x0 instead would multiply errors by a t-dependent factor 1/αˉt, blowing up late-step gradients and starving early ones — a badly conditioned objective.
Why must βt be small for the reverse conditional to be Gaussian?
Only for tiny steps is q(xt−1∣xt,x0) well-approximated by a Gaussian; large jumps make the true reverse distribution multi-modal, which a single Gaussian mean/variance cannot represent.
Why does adding stochastic noise during reverse sampling improve generation?
The reverse conditional is genuinely a distribution of width β~t, not a point — sampling from it explores the many plausible slightly-less-noisy images, giving sample diversity instead of collapsing to one blurry average.
Why is predicting noise connected to score matching?
The noise prediction ϵθ is (up to a scale −1−αˉt) the score ∇xtlogq(xt) — the direction toward higher data density. Reverse sampling is then a discretized Langevin walk up that gradient.
Why sample a random timestep t each training iteration instead of looping 1 to T in order?
Random t gives an unbiased estimate of the loss averaged over all noise levels, so one network learns to denoise every level uniformly without over-training on early or late steps.
It trains one network on both conditioned and unconditioned noise predictions, then at sampling time extrapolates in the direction that increases conditioning strength — no external gradient of a classifier is required.
Then xt=x0 exactly and no noise is present — this is the t=0 degenerate case where the forward process has done nothing yet.
What happens to the reverse mean formula when αˉt→1 (very early, nearly clean)?
The correction coefficient βt/1−αˉt can blow up because 1−αˉt→0; in practice near-clean steps barely change the image and the tiny βt keeps things numerically stable.
If βt were set to 0 for some step, what would that step do?
Nothing — with βt=0, αt=1, so xt=xt−1 with no noise added and no signal shrink. That step is a wasted identity map in both directions.
If βt=1 for a step, what happens to the signal?
The signal is fully destroyed in one step: 1−βt=0, so xt becomes pure noise regardless of xt−1. This makes that step irreversible in practice — the model cannot recover information that is completely gone.
What does the reverse process output at t=1 specifically?
It returns the mean μθ with no added stochastic term (since β~1=0), producing the final clean sample x0. This is the one deterministic reverse step by design.
What if T is chosen too small (say T=10)?
Then αˉT is not close to 0, so xT is not real noise; starting generation from pure noise no longer matches the training distribution, and samples degrade. Large T (or a good schedule) is needed to reach true noise.
Recall Self-check: the two things students most often invert
Which quantity is a product, and which sampler step skips the added noise?
αˉt is a product of the αs; the ==t=1 (final)== reverse step omits the stochastic β~tz term because β~1=0.