КонцептКак компьютер научился играть в «Марио»
Чему программирование может научиться у эволюционной биологии
Машинное обучение — самая перспективная дорога к искусственному интеллекту. Первые теории о том, как компьютер может обучаться самостоятельно, появились ещё в 50-х. Сейчас примитивные обучающиеся программы пишут даже любители. Look At Me рассказывает о том, как юзер SethBling научил программу играть в Super Mario World.
Текст
Гриша Пророков
Машинное обучение выросло из исследований искусственного интеллекта. Ещё на заре науки об ИИ многие учёные считали, что для создания искусственного интеллекта надо просто научить машины обучаться самостоятельно, задавая им необходимые рамки и данные. Позже машинное обучение ушло в сторону статистики: оно в первую очередь стало наукой о поиске альтернативных путей решения статистических проблем. Тем не менее машинное обучение всё ещё связано с искусственным интеллектом. Особенно на любительском уровне: многие, например, пытаются научить программы проходить разные видеоигры. Особой популярностью среди таких программистов пользуются платформеры о Марио: несколько лет среди ИИ, проходящих «Марио», даже проходили отдельные соревнования.
В машинном обучении всегда задействованы наблюдаемые и скрытые переменные — грубо говоря, то, что машина может и не может знать, потому что для симуляции обучения нужно ограничивать данные. В случае с Марио всё просто: наблюдаемые данные — это то, что есть на экране (а не временно скрыто за его правым краем), то есть то, что «видит» программа. В соревнованиях это было главным условием: ИИ может знать только о тех врагах и препятствиях, которые видно на экране.
Как именно работает нейронная сеть
MarI/O
Видео, в котором SethBling объясняет, как устроена его программа
Одну из самых необычных программ для игры в Super Mario World — а точнее, одного из её уровней — сделал YouTube-пользователь SethBling. Сет в первую очередь известен своими видео о Minecraft и стримами в Twitch, но он также занимается машинным обучением. В начале этого года он решил сделать программу, которая играла бы в «Марио» и была бы построена на алгоритмах, взятых из эволюционной биологии.
SethBling написал MarI/O на языке программирования Lua
Это скриптовый язык, который часто используется для программирования уровней и расширений во многих играх (в том числе он популярен в сообществе игроков в Minecraft), благодаря удобству встраивания, лёгкости обучения и скорости исполнения кода.
«Я занимался машинным обучением, но никогда не использовал эволюционные алгоритмы, — рассказывает Сет. — Мне стало интересно, я стал изучать существующие техники. Я наткнулся на исследование о NEAT и использовал его». NEAT — это метод машинного обучения, придуманный учёными Кеннетом Стэнли и Ристо Мииккулаиненом, который использует так называемые нейронные сети — что-то вроде примитивной симуляции человеческого мозга. SethBling написал свою программу на языке Lua, используя плагин для эмулятора BizHawk, на котором можно играть в игры для Super Nintendo. Он написал её за несколько дней, просто следуя инструкциям, описанным в исследовании Стэнли и Мииккуланиена.
В отличие от других программ, играющих в игры, MarI/O ничего не знала о Super Mario World. Программа даже не знала, что конец уровня находится справа и что нужно идти слева направо. SethBling задал простейшие параметры: 8 кнопок, которыми можно играть в игру (столько на геймпаде Super Nintendo), а также данные о том, что видно на экране. У MarI/O есть один показатель — «приспособленность»: чем дальше вправо прошёл персонаж, тем он выше. ИИ знает, что приспособленность — это хорошо, так что, когда программа делает что-нибудь, что увеличивает показатель, она запоминает эти действия.
В основе MarI/O лежит нейронная сеть, почти как в человеческом мозге. К каждой кнопке привязан цифровой нейрон — и между ними, врагами и препятствиями на экране создаются связи, положительные и отрицательные. Например, с помощью нейрона MarI/O запоминает, что в определённом месте надо нажать кнопку A и прыгнуть. Как в реальной эволюции, MarI/O работает по принципу естественного отбора: случайным образом пробует разные идеи и кнопки и оставляет то, что работает. Когда происходит какой-нибудь серьёзный прорыв, программа запоминает это и создаёт новое поколение, передавая выученное как гены. За 34 поколения MarI/O научилась проходить один уровень Super Mario World. При этом, если бы SethBling включил бы программу заново, она снова научилась бы проходить уровень — но уже по-другому.
«Я ещё в колледже экспериментировал с нейронными сетями, — объясняет Сет. — И знаю, что они могут быть очень мощными. Когда я решил попробовать создать эволюционный алгоритм, я подумал, что нейронная сеть отлично для этого подходит. Обучить нейронную сеть обычными методами очень трудно, а вот естественный отбор сработал отлично».
Теперь MarI/O играет в Super Mario Kart, гоночную игру для Super Nintendo. «Алгоритм используется тот же самый, — рассказывает Сет. — Разница лишь в показателе приспособленности и в том, что MarI/O видит. Приспособленность теперь — это круги трассы, которые прошла программа. И MarI/O видит карту трассы и препятствия, а не врагов, как в Super Mario World».
MarI/O научился проходить всего один уровень игры, Donut Plains 1, один из первых уровней в Super Mario World
Обучение MarI/O — завораживающее зрелище. На канале SethBling в Twitch сидят по 500 человек за раз и наблюдают, как машина учится играть в игру. «Никогда не знаешь, когда у программы случится прорыв и она сделает что-нибудь новое, — рассуждает Сет. — Это интересно. Плюс иногда появляется неожиданное, странное поведение. Мы знаем, как выглядит человеческое обучение, поэтому так любопытно наблюдать, как учится что-то, совсем не похожее на человека».
В ноябре прошлого года инженер Тимоти Басбайс скопировал в цифровом виде мозг круглого червя нематоды, состоящий из 302 нейронов, и запустил его в тело робота. В итоге робот повёл себя так, как повёл бы себя реальный червь. Мы увидели в этой истории параллель с тем, что делает SethBling, и показали ему ссылку. «О да, это похоже на то, что я сделал, — говорит Сет. — Это очень круто. Наука пока недалеко ушла в симуляции мозга, а это очень важно. Если мы поймём, как работает мозг, у этого будет много пользы — не только для искусственного интеллекта».
По словам SethBling'а, научить программу проходить всю игру гораздо труднее, но он думает о том, чтобы задействовать зрителей Twitch, чтобы они помогали MarI/O эволюционировать.
Комментарии
Подписаться