Что такое генеративно-состязательная сеть? Если вы еще не слышали о генеративных состязательных сетях, не волнуйтесь, вы их услышите. Самая горячая тема в глубоком обучении, GAN, как их называют, могут создавать системы, которые учатся большему без помощи людей.

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

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

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

Переход к более формальному определению GAN путем введения некоторых концепций вероятности, в которых задан набор экземпляров данных X и набор меток Y:

· Генеративные модели фиксируют совместную вероятность p (X, Y) или просто p (X), если нет меток.

· Дискриминационные модели учитывают условную вероятность p (Y | X).

Чтобы понять GAN, мы должны понимать, что концепция создания новых данных не является чем-то новым. Следовательно, очень важно знать традиционный статистический и вероятностный подход к генерации данных. У нас есть цепи Маркова, которые объясняют похожую концепцию.

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

а также,

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

В цепи Маркова распределение вероятностей следующих состояний для цепи Маркова зависит только от текущего состояния, а не от того, как цепь Маркова достигла текущего состояния. На рисунке 1 показана простая цепь Маркова с тремя состояниями. Из среднего состояния A мы переходим с (равными) вероятностями 0,5 либо к B, либо C. От B или C мы переходим с вероятностью 1 к A. Тогда матрица вероятностей перехода этой цепи Маркова равна

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

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

* ПРИМЕЧАНИЕ. Это очень обобщенное определение GAN, поскольку они представляют собой многие другие варианты генерирующей состязательной сети.

Ни одна из моделей не должна возвращать число, представляющее вероятность. Мы можем смоделировать распределение данных, имитируя это распределение.

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

Точно так же генеративная модель может моделировать распределение, производя убедительные «фальшивые» данные, которые выглядят так, как будто они взяты из этого распределения.

ГЕНЕРАТИВНЫЕ МОДЕЛИ СЛОЖНЫ:

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

Дискриминантная модель пытается определить разницу между написанными от руки 0 и 1, рисуя линию в пространстве данных. Если он правильно построит строку, он сможет отличить 0 от 1 без необходимости точно моделировать, где именно размещаются экземпляры в пространстве данных по обе стороны от строки. Напротив, генеративная модель пытается произвести убедительные единицы и нули, генерируя цифры, которые близки к их реальным аналогам в пространстве данных. Он должен моделировать распределение в пространстве данных. Сети GAN предлагают эффективный способ обучения таких богатых моделей, чтобы они напоминали реальное распределение. Чтобы понять, как они работают, нам нужно понять базовую структуру GAN.

ОБЩИЙ ОБЗОР GAN:

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

ДИСКРИМИНАТОР:

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

Данные для обучения дискриминатора поступают из двух источников:

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

Из рисунка 4 видно, что два поля «Образец» представляют эти два источника данных, поступающих в дискриминатор. Во время обучения дискриминатора генератор не тренируется. Его веса остаются постоянными, пока он создает примеры для обучения дискриминатору.

Дискриминатор подключается к двум функциям потерь. Во время обучения дискриминатора дискриминатор игнорирует потери генератора и просто использует потери дискриминатора.

Во время обучения дискриминатору:

  1. Дискриминатор классифицирует как реальные данные, так и поддельные данные от генератора.
  2. Потеря дискриминатора наказывает дискриминатор за неправильную классификацию реального экземпляра как фальшивого или фальшивого экземпляра как реального.
  3. Дискриминатор обновляет свои веса посредством обратного распространения из-за потерь дискриминатора через сеть дискриминатора.

ГЕНЕРАТОР:

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

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

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

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

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

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

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

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

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

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

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

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

СХОДИМОСТЬ:

По мере того, как генератор улучшается с обучением, производительность дискриминатора ухудшается, потому что дискриминатор не может легко отличить реальное от фальшивого. Если генератор работает идеально, то точность дискриминатора составляет 50%. Фактически, дискриминатор подбрасывает монетку, чтобы сделать свой прогноз.

Такой прогресс создает проблему для конвергенции GAN в целом: обратная связь дискриминатора со временем становится менее значимой. Если GAN продолжает обучение после точки, когда дискриминатор дает полностью случайную обратную связь, тогда генератор начинает обучаться на нежелательной обратной связи, и его собственное качество может ухудшиться.

Для GAN конвергенция часто является мимолетным, а не стабильным состоянием.

ФУНКЦИИ ПОТЕРЯ:

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

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

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

GAN может иметь две функции потерь: одну для обучения генератора и одну для обучения дискриминатора. Но теперь у нас есть вопрос, который стоит задать: «Как две функции потерь могут работать вместе, чтобы отразить меру расстояния между распределениями вероятностей?»

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

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

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

В этой функции:

  • D (x) - это оценка дискриминатором вероятности того, что экземпляр реальных данных x является действительным.
  • Ex - это ожидаемое значение по всем экземплярам реальных данных.
  • G (z) - это выходная мощность генератора при заданном шуме z.
  • D (G (z)) - оценка дискриминатором вероятности того, что фальшивый экземпляр реален.
  • Ez - это ожидаемое значение для всех случайных входов в генератор (фактически, ожидаемое значение для всех сгенерированных поддельных экземпляров G (z)).
  • Формула выводится из кросс-энтропии между реальным и сгенерированным распределениями.

Генератор не может напрямую влиять на член log (D (x)) в функции, поэтому для генератора минимизация потерь эквивалентна минимизации log (1 - D (G (z))).

Но если мы посмотрим на TF-GAN, мы обнаружим, что он использует Wasserstein Loss.

Эта функция потерь зависит от модификации схемы GAN (называемой «Wasserstein GAN» или «WGAN»), в которой дискриминатор фактически не классифицирует экземпляры. Для каждого экземпляра выводится число. Это число не обязательно должно быть меньше единицы или больше 0, поэтому мы не можем использовать 0,5 в качестве порога, чтобы решить, является ли экземпляр настоящим или поддельным. Обучение дискриминатору просто пытается увеличить результат для реальных экземпляров, чем для поддельных экземпляров.

Поскольку на самом деле он не может отличить подлинное от поддельного, дискриминатор WGAN фактически называется «критиком», а не «дискриминатором». Это различие имеет теоретическое значение, но для практических целей мы можем рассматривать его как признание того, что входные данные для функций потерь не обязательно должны быть вероятностями.

Сами по себе функции потерь обманчиво просты:

· Критическая потеря: D (x) - D (G (z))

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

· Потери в генераторе: D (G (z))

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

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

Для более практического подхода я прикрепляю ссылку на свой репозиторий github, где была зафиксирована веб-копия моей записной книжки Python (файл .ipynb), которая отображает полную реализацию WGAN.

Ссылка: https://github.com/ayajnik/WGAN_bc