Các mô hình phân tán DDPM từ đầu
Type: Build
Languages: Python
Prerequisites: Phase 3 · 02 (Backprop), Phase 8 · 02 (VAE)
Time: ~75 minutes
Vấn đề
Anh muốn lấy mẫu cho p_data(x). GANs chơi một trò chơi tối thiểu mà thường khác nhau. VAEs sản xuất các mẫu mờ từ một decoder Gaussian.log p(x)(vì vậy bạn có khả năng), và (c) các mẫu tương tự chất lượng SOTA.
Sohl-Dickstein et al. (2015) đã có một câu trả lời lý thuyết: xác định một chuỗi Markov q(x_t | x_{t-1})Điều này dần dần thêm tiếng ồn Gaussian, và đào tạo một chuỗi ngược.p_θ(x_{t-1} | x_t)Ho, Jain, Abbeel (2020) cho thấy mất mát có thể được đơn giản hóa thành một dòng dự đoán tiếng và làm sạch toán học.
Khái niệm
!DDPM: forward noise, reverse denoise
Forward process q.Thêm tiếng ồn Gaussian vào TCác bước nhỏ. hình thức đóng lý do toán học có thể xử lý là bước tích lũy cũng là Gaussian:
q(x_t | x_0) = N( sqrt(α̅_t) · x_0, (1 - α̅_t) · I )nơi α̅_t = ∏_{s=1..t} (1 - β_s)cho một lịch trình của β_t- Chọnβ_ttừ 1e-4 đến 0,02 theo đường thẳng trên T=1000 bước vàx_Tlà khoảng N(0, I)- Tôi không biết.
Reverse process p_θ.Học một mạng lưới thần kinhε_θ(x_t, t)Điều này dự đoán về tiếng ồn đã được thêm vào.x_t, chỉ định bằng:
x_{t-1} = (1 / sqrt(α_t)) · ( x_t - (β_t / sqrt(1 - α̅_t)) · ε_θ(x_t, t) ) + σ_t · znơi σ_tlà hoặc sqrt(β_t)hoặc một sự khác biệt học.x_{t-1}vì phía sau q(x_{t-1} | x_t, x_0)và thay thế x_0với ước tính dự đoán về tiếng ồn của nó.
Training loss.
L_simple = E_{x_0, t, ε} [ || ε - ε_θ( sqrt(α̅_t) · x_0 + sqrt(1 - α̅_t) · ε, t ) ||² ]Mô hình x_0từ dữ liệu, chọn một số ngẫu nhiên t, mẫu ε ~ N(0, I), tính toán tiếng ồn ồn ồn ồn ồnx_tMột lần bắn qua hình thức đóng, và lùi lại tiếng ồn.
Sampling.Bắt đầux_T ~ N(0, I). Lặp lại bước ngược từ t = Tđến1- Được rồi.
Tại sao nó hoạt động
Ba cảm giác:
- Denoising is easy; generating is hard.Tại
t=T, dữ liệu là tiếng ồn thuần túy mạng phải giải quyết một vấn đề tầm thường.t=0, mạng chỉ cần làm sạch một vài pixel.t, vấn đề là khó khăn nhưng mạng có nhiều gradient chảy qua cùng một trọng lượng từ mọi mức tiếng ồn.
- Score matching in disguise.Vincent (2011) chứng minh rằng dự đoán tiếng ồn tương đương với ước tính
∇_x log q(x_t | x_0), điểm điểm. SDE ngược sử dụng điểm này để đi lên độ d density gradient một bước ngẫu nhiên hướng về các vùng có khả năng cao.
- The ELBO reduces to simple MSE.Các biến động bên dưới hoàn toàn có một thuật ngữ KL mỗi bước thời gian. Với các tham số của DDPM các thuật ngữ KL đơn giản hóa cho MSE về dự đoán tiếng ồn với các hệ số cụ thể; Ho giảm các hệ số (chẳng định nó là "simple" mất mát) và chất lượng cải thiện.
Hãy xây dựng nó
code/main.pythực hiện một DDPM 1D. Dữ liệu là một hỗn hợp hai chế độ. "Net" là một MLP nhỏ mà mất(x_t, t)và các kết quả dự đoán tiếng ồn. đào tạo là mất một dòng. lấy mẫu lặp lại chuỗi ngược.
Bước 1: lịch trình tiến hành (mẫu đóng)
pythonbetas = [1e-4 + (0.02 - 1e-4) * t / (T - 1) for t in range(T)]
alphas = [1 - b for b in betas]
alpha_bars = []
cum = 1.0
for a in alphas:
cum *= a
alpha_bars.append(cum)Bước 2: mẫux_ttrong một cú bắn
pythondef forward_sample(x0, t, alpha_bars, rng):
a_bar = alpha_bars[t]
eps = rng.gauss(0, 1)
x_t = math.sqrt(a_bar) * x0 + math.sqrt(1 - a_bar) * eps
return x_t, epsBước 3: một bước đào tạo
pythondef train_step(x0, model, alpha_bars, rng):
t = rng.randrange(T)
x_t, eps = forward_sample(x0, t, alpha_bars, rng)
eps_hat = model_forward(model, x_t, t)
loss = (eps - eps_hat) ** 2
return loss, gradient_step(model, ...)Bước 4: lấy mẫu ngược
pythondef sample(model, alpha_bars, T, rng):
x = rng.gauss(0, 1)
for t in range(T - 1, -1, -1):
eps_hat = model_forward(model, x, t)
beta_t = 1 - alphas[t]
x = (x - beta_t / math.sqrt(1 - alpha_bars[t]) * eps_hat) / math.sqrt(alphas[t])
if t > 0:
x += math.sqrt(beta_t) * rng.gauss(0, 1)
return xĐối với một vấn đề 1-D với 40 bước thời gian và 24 đơn vị MLP, điều này học được hỗn hợp hai chế độ trong ~ 200 thời đại.
Điều kiện thời gian
Mạng cần biết nó đang chỉ ra thời gian nào.
- Sinusoidal embedding.Giống như Transformer định vị mã hóa.
embed(t) = [sin(t/ω_0), cos(t/ω_0), sin(t/ω_1), ...]- Đi qua một MLP, phát sóng lên mạng. - Film / group-norm conditioning.Dự án tích hợp theo quy mô/chânal (FiLM) tại mỗi khối.
Mã đồ chơi của chúng tôi sử dụng sinusoidal → concat.
Những bẫy
- Schedule matters a lot.Đường thẳng
βlà DDPM mặc định nhưng lịch trình cosine (Nichol & Dhariwal, 2021) cung cấp FID tốt hơn cho cùng một tính toán. - Timestep embedding is fragile.Tới qua .
tnhư một float hoạt động cho đồ chơi 1-D nhưng thất bại cho hình ảnh; luôn sử dụng một nhúng đúng. - V-prediction vs ε-prediction.Đối với các chế độ hẹp (t rất nhỏ hoặc rất lớn),
εcó tín hiệu-đồn kém.v = α·ε - σ·x) ổn định hơn; SDXL, SD3 và Flux sử dụng nó. - Classifier-free guidance.Khi suy luận, tính toán cả điều kiện và vô điều kiện
ε, sau đóε_cfg = (1 + w) · ε_cond - w · ε_uncondvớiw ≈ 3-7- Được đề cập trong Bài học 8. - 1000 steps is a lot.Việc sản xuất sử dụng DDIM (20-50 bước), DPM-Solver (10-20 bước) hoặc chưng cất (1-4 bước).
Sử dụng nó
| Role | Typical stack in 2026 |
|---|---|
| Image pixel-space diffusion (small, toy) | DDPM + U-Net |
| Image latent diffusion | VAE encoder + U-Net or DiT (Lesson 07) |
| Video latent diffusion | Spatiotemporal DiT (Sora, Veo, WAN) |
| Audio latent diffusion | Encodec + diffusion transformer |
| Science (molecules, proteins, physics) | Equivariant diffusion (EDM, RFdiffusion, AlphaFold3) |
Sự pha trộn là xương sống tạo ra phổ quát. Sự phù hợp dòng chảy (Dạy học 13) là đối thủ cạnh tranh 2024-2026 thường chiến thắng trên tốc độ suy luận cho chất lượng tương tự.
Chuyển nó
- Cứu lại
outputs/skill-diffusion-trainer.md. Skill lấy một bộ dữ liệu + ngân sách tính toán và đầu ra: lịch trình (lín/cosine/sigmoid), mục tiêu dự đoán (ε/v/x), số bước, quy mô hướng dẫn, gia đình mẫu và một giao thức đánh giá.
Các bài tập
- Easy.Thay đổi T từ 40 lên 10 trong
code/main.py. Làm thế nào chất lượng mẫu (histogram hình ảnh của các sản phẩm) suy giảm? - Medium.Chuyển từ dự đoán ε sang dự đoán v. Lấy lại bước ngược. So sánh chất lượng mẫu cuối cùng.
- Hard.Thêm hướng dẫn không có phân loại.
c ∈ {0, 1}, giảm nó 10% thời gian trong quá trình đào tạo, và trong thời gian lấy mẫu sử dụngε = (1+w)·ε_cond - w·ε_uncond- đo tỷ lệ bị ảnh hưởng theo chế độ điều kiện ởw = 0, 1, 3, 7- Tôi không biết.
Các điều khoản chính
| Term | What people say | What it actually means |
|---|---|---|
| Forward process | "Adding noise" | Fixed Markov chain q(x_t | x_{t-1}) that destroys the data. |
| Reverse process | "Denoising" | Learned chain p_θ(x_{t-1} | x_t) that reconstructs the data. |
| β schedule | "The noise ladder" | Per-step variance; linear, cosine, or sigmoid. |
| α̅ | "Alpha bar" | Cumulative product ∏(1 - β); gives closed-form x_t from x_0. |
| Simple loss | "MSE on noise" | ||ε - ε_θ(x_t, t)||²; all variational derivations collapse to this. |
| ε-prediction | "Predict noise" | Output is the noise added; standard DDPM. |
| V-prediction | "Predict velocity" | Output is α·ε - σ·x; better conditioning across t. |
| DDPM | "The paper" | Ho et al. 2020; linear β, 1000 steps, U-Net. |
| DDIM | "Deterministic sampler" | Non-Markov sampler, 20-50 steps, same training objective. |
| Classifier-free guidance | "CFG" | Mix conditional and unconditional noise predictions to amplify conditioning. |
Lưu ý sản xuất: suy luận phân tán là một vấn đề đếm từng bước
Bảng DDPM chạy các bước ngược T=1000. Không ai đưa ra trong sản xuất. Mỗi đống suy luận thực sự chọn một trong ba chiến lược và mỗi bản đồ sạch sẽ đến khung sản xuất của "tạm thời đến từ đâu":
- Faster sampler, same model.DDIM (20-50 bước), DPM-Solver++ (10-20), UniPC (8-16).
ε_θ- Cắt độ trễ 20 đến 50 lần. - Distillation.Căn nuôi học sinh để phù hợp với giáo viên trong ít bước: Phân phối tiến bộ (2 → 1), Mô hình nhất quán (tự nguyện → 1-4), LCM, SDXL-Turbo, SD3-Turbo. Giảm độ trễ thêm 5-10x, đòi hỏi phải tái đào tạo.
- Caching and compilation.
torch.compile(unet, mode="reduce-overhead"), các hậu cảnh phân tán của TensorRT-LLM,xformers/SDPA chú ý, bf16 trọng lượng. Giảm độ trễ mỗi bước ~ 2x.
Đối với một máy chủ truyền tải sản xuất, cuộc trò chuyện về ngân sách giống như văn học sản xuất mô tả cho LLM: độ trễ là num_steps × step_cost + VAE_decode, thông qua là batch_size × (num_steps × step_cost)^-1TTFT là nhỏ (một bước); TPOT tương đương với thời gian phản ứng đầy đủ vì việc tạo hình ảnh là "tất cả một lần" từ quan điểm của người dùng.
Đọc thêm
- Sohl-Dickstein et al. (2015). Deep Unsupervised Learning using Nonequilibrium Thermodynamics giấy truyền, trước thời gian của nó.
- Ho, Jain, Abbeel (2020). Denoising Diffusion Probabilistic Models DDPM.
- Song, Meng, Ermon (2021). Denoising Diffusion Implicit Models DDIM, ít bước hơn.
- Nichol & Dhariwal (2021). Improved DDPM lịch trình cosine, học biến.
- Dhariwal & Nichol (2021). Diffusion Models Beat GANs on Image Synthesis hướng dẫn về phân loại.
- Ho & Salimans (2022). Classifier-Free Diffusion Guidance CFG.
- Karras et al. (2022). Elucidating the Design Space of Diffusion-Based Generative Models (EDM) ghi chú thống nhất, công thức sạch nhất.
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.