DDPM: one net predicts noise, reversal does the rest
forward q: add noise
x_0
x_1
...
x_t
...
x_T
~ N(0, I)
q(x_t | x_0) = N(√(ᾱ_t) · x_0, (1 - ᾱ_t) I)
closed form: jump to any t in one shot
reverse p_θ: denoise
x_T
x_{T-1}
...
x_1
x_0 (sample)
x_{t-1} = (1/√α_t) ( x_t - (β_t / √(1-ᾱ_t)) · ε_θ(x_t, t) ) + σ_t · z
subtract the predicted noise, rescale, re-inject a bit of fresh noise
training loss
L = E_{x_0, t, ε} ||ε - ε_θ(√ᾱ_t · x_0 + √(1-ᾱ_t) · ε, t)||²
one net, one MSE loss, no minimax, no KL divergence in the training loop
scales unchanged to images, video, audio, 3D Gaussians