# VAE и GAN: генерация до диффузии

> До диффузии картинки генерировали VAE и GAN: вариационный автоэнкодер учит гладкое латентное пространство, из которого можно сэмплировать, а GAN устраивает состязание генератора с дискриминатором. Оба живы: VAE — внутри Stable Diffusion, GAN — в апскейлерах.

Раздел: [Мультимодальные модели](https://ml-book.com/s/multimodal/) · Страница темы: https://ml-book.com/t/vae-gan/ · Обновлено: 2026-09-16 · Источник: ml-book.com, учебник делается сообществом

## Интуиция: что значит «генерировать»

Классификатор отвечает на вопрос «что это?». Генеративная модель (generative model) решает задачу посложнее: выучить *распределение данных* p(x) и уметь из него сэмплировать — выдавать новые примеры, которых не было в обучающей выборке, но которые выглядят так, будто были. Не «запомнить все лица», а «понять, какими бывают лица», — и нарисовать ещё одно.

Первый кандидат — автоэнкодер (autoencoder, AE): энкодер сжимает картинку в короткий латентный вектор (latent vector) z, декодер восстанавливает картинку обратно, лосс — ошибка реконструкции. Сжатие работает отлично (это почти [снижение размерности](https://ml-book.com/t/dimensionality-pca/), только нелинейное), но для генерации AE непригоден: его латентное пространство «дырявое». Коды обучающих картинок — отдельные островки, а что декодер выдаст в точке *между* ними — никто не обещал. Возьмёшь случайный z — получишь мусор.

## VAE: предсказываем распределение, а не точку

Вариационный автоэнкодер (VAE, variational autoencoder) чинит это двумя приёмами. Во-первых, энкодер выдаёт не точку, а *распределение*: для каждой картинки — среднее μ и разброс σ, и в декодер идёт случайный сэмпл из этого облака. Во-вторых, к лоссу добавляется KL-штраф (KL divergence), который прижимает все облака к стандартному нормальному распределению:

`L = ошибка реконструкции + KL( N(μ, σ) || N(0, 1) )`

Итог: облака разных картинок перекрываются, всё пространство вокруг нуля покрыто «смыслом» — латент становится гладким. Теперь можно сэмплировать z ∼ N(0, 1) и получать осмысленные новые картинки, а двигаясь по прямой между двумя кодами — плавно интерполировать: улыбка постепенно превращается в удивление.

Маленькая техническая хитрость — reparameterization trick: сэмпл записывают как z = μ + σ·ε, где ε ∼ N(0, 1), — случайность вынесена в ε, и градиент спокойно течёт через μ и σ при обучении.

Цена гладкости — размытость: реконструкционный лосс (обычно попиксельный MSE) заставляет декодер усреднять все правдоподобные варианты, и вместо резкой текстуры получается «мыло».

> **💡 Ключевая мысль**
>
> Генерация — это сэмплирование из выученного распределения. VAE делает латентное пространство гладким (сэмплируй откуда угодно), GAN делает картинки резкими (дискриминатор не прощает мыла) — а диффузия потом заберёт лучшее у обоих.

> 🎛 Интерактивная визуализация — на странице темы: https://ml-book.com/t/vae-gan/

## GAN: генератор против дискриминатора

GAN (generative adversarial network, генеративно-состязательная сеть) заходит с другой стороны. Две сети играют друг против друга: **генератор** превращает случайный шум z в картинку, **дискриминатор** учится отличать настоящие картинки от сгенерированных. Это минимакс-игра (minimax game): дискриминатор максимизирует точность различения, генератор минимизирует её — то есть учится обманывать. Никакого попиксельного лосса нет: «хорошая картинка» — та, которую дискриминатор принял за настоящую. Поэтому GAN-ам не выгодно усреднять — усреднённое «мыло» дискриминатор мгновенно раскусит, — и картинки получаются *резкими*.

За резкость платят двумя хроническими болезнями:

- **Mode collapse** (коллапс мод) — генератор находит пару примеров, которые стабильно обманывают дискриминатора, и застревает на них: какие бы z ни подавали, на выходе почти одно и то же. Разнообразие распределения потеряно, хотя каждая отдельная картинка выглядит прилично.
- **Нестабильность обучения** — равновесие двух соревнующихся сетей хрупкое: если дискриминатор слишком силён, генератор не получает полезного градиента; если слаб — генератору не у кого учиться. Обучение GAN — это ручная балансировка learning rate, архитектур и трюков.

## Наследие: где они живут сегодня

Диффузия победила обоих в чистой генерации: она обучается стабильно (простой MSE-лосс вместо хрупкой игры — см. [диффузионные модели](https://ml-book.com/t/diffusion-models/)), покрывает всё распределение без mode collapse и при этом выдаёт резкие картинки. Но VAE и GAN не умерли — они сменили профессию:

- **VAE — сердце latent diffusion.** В Stable Diffusion именно VAE сжимает картинку 512×512 в компактный латент 64×64, где и работает диффузия, а его декодер разворачивает результат обратно в пиксели. Гладкий латент из этой темы — буквально рабочее пространство современных генераторов.
- **GAN — в апскейлерах и дистилляции.** Real-ESRGAN и его родня повышают разрешение фото и видео; состязательный лосс добавляют при дистилляции диффузии в 1–4 шага, чтобы вернуть резкость, потерянную при ускорении.

> **⚠️ Подводный камень**
>
> «VAE размытый, GAN резкий» — не магия архитектур, а следствие лоссов. Попиксельный реконструкционный лосс VAE усредняет все правдоподобные ответы — усреднение и есть размытие. Состязательный лосс GAN штрафует за «неправдоподобность», поэтому усреднять невыгодно. Меняешь лосс — меняется характер артефактов; этот принцип переносится на любые генеративные модели.

> **🎤 На собеседовании**
>
> - «Чем VAE отличается от автоэнкодера?» — энкодер предсказывает распределение (μ, σ), а не точку, плюс KL-штраф прижимает латент к N(0, 1): пространство гладкое, можно сэмплировать и интерполировать. У AE между кодами — «дыры».
> - «Что такое mode collapse?» — генератор GAN выдаёт малое число похожих примеров на любые z: он нашёл, чем обмануть дискриминатора, и потерял разнообразие распределения.
> - «Зачем reparameterization trick?» — z = μ + σ·ε выносит случайность в ε, чтобы градиент проходил через μ и σ; иначе через операцию «сэмплировать» бэкпроп не работает.
> - «Где VAE и GAN используются сегодня?» — VAE — энкодер/декодер латента в Stable Diffusion; GAN — апскейлеры (ESRGAN) и состязательный лосс при дистилляции диффузии.

## Связанные темы

- [Диффузионные модели: как рисует Stable Diffusion](https://ml-book.com/t/diffusion-models/)
- [Эмбеддинги и word2vec](https://ml-book.com/t/embeddings/)
- [Снижение размерности и PCA](https://ml-book.com/t/dimensionality-pca/)
- [Как LLM видят изображения](https://ml-book.com/t/multimodal-llm/)

---

Интерактив, тест из 12 вопросов и карточки терминов — на странице темы: https://ml-book.com/t/vae-gan/
Весь учебник в markdown: https://ml-book.com/llms-full.txt · Оглавление для агентов: https://ml-book.com/llms.txt
