In a DDPM, the forward diffusion process is x_t = sqrt(alpha_bar_t) * x_0 + sqrt(1 - alpha_bar_t) * epsilon. The question's original source gave specific numeric values for beta_1, beta_2, beta_3 (a 3-step toy noise schedule) that were lost in copy-paste — they did NOT survive into this text. (a) Calculate alpha_t and alpha_bar_t at each step. (b) Calculate the noisy sample x_t. (c) Find the separate contributions of the original sample and noise. (d) Explain how these contributions change as the timestep increases.
What's actually being asked
Work the closed-form DDPM forward equation through a 3-step toy schedule, computing α_t, ᾱ_t, x_t, and the separate x_0/noise contributions at each step, then explain the trend.
Note on the missing numbers: the question's source lost the actual β_1, β_2, β_3 values in copy-paste. Below, the method is worked with clearly-labelled illustrative values — β_1 = 0.1, β_2 = 0.2, β_3 = 0.3 — and an illustrative scalar sample x_0 = 2.0 with a unit noise draw ε = 1.0 (representing one draw from N(0,1)), purely to show the arithmetic. Redo the same steps with the real β values once recovered.
Answer
(a) α_t and ᾱ_t at each step
α_t = 1 − β_t:
α_1 = 1 − 0.1 = 0.9α_2 = 1 − 0.2 = 0.8α_3 = 1 − 0.3 = 0.7
ᾱ_t = Π_{s=1}^{t} α_s (cumulative product):
ᾱ_1 = α_1 = 0.9ᾱ_2 = α_1 · α_2 = 0.9 × 0.8 = 0.72ᾱ_3 = α_1 · α_2 · α_3 = 0.72 × 0.7 = 0.504
(b) Noisy sample x_t = √(ᾱ_t) x_0 + √(1−ᾱ_t) ε
Using x_0 = 2.0, ε = 1.0:
-
t = 1:
√(ᾱ_1) = √0.9 ≈ 0.9487,√(1−ᾱ_1) = √0.1 ≈ 0.3162x_1 = 0.9487 × 2.0 + 0.3162 × 1.0 = 1.8974 + 0.3162 = 2.2136 -
t = 2:
√(ᾱ_2) = √0.72 ≈ 0.8485,√(1−ᾱ_2) = √0.28 ≈ 0.5292x_2 = 0.8485 × 2.0 + 0.5292 × 1.0 = 1.6971 + 0.5292 = 2.2263 -
t = 3:
√(ᾱ_3) = √0.504 ≈ 0.7099,√(1−ᾱ_3) = √0.496 ≈ 0.7043x_3 = 0.7099 × 2.0 + 0.7043 × 1.0 = 1.4199 + 0.7043 = 2.1241
(Using the same illustrative ε = 1.0 at every t here purely to isolate how the weighting changes with t; in a real sampled chain each x_t would use its own fresh noise draw — only the √(ᾱ_t) / √(1−ᾱ_t) weighting pattern below is the thing to take away.)
(c) Separate contributions of x_0 and noise
t | x_0-contribution √(ᾱ_t)·x_0 | noise-contribution √(1−ᾱ_t)·ε |
|---|---|---|
| 1 | 1.8974 | 0.3162 |
| 2 | 1.6971 | 0.5292 |
| 3 | 1.4199 | 0.7043 |
(d) How the contributions change as t increases
ᾱ_t is a cumulative product of numbers each less than 1, so it shrinks monotonically as t grows (0.9 → 0.72 → 0.504 here). That directly means:
√(ᾱ_t), the weight on the original samplex_0, shrinks witht(0.9487 → 0.8485 → 0.7099) — the original signal's influence fades.√(1−ᾱ_t), the weight on the noiseε, grows witht(0.3162 → 0.5292 → 0.7043) — the noise's influence strengthens.
This is exactly the behaviour the canonical formula predicts: as t increases towards T, ᾱ_t → 0 under a proper schedule, so x_t becomes dominated almost entirely by noise — consistent with x_T being (approximately) pure N(0,I) noise, which is what the reverse (denoising) process starts from at generation time.
Exam tip
Always state explicitly that ᾱ_t is a cumulative product, not just 1 − β_t repeated — a common error is computing ᾱ_3 as 1 − β_3 instead of α_1·α_2·α_3, which silently drops the compounding effect of earlier steps.