Генеративно-состязательная сеть

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск

Kirill Savitskii (Обсуждение | вклад)
(Новая: {{well|Статья написана с использованием LLM '''DeepSeek''' (режим глубокого мышления) и проверена участником [[Уч...)
К следующему изменению →

Версия 23:22, 13 июля 2026

Статья написана с использованием LLM DeepSeek (режим глубокого мышления) и проверена участником К.А.Савицкий 10:27, 14 июль 2026 (MSD)

Генеративно-состязательная сеть (Generative Adversarial Network, GAN) — класс машинного обучения, предложенный в 2014 году Иэном Гудфеллоу и соавторами[1], в котором две нейронные сети состязаются друг с другом в рамках теоретико-игровой постановки. Одна сеть (генератор) создаёт синтетические данные, другая (дискриминатор) пытается отличить их от реальных образцов из обучающей выборки. Состязательный процесс заставляет генератор производить всё более правдоподобные примеры, а дискриминатор — всё более точно распознавать подделки, что в пределе приводит к порождению данных, неотличимых от истинных. Интуитивно GAN часто описывают метафорой фальшивомонетчика (генератор) и полицейского (дискриминатор): первый учится изготавливать поддельные банкноты, второй — выявлять их, пока фальшивки не станут неотличимы от настоящих[1].

В отличие от многих генеративных моделей, GAN не требует явного вычисления плотности распределения данных, а использует неявное моделирование через состязательный процесс. Это позволяет синтезировать чрезвычайно реалистичные изображения, аудио, текст и другие типы данных. Благодаря своей гибкости GAN породили обширное семейство архитектур, включая DCGAN, WGAN, StyleGAN, CycleGAN и многие другие, и нашли применение в решении задач генерации лиц, повышения разрешения, перевода изображений, генерации текста по описанию и т. д.

Содержание

История

Идея состязательного обучения восходит к началу 1990-х годов: в 1990 году Юрген Шмидхубер предложил принцип «минимизации предсказуемости» (predictability minimization), при котором одна сеть пытается сделать выходы другой сети максимально непредсказуемыми[1]. Однако современная концепция GAN была сформулирована и реализована Иэном Гудфеллоу с коллегами в статье «Generative Adversarial Nets» 2014 года[1]. Авторы показали, что многослойные перцептроны, обученные в минимаксной игре, способны генерировать узнаваемые изображения рукописных цифр MNIST и лиц.

Бурное развитие GAN началось после появления глубоких свёрточных GAN (DCGAN) в 2015 году[1], которые продемонстрировали стабильное обучение и качественные результаты на наборах изображений. В 2016 году были предложены улучшенные техники тренировки и метрика Inception Score[1]. Кардинального улучшения стабильности и разнообразия удалось добиться с появлением Wasserstein GAN (WGAN) в 2017 году[1], основанного на минимизации расстояния Вассерштейна вместо традиционной JS-дивергенции. В том же году Gulrajani и соавт. представили WGAN-GP с градиентным штрафом[1]. Параллельно развивались условные GAN (cGAN)[1], CycleGAN для непарного перевода изображений[1] и Pix2Pix для парного перевода[1]. Качество синтеза было поднято на новый уровень архитектурами прогрессивно растущих GAN[1] и особенно StyleGAN[1] и StyleGAN2[1]. Масштабирование GAN до рекордных размеров было продемонстрировано в BigGAN[1]. После 2020 года акцент в генеративном моделировании частично сместился в сторону диффузионных моделей, однако GAN продолжают активно развиваться и применяться благодаря скорости инференса и высокому качеству.

Архитектура

Стандартная GAN состоит из двух нейронных сетей, обучаемых одновременно в антагонистическом режиме:

Генератор

Генератор (generator) Gнейросеть, преобразующая случайный шумовой вектор \mathbf{z}, взятый из простого распределения p_{\mathbf{z}} (чаще всего многомерного нормального или равномерного), в синтетический образец данных G(\mathbf{z}). Архитектурно генератор, как правило, представляет собой декодирующую сеть: в случае изображений — обратную свёрточную (транспонированную свёртку), в случае последовательностей — рекуррентную или трансформерную. Задача G — захватить истинное распределение данных p_{\text{data}} и порождать примеры, неотличимые от реальных.

Дискриминатор

Дискриминатор (discriminator) D — нейросеть, принимающая на вход как реальный образец \mathbf{x} \sim p_{\text{data}}, так и сгенерированный G(\mathbf{z}), и возвращающая скалярную величину, интерпретируемую как вероятность того, что вход является истинным. В исходной формулировке D(\mathbf{x}) \in [0,1]. Обычно дискриминатор реализуется как бинарный классификатор (свёрточная сеть для изображений) с сигмоидой на выходе. В ряде вариантов (WGAN) дискриминатор заменяется «критиком», возвращающим произвольное вещественное число.

Математическая формулировка

GAN решают минимаксную задачу:

\min_G \max_D V(D,G) = \mathbb{E}_{\mathbf{x}\sim p_{\text{data}}}[\log D(\mathbf{x})] + \mathbb{E}_{\mathbf{z}\sim p_{\mathbf{z}}}[\log(1 - D(G(\mathbf{z})))]

Дискриминатор стремится максимизировать вероятность правильной классификации реальных и синтетических данных, а генератор — минимизировать \log(1 - D(G(\mathbf{z}))), то есть максимизировать вероятность ошибочной классификации сгенерированных примеров. При оптимальном дискриминаторе для фиксированного G:

D_G^*(\mathbf{x}) = \frac{p_{\text{data}}(\mathbf{x})}{p_{\text{data}}(\mathbf{x}) + p_g(\mathbf{x})},

где p_g — неявное распределение, порождаемое генератором. Подстановка D_G^* в V сводит минимаксную игру к минимизации дивергенции Йенсена — Шеннона между p_{\text{data}} и p_g[1]:

V(D_G^*,G) = -\log 4 + 2\, D_\text{JS}(p_{\text{data}} \parallel p_g)

Таким образом, глобальный минимум достигается при p_g = p_{\text{data}}, когда дивергенция обнуляется.

На практике вместо минимизации \mathbb{E}[\log(1 - D(G(\mathbf{z})))] для генератора часто максимизируют \mathbb{E}[\log D(G(\mathbf{z}))], поскольку в начале обучения градиент \log(1 - D(G(\mathbf{z}))) близок к нулю, и обучение замедляется. Такая замена даёт более сильный градиент при плохом качестве генерации[1].

Процесс обучения

Обучение GAN происходит итеративно путём попеременного обновления параметров дискриминатора и генератора стохастическим градиентным спуском (или его вариантами, такими как Adam). На каждой итерации:

  1. Дискриминатор делает k шагов (часто k=1): берётся мини-батч реальных примеров и мини-батч сгенерированных, вычисляется функция потерь \mathcal{L}_D = -\frac{1}{m}\sum_{i=1}^m [\log D(\mathbf{x}^{(i)}) + \log(1 - D(G(\mathbf{z}^{(i)})))], и веса дискриминатора обновляются в направлении увеличения V.
  2. Генератор делает один шаг: вычисляется \mathcal{L}_G = -\frac{1}{m}\sum \log D(G(\mathbf{z}^{(i)})), и веса генератора обновляются.

Теоретически при бесконечной ёмкости сетей и достаточном количестве итераций процесс сходится к равновесию Нэша, в котором p_g = p_{\text{data}} и D(\mathbf{x}) = 1/2. На практике динамика часто осциллирует, и сходимость не гарантируется.

Проблемы обучения и способы их решения

Нестабильность обучения

Основная трудность — негарантированная сходимость минимаксной игры. Параметры могут расходиться или входить в циклы. Нестабильность проявляется в резких скачках функции потерь и снижении качества генерации. Причина кроется в том, что при пересечении распределений градиент дискриминатора обращается в нуль, а вдали от пересечения дивергенция Йенсена — Шеннона ведёт к насыщению градиентов[1].

Wasserstein GAN (WGAN) решает эту проблему, заменяя JS-дивергенцию на расстояние Вассерштейна (Earth Mover’s Distance), которое всюду непрерывно и дифференцируемо. Дискриминатор заменяется «критиком», чьи веса ограничиваются (например, клиппингом). WGAN-GP (Gradient Penalty) заменяет клиппинг штрафом на норму градиента критика, обеспечивая ещё более стабильное обучение[1].

Спектральная нормализация (SN-GAN) стабилизирует дискриминатор, ограничивая его липшицеву константу путём нормирования весовых матриц[1].

Mode collapse

Генератор может начать воспроизводить лишь ограниченный набор мод (разновидностей) из реального распределения, теряя разнообразие. В крайней форме он выдаёт почти идентичные образцы независимо от \mathbf{z}. Причина — игра сходится к локальному равновесию, в котором генератор обманывает текущий дискриминатор, не покрывая все моды данных.

Меры борьбы включают:

  • Мини-батчевую дискриминацию — дискриминатор анализирует сразу несколько примеров, оценивая их разнообразие[1].
  • Unrolled GAN — генератор оптимизируется против нескольких будущих шагов дискриминатора[1].
  • WGAN/WGAN-GP — использование расстояния Вассерштейна делает ландшафт потерь более гладким и снижает вероятность коллапса.
  • Packing — подача нескольких сгенерированных изображений как одного пакета на вход дискриминатору[1].

Исчезающий градиент

На ранних этапах, когда генератор слаб, дискриминатор легко отличает подделки, и D(G(\mathbf{z})) \approx 0. Градиент \log(1 - D(G(\mathbf{z}))) стремится к нулю, останавливая обучение генератора. Замена потери на максимизацию \log D(G(\mathbf{z})), предложенная изначально, смягчает проблему[1].

Разновидности GAN

С момента появления разработано множество модификаций, адаптирующих идею состязательного обучения под конкретные задачи или улучшающих устойчивость и качество синтеза.

DCGAN (Deep Convolutional GAN)

Предложенная в 2015 году архитектура, которая заменила полносвязные слои на свёрточные и транспонированные свёртки. DCGAN использует пакетную нормализацию в генераторе и дискриминаторе, ReLU и LeakyReLU в качестве активаций, и исключает полносвязные слои на выходе. Продемонстрировала способность к генерации реалистичных изображений и плавную интерполяцию в латентном пространстве[1].

WGAN и WGAN-GP

WGAN[1] формулирует потерю на основе расстояния Вассерштейна, требуя от критика (дискриминатора) принадлежности к классу 1-липшицевых функций. Первоначально ограничение накладывалось клиппингом весов. WGAN-GP[1] добавляет к функции потерь критика штрафное слагаемое \lambda \,\mathbb{E}_{\hat{\mathbf{x}}} [(\|\nabla_{\hat{\mathbf{x}}} D(\hat{\mathbf{x}})\|_2 - 1)^2], где \hat{\mathbf{x}} — случайная точка на отрезке между реальным и сгенерированным примером. Это обеспечивает более плавное ограничение и улучшает сходимость.

Условные GAN (cGAN)

В условных GAN и генератор, и дискриминатор получают дополнительную информацию \mathbf{y} (метку класса, текст, изображение)[1]. Функция потерь модифицируется как V(D,G) = \mathbb{E}_{\mathbf{x},\mathbf{y}}[\log D(\mathbf{x},\mathbf{y})] + \mathbb{E}_{\mathbf{z},\mathbf{y}}[\log(1 - D(G(\mathbf{z},\mathbf{y}),\mathbf{y}))]. Широко применяются в задачах преобразования изображения в изображение (Pix2Pix[1]) и синтеза изображений по тексту.

CycleGAN

CycleGAN[1] позволяет переводить изображения из одного домена в другой без парных соответствий (например, фотография → картина). Вводится дополнительная функция потерь цикличной согласованности (cycle consistency loss): \mathcal{L}_{\text{cyc}} = \mathbb{E}_{\mathbf{x}}[\|F(G(\mathbf{x})) - \mathbf{x}\|_1] + \mathbb{E}_{\mathbf{y}}[\|G(F(\mathbf{y})) - \mathbf{y}\|_1], где G: X \to Y и F: Y \to X — два генератора, действующие в противоположных направлениях, с соответствующими дискриминаторами D_Y и D_X. Это гарантирует, что преобразование сохраняет ключевые свойства объекта.

StyleGAN и StyleGAN2

Семейство архитектур, разработанное NVIDIA для сверхреалистичной генерации лиц[1][1]. Генератор StyleGAN состоит из сети отображения (mapping network), преобразующей \mathbf{z} в промежуточное латентное пространство \mathbf{w}, и синтезирующей сети с блоками адаптивной нормализации экземпляра (AdaIN), которые внедряют стиль на разных масштабах. Добавление шума на каждом разрешении повышает стохастическую вариативность. StyleGAN2 исправляет артефакты «капель воды» и устраняет опору на промежуточный латентный код через перепроектирование нормализации. StyleGAN3 решает проблему нежелательных смещений координат, делая генерацию эквивариантной к сдвигу.

Progressive Growing of GAN (ProGAN)

Методика обучения GAN, при которой разрешение генератора и дискриминатора плавно увеличивается в процессе тренировки: сначала генерируются изображения низкого разрешения, затем постепенно добавляются слои для более высокого. Это ускоряет и стабилизирует обучение высококачественных моделей[1].

Метрики оценки качества

Качество генеративных моделей оценивается как визуально, так и количественно. Основные метрики:

  • Inception Score (IS)[1] — вычисляет расхождение между условным распределением меток для сгенерированных изображений и маргинальным распределением меток, используя предобученный классификатор Inception. Высокое значение говорит о чёткости и разнообразии. Критикуется за нечувствительность к mode collapse в пределах одного класса.
  • Fréchet Inception Distance (FID)[1] — измеряет расстояние Фреше между распределениями признаков (последнего скрытого слоя Inception) для реальных и сгенерированных выборок. Считается, что FID лучше коррелирует с человеческой оценкой реалистичности и разнообразия, чем IS. Чем ниже FID, тем выше качество.
  • Precision and Recall для распределений[1] — обобщает понятия точности (какая доля сгенерированных образцов попадает в многообразие реальных данных) и полноты (какая доля многообразия реальных данных покрыта генератором), оценивая качество и разнообразие.
  • Kernel Inception Distance (KID) — безсмещённый аналог FID, использующий ядерный метод Maximum Mean Discrepancy.
  • Perceptual Path Length (PPL) — измеряет плавность латентного пространства, используемую для StyleGAN.

Практические применения

GAN нашли множество приложений:

  • Генерация изображений и видео: создание реалистичных лиц (проекты ThisPersonDoesNotExist.com на основе StyleGAN), аватаров, пейзажей, предметов интерьера.
  • Сверхразрешение (Super-Resolution): повышение чёткости спутниковых снимков, медицинской визуализации, исторических фотографий (SRGAN).
  • Перевод изображений (Image-to-Image Translation): превращение набросков в фото (Pix2Pix), раскрашивание ч/б кадров, перенос стиля, преобразование дня в ночь, смена времён года.
  • Синтез медицинских данных: генерация синтетических МРТ-снимков, снимков КТ для аугментации обучающих наборов, что особенно важно при нехватке размеченных реальных данных.
  • Deepfake: замена лиц в видео, создание цифровых актёров; технологии применяются как в индустрии развлечений, так и в злонамеренных целях.
  • Дизайн и искусство: автоматическая генерация логотипов, одежды, архитектурных форм, создание картин (портрет «Edmond de Belamy», созданный GAN, был продан на аукционе Christie’s).
  • Аугментация данных: расширение обучающих выборок для других моделей компьютерного зрения, повышая их устойчивость и точность.
  • Обработка звука и музыки: синтез речи, генерация музыкальных композиций, шумоподавление.
  • Молекулярный дизайн: генерация новых химических соединений с заданными свойствами.

Современное состояние и перспективы

На начало 2020-х годов GAN остаются одной из ключевых парадигм генеративного моделирования. Семейство StyleGAN де-факто стало стандартом для синтеза и редактирования лиц и изображений высокого разрешения. StyleGAN3 решил проблему привязки к координатам, открыв путь к генерации плавной анимации. Новые направления включают GAN на основе трансформеров (ViTGAN, StyleSwin), GAN для текстового синтеза изображений (StyleGAN-T, GigaGAN), трёхмерную генерацию (EG3D) и генеративное моделирование видео (StyleGAN-V). Состязательное обучение также интегрируется в диффузионные модели для ускорения вывода и повышения резкости. Хотя диффузионные модели и авторегрессионные трансформеры доминируют в ряде областей, GAN сохраняют нишу благодаря скорости и непревзойдённому качеству в отдельных задачах. Исследования сосредоточены на дальнейшей стабилизации обучения, преодолении mode collapse, улучшении управляемости и интерпретируемости, а также на этических аспектах, связанных с генерацией дипфейков.

См. также

Примечания

Личные инструменты