В этой статье я хочу поделиться базовым пониманием того, как работает генеративно-состязательная сеть, объясненным простым языком. В Интернете существует огромный ажиотаж вокруг метавселенной и NFT, мы видим множество реализаций различных генеративных моделей ИИ, создающих синтетические изображения. , музыку и т. д. Многие изображения высокого качества и высокого разрешения, которые вы встречаете в Интернете, на самом деле являются поддельными изображениями.

Цель этой статьи состоит в том, чтобы любой человек, не обладающий глубокими знаниями, мог понять основные концепции и структуру GAN и рассказать о двух интересных реализациях GAN: CycleGAN и ВГАН. Тем не менее, вам будет полезно иметь некоторое базовое представление о нейронных сетях.

Во время моей стажировки в прошлом году я использовал StyleGAN2 для создания изображений аниме-девушек для потоковой платформы. Стимулом было то, что каждый пользователь может иметь свои уникальные представления профиля. Вот некоторые из результатов:

короче ГАН

Вдохновлен теорией игр, где генератор пытается обмануть дискриминатор, в то время как дискриминатор пытается не быть обманутым генератором.

  • Дискриминатор D оптимизирован для того, чтобы отличать сгенерированные (или поддельные) образцы от реальных. Он обучается на наборе данных реального изображения.
  • Генератор G выводит синтетические сэмплы с учетом входной переменной шума z. Он обучен фиксировать реальное распределение данных, чтобы его генеративные выборки были максимально реальными и обманом заставляли дискриминатор давать высокую оценку вероятности.

Обучение

Восходящий градиент на дискриминаторе, нисходящий градиент на генераторе

  • Максимальные потери на дискриминаторе

Поймите его на две части:

1. Оценка прогноза Discriminator для реального распределения данных (наземная правда).

2. Учитывая фальшивую выборку, сгенерированную G с учетом случайного шума z, из распределения данных p(z) по входному шуму z, мы хотим, чтобы дискриминатор мог сказать, что это фальшивое изображение, выводя очень низкую оценку вероятности , что означает, что мы хотим, чтобы D(G(z)) было близко к 0. Тогда общая сумма этого уравнения будет максимально возможной.

  • Свести к минимуму потери на генераторе

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

Псевдокод

Пристальный взгляд на функцию стоимости — минимаксная функция стоимости

Проблема с:

Если генератор выдает действительно фальшивые результаты (а именно, показатель D(G(z)) очень низкий), трудно выполнить градиентный спуск и улучшить модель, поскольку градиент почти равен 0, когда D(G(z)) низкий ( или почти 0), также известной как проблема исчезающего градиента.

Решение:

Модифицированная функция стоимости.

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

В конце концов, мы хотим получить распределение данных по реальному набору данных p_{r}, чтобы оно было как можно ближе к распределению сгенерированных выборок p_{g}.

Реализации GAN

ЦиклГАН

CycleGAN используется для самостоятельного изменения стиля изображения, выполнения перевода изображения в изображение без парных примеров.

В типичных генераторах CycleGAN 2 используются 2 дискриминатора.

Цикличность:

Усилено потерей цикла. Мы вычисляем разницу между использованием изображения реконструкции из сгенерированного образца и реальных данных. Потеря цикла определяется:

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

Генератор 1:

Сопоставляет входное изображение стиля 1 со стилем 2, сохраняя при этом ту же структуру и особенности изображения.

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

Пытается отличить особенности на выходе генератора 1 от другого реального изображения.

Генератор 2:

Восстанавливает результат стиля 1 по выходным данным генератора 1.

Затем проделайте это в обратном порядке, но с Генератором 2, генерирующим результаты, Дискриминатором 2 в качестве критика и Генератором 1 для восстановления.

Потери дискриминатора:

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

Конечная целевая функция:

Окончательная потеря = потеря цикла + потери дискриминатора

РГАН (ГАН Вассерштейна)

WGAN является улучшением по сравнению с традиционной GAN за счет использования расстояния Вассерштейна для измерения сходства между двумя распределениями вероятностей вместо расхождения KL или расхождения JSD. Оригинал документа WGAN можно найти здесь.

Расстояние Вассерштейна (расстояние движения Земли или электромагнитное расстояние) измеряет расстояние между двумя распределениями вероятностей. Объем «работы», необходимой для смещения распределения на некоторую величину.

W-Distance лучше, чем JSD, потому что, когда сгенерированное распределение данных и реальное распределение данных полностью не пересекаются, использование JSD может не совпасть. Уравнение для W-расстояния определяется следующим образом:

Как и раньше, p_r — это реальное распределение данных, p_g — распределение сгенерированных выборок.

x — это исходное положение, а y — пункт назначения, x-y — сдвинутое расстояние, γ(x,y) — «сила», необходимая для перемещения, тогда общая «работа» равна γ(x,y)⋅|x-y|

Нас интересует только минимальное количество «работы», вот что здесь делает inf, она берет наибольшую нижнюю границу.

Двойная формула на расстоянии Вассерштейна

Теперь, когда мы понимаем, что такое W-расстояние, давайте посмотрим, как работает WGAN.

Целевая функция WGAN получена из двойной формулировки расстояния Вассерштейна, потому что на самом деле нас не интересуют все совместные распределения. Используя двойственность Канторовича-Рубинштейна, мы можем вывести следующее уравнение:

К-Липшиц:

Функция является K-липшицевой, если наклон всегда меньше некоторого значения K.

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

Функции потерь

Довольно просто получить дополнительный штрих к оригинальной GAN с W-Distance.

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

Генератор:

Псевдокод

Спасибо, что читаете этот блог. Если вы хотите продолжить обсуждение какой-либо из тем, которые я упомянул, пожалуйста, не стесняйтесь обращаться ко мне через Linkedin.