This page is the toolbox. Before you touch the parent note's equations, you need to own every symbol in them. We build each one from a picture, in an order where nothing appears before it is earned.
Everything starts with data. Call one real image x0 — the subscript 0 just means "step zero, before we ruin anything".
Now imagine plotting every real image as a dot. Real images clump together (faces near faces, digits near digits). That cloud of dots is the data distribution, written q(x0).
Why the topic needs it: generation means producing a fresh dot that lands inside the thick fog — a new image that looks real. Diffusion's whole trick is a clever route to that fog. (This is exactly the goal that Variational autoencoders also chase, by a different road.)
The single most-used symbol in the parent note is N.
Two words to lock in, because the parent uses them constantly:
Mean μ (Greek "mu") = the centre / average / balance point of the hill.
Variance σ2 (Greek "sigma" squared) = the spread. Its square root σ is the typical distance from centre. Small variance = tight spike; large variance = flat spread.
Why "variance" keeps appearing: if a number has variance σ2, its typical size is σ=σ2. So βt in the parent is literally "the typical strength of the noise added at step t".
An image is many numbers, not one. So the noise is a bell curve in many dimensions at once. We write N(μ,Σ) where Σ (capital sigma) is now a table saying how each dimension varies and co-varies.
Why the topic needs it: diffusion adds independent noise to every pixel with the same strength, which is exactly what βtI encodes — cheap to write, cheap to sample.
The parent writes both xt∼N(⋯)andxt=…x0+…ϵ. These say the same thing two ways.
Here's the picture-based trick the whole topic leans on:
Why we bother: this turns "sample from a distribution" (mysterious) into "do arithmetic on one fixed noise draw ϵ" (a network can differentiate through it). ϵ (Greek "epsilon") is the exact quantity the reverse network is asked to predict, so it deserves a picture. This same trick powers Variational autoencoders.
The subscript t counts noise steps: x0 (clean) →x1→x2→⋯→xT (pure static). T is the total, typically 1000.
Why is it called a Markov chain? Because each new frame depends only on the frame just before it, not the whole history.
Why the topic needs it: memorylessness is what lets us write the forward process as one simple rule q(xt∣xt−1) repeated, and lets the reverse be a matching chain pθ(xt−1∣xt). If you want this idea rigorously, see Markov chains.
q(xt∣xt−1) reads "the distribution of xtgiven thatxt−1 is already fixed". The bar ∣ means given / assuming we already know. Picture freezing the previous frame, then asking where the next frame can land.
The parent quotes xt=αˉtx0+1−αˉtϵ as if by magic. Let us earn it, using only the one-step rule and the "Gaussians add" fact from §3.
One step, written in reparameterized form (recall αt=1−βt):
xt=αtxt−1+1−αtϵt−1,ϵt−1∼N(0,I).WHAT this says: keep a fraction αt of the previous frame, add a fresh independent shake of spread 1−αt.
Now substitute the same rule for xt−1 (this is legal because the chain is memoryless):
xt=αt(αt−1xt−2+1−αt−1ϵt−2)+1−αtϵt−1.
Multiply the signal term through:
xt=αtαt−1xt−2+two independent Gaussiansαt(1−αt−1)ϵt−2+1−αtϵt−1.
WHY we now use the "Gaussians add" fact: the two noise terms are independent, so by §3 they merge into a single Gaussian. Their variances are αt(1−αt−1) and (1−αt); adding them:
αt(1−αt−1)+(1−αt)=αt−αtαt−1+1−αt=1−αtαt−1.
So the merged noise has spread 1−αtαt−1 and:
xt=αtαt−1xt−2+1−αtαt−1ϵˉ.
WHAT IT LOOKS LIKE: exactly the same shape as one step, but with the signal factor now the productαtαt−1. Repeat this collapse all the way down to x0: every extra step multiplies one more αs onto the signal factor, and the noise variance stays "1 minus that product". After t collapses the product is precisely αˉt=∏s=1tαs.
Why the topic needs it:αˉt is the shortcut that lets you jump straight to any noise level from x0 with no loop — the engine of efficient training. Different choices of the βt dial also underpin faster samplers like DDIM sampling.
The forward chain q destroys; the reverse chain rebuilds. It is written pθ(xt−1∣xt).
How does the network compute that centre? It does not guess μθ directly — it guesses the noiseϵ and plugs it into a formula.
Why the topic needs it: the reverse chain pθ is the generator. Sampling from it repeatedly, xT→xT−1→⋯→x0, is how a fresh image is born. Steering that guess is what Classifier-free guidance does.
Why the topic needs it: this single mean-squared-error is the entire objective. Everything else — the reverse mean μθ, the sampling loop — is bookkeeping around "predict the noise". The link to ∇xlogq(x) (a score) connects this to Langevin dynamics.