خودکار کدرها و خودکار کدرها (VAE)
z = μ + σ·ε، به همین دلیل است که هر مدل تصویر انتشار خفیه و جریان مطابقت شما در 2026 استفاده می کند یک VAE در ورودی دارد.Type: Build
Languages: Python
Prerequisites: Phase 3 · 02 (Backprop), Phase 3 · 07 (CNNs), Phase 8 · 01 (Taxonomy)
Time: ~75 minutes
مشکل
یک عدد MNIST 784 پیکسل را به یک کد 16 عدد فشرده کنید، سپس بازسازی کنید. یک خودکار کدگذاری ساده بازسازی MSE را انجام می دهد اما فضای کد یک آشفتگی است. یک نقطه تصادفی را در فضای کد انتخاب کنید، آن را رمزگذاری کنید و شما صدای می گیرید. این هیچ نمونه ای ندارد. این یک مدل فشرده سازی لباس پوشیده است.
آنچه شما واقعا می خواهید این است: (ا) فضای کد یک توزیع تمیز و صاف است که می توانید از نمونه گیری از به عنوان مثال یک گاسیان اسیتروپک N(0, I)، (ب) رمزگذاری هر نمونه یک رقم قابل باور را تولید می کند و (ج) رمزگذاری و رمزگذاری هنوز هم فشرده می شوند. سه هدف، یک معماری، یک از دست دادن.
VAE 2013 Kingma با آموزش کدرها برای تولید یک توزیع q(z|x) = N(μ(x), σ(x)²)، اين توزیع رو به سمت قبل کشيدهN(0, I)از طریق مجازات KL و بعد نمونه گیریzازq(z|x)قبل از رمزگشایی. در زمان نتیجه گیری، رمزگشایی را رها کنید، نمونهz ~ N(0, I)مجازات KL چیزیه که باعث می شه فضای کد ساختار پیدا کنه
در سال 2026 VAEs به ندرت به تنهایی ارسال می شوند آنها از طریق انتشار برای کیفیت تصویر خام برتر شده اند اما آنها کدگر انتخاب برای هر مدل انتشار پنهان (SD 1/2/XL/3, Flux, AudioCraft) هستند. VAE را یاد بگیرید و لایه اول نامرئی هر خط لوله تصویر را که استفاده می کنید یاد خواهید گرفت.
مفهوم
!Autoencoder vs VAE: the reparameterization trick
Autoencoder. z = encoder(x)،x̂ = decoder(z)، از دست دادن = ||x - x̂||². فضای کد غیر ساختار یافته
VAE encoder.دو متری خارج می شود:μ(x)وlog σ²(x)اينها تعريف ميکننq(z|x) = N(μ, diag(σ²)). .
Reparameterization trick.نمونه گیری ازq(z|x)قابل تشخیص نیست. نمونه را به عنوانz = μ + σ·εکجاε ~ N(0, I)حالاzیک تابع تعیین کننده از(μ, σ)+ صدا غیر پارامتر گرادینت ها از طریقش جریان می گیرند μوσ. .
Loss.شواهد پایین تر (ELBO) ، دو اصطلاح:
loss = reconstruction + β · KL[q(z|x) || N(0, I)]
= ||x - x̂||² + β · Σ_i ( σ_i² + μ_i² - log σ_i² - 1 ) / 2بازسازی به دنبالش میرهx̂به سمتx. کلو فشار ميدهq(z|x)با استفاده از این روش، این دو نوع از نمونه های با کیفیت بالا را به صورت کامل در حال تغییر شکل می دهند. با توجه به قبل، آنها با هم معامله می کنند. β (<1) = نمونه های تیز تر، فضای کد کمتر گاوسی. β (>1) = فضای کد تمیز تر، نمونه های مبهمتر. β-VAE (Higgins 2017) این دکمه را مشهور کرد و تحقیقات جدایی را آغاز کرد.
Sampling.در نتیجه: تراشz ~ N(0, I)، به جلو از طریق دیکودر. یک عبور به جلو هیچ نمونه گیری تکراری مانند انتشار.
آن را بسازید
code/main.pyاین برنامه یک VAE کوچک بدون numpy یا مشعل را اجرا می کند. ورودی داده های مصنوعی 8- بعدی است که از یک ترکیب 2-مكونه گوسسی در 8-D گرفته شده است. کدگر و دیکودر MLPs لایه مخفی واحد هستند. ما فعال سازی tanh، عبور جلو، از دست دادن و یک عبور دست نوشته عقب را اجرا می کنیم. نه تولید آموزش.
مرحله اول: کدگر جلو
pythondef encode(x, enc):
h = tanh(add(matmul(enc["W1"], x), enc["b1"]))
mu = add(matmul(enc["W_mu"], h), enc["b_mu"])
log_sigma2 = add(matmul(enc["W_sig"], h), enc["b_sig"])
return mu, log_sigma2log σ²به جایσبنابراین خروجی شبکه بدون محدودیت است (مضاف نرم σ یک دام است گرادینت ها در σ ≈ 0 می میرند).
مرحله دوم: دوباره اندازه گیری و رمزگذاری
pythondef reparameterize(mu, log_sigma2, rng):
eps = [rng.gauss(0, 1) for _ in mu]
sigma = [math.exp(0.5 * lv) for lv in log_sigma2]
return [m + s * e for m, s, e in zip(mu, sigma, eps)]
def decode(z, dec):
h = tanh(add(matmul(dec["W1"], z), dec["b1"]))
return add(matmul(dec["W_out"], h), dec["b_out"])مرحله سوم: ELBO
pythondef elbo(x, x_hat, mu, log_sigma2, beta=1.0):
recon = sum((a - b) ** 2 for a, b in zip(x, x_hat))
kl = 0.5 * sum(math.exp(lv) + m * m - lv - 1 for m, lv in zip(mu, log_sigma2))
return recon + beta * kl, recon, klدقیقاً به شکل بسته KL چون هر دو توزیع گاوسی هستند. به صورت عددی همگام نمی شوند. مردم هنوز کد را با تخمین مونت کارلو KL در سال 2026 ارسال می کنند بدون هیچ دلیل 3x کندتر است.
مرحله 4: تولید
pythondef sample(dec, z_dim, rng):
z = [rng.gauss(0, 1) for _ in range(z_dim)]
return decode(z, dec)این مدل تولید کننده است. پنج خط.
دام ها
- Posterior collapse.دوری های مهدی KL
q(z|x) → N(0, I)خیلی تهاجمی کهzهيچ اطلاعاتي در موردش ندارهx. تصحیح: حذف β (ابتدا β=0، رمپ به 1), بیت های آزاد، یا از KL در ابعاد غیر فعال عبور کنید. - Blurry samples.احتمال گاوسیان از کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد کد
- β too large, too early.سقوط عقب رو ببينيد، از β≈0.01 شروع کنيد و رامپ رو ببينيد
- Latent dim too small.16-D برای MNIST، 256-D برای ImageNet 2562, 2048-D برای ImageNet 10242 کار می کند. VAE انتشار پایدار 512 × 512 × 3 → 64 × 64 × 4 را فشرده می کند (32x فاکتور نمونه پایین در فضای فضایی، 32x در کانال ها).
ازش استفاده کن
دسته VAE 2026:
| Situation | Pick |
|---|---|
| Image-latent encoder for diffusion | Stable Diffusion VAE (sd-vae-ft-ema) or Flux VAE |
| Audio-latent encoder | Encodec (Meta), SoundStream, or DAC (Descript) |
| Video latents | Sora's spatiotemporal patches, Latte VAE, WAN VAE |
| Disentangled representation learning | β-VAE, FactorVAE, TCVAE |
| Discrete latents (for transformer modelling) | VQ-VAE, RVQ (ResidualVQ) |
| Continuous latents for generation | Plain VAE, then condition a flow/diffusion model in that latent space |
یک مدل انتشار غیب یک مدل VAE است که دارای یک مدل انتشار است که بین کدگر و دیکودر زندگی می کند. VAE فشرده سازی را انجام می دهد، مدل انتشار را انجام می دهد. الگوی مشابه برای ویدیو (VAE + video-diffusion DiT) و صوتی (Encodec + MusicGen transformator).
-باده
نگه دارoutputs/skill-vae-trainer.md. .
مهارت های لازم: مشخصات مجموعه داده ها + هدف غش غش + استفاده در جریان پایین (تعمیر مجدد، نمونه گیری یا ورودی انتشار غش) و نتایج: انتخاب معماری (بست/β/VQ/RVQ) ، برنامه β، غش غش، احتمال دیکوتر (گاوسین در مقابل قطعی) و برنامه ارزیابی (MSE تایید، KL در هر غش، فاصله Fréchet بین q(z|x)وN(0, I))
تمرینات
- Easy.تغییر
βدرcode/main.pyبه0.01،0.1،1.0،5.0.از نويسندهاي پايانيهاي MSE و KL ثبت کنيد . کدام β براي داده هاي سنتي شما بهترين است ؟ - Medium.احتمال گاوسی را با احتمال برنولی (خسارت انتروپی کراس) جایگزین کنید. کیفیت نمونه را در نسخه دوگانه ای از همان داده های مصنوعی مقایسه کنید.
- Hard.طولاني
code/main.pyبه یک VQ-VAE کوچک تبدیل کنید: جایگزین کنترول های مداوم کنیدzبا جستجوی نزدیکترین همسایه در یک کد بوک از K=32 ورودی مقایسه کنید MSE بازسازی و گزارش کنید که چه تعداد ورودی کد بوک مورد استفاده قرار می گیرد (تراکم کد بوک واقعی است).
اصطلاحات کلیدی
| Term | What people say | What it actually means |
|---|---|---|
| Autoencoder | Encode-decode network | x → z → x̂, learn MSE. Not generative. |
| VAE | AE with a sampler | Encoder outputs a distribution, KL penalty shapes code space. |
| ELBO | Evidence lower bound | log p(x) ≥ recon - KL[q(z|x) || p(z)]; tight when q = p(z|x). |
| Reparameterization | z = μ + σ·ε | Rewrites stochastic node as deterministic + pure noise. Enables backprop through sampling. |
| Prior | p(z) | Target distribution for the latent, typically N(0, I). |
| Posterior collapse | "KL term wins" | Encoder ignores x, outputs the prior; decoder must hallucinate. |
| β-VAE | Tunable KL weight | loss = recon + β·KL. Higher β = more disentangled but blurrier. |
| VQ-VAE | Discrete latent | Replace continuous z with nearest codebook vector; enables transformer modelling. |
توجه به تولید: VAE گرمترین مسیر در یک سرور انتشار است
در یک لوله لوله Stable Diffusion / Flux / SD3 VAE به هر درخواست دو بار تماس می گیرد یک بار برای کدگذاری (اگر انجام img2img / inpainting) و یک بار برای رمزگذاری. در 10242، عبور decoder اغلب بزرگترین اوج فعال سازی حافظه در کل لوله است زیرا آن را بالا می برد 128×128×16به سمت " لانت " برگرديم1024×1024×3دو تا عواقب عملی:
- Slice or tile the decode.
diffusersافشا می کندpipe.vae.enable_slicing()وpipe.vae.enable_tiling(). تيلینگ يه مصنوعي کوچک از خياط برايO(tile²)حافظه به جایO(H·W). لازم برای 10242+ در GPU مصرف کننده - bf16 decoder, fp32 numerics for the final resize.SD 1.x VAE در fp32 منتشر شد و خاموش تولید NaNs هنگامی که به fp16 در 10242 + کشتی SDXL
madebyollin/sdxl-vae-fp16-fixهمیشه گزینه fp16-fix را ترجیح دهید یا از bf16 استفاده کنید.
خواندن بیشتر
- Kingma & Welling (2013). Auto-Encoding Variational Bayes کاغذ VAE
- Higgins et al. (2017). β-VAE: Learning Basic Visual Concepts with a Constrained Variational Framework β-VAE از هم جدا شده است.
- van den Oord et al. (2017). Neural Discrete Representation Learning VQ-VAE
- Vahdat & Kautz (2021). NVAE: A Deep Hierarchical Variational Autoencoder تصویر پیشرفته VAE
- Rombach et al. (2022). High-Resolution Image Synthesis with Latent Diffusion Models انتشار پایدار؛ VAE به عنوان کدگر.
- Défossez et al. (2022). High Fidelity Neural Audio Compression Encodec، استاندارد صدا VAE.
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.