مدل های انتشار DDPM از ابتدا
Type: Build
Languages: Python
Prerequisites: Phase 3 · 02 (Backprop), Phase 8 · 02 (VAE)
Time: ~75 minutes
مشکل
تو ميخواي نمونه برداريp_data(x).GAN ها بازی حداقل می کنند که اغلب متفاوت است. VAEs نمونه های مبهم را از یک کادر گوس تولید می کنند. آنچه شما واقعا می خواهید یک هدف آموزشی است که (ا) یک ضرر پایدار (هیچ نقطه سعد، هیچ حداقل) ، (ب) یک مرز پایین در log p(x)(تا احتمالات داشته باشید) و (ج) نمونه هایی که با کیفیت SOTA مطابقت دارند.
Sohl-Dickstein et al. (2015) پاسخ نظری داشت: یک زنجیره مارکوف تعریف کنید q(x_t | x_{t-1})که به تدریج صداهای گاوسی را اضافه می کند و یک زنجیره معکوس را آموزش می دهدp_θ(x_{t-1} | x_t)برای انکار. هو، جین، آبیل (2020) نشان داد که این ضرر می تواند به یک خط ساده شود پیش بینی صدا و ریاضیات را تمیز کرد. در سال 2020 این یک کنجکاوی بود. در سال 2021 این نمونه های پیشرفته تولید کرد. در سال 2022 تبدیل به انتشار پایدار شد. در سال 2026 این زیربنایی است.
مفهوم
!DDPM: forward noise, reverse denoise
Forward process q.صداي گاوسي رو اضافه کنTمرحله های کوچک. شکل بسته دلیل قابل درمان ریاضی این است که مرحله تجمعی نیز گاسین است:
q(x_t | x_0) = N( sqrt(α̅_t) · x_0, (1 - α̅_t) · I )کجاα̅_t = ∏_{s=1..t} (1 - β_s)برای جدول زمانβ_tانتخاب کنβ_tاز 1e-4 تا 0.02 خطی در T=1000 پله و x_TتقریباًN(0, I). .
Reverse process p_θ.شبکه عصبی رو یاد بگیرهε_θ(x_t, t)که از صداي اضافه شده پيش بيني ميکنهx_t، به عبارت دیگر:
x_{t-1} = (1 / sqrt(α_t)) · ( x_t - (β_t / sqrt(1 - α̅_t)) · ε_θ(x_t, t) ) + σ_t · zکجاσ_tیا همsqrt(β_t)این عبارت زشت است اما فقط الجبر استx_{t-1}با توجه به عقبq(x_{t-1} | x_t, x_0)و جایگزین کردنx_0با تخمین پیش بینی شده در مورد صدا.
Training loss.
L_simple = E_{x_0, t, ε} [ || ε - ε_θ( sqrt(α̅_t) · x_0 + sqrt(1 - α̅_t) · ε, t ) ||² ]نمونهx_0از داده ها، تصادفی را انتخاب کنیدtنمونهε ~ N(0, I)، حسابرسي صداي هاx_tدر يک شات از طریق فرم بسته و بازپسين در سر صداي يک بازده، هيچ کميکس، هيچ KL، هيچ ترفند هاي بازسازي
Sampling.شروع کنx_T ~ N(0, I). مرحله برگشتي رو ازt = Tبه1-تمام شد
چرا کار ميکنه
سه تا حس:
- Denoising is easy; generating is hard.در
t=T، داده ها صداهای خالص هستند شبکه باید یک مشکل معمولی را حل کند.t=0، شبکه فقط چند پیکسل رو پاک کردن دارهt، مشکل سخته اما شبکه دارای گرادینت های زیادی است که از طریق وزن های مشابه از هر سطح شور جریان می یابد.
- Score matching in disguise.وینسن (2011) ثابت کرد که پیش بینی صدا برابر با تخمین است
∇_x log q(x_t | x_0), سکور. SDE معکوس از این سکور برای رفتن به سمت گرادینت تراکم یک قدم تصادفی هدایت شده به سمت مناطق احتمال بالا استفاده می کند.
- The ELBO reduces to simple MSE.خط پایین کامل تنوع دارای یک اصطلاح KL در هر مرحله زمانی است. با پارامترسازی DDPM این اصطلاح KL به MSE در پیش بینی شور با معادلات خاص ساده می شود؛ Ho معادلات را کاهش داد (که آن را "ساده" از دست دادن می نامد) و کیفیت بهبود شده است.
آن را بسازید
code/main.pyیک DDPM یک بعدی را اجرا می کند. داده ها ترکیبی دو حالت است. شبکه یک MLP کوچک است که می گیرد(x_t, t)و خروجی های پیش بینی شده از صدا. آموزش یک خط از دست دادن است. نمونه گیری زنجیره برگشت تکرار می کند.
مرحله ی اول: برنامه پیش بینی (برنامه بسته)
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)مرحله دوم: نمونهx_tدر یک شات
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, epsمرحله سوم: یک مرحله آموزش
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, ...)مرحله 4: نمونه گیری معکوس
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برای یک مشکل 1-D با 40 مرحله زمان و یک MLP 24 واحد، این ترکیب دو حالت را در حدود 200 دوره یاد می گیرد.
تنظیم زمان
شبکه باید بداند که چه مرحله ای را در حال رد کردن است. دو گزینه استاندارد:
- Sinusoidal embedding.مثل کدگذاری موقعیت ترانسفورماتور
embed(t) = [sin(t/ω_0), cos(t/ω_0), sin(t/ω_1), ...]از طریق یک MLP عبور می کند، به شبکه پخش می شود. - Film / group-norm conditioning.برنامه های داخلی پروژه به مقیاس/تاهید در هر کانال (FiLM) در هر بلوک.
کد اسباب بازی ما از sinusoidal → concat استفاده می کند. U-Nets تولید از FiLM استفاده می کند.
دام ها
- Schedule matters a lot.خطی
βاین برنامه پیش فرض DDPM است اما جدول cosine (Nichol & Dhariwal، 2021) FID بهتر برای همان محاسبه را می دهد. - Timestep embedding is fragile.. از دست دادن خام
tبه عنوان یک شناور برای اسباب بازی 1-D کار می کند اما برای تصاویر شکست می خورد؛ همیشه از یک گنجانشی مناسب استفاده کنید. - V-prediction vs ε-prediction.برای رژیم های باریک (ت خیلی کوچک یا خیلی بزرگ) ،
εسیگنال تا صدا ضعیف دارد.v = α·ε - σ·x) پایدارتر است؛ SDXL، SD3 و Flux از آن استفاده می کنند. - Classifier-free guidance.در نتیجه، هم مشروط و هم بی مشروط محاسبه کنید
ε، پسε_cfg = (1 + w) · ε_cond - w · ε_uncondباw ≈ 3-7در درس 8 پوشش داده شده - 1000 steps is a lot.تولید از DDIM (20-50 مرحله) ، DPM-Solver (10-20 مرحله) یا لوله سازی (1-4 مرحله) استفاده می کند. دروس 12 را ببینید.
ازش استفاده کن
| 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) |
انتشار ستون فقرات تولید جهانی است. تطابق جریان (درسی 13) رقبای 2024-2026 است که معمولاً در سرعت نتیجه گیری برای همان کیفیت برنده می شود.
-باده
نگه دارoutputs/skill-diffusion-trainer.mdمهارت یک مجموعه داده + بودجه و محصول محاسبه: برنامه (خطی / کوسین / سیگمائید) ، هدف پیش بینی (ε / v / x) ، تعداد مراحل، مقیاس راهنمایی، خانواده نمونه ها و پروتکل ارزیابی.
تمرینات
- Easy.T را از 40 تا 10 تغییر بده
code/main.pyکیفیت نمونه (هیستogram بصری از تولیدات) چگونه کاهش می یابد؟ ساختار دو حالت در چه T فرو می ریزد؟ - Medium.از پیش بینی ε به پیش بینی v تغییر دهید، مرحله برعکس را دوباره بازگردانید، کیفیت نمونه نهایی را مقایسه کنید.
- Hard.اضافه کردن راهنمای بدون طبقه بندی کننده.
c ∈ {0, 1}، 10 درصد از زمان در طول آموزش و در زمان نمونه گیری استفاده کنیدε = (1+w)·ε_cond - w·ε_uncond. اندازه گیری نرخ ضربه های حالت مشروط درw = 0, 1, 3, 7. .
اصطلاحات کلیدی
| 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. |
توجه تولید: نتیجه گیری انتشار یک مشکل قدم شمارش است
در مقاله DDPM T=1000 گام های معکوس اجرا می شود. هیچ کس در تولید آن را ارسال نمی کند. هر استیک نتیجه گیری واقعی یکی از سه استراتژی را انتخاب می کند و هر نقشه به طور تمیز به چارچوب تولید از "از کجا تاخیر می آید":
- Faster sampler, same model.DDIM (20-50 مرحله) ، DPM-Solver++ (10-20) ، UniPC (8-16).
ε_θوزن ها تاثيري ندارند. - Distillation.یک دانش آموز را به اندازه ی کمتر به معلم آموزش دهید: نماد های پیوستگی (خودخواهانه → 1-4) ، LCM، SDXL-Turbo، SD3-Turbo. تاخیر را 5-10x دیگر کاهش می دهد، نیاز به آموزش مجدد دارد.
- Caching and compilation.
torch.compile(unet, mode="reduce-overhead"), پس زمینه های انتشار TensorRT-LLM ,xformersتوجه SDPA، وزن bf16، کاهش تاخیر در هر مرحله ~ 2×. با (1) و (2) جمع می شود.
برای یک سرور انتشار تولید، مکالمه بودجه همان چیزی است که ادبیات تولید برای LLM توصیف می کند: تاخیر num_steps × step_cost + VAE_decode، تولیدشbatch_size × (num_steps × step_cost)^-1TTFT کوچک است (یک مرحله) TPOT معادل زمان پاسخ کامل است زیرا تولید تصویر از دیدگاه کاربر "همه یک بار" است.
خواندن بیشتر
- Sohl-Dickstein et al. (2015). Deep Unsupervised Learning using Nonequilibrium Thermodynamics کاغذ انتشار، پیش از زمانش.
- Ho, Jain, Abbeel (2020). Denoising Diffusion Probabilistic Models DDPM
- Song, Meng, Ermon (2021). Denoising Diffusion Implicit Models DDIM، قدم های کمتری
- Nichol & Dhariwal (2021). Improved DDPMبرنامه ی کوسین، تفاوت های آموخته
- Dhariwal & Nichol (2021). Diffusion Models Beat GANs on Image Synthesis راهنمایی برای طبقه بندی کننده
- Ho & Salimans (2022). Classifier-Free Diffusion Guidance CFG
- Karras et al. (2022). Elucidating the Design Space of Diffusion-Based Generative Models (EDM) نماد متحد، تمیز ترین دستور
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.