Понимание различий ч / б DCGAN и WGAN. Реализация WGAN с помощью TensorFlow 2.x

В этой статье мы попытаемся понять разницу между двумя основными типами GAN, то есть DCGAN и WGAN, а также рассмотрим разницу между ними и реализацией WGAN с TensorFlow 2.x. Я использовал официальный учебный код DCGAN от TensorFlow в качестве основного кода для этого руководства и модифицировал его для WGAN. Вы можете найти это здесь".

DCGAN

  1. DCGAN состоит из двух нейронных сетей, как и любой другой GAN, то есть одного генератора и одного дискриминатора.
  2. Генератор принимает на вход случайный шум и выводит сгенерированное поддельное изображение.
  3. Дискриминатор принимает реальные и поддельные изображения в качестве входных и выходных значений ч / б 0 и 1, то есть уровень достоверности того, что изображение является реальным или поддельным.
  4. DCGAN использует двоичную кросс-энтропию как функцию потерь.
  5. Генератор не видит реальных изображений и учится только через обратную связь от дискриминатора.
  6. Цель генератора - обмануть дискриминатор, создав реалистичные поддельные изображения. В то время как цель дискриминатора - правильно идентифицировать настоящие и поддельные изображения.

Проблемы в DCGAN

Некоторые проблемы, возникающие в DCGAN, связаны с использованием потерь двоичной кросс-энтропии и заключаются в следующем.

  1. Свертывание режима: это термин (в контексте GAN), используемый для определения неспособности GAN генерировать изображения различных классов. Например: во время обучения с набором данных MNIST, GAN может генерировать только один тип числа вместо всех 10, то есть он может генерировать только «2» или какое-то другое число. Вы также можете взять пример GAN, который может генерировать собак только одной породы, например, хаски, но GAN был обучен для всех пород собак.
  2. Исчезающий градиент: поскольку доверительные значения дискриминатора представляют собой одно значение, которое может быть только ч / б 0 и 1, и цель состоит в том, чтобы получить значение, максимально приближенное к 1, следовательно рассчитанные градиенты приближаются к нулю, и в результате генератор не может получить много информации и не может обучаться. Таким образом, это может привести к сильному дискриминатору, что приведет к плохому генератору.

Решение

Одним из решений проблем, обсужденных выше, является использование потерь Вассерштейна, которые приблизительно соответствуют расстоянию земного движителя (EMD - это количество усилий, необходимых для преобразования одного распределения в другое. В нашем случае мы хотим сделать распределение созданного изображения равным распределению реального изображения. ). WGAN использует потерю Вассерштейна, поэтому давайте теперь поговорим о WGAN.

WGAN

Как мы обсуждали выше, WGAN использует потери Вассерштейна, поэтому давайте разберемся с задачей генератора и дискриминатора.

Вассерштейн Лосс {E (d (R)) - E (d (F))}

  1. Таким образом, наша потеря - это разница ч / б ожидаемого значения вывода дискриминатора с реальными изображениями и ожидаемого значения вывода дискриминатора для поддельных изображений, которые были сгенерированы.
  2. Задача дискриминатора - максимизировать эту разницу, а цель генератора - минимизировать эту разницу.
  3. Примечание: Чтобы использовать потерю Вассерштейна, наш дискриминатор должен быть 1-L (1-липшицевым) непрерывным, то есть норма градиента должна быть не более 1 в каждой точке.

Давайте посмотрим, как обеспечить непрерывность 1-литра.

Штраф за градиент

Штраф за градиент используется для обеспечения непрерывности 1-L и добавляется к потерям как регуляризация градиента дискриминатора. Ниже приведены шаги для расчета штрафа за градиент.

  1. Вычислить интерполированное изображение из реального и поддельного изображения с помощью (real_image * epsilon + fake_image * (1 - epsilon)).
  2. Затем вычислите градиент выходного сигнала дискриминатора по отношению к интерполированному изображению. После этого рассчитываем норму градиента.
  3. Затем штраф рассчитывается как среднее значение квадрата (норма - 1), поскольку мы хотим, чтобы норма была близка к единице.

Задачи генератора и дискриминатора

Итак, конечная цель генератора - увеличить среднее значение ложного выходного сигнала дискриминатора. А цель дискриминатора - w-потеря со взвешенным штрафом.

Обучение WGAN

При обучении WGAN дискриминатор обучается несколько раз для каждого шага, а генератор - один раз для каждого шага.

Вывод

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

Но все это имеет свою цену: WGAN во время обучения работает медленнее, чем DCGAN.

Вы можете найти полный код этой статьи здесь. Следите за обновлениями в следующих статьях, в которых мы будем реализовывать некоторые условные и управляемые сети GAN в TensorFlow 2.

На этом статья завершается. Спасибо за чтение, надеюсь, вам понравилось, и вы смогли понять то, что я хотел объяснить. Надеюсь, вы прочитаете мои предстоящие статьи. Хари Ом… 🙏

использованная литература