Модуль 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) | Быстро | Сложная |
| Diffusion | SOTA | Высокое | Медленно | Очень хорошая |
Численный пример
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 — как меняется качество реконструкции и интерполяции?
§ Акт · что дальше