Phase 08: Generative AI

مدل های انتشار DDPM از ابتدا

هو، جین، ابیل (2020) به این زمینه یک دستور کار را دادند که نمی توانست از آن دست بکشد. اطلاعات را با صدا در هزار گام کوچک نابود کنید. یک شبکه عصبی را برای پیش بینی صدا آموزش دهید. روند را با نتیجه گیری معکوس کنید. امروزه هر تصویر اصلی، ویدیو، 3D و مدل موسیقی در این حلقه اجرا می شود، احتمالا با تطابق جریان یا ترفند های منسجم در بالای آن.

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-تمام شد

چرا کار ميکنه

سه تا حس:

  1. Denoising is easy; generating is hard.درt=T، داده ها صداهای خالص هستند شبکه باید یک مشکل معمولی را حل کند.t=0، شبکه فقط چند پیکسل رو پاک کردن دارهt، مشکل سخته اما شبکه دارای گرادینت های زیادی است که از طریق وزن های مشابه از هر سطح شور جریان می یابد.
  1. Score matching in disguise.وینسن (2011) ثابت کرد که پیش بینی صدا برابر با تخمین است∇_x log q(x_t | x_0), سکور. SDE معکوس از این سکور برای رفتن به سمت گرادینت تراکم یک قدم تصادفی هدایت شده به سمت مناطق احتمال بالا استفاده می کند.
  1. 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 را ببینید.

ازش استفاده کن

RoleTypical stack in 2026
Image pixel-space diffusion (small, toy)DDPM + U-Net
Image latent diffusionVAE encoder + U-Net or DiT (Lesson 07)
Video latent diffusionSpatiotemporal DiT (Sora, Veo, WAN)
Audio latent diffusionEncodec + diffusion transformer
Science (molecules, proteins, physics)Equivariant diffusion (EDM, RFdiffusion, AlphaFold3)

انتشار ستون فقرات تولید جهانی است. تطابق جریان (درسی 13) رقبای 2024-2026 است که معمولاً در سرعت نتیجه گیری برای همان کیفیت برنده می شود.

-باده

نگه دارoutputs/skill-diffusion-trainer.mdمهارت یک مجموعه داده + بودجه و محصول محاسبه: برنامه (خطی / کوسین / سیگمائید) ، هدف پیش بینی (ε / v / x) ، تعداد مراحل، مقیاس راهنمایی، خانواده نمونه ها و پروتکل ارزیابی.

تمرینات

  1. Easy.T را از 40 تا 10 تغییر بدهcode/main.pyکیفیت نمونه (هیستogram بصری از تولیدات) چگونه کاهش می یابد؟ ساختار دو حالت در چه T فرو می ریزد؟
  2. Medium.از پیش بینی ε به پیش بینی v تغییر دهید، مرحله برعکس را دوباره بازگردانید، کیفیت نمونه نهایی را مقایسه کنید.
  3. Hard.اضافه کردن راهنمای بدون طبقه بندی کننده.c ∈ {0, 1}، 10 درصد از زمان در طول آموزش و در زمان نمونه گیری استفاده کنیدε = (1+w)·ε_cond - w·ε_uncond. اندازه گیری نرخ ضربه های حالت مشروط در w = 0, 1, 3, 7. .

اصطلاحات کلیدی

TermWhat people sayWhat 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 گام های معکوس اجرا می شود. هیچ کس در تولید آن را ارسال نمی کند. هر استیک نتیجه گیری واقعی یکی از سه استراتژی را انتخاب می کند و هر نقشه به طور تمیز به چارچوب تولید از "از کجا تاخیر می آید":

  1. Faster sampler, same model.DDIM (20-50 مرحله) ، DPM-Solver++ (10-20) ، UniPC (8-16).ε_θوزن ها تاثيري ندارند.
  2. Distillation.یک دانش آموز را به اندازه ی کمتر به معلم آموزش دهید: نماد های پیوستگی (خودخواهانه → 1-4) ، LCM، SDXL-Turbo، SD3-Turbo. تاخیر را 5-10x دیگر کاهش می دهد، نیاز به آموزش مجدد دارد.
  3. 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 معادل زمان پاسخ کامل است زیرا تولید تصویر از دیدگاه کاربر "همه یک بار" است.

خواندن بیشتر

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.