Художник от гугла: нейронные сети научились писать картины

В блоге Google опубликован рассказ группы исследователей (в их числе российский разработчик Александр Мордвинцев) о том, как искусственные нейронные сети научили писать свои картины. Для этого использовались нейросети, предназначенные для распознавания изображений: получив фотографию или рисунок, они выясняют, какие именно объекты на ней изображены.

Такие нейросети состоят из 10–30 связанных слоев, которые работают последовательно: получив картинку, они анализируют ее и «сообщают» результаты анализа следующему слою. Например, первые слои могут искать на изображении края и углы, средние - интерпретировать наборы особенностей в отдельные объекты (например, двери или листья). Наконец, финальные слои объединяют все эти интерпретации воедино и делают выводы о том, что изображено на картинке - например, здание или дерево.

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

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

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

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

Например, базовые слои, определяющие края и их положение на картинке, будут накладывать на фотографию мазки или простые орнаменты (еще один пример можно посмотреть по ссылке).

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

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

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

Иллюстрации взяты из альбома «Inceptionism: Going deeper into Neural Networks» .


























































«Универсальный язык» нейронной сети Google Neural Machine Translation (GNMT). На левой иллюстрации разными цветами показаны кластеры значений каждого слова, справа внизу - смыслы слова, полученные для него из разных человеческих языков: английского, корейского и японского

За последние десять лет система автоматического перевода текстов Google Translate выросла с нескольких языков до 103, а сейчас она переводит 140 млрд слов ежедневно. В сентябре сообщалось , что разработчики приняли решение полностью перевести сервис Google Translate на глубинное обучение. У этого подхода есть много преимуществ. Перевод становится гораздо лучше. Более того, система может переводить тексты на языки, для которых никогда не видела переводов, то есть не обучалась специально для этой языковой пары.

Нейросеть Google для машинного перевода называется Google Neural Machine Translation (GNMT) . От самого начала и до конца перевод текста теперь полностью выполняет нейросеть. Традиционно ИИ использовался в Google Translate в ограниченном режиме, для некоторых вспомогательных задач. Например, для сравнения текстов, доступных на нескольких языках, вроде официальных документов ООН или Европарламента. В таком режиме сравнивался перевод каждого слова в текстах.

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


Модель архитектуры GNMT (Google’s Neural Machine Translation). Слева сеть энкодера, справа - декодера, в середине модуль внимания. Нижний слой энкодера двусторонний: розовые модули собирают информацию слева направо, а зелёные - в обратном направлении

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


Новая универсальная архитектура GNMT, которая переводит любые языковые пары

Что самое интересное, благодаря универсальной базе смыслов всех человеческих слов нейросеть перевода может работать даже для тех языковых пар, на которых её не обучали. Возьмём пример на анимации. Система обучена для языковых пар «японский⇄английский» и «корейский⇄английский». После этого через универсальную составленную базу смыслов нейросеть сможет переводить также языковую пару «японский⇄корейский», хотя она не тренировалась на ней.


Некоторые примеры смешивания целевых языков в многоязычной модели

Журналисты сразу же ухватились за эту тему и назвали служебную систему с базой смыслов «новым универсальным языком человечества». Например, известный российский маркетолог Андрей Себрант пишет : «Представление смыслов в универсальном виде, не привязанном к конкретному существующему языку, - это, фактически, создание нового универсального языка. Вот только не факт, что доступного человеку».

Действительно, «новый универсальный язык» - это звучит очень красиво и загадочно. Хотя на самом деле это просто единое многомерное пространство, составленное при помощи техники t-SNE , то есть методом нелинейного снижения размерности и визуализации многомерных переменных (t-distributed stochastic neighbor embedding).

Визуализация многомерного пространства данных в нейросети


Если говорить о практическом применении нейросети, то независимые специалисты признают , что разработка Google показывает «потрясающий» результат и наглядно демонстрирует, что нейронный перевод с помощью ИИ способен намного превзойти по качеству классические методы машинного перевода. Нейросеть Google явно улучшает качество перевода во многих отношениях.

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

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

Новый метод универсального перевода, названный разработчиками "Zero-Shot Translation", не требует никаких изменений в архитектуре нейросети Google Neural Machine Translation.

Научная работа с описанием многоязычной системы машинного перевода Neural Machine Translation System на базе нейросети за авторством Мелвина Джонсона, Максима Крикуна и других сотрудников Google



Нейросеть от Google накладывает на фотографию любой из 32 обученных стилей (здесь показаны пять). Программа нетребовательна к железу и памяти. Код опубликуют в ближайшее время

Синтез текстур с переносом стиля с одного изображения на другое - известная техника, которой 15 лет. Впервые она описана в статье «Аналогии по изображению » группы исследователей из Microsoft Research для конференции SIGGRAPH 2001, а также в статье «Подбивка изображения для текстурного синтеза и переноса » от Mitsubishi Electric Research и Калифорнийского университета в Беркли в том же 2001 году. Сейчас трудно сказать, какая из них появилась раньше.

В 2015 году техника получила вторую жизнь, когда к синтезу изображений с переносом стиля подключились нейросети. Это случилось после выхода научной работы «Нейроалгоритм художественного стиля » Гэтиса, Эккера и Бетге из университета Эберхарда-Карла в Тюбингене, Германия (). Работа настолько впечатляющая, что описанный алгоритм вскоре реализовали в нескольких компьютерных программах для потребительского рынка, в том числе в мобильных приложениях вроде российского Prisma (июнь 2016-го).

Работа Гэтиса, Эккера и Бетге хороша тем, что авторы обучили нейросеть на существующих работах известных художников: Винсента Ван Гога, Пабло Пикассо, Эдварда Мунка и других. При этом нейросеть можно продолжить обучать на других наборах данных, так что это универсальный инструмент. Именно такая нейросеть работает на сервере Prisma и других компаний, которые распространяют мобильные приложения для стилизации пользовательских фотографий.

Свёрточная нейросеть Гэтиса, Эккера и Бетге создана на основе 19-слойной VGG-нейросети Симоняна и Зиссермана , а обработка исходного изображения происходит в несколько стадий. На каждой стадии в иерархии количество фильтров увеличивается. Стилизация под конкретный стиль происходит на первых этапах «даунсэмплинга» (широкие мазки, кубистские паттерны и т.д.), а последние слои нейросети обрабатывают оригинальное изображение, чтобы объекты оставались узнаваемыми (d и e на схеме). Нейросеть начинает работу со случайной позиции (или с исходного изображения) до тех пор, пока результат не удовлетворяет заданным требованиям.

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


Примеры стилизации изображений в нейросети Гэтиса, Эккера и Бетге

Оригинальное изображение: Старый город в Тюбингене

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

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

Сейчас компания Google внесла свою лепту в эти исследования. 24 октября 2016 года сотрудники Google Brain Team опубликовали с описанием алгоритма, который работает так же быстро, как и предыдущие, но при этом в единой универсальной нейросети, которая может накладывать любые усвоенные стили.

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

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

Более подробно о стилизации изображений в нейросети рассказано в научно-популярном видео . Его записали две сотрудницы Nat и Lo в 20% своего рабочего времени, которые компания Google выделяет для проектов на свой выбор.