Intuition What this page does
The parent note built the machinery: a Markov chain that adds noise (forward), and a learned reverse chain that removes it. Here we turn every knob and watch what happens. We will noise an image at t = 1 , at t = T , and everywhere between; we will run the reverse step, hit the special case t = 1 , feed in a perfect model, feed in a broken one, and finally do a word problem and an exam twist.
Numbers first, meaning always attached. If you can follow line one of Example 1, you can follow the whole page.
Two quantities do all the work on this page, so pin them down before we start:
Definition The three quantities you must never confuse
β t — the noise-injection fraction of one step: the fraction of the variance that is thrown away and replaced by fresh Gaussian noise at step t . Small β t (near 1 0 − 4 early, up to 0.02 late) means a gentle step.
α t = 1 − β t — the survival factor of one step . How much of last step's signal survives this step (whatever is not injected as noise).
α ˉ t = α 1 α 2 ⋯ α t — the survival factor from the very start (the bar means "cumulative product from step 1 to t "). How much of the original x 0 survives after t steps. Convention: the empty product α ˉ 0 = 1 (before any step, 100% of the signal is intact).
Everything else is built from these via the direct-sampling law (parent note):
x t = α ˉ t x 0 + 1 − α ˉ t ϵ , ϵ ∼ N ( 0 , I )
Read it as: shrink the picture by α ˉ t , add noise scaled by 1 − α ˉ t . The two scalings are locked together — squared, they sum to 1.
α ˉ t + ( 1 − α ˉ t ) = 1 the signal-energy fraction plus the noise-energy fraction always equal the whole. This is why the variance stays ≈ 1 .
α ˉ 0 = ? 1 — the empty product; before any step, all of x 0 survives.
Every worked example below is a cell in this table. Together they touch every corner of the topic.
Cell
Scenario class
What breaks / what to watch
Example
A
Early forward step (t small, α ˉ t → 1 )
Almost no noise; check "nearly identity"
Ex 1
B
Late forward step (t → T , α ˉ t → 0 )
Signal gone; x T ≈ ϵ
Ex 2
C
Building α ˉ t from a β -schedule
Cumulative product, not sum
Ex 3
D
One reverse denoising step, generic t
Mean formula + injected noise
Ex 4
E
Degenerate reverse step t = 1
No noise added (z = 0 ); uses α ˉ 0 = 1 ; final output
Ex 5
F
Perfect model (ϵ θ = ϵ )
Reverse exactly inverts forward
Ex 6
G
Broken / zero model (ϵ θ = 0 )
What the mean does with no denoising
Ex 7
H
Signal-to-noise reasoning (word problem)
"At which t is the digit half-gone?"
Ex 8
I
Exam twist: solve for β t from data
Invert α ˉ relation
Ex 9
Worked example Ex 1 (Cell A)
MNIST pixel x 0 = 0.80 . Schedule gives α ˉ 1 = 0.9999 . Draw noise ϵ = 1.5 . Compute x 1 and say how far it moved from x 0 .
Forecast: guess before computing — will x 1 be near 0.80 or wildly off?
Signal term α ˉ 1 x 0 = 0.9999 ⋅ 0.80 = 0.99995 ⋅ 0.80 = 0.79996 .
Why this step? This is the shrunken original. With α ˉ 1 ≈ 1 the shrink is invisible.
Noise term 1 − α ˉ 1 ϵ = 0.0001 ⋅ 1.5 = 0.01 ⋅ 1.5 = 0.015 .
Why this step? 1 − α ˉ 1 = 0.01 is tiny, so even a fat noise draw barely nudges the pixel.
Add x 1 = 0.79996 + 0.015 = 0.81496 .
Why this step? Direct-sampling law is just signal + noise.
Verify: displacement ∣ x 1 − x 0 ∣ = 0.01496 < 0.02 . A pixel changing by ~1.5% is "nearly identical" — matches the parent note's "noise barely visible" at t = 1 . ✓
This is the α ˉ t → 1 limit : the forward map is almost the identity.
Worked example Ex 2 (Cell B)
Same pixel x 0 = 0.80 , but now t = 1000 with α ˉ 1000 = 0.0001 . Draw noise ϵ = 1.5 . Compute x 1000 and the fraction of the result that is "real signal".
Forecast: at t = T , is the pixel still remembering it was 0.80 ?
Signal term 0.0001 ⋅ 0.80 = 0.01 ⋅ 0.80 = 0.008 .
Why this step? α ˉ 1000 = 0.01 now crushes the original toward zero.
Noise term 1 − 0.0001 ⋅ 1.5 = 0.99995 ⋅ 1.5 = 1.49992 .
Why this step? Nearly all the scale went to noise.
Add x 1000 = 0.008 + 1.49992 = 1.50792 ≈ ϵ .
Why this step? The output is essentially the raw Gaussian draw.
Verify: signal energy fraction = α ˉ 1000 = 0.0001 , i.e. 0.01% signal, 99.99% noise . x 1000 is indistinguishable from N ( 0 , 1 ) — this is exactly why we can start reverse sampling from pure noise. ✓
Figure s01 — the two forward scales versus t . The horizontal axis is the timestep t from 0 to 1000 ; the vertical axis is a pure scale between 0 and 1 . The red curve is the signal scale α ˉ t : it starts at 1 (full signal) and sinks toward 0 . The black curve is the noise scale 1 − α ˉ t : it starts at 0 and climbs toward 1 . They cross where signal and noise carry equal scale. Ex 1 lives at the far left edge (red near 1, black near 0 — barely noised); Ex 2 lives at the far right edge (red near 0, black near 1 — signal destroyed). The whole forward process is a journey from left to right along this picture.
Common mistake The #1 error
α ˉ t is a product ∏ s = 1 t α s , not a sum and not α t itself. Adding the α 's gives numbers bigger than 1, which is nonsense for a survival fraction.
Worked example Ex 3 (Cell C)
Tiny toy schedule β = ( 0.1 , 0.2 , 0.5 ) for T = 3 . Compute α t and α ˉ t for all three steps.
Forecast: will α ˉ 3 be closer to 0.5 or to 0.1 ?
Per-step survival α t = 1 − β t : α 1 = 0.9 , α 2 = 0.8 , α 3 = 0.5 .
Why this step? Each β t is the fraction of variance injected ; 1 − β t is the fraction kept .
Cumulative α ˉ 1 = 0.9 .
Why this step? After one step, cumulative = per-step (and α ˉ 1 = α ˉ 0 ⋅ α 1 = 1 ⋅ 0.9 ).
α ˉ 2 = 0.9 × 0.8 = 0.72 .
Why this step? Multiply, because signal that survives step 1 must also survive step 2.
α ˉ 3 = 0.72 × 0.5 = 0.36 .
Why this step? One more surviving fraction stacked on.
Verify: α ˉ 3 = 0.36 < α 3 = 0.5 — cumulative survival is always ≤ any single step's survival, as a product of numbers in ( 0 , 1 ) must be. Also 0.9 ≥ 0.72 ≥ 0.36 is monotonically decreasing, as required. ✓
This schedule β = ( 0.1 , 0.2 , 0.5 ) is our house schedule ; Examples 3, 4, 5 and 7 all use it so the numbers stay comparable.
Recall the reverse mean (parent note):
μ θ ( x t , t ) = α t 1 ( x t − 1 − α ˉ t β t ϵ θ ( x t , t ) ) , β ~ t = 1 − α ˉ t 1 − α ˉ t − 1 β t .
Notice β ~ t needs α ˉ t − 1 . At t = 1 this is α ˉ 0 = 1 (our convention above), which makes β ~ 1 = 0 — the reverse step at t = 1 is deterministic. We hit exactly that in Ex 5.
Worked example Ex 4 (Cell D)
At t = 2 using the house schedule: α 2 = 0.8 , β 2 = 0.2 , α ˉ 2 = 0.72 , α ˉ 1 = 0.9 . Take scalar x 2 = 1.0 , model output ϵ θ = 0.5 , and reverse-noise draw z = − 1.0 . Compute x 1 .
Forecast: denoising removes estimated noise — will x 1 be pulled below or above x 2 = 1.0 ?
Noise-removal coefficient 1 − α ˉ 2 β 2 = 0.28 0.2 = 0.52915 0.2 = 0.37796 .
Why this step? This scales how much of the predicted noise we subtract; larger β t ⇒ more aggressive removal.
Inside the bracket x 2 − 0.37796 ⋅ ϵ θ = 1.0 − 0.37796 ⋅ 0.5 = 1.0 − 0.18898 = 0.81102 .
Why this step? Strip the estimated noise off the noisy sample.
Rescale by 1/ α 2 μ θ = 0.8 0.81102 = 0.89443 0.81102 = 0.90674 .
Why this step? The forward step had shrunk the signal by α t ; dividing undoes that shrink.
Reverse variance β ~ 2 = 1 − α ˉ 2 1 − α ˉ 1 β 2 = 0.28 0.1 ⋅ 0.2 = 0.35714 ⋅ 0.2 = 0.071429 , so β ~ 2 = 0.26726 .
Why this step? This sets how much fresh randomness we inject to keep the reverse chain stochastic.
Sample x 1 = μ θ + β ~ 2 z = 0.90674 + 0.26726 ⋅ ( − 1.0 ) = 0.63948 .
Why this step? Draw an actual sample from the reverse Gaussian, not just its mean.
Verify: μ θ = 0.9067 < x 2 = 1.0 ✓ (denoising pulled it down, as forecast, because ϵ θ > 0 ). And μ θ landed back near the un-shrunk scale — sensible since x 2 itself was near x 0 -scale. ✓
Definition The special final step
At t = 1 the reverse variance is β ~ 1 = 1 − α ˉ 1 1 − α ˉ 0 β 1 = ⋅ 1 − 1 β 1 = 0 because α ˉ 0 = 1 . So the reverse process outputs the mean only — we set z = 0 . Injecting noise on the very last step would corrupt the clean image we worked so hard to recover.
Worked example Ex 5 (Cell E)
Final step t = 1 , house schedule: α 1 = 0.9 , β 1 = 0.1 , α ˉ 1 = 0.9 , and α ˉ 0 = 1 . Take x 1 = 0.64 , model output ϵ θ = 0.2 . Compute the returned image x 0 .
Forecast: will there be any random wobble in this output?
Confirm no noise β ~ 1 = 1 − α ˉ 1 1 − α ˉ 0 β 1 = 0.1 0 ⋅ 0.1 = 0 .
Why this step? α ˉ 0 = 1 forces the numerator to zero — this is the degenerate case.
Removal coefficient 1 − α ˉ 1 β 1 = 0.1 0.1 = 0.31623 0.1 = 0.31623 .
Why this step? Same structure as Ex 4, evaluated at the schedule's first entry.
Bracket x 1 − 0.31623 ⋅ 0.2 = 0.64 − 0.063246 = 0.576754 .
Why this step? Remove the last dab of predicted noise.
Rescale μ θ = 0.9 0.576754 = 0.94868 0.576754 = 0.60795 .
Why this step? Undo the first-step shrink.
Output x 0 = μ θ (no z term, since β ~ 1 = 0 ).
Why this step? t = 1 ⇒ deterministic; this is the returned pixel .
Verify: output x 0 = 0.6080 , a clean deterministic number with zero variance contribution. If we had wrongly added β ~ 1 z we would inject noise into the finished image — but β ~ 1 = 0 makes that term vanish automatically, exactly as the α ˉ 0 = 1 convention guarantees. ✓
Worked example Ex 6 (Cell F)
Same house schedule, t = 1 (α 1 = 0.9 , β 1 = 0.1 , α ˉ 1 = 0.9 ) — no new numbers, so keep the earlier examples in mind. Suppose the network is perfect : it returns the true noise, ϵ θ = ϵ , and we look at the mean (skip the stochastic term, DDIM -style). Start from x 0 = 0.80 with true noise ϵ = 1.5 . First forward-noise to get x 1 , then reverse. Do we recover x 0 ?
Forecast: if the model knows the exact noise, should denoising land back on 0.80 exactly?
Forward x 1 = 0.9 ⋅ 0.80 + 0.1 ⋅ 1.5 = 0.94868 ⋅ 0.80 + 0.31623 ⋅ 1.5 = 0.75895 + 0.47434 = 1.23329 .
Why this step? Apply the direct-sampling law to build a real noisy sample. Note α ˉ 1 = 0.9 = 0.94868 (not 0.8 ).
Reverse mean with ϵ θ = ϵ = 1.5 : removal coeff 0.1 0.1 = 0.31623 ; bracket = 1.23329 − 0.31623 ⋅ 1.5 = 1.23329 − 0.474342 = 0.758948 .
Why this step? Subtract exactly the noise that was added.
Rescale μ θ = 0.9 0.758948 = 0.94868 0.758948 = 0.80000 .
Why this step? Undo the shrink.
Verify: μ θ = 0.80000 vs true x 0 = 0.80 — exact recovery . Why exact here? At t = 1 the mean formula reduces to x 0 = ( x 1 − 1 − α ˉ 1 ϵ ) / α ˉ 1 , which is the algebraic inverse of the forward law (because α ˉ 1 = α 1 and β 1 / 1 − α ˉ 1 = β 1 = 1 − α ˉ 1 when α ˉ 1 = α 1 ). At t = 1 perfect noise prediction inverts forward exactly . ✓
Common mistake Exactness at
t = 1 is special
The clean inversion above works because α ˉ 1 = α 1 . For a generic middle step the DDPM mean uses β t / 1 − α ˉ t , which is only the algebraically-exact inverse in the many-small-steps limit (β t → 0 ). This is the whole reason T = 1000 : many tiny steps, each nearly-perfectly invertible.
Worked example Ex 7 (Cell G)
A freshly-initialised (or dead) network outputs ϵ θ = 0 everywhere. Same setup as Ex 4 (t = 2 , house schedule, α 2 = 0.8 , x 2 = 1.0 ), mean-only. What does the reverse mean do?
Forecast: with nothing subtracted, is the step still doing anything ?
Bracket x 2 − 0 = 1.0 .
Why this step? Zero predicted noise ⇒ remove nothing.
Rescale μ θ = 0.8 1.0 = 1.11803 .
Why this step? The 1/ α t factor still runs.
Verify: μ θ = 1.1180 > x 2 = 1.0 . A zero-model doesn't denoise; it merely amplifies by 1/ α t = 1.118 , blowing the sample up instead of cleaning it. This is exactly what an untrained diffusion sampler produces: variance explosion, pure garbage. It shows the 1/ α t factor needs the noise-removal term to stay balanced. ✓
Worked example Ex 8 (Cell H — real-world SNR reasoning)
"Half gone" means signal energy = noise energy, i.e. α ˉ t = 1 − α ˉ t . Using a schedule where α ˉ t = e − 0.002 t (a common continuous approximation), find the timestep t ⋆ where the digit is half destroyed, and give the signal-to-noise ratio there.
Forecast: guess whether t ⋆ is early (near 0) or late (near 1000).
Set the condition α ˉ t ⋆ = 0.5 .
Why this step? Equal signal and noise energy ⇔ each is half of the total 1 .
Solve e − 0.002 t ⋆ = 0.5 ⇒ − 0.002 t ⋆ = ln 0.5 ⇒ t ⋆ = 0.002 − ln 0.5 = 0.002 0.693147 = 346.57 .
Why this step? Take logs — the natural log is the tool that undoes the exponential, letting us solve for t in the exponent.
SNR = 1 − α ˉ α ˉ = 0.5 0.5 = 1 .
Why this step? Signal-to-noise ratio compares the two scales; here they're equal, so SNR = 1 .
Verify: t ⋆ ≈ 347 — squarely in mid-schedule (not near 0 or 1000), matching the parent note's progression where t = 250 is still recognisable and t = 1000 is pure noise. SNR = 1 is the exact crossover: below t ⋆ signal dominates, above it noise does. So a digit is "half destroyed" roughly one-third of the way through the diffusion, and fully gone only near the end. ✓
Figure s02 — the half-gone crossover. Horizontal axis is timestep t ; vertical axis is energy fraction (0 to 1). The red curve is signal energy α ˉ t falling from 1; the black curve is noise energy 1 − α ˉ t rising from 0. The dashed vertical line marks t ⋆ ≈ 347 where the two curves cross at height 0.5 — the "half-gone" point of Ex 8, where SNR = 1 . Left of the line the digit is signal-dominated (recognisable); right of the line it is noise-dominated.
Worked example Ex 9 (Cell I)
An exam gives you only α ˉ t − 1 = 0.72 and α ˉ t = 0.576 . Recover α t and β t .
Forecast: is a single β t recoverable from two consecutive cumulative products?
Use the recursion α ˉ t = α ˉ t − 1 ⋅ α t , so α t = α ˉ t − 1 α ˉ t .
Why this step? The cumulative product for step t is the previous cumulative product times one new factor α t — dividing peels off exactly that factor.
Compute α t = 0.72 0.576 = 0.8 .
Why this step? Straight division.
Back out β β t = 1 − α t = 1 − 0.8 = 0.2 .
Why this step? β and α are complements by definition.
Verify: rebuild forward — α ˉ t − 1 ⋅ α t = 0.72 ⋅ 0.8 = 0.576 = α ˉ t ✓. And β t = 0.2 lies in a valid ( 0 , 1 ) range, so the schedule is legal. ✓
Recall Cover check
Signal energy fraction after t steps ::: α ˉ t
What is β t ? ::: the noise-injection fraction — the share of variance thrown away and replaced by fresh Gaussian noise at step t
Value of α ˉ 0 and why it matters ::: 1 (empty product); it makes β ~ 1 = 0 so the last reverse step adds no noise
Why is no noise added at reverse step t = 1 ? ::: it is the final output; β ~ 1 = 0 automatically because α ˉ 0 = 1
A zero-output network's reverse mean does what to the sample? ::: multiplies it by 1/ α t > 1 — amplifies, never denoises
α ˉ t from α ˉ t − 1 ? ::: multiply by one new α t : α ˉ t = α ˉ t − 1 α t
"Half-gone" condition ::: α ˉ t = 1 − α ˉ t , i.e. α ˉ t = 0.5 , SNR = 1
Why does perfect noise prediction invert forward exactly at t = 1 ? ::: because α ˉ 1 = α 1 , so the mean formula is the algebraic inverse of the forward law
Mnemonic Bar means "from the birth"
α t = survives this step. α ˉ t (with the bar) = survives from birth (x 0 ) to now. The bar is a memory of the whole history — so it's a product , never a sum. And "birth" itself (t = 0 ) has α ˉ 0 = 1 : nothing has happened yet.
See also: Langevin dynamics (the reverse step as noisy gradient ascent), Variational autoencoders (the loss's variational roots), and Classifier-free guidance (steering the reverse mean). Parent: Diffusion models forward - reverse process .