Помните, раньше была такая игра — змейка? Она появилась в 70-х, и в неё играли на всём: от компьютеров и приставок до кнопочных телефонов. Например, если вы пропустили то время, это могло выглядеть вот так:
Смысл игры:
- Вы управляете змейкой, которая постоянно в движении, она может двигаться вверх, вниз, влево или вправо. На экране в случайном месте появляется клеточка — считайте, что это еда.
- Ваша задача — собрать как можно больше еды.
- Как только змейка съедает очередную клеточку с едой, в случайном месте появляется новая клетка. Также змейка удлиняется на одну клетку.
- Если змейка упрётся в стенку или сама в себя, то игра заканчивается.
В начале игры всё просто: поле пустое, змейка вольготно по нему ползает и жрёт. Но дальше змейка постепенно растёт, занимая всё большую площадь экрана, и в какой-то момент передвигаться становится суперсложно. И вот тогда нужна стратегия и ловкость.
Австралийский программист Эван, он же CodeBullet, научил искусственный интеллект играть в эту игру и сделал об этом видео:
Если вы знаете английский, просто смотрите и получайте удовольствие, а если нет — мы приготовили подробный разбор того, что происходит в ролике.
Начало: 5 разных алгоритмов
В самом начале Эван экспериментировал с нейросетью, чтобы найти лучший алгоритм для игры в змейку. В итоге у него получилось 5 разных алгоритмов, каждому из которых он дал своё имя. Они отличались стилем игры, поведением в разных ситуациях и результативностью.
Степан. Это одна из первых версий алгоритма, у которой есть одна характерная особенность: Стёпа любит двигаться по диагонали.
Несмотря на то, что кажется, что змейка делает всё правильно, это самая худшая версия нейронки, которая получилась у программиста. При этом умение Стёпки двигаться по диагонали — уникально, оно сильно пригодится в будущем.
Лена. Она умнее Стёпы, двигается более предсказуемо, а ещё у неё классно получается избегать столкновения с собой. Это важное умение для змейки, потому что если голова упрётся в хвост или в тело — игра закончится.
Миша. Быстрая, эффективная змейка почти без единого лишнего движения. Миша почти идеален, но этого недостаточно.
Коля. Умеет собирать много кусочков, но когда становится совсем длинным, то размер начинает ему мешать.
Сёма. Чемпион среди этих версий, потому что только он смог набрать 136 очков — больше, чем остальные кандидаты.
Собираем в одно целое
Можно было остановиться на Сёме, но Эван решил пойти дальше и подумал: «А что если объединить эти змейки в одну, чтобы вместе они работали максимально эффективно?»
Для этого программист сделал одну большую нейросеть, в которую поместил 5 змеек по такому алгоритму:
- Перед каждым следующим шагом каждая из пяти змеек говорит, как бы она поступила в этой ситуации.
- Отдельная нейросеть смотрит на варианты и выбирает лучший из них.
- Змейка делает шаг, и всё начинается сначала.
Смысл в том, чтобы использовать сильные стороны каждой змейки для наибольшего эффекта.
Добавляем цвета
Чтобы стороннему наблюдателю было понятно, что происходит на экране и о чём именно «думает» нейронка, Эван придумал раскрашивать змейку в разные цвета:
- зелёный означает, что змейка нашла очередной кусочек, который можно съесть, и это стало её целью;
- синий — змея предвидит, что скоро она будет двигаться к еде;
- белый — рядом со змеёй нет легкодоступных кусочков, и её задача — выжить и никуда не врезаться.
Теперь мы тоже можем понимать, какие решения принимает искусственный интеллект в каждой ситуации. Самое интересное, что иногда мы даже можем понять, какая из змеек сейчас взяла управление на себя.
Появился синий цвет: это означает, что змейка видит еду и думает, как бы подобраться к ней поближе.
Запустим снова и проверим, получится ли побить этот рекорд:
Рекорд побит, и, скорее всего, не в последний раз. С каждым запуском алгоритм становится умнее, и змейка допускает всё меньше и меньше ошибок.
Что дальше
Дальше как обычно — новые большие разборы, объяснение того, как работают нейросети и как это применить на практике. Лайк, подписка, все дела.