🤖 Машинне навчання · Генеративний ШІ
📅 Березень 2026 ⏱ ≈ 11 хв читання 🔴 Просунутий · Останнє оновлення: 23 червня 2026 р.

Як ШІ генерує зображення — пояснення дифузійних моделей

Введіть «астронавт верхи на коні, олійний живопис, золота година» — і отримайте фотореалістичне зображення за секунди. Stable Diffusion, DALL-E та Midjourney використовують одну й ту саму базову ідею: навчитися обертати процес, що поступово руйнує зображення шумом.

1. Загальна картина

Ключове усвідомлення від Ho та ін. (DDPM, 2020): замість того, щоб навчати мережу генерувати зображення за один прохід, навчіть її прибирати невелику кількість гаусового шуму зі злегка зашумленого зображення. Повторіть це ~1000 разів, починаючи з чистого шуму.

Це перетворює складну задачу (згенерувати реалістичні зображення) на послідовність простих задач (прибрати шум). Результат, як не дивно, дає чіткіші й різноманітніші зображення, ніж GAN-и — без нестабільності навчання.

🖼️
Чисте зображення
t=250
легкий шум
t=500
напівшум
t=750
переважно шум
t=1000
чистий шум

Генерація виконує ці кроки у зворотному порядку: починає з чистого гаусового шуму й ітеративно очищає його до цілісного зображення.

2. Пряма дифузія — додавання шуму

На кожному кроці t додається невелика кількість гаусового шуму згідно з розкладом дисперсії β_t (зазвичай 0.0001 → 0.02 на T=1000 кроках):

Прямий процес (ланцюг Маркова) q(x_t | x_{t-1}) = 𝒩(x_t ; √(1−β_t)·x_{t-1} , β_t·I)

Користуючись прийомом репараметризації, ми можемо семплувати напряму на будь-якому кроці:

x_t = √ᾱ_t · x_0 + √(1−ᾱ_t) · ε , де ε ~ 𝒩(0, I)
ᾱ_t = ∏_{s=1}^{t} (1 − β_s)

Цей замкнений вираз критично важливий: під час навчання ми можемо перестрибнути одразу на будь-який рівень шуму, не виконуючи всі t кроків.

3. Зворотна дифузія — очищення від шуму

Справжній зворотний процес p(x_{t-1} | x_t) — перехід від зашумленого до чистого — потребує точного знання, яке зображення породило цей шум. Це нерозв’язно. Натомість ми навчаємо нейронну мережу ε_θ апроксимувати його.

Зворотний процес (вивчений) p_θ(x_{t-1} | x_t) = 𝒩(x_{t-1} ; μ_θ(x_t, t) , Σ_θ(x_t, t))

μ_θ(x_t, t) = (1/√α_t) · [x_t − β_t/√(1−ᾱ_t) · ε_θ(x_t, t)]

Мережа ε_θ приймає на вхід зашумлене зображення x_t і крок t та передбачає шум ε, доданий на цьому кроці. Після навчання ми ітеративно застосовуємо зворотну формулу, починаючи з чистого шуму.

4. Навчання очисника

Навчання напрочуд просте. Для кожного зображення в наборі даних:

  1. Виберіть випадковий крок t ~ Uniform(1, T).
  2. Виберіть випадковий шум ε ~ 𝒩(0, I).
  3. Обчисліть зашумлене зображення: x_t = √ᾱ_t · x_0 + √(1−ᾱ_t) · ε.
  4. Запустіть мережу: ε̂ = ε_θ(x_t, t).
  5. Мінімізуйте: ‖ε − ε̂‖² (передбачте доданий шум).
Чому передбачати шум, а не чисте зображення? Емпірично передбачення шуму дає кращі результати, бо ціль (шум) має приблизно сталий масштаб, тоді як ціль (чисте зображення) може мати дуже різні масштаби на різних кроках.

5. Архітектура U-Net

Мережа очищення майже завжди є U-Net: згортковою архітектурою зі стискальним шляхом кодувальника, вузьким місцем і симетричним розширювальним шляхом декодувальника. Пропускні з’єднання між відповідними рівнями кодувальника й декодувальника зберігають тонкі просторові деталі.

Ключові доповнення для дифузії:

Сучасні моделі (Stable Diffusion 3, DiT) замінюють U-Net на чисті Transformer-архітектури, що працюють із послідовностями патчів.

6. Латентна дифузія — робота в стиснутому просторі

Дифузія в просторі пікселів надзвичайно дорога: зображення 512×512 має 786 432 пікселі на канал, і кожен потребує 1000 кроків очищення. Рішення (Rombach та ін., 2022, стаття про «Stable Diffusion») — працювати в латентному просторі:

  1. Навчіть автокодувальник (VAE) стискати зображення 512×512 до латентних тензорів 64×64 (8-кратне стиснення на сторону).
  2. Виконуйте весь процес дифузії на латенті 64×64 — у 64 рази менше пікселів.
  3. На етапі висновування декодуйте фінальний латент назад у пікселі декодувальником VAE.

Це зменшує обчислення приблизно у 64 рази з незначною втратою якості, дозволяючи запускати генерацію 1024×1024 на споживчих GPU.

Цифри Stable Diffusion 1.5: 512×512 → латент 64×64×4. 860 млн параметрів U-Net. ~1 секунда на 20 кроків очищення на RTX 3090.

7. Текстове обумовлення за допомогою CLIP

Щоб керувати тим, яке зображення генерується, U-Net очищення також отримує текстове вкладення через перехресну увагу. Текстовим кодувальником зазвичай є текстова вежа моделі CLIP (Contrastive Language–Image Pre-training).

CLIP навчається на парах (зображення, підпис) із контрастивною функцією втрат — зіставляючи зображення з їхніми правильними описами серед партії негативних прикладів. Отримані текстові вкладення кодують багатий семантичний зміст, до якого дифузійна модель може спрямовувати генерацію.

У шарах U-Net: Q = латентні ознаки, K = V = текстові вкладення. Кожна просторова позиція «звертає увагу» на найрелевантніші текстові токени, вносячи семантичне керування на кожному кроці очищення.

8. Безкласифікаторне керування

Навіть із текстовим обумовленням ранні моделі давали зображення, що лише приблизно відповідали запиту. Безкласифікаторне керування (CFG) підсилює вплив тексту на етапі висновування:

Формула CFG ε̂_guided = ε_θ(x_t, ∅) + w · (ε_θ(x_t, c) − ε_θ(x_t, ∅))

c — вкладення текстового запиту
∅ — порожній/нульовий запит (безумовний)
w — масштаб керування (зазвичай 7–15)

Очисник запускається двічі на кожен крок: раз із текстовим запитом, раз без нього. Різниця підсилюється на масштаб w і додається назад. Більше w означає сильнішу відповідність запиту, але меншу різноманітність і можливі артефакти.

Повзунок «масштаб керування» в інтерфейсах Stable Diffusion — це саме цей параметр w. Значення 1 = без керування. Значення 7.5 = збалансовано. Значення 20+ = мультяшна перенасиченість.

9. Планувальники семплування

Початковий DDPM (Ho та ін.) потребує ~1000 кроків очищення. Подальші досягнення у планувальниках семплування різко це скоротили:

Галузь продовжує вдосконалюватися — 4–8 кроків тепер досяжні завдяки технікам на кшталт Consistency Models та Adversarial Diffusion Distillation (використовуються в Stable Diffusion Turbo).