Может ли машина создать веб-сайт, просто предоставив эскиз?
Или конвертировать видео с разрешением 480p в видео 1080p?
Чтобы автоматически генерировать речь, имитирующую человеческий голос?
Чтобы раскрасить черно-белые изображения?
Для создания новых покемонов и аниме-персонажей?
мечтать и галлюцинировать?

Уже есть хороший прогресс! Давайте подробно рассмотрим GAN.

Вступление.

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

Работающий.

GAN состоят из двух игроков. Генератор (G) и Дискриминатор (D). Эти игроки представляют собой соответственно нейронные сети (определяемые многослойными перцептронами). Роль генератора заключается в создании случайных экземпляров данных, тогда как дискриминатор проверяет, соответствуют ли случайные данные фактическим экземплярам данных - и возвращает вероятности, число от 0 до 1, с 1 представляет собой предсказание реальности, а 0 представляет собой фальшивку.

Теперь давайте рассмотрим сценарий, в котором GAN могут помочь в создании изображений! Позвольте мне описать, как G и D играют свою роль в этом контексте.

Генератор G:

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

Дискриминатор D:

  • Дискриминатор берет как настоящие, так и поддельные образцы.
  • Он распознает, насколько реально поддельное изображение, таким образом возвращая вероятность от 0 до 1.

И G, и D находятся в непрерывном цикле обратной связи, в котором D учится лучше классифицировать по сравнению с подлинными изображениями для каждая итерация, а G находится в цикле обратной связи с D.

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

Краткая теория.

Нейронная сеть генератора состоит из выпрямленных линейных единиц (ReLU) и сигмоидальных функций, тогда как дискриминатор состоит из сетей Maxout.

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

Сети GAN основаны на минимаксной игре (подобной Равновесию Нэша), а не на задаче оптимизации, и имеют функцию ценности, которую один агент стремится максимизировать, а другой - минимизировать. Игра заканчивается в седловой точке, которая является минимумом по отношению к стратегии одного игрока и максимумом по отношению к стратегии другого игрока. Другими словами, и генератор, и дискриминатор стремятся минимизировать максимальные потери.

Алгоритм.

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

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

Реализация.

Сирадж Раваль написал точный и изящный код с помощью Theano, чтобы продемонстрировать GAN, который достаточно прост и интуитивно понятен для понимания. Однако это немного устарело (написано в 2016 году) и приводит к ошибкам, потому что фреймворк Theano эволюционировал с новыми сборками.

Я обновил его код, внеся небольшие изменения, и вы можете просто запустить demo.py. После изучения и выполнения кода он выводит статическую кривую распределения Гаусса, которую генераторная кривая постоянно пытается имитировать. Для каждой итерации он становится все лучше и лучше, поскольку постепенно становится все лучше и лучше в обмане сети дискриминатора. (Я сделал запрос на перенос, надеюсь, скоро будет объединен)

Другие интересные рамки реализации:

  • HyperGAN: предоставляет функции API и командной строки для легкого внедрения GAN.
  • Создание рукописных символов: записная книжка IPython, хорошо документированная реализация GAN с использованием TensorFlow с обучением на основе набора данных MNIST.

Недостатки.

  • Каждая сторона GAN может подавить другую. Если дискриминатор слишком хорош, он будет возвращать значения, настолько близкие к 0 или 1, что генератору будет сложно прочитать градиент. Если генератор слишком хорош, он будет постоянно использовать слабые места в дискриминаторе, что приводит к ложноотрицательным результатам. Это может быть смягчено соответствующей скоростью обучения сетей.
  • Трудно достичь равновесия по Нэшу в многомерных, непрерывных, невыпуклых играх, и это важная открытая исследовательская проблема.
  • Хотя GAN продемонстрировал большой успех в создании реалистичных изображений, обучение дается нелегко; Как известно, этот процесс протекает медленно и нестабильно.
  • Нет хорошего способа количественно оценить результаты GAN из-за отсутствия надлежащих показателей оценки.

Полезные ресурсы.

[1] Примечания Эндрю Нг - http://cs229.stanford.edu/notes/cs229-notes2.pdf

[2] Глубокое обучение Nanodegree от Udacity (DCGAN преподает сам Ян Дж. Гудфеллоу) - https://in.udacity.com/course/deep-learning-nanodegree--nd101

[3] Уловки GAN, советы и рекомендации по работе GAN - https://github.com/soumith/ganhacks