Модуль III·Статья III·~3 мин чтения

Генеративные модели: VAE и Диффузионные модели

Статистика высокой размерности

Превратить статью в подкаст

Выберите голоса, формат и длину — AI запишет аудио

Генеративные модели: от VAE до диффузии

Дискриминативные модели отвечают на вопрос «какой класс?». Генеративные модели отвечают на «как это выглядит?». Они учатся представлению распределения данных и могут создавать новые образцы — изображения, молекулы, музыку. Три семейства определили современный AIGC: VAE, GAN и диффузионные модели.

Вариационный автоэнкодер (VAE, Kingma & Welling, 2013)

Постановка: Дано x (изображение). Хотим обучить генеративную модель p_θ(x) = ∫ p_θ(x|z) p(z) dz, где z — латентный код (скрытые факторы). Интеграл по всем z — неаналитичен.

Вариационный вывод (ELBO): вводим энкодер q_φ(z|x) ≈ p(z|x) и максимизируем нижнюю границу (Evidence Lower BOund):

log p_θ(x) ≥ E_{q_φ(z|x)}[log p_θ(x|z)] − KL(q_φ(z|x) || p(z)) = L(θ, φ; x)

Расшифровка двух слагаемых:

  • Reconstruction loss E[log p_θ(x|z)]: насколько хорошо декодер восстанавливает x из z — качество реконструкции
  • KL-дивергенция KL(q||p): насколько апостериорное распределение z|x близко к априорному p(z)=N(0,I) — регуляризация латентного пространства

Reparameterization trick: z ~ q_φ(z|x) = N(μ_φ(x), σ_φ²(x)I). Нельзя взять градиент через стохастическую выборку. Трюк: z = μ_φ(x) + σ_φ(x) ⊙ ε, где ε ~ N(0,I). Теперь случайность в ε (не зависит от параметров), градиент ∂z/∂φ аналитичен.

β-VAE: масштабируем KL-слагаемое: L = E[log p(x|z)] − β·KL. При β > 1: сильная регуляризация → диспутанглментованное представление (факторы вариации независимы в z). Пример: z₁ = освещённость, z₂ = поворот лица, z₃ = выражение.

Generative Adversarial Networks (GAN, Goodfellow et al., 2014)

Игровая постановка: Генератор G: z → x̂ и дискриминатор D: x → [0,1] играют в минимаксную игру:

min_G max_D V(D,G) = E_{xp_{data}}[log D(x)] + E_{zp_z}[log(1 − D(G(z)))]

Nash-равновесие: D*(x) = p_{data}(x)/(p_{data}(x) + p_G(x)) → 1/2 (не может отличить). G воспроизводит p_{data}.

Wasserstein GAN (Arjovsky, 2017): Стабильнее оригинального. Заменяет JS-дивергенцию расстоянием Вассерштейна: W(p,q) = inf_{γ∈Π(p,q)} E_{(x,y)~γ}[||x−y||]. Теорема Канторовича-Рубинштейна: W(p,q) = sup_{||f||_L ≤ 1} [E_p[f] − E_q[f]]. Критик (не дискриминатор) должен быть 1-Lipschitz → gradient penalty.

Диффузионные модели (Ho et al., DDPM, 2020)

Прямой процесс (добавление шума): Последовательность T шагов, каждый добавляет гауссовский шум:

q(xₜ|xₜ₋₁) = N(xₜ; √(1−βₜ)xₜ₋₁, βₜI)

xₜ = √ᾱₜ x₀ + √(1−ᾱₜ) ε, где ᾱₜ = Πₛ≤ₜ (1−βₛ), ε ~ N(0,I)

Расшифровка: ᾱₜ — «сигнальная доля» в шаге t (убывает к 0), √(1−ᾱₜ) — «шумовая доля» (растёт к 1). При T=1000, β₁=0.0001→β_T=0.02: x_T ≈ N(0,I).

Обратный процесс (денойзинг): Учим нейросеть ε_θ(xₜ, t) предсказывать добавленный шум:

L = E_{x₀, ε, t}[||ε − ε_θ(√ᾱₜ x₀ + √(1−ᾱₜ)ε, t)||²]

Интуиция: при знании шума ε можно восстановить x_{t-1} из xₜ. Обученная сеть итеративно «убирает шум» из случайного N(0,I) до реального изображения.

Latent Diffusion (Rombach et al., 2022 — Stable Diffusion): Вместо работы в пространстве пикселей (медленно) — кодируем x в латентное пространство z = E(x) через VAE-энкодер (сжатие ~8×). Диффузия в z. Декодирование x = D(z). Генерация в 8× быстрее. Text-conditioning: CLIP text encoder → cross-attention в U-Net.

Сравнение трёх семейств

МетодКачествоРазнообразиеСкоростьУправляемость
VAEСреднееВысокоеБыстроХорошая (в z)
GANВысокоеНизкое (mode collapse)БыстроСложная
DiffusionSOTAВысокоеМедленноОчень хорошая

Численный пример

VAE для MNIST (28×28): z-dim=2. После обучения: пространство z разбито на кластеры по цифрам (0–9). Интерполяция z₁ (цифра 1) → z₂ (цифра 7): промежуточные z декодируются в «переходные» изображения — плавное превращение 1 в 7. KL-loss ≈ 8 нат (компактное пространство), reconstruction BCE ≈ 15 нат.

Задание: Реализуйте VAE для CelebA (лица 64×64). Архитектура: Conv-энкодер → (μ,σ) → reparameterization → z (dim=128) → ConvTranspose-декодер. Обучите 20 эпох. (1) Визуализируйте реконструкции. (2) Сгенерируйте 16 случайных лиц. (3) Интерполируйте между двумя лицами (z₁→z₂, 8 шагов). (4) Добавьте β=4 — как меняется качество реконструкции и интерполяции?

§ Акт · что дальше