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

«Самая крутая идея в области глубокого обучения за последние 20 лет». - Янн ЛеКун о GAN.

Одного этого замечания достаточно для важности и новаторства сетей GAN. GAN или генерирующие состязательные сети были введены в 2014 году Яном Гудфеллоу и его командой. Это метод, используемый для создания новых данных (в основном изображений), подобных тем, которые содержатся в обучающих данных, но полностью уникальны.

Введение

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

  1. Генератор модели G (Форджер или Джерри Маус): ему поручено генерировать новые изображения.
  2. Модель дискриминатора D (Police или Tom Cat): задача определить, является ли входное изображение настоящим или фальшивым (созданным Фальсификатором).

Итак, как работают эти две модели?

Обе модели являются противниками друг друга и ведут игру с нулевой суммой. Это означает, что модель генератора G генерирует пакет изображений (поддельные), и они вместе с реальными изображениями (из обучающих данных) передаются модели дискриминатора D. Модель дискриминатора D должна различать настоящие и поддельные изображения. Обе модели циклически тренируют друг друга, пока модель генератора не станет достаточно умной, чтобы создавать изображения, которые являются достаточно реальными, чтобы обмануть модель дискриминатора. С математической точки зрения, модель пытается изучить распределение данных, лежащих в основе реальных изображений, и воспроизвести аналогичное распределение данных для создания новых изображений.

Архитектура модели и обучение

Генераторная модель G представляет собой нейронную сеть с параметрами θ и входным вектором z.

  1. Точки в скрытом пространстве, т. Е. Вектор из 100 элементов (z) гауссовского случайного числа, задаются как входные данные сети. Последующие слои используются для повышения дискретизации данных для создания необходимого изображения.
  2. В сверточной нейронной сети есть разные карты характеристик, каждая из которых имеет разную интерпретацию изображения. Точно так же при создании изображения из вектора длины n необходимо сгенерировать несколько изображений, которые в конце можно сжать в одно изображение. Следовательно, первый слой должен содержать достаточно нейронов для создания нескольких карт функций.
  3. Например, чтобы создать изображение набора данных MNIST (28 x 28 изображений, 1 канал), первый плотный слой содержит 6272 нейрона. Затем результат первого слоя преобразуется в 128 карт объектов с изображением 7 x 7 каждая.
  4. Последующие слои применяют методы повышения дискретизации для создания изображения 28 x 28.
  5. Затем он используется как один из входных данных для модели дискриминатора D.

Модель дискриминатора D - это модель бинарной классификации, которая классифицирует изображения на два класса: настоящие («1») и поддельные («0»). Это сверточная нейронная сеть с параметрами Φ и входными данными x. Входные данные x - это пакет изображений, половина из которых является реальными изображениями из обучающих данных, а другая половина - изображениями, сгенерированными моделью генератора G.

Модель GAN: модели генератора и дискриминатора объединены в модель GAN, как показано на рисунке ниже:

Модельное обучение

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

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

«Одни и те же сгенерированные изображения имеют две разные метки. Когда Дискриминатор обучен, метка равна 0, а когда Генератор обучен, метка равна 1 "

Дискриминатор выдаст вероятность реального изображения. Когда он выводит значение вероятности менее 0,4 (пороговое значение), изображение классифицируется как поддельное. Другими словами, сгенерированное изображение является реальным с уровнем достоверности менее 0,4 или 40%. Чтобы обучить генератор создавать более реалистичные изображения, потери для генератора вычисляются на основе того, насколько реальное изображение классифицируется дискриминатором. Поэтому при обновлении весов генератора сгенерированные изображения помечаются как «1». Таким образом, ошибка генератора существенно велика для сгенерированных изображений с низким уровнем достоверности, и он будет обновлять веса для создания более реалистичных изображений.

Функции потерь для модели дискриминатора и генератора

Функции потерь как для дискриминатора, так и для генератора могут быть получены из двоичного уравнения кросс-энтропии:

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

Цель дискриминатора - максимизировать обе функции потерь, и, следовательно, общие потери дискриминатора определяются как:

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

С другой стороны, генератор пытается обмануть дискриминатор и поэтому пытается минимизировать функцию потерь:

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

Следовательно, объединенная функция потерь GAN:

Алгоритм GAN описан в исходной статье Яна Гудбфеллоу Генеративная состязательная сеть:

Классные приложения

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

Создание человеческих лиц:

Преобразование изображения в изображение

Перевод семантического изображения в фотографию

Создание персонажей аниме

Создание музыки

Следите за реализацией Keras GAN в наборе данных MNIST.

Спасибо за прочтение!

Ссылки:

  1. Https://arxiv.org/pdf/1406.2661.pdf
  2. Https://machinelearningmaster.com/how-to-develop-a-generative-adversarial-network-for-an-mnist-handwritten-digits-from-scratch-in-keras/
  3. Https://medium.com/@jonathan_hui/gan-some-cool-applications-of-gans-4c9ecca35900
  4. Https://machinelearningmaster.com/impressive-applications-of-generative-adversarial-networks/