Как работают GAN?

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

Допустим, мы пытаемся сделать что-то более банальное, чем пародировать Мону Лизу. Мы собираемся сгенерировать написанные от руки цифры, подобные тем, которые можно найти в наборе данных MNIST, взятом из реального мира. Цель дискриминатора при отображении экземпляра из истинного набора данных MNIST состоит в том, чтобы распознать те, которые являются подлинными.

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

Вот шаги, которые предпринимает GAN:

  • Генератор принимает случайные числа и возвращает изображение.
  • Это сгенерированное изображение подается в дискриминатор вместе с потоком изображений, взятых из фактического, достоверного набора данных.
  • Дискриминатор принимает как настоящие, так и поддельные изображения и возвращает вероятности, число от 0 до 1, где 1 представляет собой прогноз подлинности, а 0 представляет подделку.

Таким образом, у вас есть двойная петля обратной связи:

  • Дискриминатор находится в петле обратной связи с исходными изображениями, которые мы знаем.
  • Генератор находится в цепи обратной связи с дискриминатором.

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

Для MNIST сеть дискриминатора — это стандартная сверточная сеть, которая может классифицировать передаваемые ей изображения, биномиальный классификатор, помечающий изображения как настоящие или поддельные. Генератор в некотором смысле является обратной сверточной сетью: в то время как стандартный сверточный классификатор берет изображение и понижает его дискретизацию для получения вероятности, генератор берет вектор случайного шума и повышает его дискретизацию до изображения. Первый отбрасывает данные с помощью методов понижающей дискретизации, таких как максимальный пул, а второй генерирует новые данные.

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

GAN, автоэнкодеры и VAE

Может быть полезно сравнить генеративно-состязательные сети с другими нейронными сетями, такими как автоэнкодеры и вариационные автоэнкодеры.

Автоэнкодеры кодируют входные данные в виде векторов. Они создают скрытое или сжатое представление необработанных данных. Они полезны для уменьшения размерности; то есть вектор, служащий скрытым представлением, сжимает необработанные данные до меньшего числа существенных измерений. Автоэнкодеры могут работать в паре с так называемым декодером, который позволяет реконструировать входные данные на основе их скрытого представления, как если бы вы использовали ограниченную машину Больцмана.

Вариационные автоэнкодеры — это генеративный алгоритм, который добавляет дополнительное ограничение к кодированию входных данных, а именно то, что скрытые представления нормализуются. Вариационные автоэнкодеры способны как сжимать данные, как автоэнкодер, так и синтезировать данные, как GAN. Однако, в то время как GAN генерируют данные с высокой детализацией, изображения, созданные VAE, имеют тенденцию быть более размытыми. Примеры Deeplearning4j включают как автоэнкодеры, так и вариационные автоэнкодеры.

Вы можете разделить генеративные алгоритмы на один из трех типов:

  • Учитывая метку, они предсказывают связанные функции (наивный байесовский метод).
  • Учитывая скрытое представление, они предсказывают связанные функции (VAE, GAN).
  • Учитывая некоторые признаки, они предсказывают остальные (окрашивание, вменение)