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

В этой статье мы попытаемся понять разницу между двумя основными типами GAN, то есть DCGAN и WGAN, а также рассмотрим разницу между ними и реализацией WGAN с TensorFlow 2.x. Я использовал официальный учебный код DCGAN от TensorFlow в качестве основного кода для этого руководства и модифицировал его для WGAN. Вы можете найти это здесь".
DCGAN
- DCGAN состоит из двух нейронных сетей, как и любой другой GAN, то есть одного генератора и одного дискриминатора.
- Генератор принимает на вход случайный шум и выводит сгенерированное поддельное изображение.
- Дискриминатор принимает реальные и поддельные изображения в качестве входных и выходных значений ч / б 0 и 1, то есть уровень достоверности того, что изображение является реальным или поддельным.
- DCGAN использует двоичную кросс-энтропию как функцию потерь.
- Генератор не видит реальных изображений и учится только через обратную связь от дискриминатора.
- Цель генератора - обмануть дискриминатор, создав реалистичные поддельные изображения. В то время как цель дискриминатора - правильно идентифицировать настоящие и поддельные изображения.
Проблемы в DCGAN
Некоторые проблемы, возникающие в DCGAN, связаны с использованием потерь двоичной кросс-энтропии и заключаются в следующем.
- Свертывание режима: это термин (в контексте GAN), используемый для определения неспособности GAN генерировать изображения различных классов. Например: во время обучения с набором данных MNIST, GAN может генерировать только один тип числа вместо всех 10, то есть он может генерировать только «2» или какое-то другое число. Вы также можете взять пример GAN, который может генерировать собак только одной породы, например, хаски, но GAN был обучен для всех пород собак.
- Исчезающий градиент: поскольку доверительные значения дискриминатора представляют собой одно значение, которое может быть только ч / б 0 и 1, и цель состоит в том, чтобы получить значение, максимально приближенное к 1, следовательно рассчитанные градиенты приближаются к нулю, и в результате генератор не может получить много информации и не может обучаться. Таким образом, это может привести к сильному дискриминатору, что приведет к плохому генератору.
Решение
Одним из решений проблем, обсужденных выше, является использование потерь Вассерштейна, которые приблизительно соответствуют расстоянию земного движителя (EMD - это количество усилий, необходимых для преобразования одного распределения в другое. В нашем случае мы хотим сделать распределение созданного изображения равным распределению реального изображения. ). WGAN использует потерю Вассерштейна, поэтому давайте теперь поговорим о WGAN.
WGAN
Как мы обсуждали выше, WGAN использует потери Вассерштейна, поэтому давайте разберемся с задачей генератора и дискриминатора.
Вассерштейн Лосс {E (d (R)) - E (d (F))}
- Таким образом, наша потеря - это разница ч / б ожидаемого значения вывода дискриминатора с реальными изображениями и ожидаемого значения вывода дискриминатора для поддельных изображений, которые были сгенерированы.
- Задача дискриминатора - максимизировать эту разницу, а цель генератора - минимизировать эту разницу.
- Примечание: Чтобы использовать потерю Вассерштейна, наш дискриминатор должен быть 1-L (1-липшицевым) непрерывным, то есть норма градиента должна быть не более 1 в каждой точке.
Давайте посмотрим, как обеспечить непрерывность 1-литра.
Штраф за градиент
Штраф за градиент используется для обеспечения непрерывности 1-L и добавляется к потерям как регуляризация градиента дискриминатора. Ниже приведены шаги для расчета штрафа за градиент.
- Вычислить интерполированное изображение из реального и поддельного изображения с помощью (real_image * epsilon + fake_image * (1 - epsilon)).
- Затем вычислите градиент выходного сигнала дискриминатора по отношению к интерполированному изображению. После этого рассчитываем норму градиента.
- Затем штраф рассчитывается как среднее значение квадрата (норма - 1), поскольку мы хотим, чтобы норма была близка к единице.
Задачи генератора и дискриминатора
Итак, конечная цель генератора - увеличить среднее значение ложного выходного сигнала дискриминатора. А цель дискриминатора - w-потеря со взвешенным штрафом.
Обучение WGAN
При обучении WGAN дискриминатор обучается несколько раз для каждого шага, а генератор - один раз для каждого шага.
Вывод
WGAN обеспечивает стабильное обучение и решает проблему коллапса режима и исчезающего градиента, с которыми мы сталкиваемся в DCGAN.
Но все это имеет свою цену: WGAN во время обучения работает медленнее, чем DCGAN.
Вы можете найти полный код этой статьи здесь. Следите за обновлениями в следующих статьях, в которых мы будем реализовывать некоторые условные и управляемые сети GAN в TensorFlow 2.
На этом статья завершается. Спасибо за чтение, надеюсь, вам понравилось, и вы смогли понять то, что я хотел объяснить. Надеюсь, вы прочитаете мои предстоящие статьи. Хари Ом… 🙏