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

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

Обзор

Этот процесс создания новых иллюстраций очень похож на любой другой рабочий процесс машинного обучения. Сначала нам нужно получить набор изображений, состоящий из соответствующих примеров. В этом случае мне удалось найти набор данных картин Моне, доступных на Kaggle. Следующий шаг — обучить наш ИИ — то, что называется «моделью» — на наборе данных. Целью модели будет создание убедительных картин, теоретически мы можем сделать это с помощью любого алгоритма или традиционного метода статистического обучения, такого как регрессия; однако нейронные сети намного лучше справляются с такого рода задачами. Как только мы закончим обучение, мы сможем создавать невиданные ранее изображения в стиле Моне. Ниже мы опишем только один возможный (но эффективный) способ сделать то, что мы только что описали.

Интуиция для ГАН

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

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

Что такое ГАН Вассерштейна?

Здесь мы описываем технические аспекты, которые отличают WGAN от GAN. Если вы не знакомы с машинным обучением, некоторые из этих терминов могут не иметь смысла, ничего страшного. Все, что вам нужно понять, это то, как работает GAN и как WGAN улучшает этот процесс. Главное, что вы должны усвоить из этого раздела, это то, что архитектура WGAN дает Генератору и Дискриминатору лучшее представление о том, сколько ошибок присутствует в их прогнозах. То есть, насколько изображения Генератора отличаются от набора настоящих картин Моне и насколько сильно Дискриминатор не смог отличить настоящие картины от подделок. Понятия всегда важнее формул.

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

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

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

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

Почему это работает?

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

Давайте рассмотрим случай, когда мы хотим сгенерировать изображение размером 256 x 256 x 3 с помощью нашей GAN, и наши входные изображения имеют такие же размеры. Здесь у нас есть 256 пикселей для высоты и ширины, и каждый пиксель имеет 3 канала, представляющих значения красного, зеленого и синего цветов. Если мы посмотрим на набор всех возможных значений пикселей в таком изображении и сравним его с набором всех значений пикселей, найденных в картине Моне, мы обнаружим, что распределение пикселей для последней более ограничено — это очевидно, потому что возможных картин Моне гораздо меньше, чем возможных изображений. В ходе обучения наша модель узнает, какими свойствами обладают настоящие картины Моне с точки зрения цвета, стиля, текстуры и многого другого. Все эти свойства закодированы в значениях пикселей, поэтому другой способ представить это состоит в том, что наша модель изучает распределение возможных значений пикселей, которые при расположении в формате 256 x 256 x 3 напоминают картину Моне .

Когда нам нужно создать новую картину, модель может выбрать изображение из распределения, которое она оценила, и это изображение, вероятно, будет напоминать стиль реальной картины, но будет совершенно новым!

Обучение

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

Во-первых, вместо того, чтобы выводить классификацию, описывающую, является ли изображение реальным или поддельным, Дискриминатор вместо этого выводит реальное число, описывающее «качество» рассматриваемого изображения. Реальным изображениям должен быть присвоен высокий балл, а поддельным — низкий. Поскольку дискриминатор просто оценивает изображения, а не различает настоящие и поддельные изображения, вместо этого он называется критиком в архитектуре WGAN.

Во-вторых, Критик обучается чаще, чем Генератор — часто мы повторяем 10 или 20 раз на Критике для каждой итерации Генератора. Это еще один результат использования потери Вассерштейна. Интуитивно, лучший Критик создаст лучшего Генератора, потому что Генератор лучше понимает, насколько хорошо он работает. Однако в исходной архитектуре GAN, если Дискриминатор опережает Генератор, это может привести к тому, что Генератор будет получать очень маленькие градиенты и, в результате, вообще не учиться, мы вынуждены пытаться поддерживать их уровни навыков приблизительно даже для продолжения игры. Потеря Вассерштейна позволяет избежать этого и фактически способствует обучению Критика до оптимальности, позволяя нам обучать еще более оптимальный Генератор без какой-либо нестабильности.

Результаты

Используя архитектуру WGAN, я потренировался на наборе картин Моне и создал несколько убедительных и интересных примеров. С большей вычислительной мощностью и большим временем обучения результаты могут быть еще лучше. Приведенные ниже результаты являются результатом использования Nvidia Tesla P100, предоставленного через Kaggle, обучение заняло примерно 9 часов. В исследованиях были достигнуты еще лучшие результаты за счет использования более крупных сетей, большего количества графических процессоров и обучения в течение нескольких дней.

Вот замедленная съемка того, как Генератор меняет набор выходных изображений по мере того, как он лучше обучается. Обратите внимание, как он изучает тему, цветовую схему и текстуру, связанные со стилем Моне.

Вот некоторые из окончательных изображений:

Вывод

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

Чтобы изучить код и воспроизвести процесс обучения для собственных изображений, посетите репозиторий GitHub здесь. Файл ReadME также ссылается на исходное ядро ​​Kaggle, где вы можете увидеть еще больше визуальных элементов и получить доступ к набору данных, который я использовал.

[1] https://arxiv.org/abs/1701.07875

[2] https://en.wikipedia.org/wiki/Cross_entropy

[3] https://arxiv.org/abs/1704.00028

[4] https://arxiv.org/abs/1406.2661

[5] https://towardsdatascience.com/wasserstein-distance-gan-began-and-progressively-growing-gan-7e099f38da96

.