Сатья Кришнан Суреш, Шунмугаприя П.

Учитывая все разговоры о DALL-E, стабильной диффузии и дипфейках, важно изучить или узнать о генеративно-состязательных сетях, которые были разработаны Яном Гудфеллоу еще в 2014 году в его статье Генеративно-состязательные сети. GAN заложили основу для разработки изображений, которые были творческими, красивыми и непохожими ни на что, что мы когда-либо видели или о чем думали раньше. Идея, лежащая в основе GAN, проста — две модели глубокого обучения, конкурирующие друг с другом, — и все же эта идея стала настолько мощной, что сегодня мы смотрим на продвинутые модели, которые могут создавать нереалистичные изображения просто из случайного текста. В этом контексте давайте просто попробуем познакомиться с основами GAN.

ГЕНЕРАТИВНЫЕ ПРОТИВОПОЛОЖНЫЕ СЕТИ:

Как было сказано ранее, идея GAN состоит в том, чтобы заставить две модели конкурировать друг с другом, чтобы одна модель делала другую лучше, и наоборот. Модель GAN обычно состоит из модели генератора и модели дискриминатора.

Модель генератора — эта модель используется для создания изображений предопределенного размера из случайного шума или гауссовского распределения. Архитектура модели генератора аналогична архитектуре декодера в модели автокодировщика.

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

Теперь, когда мы знаем, что это за две модели, давайте попробуем понять, как эти две модели работают вместе для создания реалистичных изображений. Предположим, что мы работаем с набором данных fashion mnist.

Изначально в модель генератора подается некоторый случайный шум (форма — [batch_size,coding_size]). Генераторная модель проходит через шум и создает массивы формы [28,28] (мода mnist). Затем изображения, сгенерированные моделью генератора, объединяются с пакетом реальных изображений из набора данных mnist и передаются в модель дискриминатора. Модель дискриминатора пытается классифицировать изображения как настоящие и поддельные, причем поддельными являются изображения, сгенерированные моделью генератора. Если дискриминатор успешно классифицирует большинство изображений, это означает, что генератор не смог создать реалистичные изображения, чтобы запутать дискриминатор. Таким образом, генератор и дискриминатор многократно обучаются, пока генератор не сможет обмануть дискриминатор, заставив его поверить в то, что изображения, сгенерированные им, реальны. Это основная идея GAN. Теперь давайте посмотрим, как реализовать простую GAN с использованием тензорного потока.

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

Модель дискриминатора принимает изображения формы [batch_size,28,28] и сглаживает их в набор данных формы [batch_size,784]. Затем модель пытается захватить различные функции из загруженных изображений, чтобы определить настоящие и поддельные изображения, используя два плотных слоя. Последний слой модели имеет только один модуль, который выводит вероятность того, что изображение либо настоящее (вероятность = 0,5), либо фальшивое (вероятность ‹0,5).

Теперь самое главное. Когда модель GAN скомпилирована, модель дискриминатора следует сделать необучаемой. Поскольку работа модели GAN заключается в создании реалистичных изображений, необходимо обучать только модель генератора, в то время как модель дискриминатора будет просто прогнозировать 1 или 0. Градиенты, полученные из прогнозов, будут использоваться моделью GAN для обучения генератора. . Опять же, простая концепция, но мощная. Приведенный ниже код показывает, как обучить GAN.

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

Это все, что вы можете сделать с простой последовательной моделью из-за трудностей обучения GAN, которые мы рассмотрим в моей следующей статье. А пока, чтобы создать более реалистичные изображения модных аналитиков, давайте попробуем реализовать DCGAN (Deep Convolutional GAN).

DCGAN:

Как следует из названия, вместо использования простых плотных слоев DCGAN использует сверточные слои как в моделях генератора, так и в моделях дискриминатора. В модели генератора слой Conv2DTranspose используется для создания изображений, а в дискриминаторе слой Conv2D используется для выполнения классификации. Код приведен ниже. Обучение DCGAN намного сложнее, чем обучение обычного GAN. Но исследование, проведенное Алеком Рэдфордом, предоставило некоторые рекомендации, которые действительно хорошо работают, когда кто-то пытается внедрить DCGAN. Вот некоторые из рекомендаций: используйте пошаговые сверточные слои вместо слоев с максимальным объединением, используйте слой пакетной нормализации после каждого сверточного слоя в модели генератора, используйте функцию активации tanh в последнем слое модели генератора и т. д.

Изображение, созданное DCGAN с использованием той же функции обучения, что и выше, после 50 эпох показано ниже. Как вы можете видеть, изображения намного лучше, чем изображения, создаваемые обычным GAN.

Заключение:
В этой статье я рассмотрел основы GAN, но наиболее важной концепцией являются трудности, с которыми вы сталкиваетесь при обучении GAN, которые будут обсуждаться в следующей статье.