Художник от Google. Нейронные сети научились писать картины (36 фото)
Категория: Креативненько
22 июня 2015
Такие нейросети состоят из 10–30 связанных слоев, которые работают последовательно: получив картинку, они анализируют ее и «сообщают» результаты анализа следующему слою. Например, первые слои могут искать на изображении края и углы, средние — интерпретировать наборы особенностей в отдельные объекты (например, двери или листья). Наконец, финальные слои объединяют все эти интерпретации воедино и делают выводы о том, что изображено на картинке — например, здание или дерево.
Чтобы получать «картины», исследователи заставляют работать нейронные сети задом наперед: они показывают сети случайный шум и просят «улучшить» его таким образом, чтобы на выходе получилась определенная интерпретация. Например, если попросить нейросеть «найти» в шуме банан, муравья или морскую звезду, та действительно подкорректирует изображение, чтобы в нем проявились узнаваемые черты.
Шум превращается в бананы.
Цель этого процесса — понять, правильно ли нейросеть интерпретирует те или иные объекты. Дело в том, что нейронные сети обучаются на большом количестве примеров. Можно показать им тысячу фотографий вилок, чтобы они определили нужные характеристики (ручка, четыре зубчика) и научились игнорировать лишние (цвет, форма, положение).
И в будущем, если «попросить» нейросеть нарисовать вилку, можно увидеть, насколько хорошо она усвоила «урок». Например, с гантелей одна из таких сетей не справилась: по-видимому, на всех фотографиях, которые ей показывали, гантели были изображены вместе с держащими их руками. Поэтому в собственном «творчестве» нейросеть тоже постаралась изобразить гантели с руками.
Шум превращается в неправильные гантели.
По словам исследователей, нейронной сети можно вообще не говорить, что именно нужно «нарисовать» — пусть решает сама. В таком случае ей на вход подают случайную картинку или фотографию, выбирают один из слоев нейросети и просят ее улучшить то, что этот слой найдет. Так как у каждого слоя свой уровень абстракции, то каждый раз получаются разные картинки.
Например, базовые слои, определяющие края и их положение на картинке, будут накладывать на фотографию мазки или простые орнаменты.
Фото: вверху Zachi Evenor / Flickr / CC BY 2.0, внизу Günther Noack / Google
А ниже — пример того, что получится, если скормить картинку более «продвинутым» слоям нейронной сети, которые ищут целые объекты на картинках. Разработчики как бы говорят нейросети: «Что бы ты ни увидела, мы хотим побольше этого!». В результате, если сети покажется, что облако похоже на птицу, она сделает его еще более похожим.
Эта нейросеть в основном обучалась на изображениях животных, поэтому она попыталась найти их на фотографии. Правда, получилось немного вперемешку — как объясняют разработчики, это из-за того, что данные хранились на таком высоком уровне абстракции (да, мы тоже ничего не поняли, но выглядит красиво).
Слева направо: Бабочка-пес, свинья-улитка, верблюд-птица и собака-рыба. Иллюстрация: Google
Работает это, конечно, не только с облаками. Ниже другие примеры — как горы превращаются в башни, деревья — в здания, а листочки — в птиц.
Чтобы получить действительно интересные картины, исследователи пошли еще дальше: они подавали нейронной сети картинку, затем то, что она выдала — и так вновь и вновь, на каждом шаге увеличивая масштаб изображения. Причем изначально можно скормить нейросети случайный шум, и все равно получится нечто прекрасное.
Все иллюстрации: MIT Computer Science and AI Laboratory / Google