Генератор

Генераторная часть GAN учится создавать поддельные данные, используя обратную связь от дискриминатора. Он учится заставлять дискриминатор классифицировать свой вывод как реальный.

Обучение генератора требует более тесной интеграции между генератором и дискриминатором, чем требует обучение дискриминатора. Часть GAN, которая обучает генератор, включает в себя:

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

Схема генеративно-состязательной сети. В центре диаграммы находится поле с надписью «дискриминатор». Две ветки входят в эту коробку слева. Верхняя ветвь начинается в левом верхнем углу диаграммы с поля, помеченного «изображения реального мира». Стрелка ведет от этого цилиндра к коробке с надписью «Образец». Стрелка из поля с надписью «Образец» ведет в поле «Дискриминатор». Нижняя ветвь входит в поле «Дискриминатор», начиная с поля с надписью «Случайный ввод». Стрелка ведет от поля «Случайный ввод» к полю «Генератор». Стрелка ведет от поля «Генератор» ко второму полю «Образец». Стрелка ведет от поля «Образец» к полю «Дискриминатор». Две стрелки справа от поля «Дискриминатор» ведут к двум полям с правой стороны диаграммы. Одна стрелка ведет к полю с надписью «Потеря дискриминатора». Другая стрелка ведет к полю с надписью «Потери генератора». Желтое поле, помеченное стрелкой, указывающей влево, и слово «Обратное распространение» нарисовано вокруг поля «Случайный ввод», поля «Генератор», нижнего поля «Выборка», поля «Дискриминатор», поля с надписью « Real» и «Fake», а также поле «Потери генератора», чтобы указать, что обратное распространение работает в части системы, заключенной в желтый прямоугольник.

Рисунок 1: Обратное распространение в обучении генератора.

Случайный ввод

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

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

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

Использование дискриминатора для обучения генератора

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

Этот дополнительный кусок сети должен быть включен в обратное распространение. Обратное распространение корректирует каждый вес в правильном направлении, вычисляя влияние веса на вывод — как изменится вывод, если вы измените вес. Но влияние веса генератора зависит от воздействия весов дискриминатора, в которые он входит. Таким образом, обратное распространение начинается на выходе и возвращается через дискриминатор в генератор.

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

Итак, мы обучаем генератор с помощью следующей процедуры:

  1. Пример случайного шума.
  2. Произведите выходной сигнал генератора из дискретизированного случайного шума.
  3. Получите классификацию дискриминатора «Настоящая» или «Поддельная» для выходного сигнала генератора.
  4. Рассчитать потери от классификации дискриминатора.
  5. Используйте обратное распространение через дискриминатор и генератор, чтобы получить градиенты.
  6. Используйте градиенты, чтобы изменить только веса генератора.

Это одна итерация обучения генератора. В следующем разделе мы увидим, как совмещать обучение как генератора, так и дискриминатора.