Генератор

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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