Як ШІ генерує зображення — пояснення дифузійних моделей
Введіть «астронавт верхи на коні, олійний живопис, золота година» — і отримайте фотореалістичне зображення за секунди. Stable Diffusion, DALL-E та Midjourney використовують одну й ту саму базову ідею: навчитися обертати процес, що поступово руйнує зображення шумом.
1. Загальна картина
Ключове усвідомлення від Ho та ін. (DDPM, 2020): замість того, щоб навчати мережу генерувати зображення за один прохід, навчіть її прибирати невелику кількість гаусового шуму зі злегка зашумленого зображення. Повторіть це ~1000 разів, починаючи з чистого шуму.
Це перетворює складну задачу (згенерувати реалістичні зображення) на послідовність простих задач (прибрати шум). Результат, як не дивно, дає чіткіші й різноманітніші зображення, ніж GAN-и — без нестабільності навчання.
Чисте зображення
легкий шум
напівшум
переважно шум
чистий шум
Генерація виконує ці кроки у зворотному порядку: починає з чистого гаусового шуму й ітеративно очищає його до цілісного зображення.
2. Пряма дифузія — додавання шуму
На кожному кроці t додається невелика кількість гаусового шуму згідно з розкладом дисперсії β_t (зазвичай 0.0001 → 0.02 на T=1000 кроках):
Користуючись прийомом репараметризації, ми можемо семплувати напряму на будь-якому кроці:
x_t = √ᾱ_t · x_0 + √(1−ᾱ_t) · ε , де ε ~ 𝒩(0, I)
ᾱ_t = ∏_{s=1}^{t} (1 − β_s)
Цей замкнений вираз критично важливий: під час навчання ми можемо перестрибнути одразу на будь-який рівень шуму, не виконуючи всі t кроків.
3. Зворотна дифузія — очищення від шуму
Справжній зворотний процес p(x_{t-1} | x_t) — перехід від зашумленого
до чистого — потребує точного знання, яке зображення породило цей шум.
Це нерозв’язно. Натомість ми навчаємо нейронну мережу ε_θ
апроксимувати його.
μ_θ(x_t, t) = (1/√α_t) · [x_t − β_t/√(1−ᾱ_t) · ε_θ(x_t, t)]
Мережа ε_θ приймає на вхід зашумлене зображення x_t і
крок t та передбачає шум ε,
доданий на цьому кроці. Після навчання ми ітеративно застосовуємо зворотну формулу,
починаючи з чистого шуму.
4. Навчання очисника
Навчання напрочуд просте. Для кожного зображення в наборі даних:
- Виберіть випадковий крок
t ~ Uniform(1, T). - Виберіть випадковий шум
ε ~ 𝒩(0, I). - Обчисліть зашумлене зображення:
x_t = √ᾱ_t · x_0 + √(1−ᾱ_t) · ε. - Запустіть мережу:
ε̂ = ε_θ(x_t, t). - Мінімізуйте:
‖ε − ε̂‖²(передбачте доданий шум).
5. Архітектура U-Net
Мережа очищення майже завжди є U-Net: згортковою архітектурою зі стискальним шляхом кодувальника, вузьким місцем і симетричним розширювальним шляхом декодувальника. Пропускні з’єднання між відповідними рівнями кодувальника й декодувальника зберігають тонкі просторові деталі.
Ключові доповнення для дифузії:
- Вкладення кроку: t кодується синусоїдальним кодуванням (як позиційне кодування в Transformer) і додається до кожного залишкового блоку.
- Шари самоуваги: вставляються на низькій просторовій роздільності, щоб уловити глобальну цілісність сцени.
- Перехресна увага: використовується для обумовлення (текст, мітки класів) — див. розділ 7.
Сучасні моделі (Stable Diffusion 3, DiT) замінюють U-Net на чисті Transformer-архітектури, що працюють із послідовностями патчів.
6. Латентна дифузія — робота в стиснутому просторі
Дифузія в просторі пікселів надзвичайно дорога: зображення 512×512 має 786 432 пікселі на канал, і кожен потребує 1000 кроків очищення. Рішення (Rombach та ін., 2022, стаття про «Stable Diffusion») — працювати в латентному просторі:
- Навчіть автокодувальник (VAE) стискати зображення 512×512 до латентних тензорів 64×64 (8-кратне стиснення на сторону).
- Виконуйте весь процес дифузії на латенті 64×64 — у 64 рази менше пікселів.
- На етапі висновування декодуйте фінальний латент назад у пікселі декодувальником VAE.
Це зменшує обчислення приблизно у 64 рази з незначною втратою якості, дозволяючи запускати генерацію 1024×1024 на споживчих GPU.
7. Текстове обумовлення за допомогою CLIP
Щоб керувати тим, яке зображення генерується, U-Net очищення також отримує текстове вкладення через перехресну увагу. Текстовим кодувальником зазвичай є текстова вежа моделі CLIP (Contrastive Language–Image Pre-training).
CLIP навчається на парах (зображення, підпис) із контрастивною функцією втрат — зіставляючи зображення з їхніми правильними описами серед партії негативних прикладів. Отримані текстові вкладення кодують багатий семантичний зміст, до якого дифузійна модель може спрямовувати генерацію.
У шарах U-Net: Q = латентні ознаки, K = V = текстові
вкладення. Кожна просторова позиція «звертає увагу» на найрелевантніші
текстові токени, вносячи семантичне керування на кожному кроці очищення.
8. Безкласифікаторне керування
Навіть із текстовим обумовленням ранні моделі давали зображення, що лише приблизно відповідали запиту. Безкласифікаторне керування (CFG) підсилює вплив тексту на етапі висновування:
c — вкладення текстового запиту
∅ — порожній/нульовий запит (безумовний)
w — масштаб керування (зазвичай 7–15)
Очисник запускається двічі на кожен крок: раз із текстовим запитом, раз без нього. Різниця підсилюється на масштаб w і додається назад. Більше w означає сильнішу відповідність запиту, але меншу різноманітність і можливі артефакти.
9. Планувальники семплування
Початковий DDPM (Ho та ін.) потребує ~1000 кроків очищення. Подальші досягнення у планувальниках семплування різко це скоротили:
- DDIM (Song та ін., 2020) — немарковський процес, що дозволяє ~50 кроків зі схожою якістю. Також уможливлює інтерполяцію в латентному просторі (детермінований).
- DPM-Solver++ / DPM-Solver-2M — трактує дифузію як ЗДР, використовує кроки Рунге-Кутти вищого порядку. 20 кроків ≈ якість DDPM з 1000 кроками.
- PLMS / Heun — методи «предиктор-коректор», адаптовані з розв’язувачів ЗДР.
- Flow Matching (Lipman та ін., 2022) — замінює гаусовий розклад шуму прямолінійними «потоками» між шумом і даними. Використовується в Stable Diffusion 3 та Flux. Швидша збіжність, краща якість.
Галузь продовжує вдосконалюватися — 4–8 кроків тепер досяжні завдяки технікам на кшталт Consistency Models та Adversarial Diffusion Distillation (використовуються в Stable Diffusion Turbo).