Чтобы научить искусственный интеллект выполнять какую-то операцию, нужно дать ему как можно больше примеров. Если данных окажется достаточно, программа найдет закономерности и подстроит свои алгоритмы так, чтобы выдавать нужный результат.
В случае с программой sketch-rnn, которую описывает Дэвид Ха, в качестве входящих данных использовались примитивные рисунки, сделанные от руки, — в частности, кошек и свиней. Нейросеть учили преобразовывать входящий рисунок в вектор, состоящий из ряда чисел — а затем из этого вектора воссоздавать исходное изображение.
Потом исследователи начали вносить искажения во входящий вектор — это научило программу не «слепо» копировать рисунок человека, а пытаться создать свой рисунок, сохранив при этом свойства оригинала. На этом рисунке можно увидеть, как компьютер рисовал кошек вслед за человеком:

Насмотревшись на кошек, программа научилась неплохо в них разбираться. Когда ее просили повторить нечто абсурдное, вроде головы животного с тремя глазами, sketch-rn рисовала похожий рисунок, но с двумя глазами. Когда машине показали зубную щетку, она попыталась превратить ее в кошку — но сохранить черты щетки.

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

Поскольку работа ведется с векторами, над входящими рисунками можно ставить необычные опыты. Например, складывать и вычитать части животных!

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

Поскольку на каждую помеху во входящем векторе алгоритм реагирует новым рисунком, художники смогут очень быстро создавать наборы из схожих, но уникальных набросков. Достаточно дать программе пример.

Можно воспользоваться и тем, что нейросеть, которую учили только на рисунках кошек или свиней, будет везде видеть кошек или свиней. Если нарисовать несколько стульев и попросить программу повторить, та попытается изобразить кошек той же формы — произойдет то же, что со свиньей-грузовиком.

Еще sketch-rnn можно заставить дорисовывать рисунки за человека. На изображении ниже красным показано то, что нарисовали люди, а остальными цветами — дорисованное программой. Причем одни и те же наброски она способна превращать в разные объекты. И сколько угодно раз.

Наконец, важное свойство рисунков, полученных алгоритмом, связано с форматом входящих данных. Дело в том, что ей передавали не наборы пикселей, формирующих тот или иной рисунок. Ей передавали информацию о том, как нужно двигать ручкой по полотну, чтобы получить каждое изображение. Поэтому и в ответ она выдает такие же сведения: векторные иллюстрации от sketch-rnn можно использовать, например, чтобы учить людей рисовать.

Султан Сулейманов