Многие наивно считают, что роботы никогда не сравняются с людьми в творческих способностях. Действительно ли роботы лишены «творческой жилки»? Или это утверждение не имеет веских аргументов в свою пользу? Что нам нужно от искусственного интеллекта, чтобы сказать что он — креативный?
Проблема в том, что креативность не имеет одного установленного определения, значение слова варьируется в зависимости от контекста. В разные времена и в разных ситуациях креативность понимали по-разному. Например, в XX веке психолог Грэхем Уоллес (Graham Wolles) предложил процедурное определение креативности, которое включает в себя несколько стадий творческого процесса (вынашивание идеи, получение искры вдохновения и т. д.). Джеймс Кауфман (James Kaufman), тоже психолог, предложил другое определение. Оно включает «трансформативное обучение», лично осмысленную интерпретацию опыта и действий, проявление творческого подхода в профессии и т. д. Или вот определение из Википедии: «креативность — способность достигать цели, находить выход из кажущейся безвыходной ситуации, используя обстановку, предметы и обстоятельства необычным образом». И таких определений ещё добрый десяток.
Это я к чему — те, кто придумывал эти определения, считали, что креативностью обладают только люди, поэтому включали в формулировки действия и мотивации, присущие исключительно людям. Если же избавиться от этой предвзятости и понимать под креативностью просто возможность спроектировать что-то и реализовать проект, то нейронные сети вне сомнения будут обладать «творческими способностями».
«Творчество» генеративных моделей нейронных сетей
Зачем нам нужны генеративные модели, на что они вообще способны? ГМ могут следующее (описывая, в скобках буду приводить название типа НС, который используется в конкретной задаче):
a. «Рисовать» объект в соответствии со словесным или графическим описанием (GAN)
Приложение iGAN, разработанное в Калифорнийском университете в Беркли (The University of California, Berkeley) и Adobe CTL, «поймёт» набросок и дорисует его до красивой картинки (подробнее можно почитать здесь). Популярное видео о том, как это работает, можно найти здесь.
Также есть возможность генерировать образы в соответствии со словесным описанием. И эти образы — не только простые объекты типа цветочков, птичек и геометрических фигур. Программу просили нарисовать, например, туалет в маленькой комнате с окном, или две тарелки с рисом и гуакамоле с фасолью. Сервис на основе этой технологии мог бы облегчить жизнь, например, дизайнерам интерьера — можно было бы сказать ему: «А нарисуй-ка гостиную с жёлтым диваном, столом и двумя картинами над ним». И искусственный интеллект нарисовал бы. К сожалению, авторы статьи, в которой предложен подход к реализации, не дают ссылку на код.
b. Увеличивать разрешение без потери качества (GAN)
Да, нейронные сети справляются с задачей увеличения разрешения гораздо лучше других алгоритмов. На рис. 2 видно, что при четырёхкратном увеличении изображения нейронные сети значительно обошли по качеству другой часто используемый метод — бикубической интерполяции. Такая НС может пригодиться, например, криминалистам. Если «преступник» виден на части фото мельком, НС увеличит его портрет, при этом созданный образ будет близок к реальной внешности человека (посмотреть, как работает такая НС, можно здесь). Программная реализация теории доступна на GitHub.
c. Раскрашивать черно-белые фотографии, видеоклипы и наброски (CNN)
Вот, скажем, вы натренировали нейронную сеть отличать дерево от неба, птиц от дерева и так далее. Теперь она знает, какого цвета бывают деревья, какого птицы, и т. д. Можно её переделать таким образом, чтобы она раскрашивала чёрно-белые фотографии (например, снимки из бабушкиного альбома). Поиграть с программой, реализующей эту функцию, можно здесь, а почитать теорию — по этой ссылке.
Или вот другой вариант задачи — раскрасить линейный рисунок. На рис. 4. показано, как раскрасила мою картинку нейронная сеть, мне потребовалось 30 секунд на то, чтобы дать ей цветовые направляющие. Самим попробовать, как это работает, можно здесь.
d. Переносить стиль (CNN)
Известное приложение из этой серии — Prisma. Оно использует специально разработанные стили, набор которых ограничен — их 50. Но есть и другие приложения, позволяющие перенести стиль любой картинки на любую другую, например, алгоритм, разработанный Аниш Аталье (Anish Athalye). На портале The Verge пишут, что вскоре Prisma тоже позволит создавать собственные стили. На рис. 5 показан перенос стиля Ван Гога на портрет Моны Лизы, а на рис. 6 — перенос стиля на видео. Теорию можно почитать здесь.
Существуют узкоспециальные приложения по переносу стиля — они делают фотографии «красивее», могут «органично» приклеить к портрету улыбку или длинные волосы. Это Meitu, FaceApp и др.
Ещё одно применение — генерация снимков компьютерной томографии на основе снимков МРТ. Дело в том, то КТ иногда даёт лучшие результаты, но подвергает пациента облучению, и это не всегда допустимо. Чтобы избежать этого, можно использовать нейронные сети.
e. Дорисовывать текстуры, вставлять «недостающие» части картинки (DCGAN)
Дорисовать недостающий кусок изображения НС тоже могут. Для чего это нужно? Например, вы фотографируете гламурную девушку в лесу. Модель на снимке вышла отлично, но во время фотосессии из-за куста вышел медведь. На фотографии вы хотите избавиться от этого медведя и заполнить пробел лесом. Вы вырезаете медведя в фотошопе и натравливаете нейронную сеть на лакуну — готово: вместо медведя появился лес (теория, программная реализация). ГМ могут не только заполнять «пробелы», но и дорисовывать структуры. Это может понадобиться, например, гейм-дизайнеру. Если он создал 20% карты, по которой будет ходить герой, остальные 80% может дорисовать нейронная сеть. Примеры синтезированных текстур можно посмотреть здесь (программа реализована на фреймворке Caffe; теоретические подробности — по этой ссылке).
f. Удалять шум с картинки, диктофонной записи и из других сред (RNN)
Об удалении шума с графических изображений с помощью НС написано несколько статей (см. например, http://ieeexplore.ieee.org/abstract/document/7839189/), однако мне не удалось найти практических реализаций. Возможно, так получилось, потому что другие методы пока справляются с задачей так же хорошо, но требуют меньших вычислительных затрат (на 2012 год нейронные сети достигли уровня других методов удаления шума с картинок). Немного по-другому дело обстоит со звуком — ИИ хорошо себя показал в сокращении шума в задаче автоматического распознавания речи (Automatic speech recognition, ASR). Здесь представлен код приложения, которое использует RNN для удаления шума на записях с человеческим голосом. Ещё лучше дела обстоят с удалением шума из данных медицинских анализов — часто получить модель шума в этой области бывает сложно, нейронные сети справляются с этой задачей лучше многих других методов. Например, НС применимы в задаче удаления шума при расшифровке гистонной последовательности генома или для удаления шума в кардиограммах.
g. Генерировать видео (VGAN), аудио и другие типы данных (GAN, VA)
Допустим, вы делаете малобюджетный фильм, денег на настоящие спецэффекты нет. Но лужи крови и ураган жизненно важно показать на видео. Нейронные сети в будущем вам помогут и создадут похожие ролики на основе уже имеющихся (теория здесь, код на GitHub, популярное объяснение здесь).
Или, допустим, видео уже есть, но частота кадров вас не устраивает — можно увеличить её с помощью НС. Хотите, чтобы в саундтреке играла музыка Шопена, но не можете заплатить его родственникам, которые, предположим, предъявили права собственности на наследие композитора? Нейронная сеть может создать похожую музыку, и, используя её, вы сэкономите кучу денег.
В принципе, НС могут работать почти с любым типом данных. Например, если «скормить» НС лекции TED на стадии обучения, на выходе можно получить такую же лекцию TED, только как будто прочитанную человеком с симптомами афазии. Или можно обучить НС на корпусе сценариев научно-фантастических фильмов. В действительности, это уже было сделано, и на основе полученного сценария энтузиасты сняли короткометражный фильм под названием Sunspring. Насчёт изображений, картинки от DeepDream с «глючными собаками» — это, наверно, наиболее известный пример использования ГМ.
Из этой же серии — ИИ может придумывать новые молекулярные отпечатки пальцев. Последние — это такой способ кодирования структуры молекулы (например, можно зашифровать последовательность чисел в двоичной системе исчисления, где каждое число будет обозначать присутствие или отсутствие определённой структуры в молекуле). Так вот, нейронная сеть учится на наборе молекул (с указанной концентрацией), для которых известны показатели влияния на опухоли, и затем может генерировать другие молекулы вместе с показателями влияния. Авторы статьи, в которой описан опыт, использовали полученные отпечатки пальцев, чтобы проверить противораковые качества 72 миллионов компонентов в базе химических данных PubChem и выбрать молекулы-кандидаты, которые теоретически могут иметь противораковые свойства.
h. Делать 3D объекты из плоских картинок
Конечно, есть и другие способы создавать 3D картинки из двумерных, но кто знает, за каким методом будущее? Особенно хорошо НС справляются с созданием 3D моделей лиц. Теория — здесь.
i. Генеративные модели нейронных сетей для интеллектуальных агентов
Нейронные сети помогают нам создавать все более человекоподобных роботов! С помощью генеративных моделей, они смогут лучше, чем в прошлом, делать следующие вещи:
Разговаривать (LSTM, GAN). Знаете Сири (программа-ассистент, которая отвечает на голосовые запросы женским голосом из Айфона) или Алексу (Amazon Alexa — такой же персональный ассистент, используемый в разных девайсах)? Такие голосовые ассистенты могут значительно выиграть от использования нейронных сетей. С помощью НС можно создать модель диалога, которая будет лучше отражать то, как люди действительно говорят. Чат-боты, построенные на нейронных сетях, лучше, чем другие выполняют эту задачу (сейчас есть такие на рекуррентных нейронных сетях и на GAN, модель Seq2Seq). Как написать нейросетевого чат-бота самому, можно посмотреть здесь. С помощью генеративных моделей также можно достичь вполне аутентичного воспроизведение голоса (WaveNet — код, теория, популярное объяснение).
Шутить (LSTM). «В чём разница между снеговиком и снежной бабой? — Снежные яйца (snowballs)»; «Люблю своих любовниц так же, как люблю кофе. Терпеть его не могу» — это примеры юмора, созданного нейронной сетью LSTM, обученной на наборе шуток из Kaggle. Здесь можно посмотреть туториал о том, как создать собственный генератор шуток. Шутить нейронную сеть научили без какой либо практической цели, хотя можно использовать эту технологию для написания анекдотов для жёлтой прессы.
Танцевать, двигаться в пространстве (HMM, SPN). «Скрытые марковские модели (HMM) для контактной импровизации» — звучит как оксюморон. На самом деле нет: в Центре исследований интеллектуальных систем в Университете Дикина (Centre for intelligent systems research, Deakin university), научили интеллектуального агента отвечать на действия электронного аватара танцора (статья http://dl.acm.org/citation.cfm?id=2618008).
Нейронные сети также хороши, чтобы помочь роботам ориентироваться в пространстве. Для эффективного перемещения, роботам нужно воображать себе пространство, — они хранят у себя в памяти его модель, созданную, например, нейронной сетью.
Рисовать наброски. Сервис Quick, Draw! от Google — это такая игра, в которой ты пытаешься за 30 секунд нарисовать объект и сделать так, чтобы нейронная сеть поняла, что ты нарисовал. Так вот, на базе набросков, которые люди рисовали в игре, нейронную сеть научили делать линейные рисунки или даже дорисовывать существующие картинки. Программа, которая это выполняет, называется Sketch-RNN (теория, программная реализация).
Так креативные или нет?
После изучения всех перечисленных применений мне очевидно, что нейронные сети — креативные. Если в рамках наших определений искусственный интеллект не может выступать как творец и «креативщик», то проблема, скорее всего, в определениях, а не в искусственном интеллекте.
Аббревиатуры
CNN — convolutional neural network (свёрточная нейронная сеть);
GAN — generative adversarial network (генеративные состязательные сети);
RNN — recurrent neural network (рекуррентные нейронные сети);
LSTM — long short term memory network (сети с долгой краткосрочной памятью);
SPN — sum-product network (сети доверия; сети, построенные на алгоритме распространения доверия);
HMM — hidden markov model (скрытые марковские модели).