Как AI генерирует изображения: от GAN до диффузии
Разбираем механику генерации изображений нейросетями: VAE, GAN, диффузионные модели — как работают, чем отличаются и что используют Midjourney, DALL-E и Stable Diffusion.
В 2014 году Ян Гудфеллоу опубликовал статью, которая перевернула область генерации изображений. Его генеративно-состязательные сети (GAN) впервые показали, что нейросеть может создавать реалистичные картинки «из ничего». Спустя десять лет ландшафт полностью изменился: диффузионные модели вытеснили GAN с пьедестала, а сервисы вроде Midjourney и DALL-E генерируют изображения, неотличимые от фотографий. Как мы к этому пришли? Разберём всю эволюцию — от первых размытых лиц до фотореалистичных сцен по текстовому описанию.
Зачем нейросети генерируют изображения
Задача генеративных моделей — научиться распределению данных. Если модель «понимает», как устроены фотографии кошек — какие бывают формы ушей, как ложится свет на шерсть, какие пропорции тела — она может сэмплировать новые изображения из этого распределения. По сути, это сжатое понимание визуального мира.
Практические применения вышли далеко за пределы арта:
- Дизайн и маркетинг — генерация уникальных иллюстраций, баннеров, мокапов
- Медицина — синтетические данные для обучения диагностических моделей
- Игры и кино — генерация текстур, концепт-артов, окружений
- Наука — визуализация молекул, архитектурных проектов, карт
VAE: первый шаг — латентное пространство
Вариационные автоэнкодеры (Variational Autoencoders) — одна из первых архитектур, способных генерировать новые изображения. Идея элегантна: сжать изображение в компактный набор чисел (латентный вектор), а потом восстановить обратно.
Как работает VAE:
- Энкодер принимает изображение и выдаёт не фиксированный вектор, а параметры распределения — среднее (μ) и дисперсию (σ²)
- Из этого распределения сэмплируется латентный вектор z
- Декодер восстанавливает изображение из вектора z
Ключевое отличие от обычного автоэнкодера — вероятностная природа. VAE учит не точку в латентном пространстве, а область. Это позволяет сэмплировать новые точки и получать новые изображения.
import torch
import torch.nn as nn
class VAE(nn.Module):
def encode(self, x):
h = self.encoder(x)
mu = self.fc_mu(h) # среднее распределения
log_var = self.fc_var(h) # логарифм дисперсии
return mu, log_var
def reparameterize(self, mu, log_var):
std = torch.exp(0.5 * log_var)
eps = torch.randn_like(std) # случайный шум
return mu + eps * std # сэмпл из распределения
def decode(self, z):
return self.decoder(z) # восстановление изображения
VAE показал ключевую идею: генерация — это путешествие по латентному пространству. Каждая точка этого пространства соответствует возможному изображению.
Проблема VAE — размытые изображения. Модель оптимизирует среднее между всеми возможными вариантами, что даёт «усреднённую» картинку без чётких деталей. Именно эту проблему решили GAN.
GAN: состязание генератора и критика
В 2014 году Ян Гудфеллоу с коллегами из Монреальского университета предложили радикально другой подход — обучать две сети одновременно, заставляя их соревноваться.
graph LR
Z[Случайный шум z] --> G[Генератор G]
G --> FI[Сгенерированное изображение]
RI[Реальное изображение] --> D[Дискриминатор D]
FI --> D
D --> V{Реальное или фейк?}
V -->|Обратная связь| G
V -->|Обратная связь| D
Генератор получает случайный шум и пытается создать правдоподобное изображение. Дискриминатор получает и реальные, и сгенерированные изображения — его задача отличить фейк от оригинала. Генератор учится обманывать дискриминатор, дискриминатор — не поддаваться на обман.
Эту динамику часто сравнивают с фальшивомонетчиком и полицейским: чем лучше полицейский находит подделки, тем качественнее фальшивомонетчик вынужден работать.
Эволюция GAN-архитектур
| Модель | Год | Ключевое достижение |
|---|---|---|
| GAN (оригинал) | 2014 | Сам принцип состязательного обучения |
| DCGAN | 2015 | Свёрточные слои вместо полносвязных |
| ProGAN | 2017 | Прогрессивное наращивание разрешения |
| StyleGAN | 2018 | Контроль стиля на разных уровнях, лица 1024×1024 |
| StyleGAN2 | 2020 | Устранение артефактов, улучшенное качество |
| StyleGAN3 | 2021 | Непрерывное преобразование без привязки к пикселям |
StyleGAN от NVIDIA стал вершиной GAN-эпохи. Он разделил генерацию на уровни: грубая структура (поза, форма лица), средний масштаб (черты лица, причёска) и мелкие детали (текстура кожи, цвет глаз). Это дало невиданный контроль над результатом.
Почему GAN уступили позиции
При всей мощи у GAN есть фундаментальные проблемы:
- Mode collapse — генератор «застревает» на нескольких удачных вариантах и перестаёт разнообразить выдачу
- Нестабильное обучение — баланс между генератором и дискриминатором хрупок, тренировка часто расходится
- Ограниченное разнообразие — GAN отлично воспроизводят структуру, но хуже покрывают всё многообразие данных
- Сложность масштабирования — увеличить GAN на произвольные задачи (текст → изображение) оказалось непросто
Диффузионные модели: шум как основа творчества
В 2020 году Хо, Джейн и Аббель опубликовали работу «Denoising Diffusion Probabilistic Models» (DDPM), которая заложила фундамент современной генерации. Идея парадоксальна: чтобы научиться создавать изображения — сначала научись их уничтожать.
Прямой процесс: добавляем шум
Берём реальное изображение и за T шагов (обычно 1000) постепенно добавляем гауссов шум. На каждом шаге изображение становится чуть более зашумлённым, пока не превратится в чистый случайный шум.
Обратный процесс: убираем шум
Нейросеть (обычно U-Net) учится предсказывать шум, добавленный на каждом шаге. При генерации мы берём чистый шум и пошагово «очищаем» его, получая в итоге реалистичное изображение.
graph LR
subgraph "Прямой процесс (обучение)"
A["🖼 Чистое изображение x₀"] -->|"+шум"| B["x₁"]
B -->|"+шум"| C["x₂"]
C -->|"..."| D["xₜ"]
D -->|"+шум"| E["Чистый шум xₜ"]
end
subgraph "Обратный процесс (генерация)"
F["Случайный шум"] -->|"−шум"| G["xₜ₋₁"]
G -->|"−шум"| H["xₜ₋₂"]
H -->|"..."| I["x₁"]
I -->|"−шум"| J["🖼 Готовое изображение"]
end
# Упрощённый цикл генерации (обратный процесс)
def generate(model, noise_schedule, num_steps=1000):
x = torch.randn(1, 3, 512, 512) # начинаем с чистого шума
for t in reversed(range(num_steps)):
predicted_noise = model(x, t) # нейросеть предсказывает шум
x = denoise_step(x, predicted_noise, noise_schedule[t])
return x # финальное изображение
Латентная диффузия: ключ к скорости
Основная проблема ранних диффузионных моделей — скорость. Тысяча шагов деноизинга в пространстве пикселей — это дорого. Решение нашли в работе «Latent Diffusion Models» (Rombach et al., 2022): проводить диффузию не в пиксельном, а в латентном пространстве.
Сначала VAE-энкодер сжимает изображение 512×512 в латентное представление 64×64. Диффузия работает с этим компактным представлением — в 64 раза меньше данных. Потом VAE-декодер разворачивает результат обратно в полноразмерное изображение.
Именно латентная диффузия лежит в основе Stable Diffusion — самой популярной открытой модели генерации изображений. Перенос вычислений в латентное пространство сделал генерацию доступной даже на потребительских GPU.
Современный ландшафт: что используют в 2026 году
Диффузионные модели стали фундаментом всех ведущих сервисов генерации изображений. Вот актуальная картина:
| Сервис | Модель / версия | Архитектура | Сильная сторона |
|---|---|---|---|
| Midjourney | v7 (апрель 2025) | Диффузионная | Непревзойдённая эстетика и художественность |
| OpenAI | GPT Image 1.5 (замена DALL-E 3) | Диффузионная | Лучшее понимание сложных промптов |
| Stable Diffusion | 3.5 (конец 2025) | Латентная диффузия | Открытый код, полная кастомизация |
| FLUX | 1.1 Pro | Диффузионная (flow matching) | Высочайшее техническое качество, 4.5 сек на изображение |
| Adobe Firefly | 3 | Диффузионная | Безопасная коммерческая лицензия |
Что насчёт GAN?
GAN не исчезли — они сместились в ниши, где критична скорость:
- Суперразрешение — увеличение разрешения изображений в реальном времени (Real-ESRGAN)
- Перенос стиля — быстрое стилистическое преобразование видео
- Инпейнтинг — заполнение вырезанных областей
- Гибридные подходы — GAN-дистилляция диффузионных моделей для ускорения инференса
Исследования показывают, что при одинаковых вычислительных бюджетах GAN-модели для суперразрешения могут достигать результатов, сопоставимых с диффузионными, а инференс у них существенно быстрее.
Что дальше: тренды и перспективы
Направление развития генерации изображений в 2026 году определяют несколько трендов:
Flow Matching — альтернативная формулировка диффузии (используется в FLUX), которая строит прямые траектории от шума к изображению вместо стохастического блуждания. Это даёт более быструю и качественную генерацию.
Consistency Models — подход от OpenAI, позволяющий генерировать изображение за 1–2 шага вместо десятков, жертвуя минимумом качества.
Гибридные архитектуры — объединение преимуществ GAN (скорость) и диффузии (качество). Например, дистилляция диффузионной модели в GAN-генератор.
Видео и 3D — диффузионные модели расширяются на временное измерение (Sora, Runway Gen-3) и трёхмерные сцены.
Заключение
Путь от первых GAN в 2014 году до современных диффузионных моделей — это история последовательного решения фундаментальных проблем. VAE дал идею латентного пространства, но не давал чёткости. GAN дал чёткость, но страдал нестабильностью и коллапсом мод. Диффузионные модели решили обе проблемы за счёт математически элегантного подхода — научиться убирать шум шаг за шагом.
Сегодня латентная диффузия с текстовым кондиционированием — безусловный стандарт индустрии. Но GAN рано хоронить: они продолжают доминировать там, где нужна скорость в реальном времени. Будущее, скорее всего, за гибридными подходами, объединяющими лучшие свойства обеих парадигм.
Источники
- Generative Adversarial Networks (Goodfellow et al., 2014)
- Diffusion Models Beat GANs on Image Synthesis
- Denoising Diffusion Probabilistic Models (Ho et al., 2020)
- How Diffusion Models Work — Sapien.io
- GANs vs. Diffusion Models — Sapien.io
- AI Image Generators Comparison 2026
- What is a Variational Autoencoder — IBM