itmo_conspects

Лекция 8. Генеративно-состязательные сети

Генеративно-состязательные сети (Generative Adversarial Network, GAN) - сети, которые генерируют данные, а затем проверяют, насколько они подобны, насколько реальны тем, что были в изначальном датасете

Такие сети делятся на две модели, которые работают вместе: генератор и дискриминатор

Цикл обучения состоит так:

  1. Шум подается на генератор
  2. Генератор создает изображение
  3. Дискриминатор оценивает его
  4. На основе оценки дискриминатора меняются веса в генераторе

На каждой итерации сначала дискриминатор обучается на пакете данных с метками (реальные либо сгенерированные), затем генератор обучается обманывать дискриминатор

В качестве функции потерь используется бинарная кросс-энтропия:

\[\mathcal{L}(\theta) = -\frac{1}{m} \sum_{i=1}^m [ y_i \log d(x_i, \theta) + (1-y_i) \log(1-d(x_i, \theta)) ]\]

Формально обучение сводится к антагонистической игре, где оптимальные стратегии (в этом случае они представляют из себя генератор $G$ и дискриминатор $D$) выводятся из критерия минимакса:

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

Такая минимаксная игра дает равновесие между генератором и дискриминатором - отсюда состязательность из названия

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


Проблемы, которые возникают в генеративно-состязательных сетях:

Трюки, которые их решают:

Помимо базовой генерации изображений генеративно-состязательные сети применяют в этих задачах:

Wasserstein GAN

Другие проблемы генеративно-состязательных сетей:

Чтобы исправить, используют метрику Earth Mover’s Distance (EMD, дословно “расстояние землеходчика”) - расстояние, которое описывает количество “усилий”, прилагая которые, можно сделать одно распределение (генерируемых данных) похожим на другое распределение (реальных данных)

Чтобы аппроксимировать EMD, ввели новую функцию потерь - функцию потерь Вассерштейна. Она помогает от коллапса мод и исчезновения градиентов

Чтобы функция потерь Вассерштайна давала корректно аппроксимированные результаты, функция дискриминатора должна обладать 1-липшицовостью (1-Lipshitz Continuous) - свойством функции, которое означает, что $\vert f(x) - f(y) \vert \leq L \cdot | x - y |$ для $L = 1$, то есть наклон функции в любой точке не превышает по модулю $L$

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

Такая модификация получила название Wasserstein GAN (или WGAN). В ней обычно выполняют 5 итераций обучения дискриминатора (или критика) на 1 итерацию генератора

Для нее пакетная нормализация влияет на штраф градиента, поэтому ее не применяют в дискриминаторе, и Wasserstein GAN требует больше ресурсов, но чаще сходится

Семейство StyleGAN

Другая модификация, StyleGAN, применяется для контроля стиля изображения или для перехода от грубого изображения к более детализированному

Генератор в StyleGAN работает так:

StyleGAN также обладает способностью распутывания признаков (Feature disentanglement): признаки на изображениях из тренировочной выборки могут быть связаны; если признаки запутаны, то размерность вектора шума недостаточна

Распутанное пространство признаков (Disentangled feature space) обладает свойство таким, что изменения определенных частей вектора шума влечет определенные изменения в генерируемом объекте, из-за чего изменение одного признака не влияет на другие

Перед генератором стоит сеть маппинга, в которой:

  1. Сгенерированный шум $z$ пропускается через дополнительную сеть из 8 слоев
  2. Получается распутанный вектор шума $w$ размера 512x512. $w$ не привязан к статистикам обучающих данных
  3. Далее $w$ подается на вход слоям генератора, дополнительно в генератор подается еще один случайный шум размера 4х4х512

В самом генераторе шум $w$ используется в слоях AdaIN (Adaptive Instance Normalization):

  1. Выход сверточного слоя нормализуется с помощью индивидуальной нормализации (Instance normalization) по каналам каждого изображения
  2. Чтобы применить адаптивные стили, используется вектор шума $w$. $w$ передается в два обучаемых сверточных слоя, которые выдают по параметру $y_s$ и $y_b$
  3. Стиль, который был в изображении, масштабируется и применяется новый стиль

Добавление стиля позволяет повысить разнообразие генерируемых изображений. Также можно контролировать степень воздействия стиля на начальных слоях для грубых признаков или на последних слоях для утонченных признаков

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


Новая версия StyleGAN2 привнесла улучшения:

Более новая версия StyleGAN3 стала еще лучше:

Модели семейства StyleGAN позволяют генерировать реалистичные изображения, но обучаются с нуля для высокого разрешения довольно долго. Несмотря на это, дообучение происходит быстро

Условные генеративно-состязательные сети

Чтобы можно было задавать, какие объекты сеть должна сгенерировать, нужно модифицировать архитектуру - так появляются условные генеративно-состязательные сети

Для этого помимо шума в генератор подается нужный класс объект в унитарной кодировке (One-Hot Encoding)

Вместо метки класса может быть отдельное изображение или векторное представление текста или аудио


Так появилась модель BigGAN. В ней:

Для управления признаками без разметки классов можно использовать предобученный генератор и отдельный классификатор признака. Вектор шума $z$ подбирается так, чтобы классификатор на выходе генератора давал нужный сигнал (улыбка, возраст и так далее). Веса генератора при этом заморожены, а изменяется только вектор шума