Как Учиться У Экспертов Dota 2 С Помощью Машинного Обучения

В предыдущей статье из питерской ВШ? мы показали, как с помощью машинного обучения можно искать ошибки в программном коде.

В этом посте мы поговорим о том, как мы вместе с JetBrains Research пытаемся использовать одно из самых интересных, современных и быстро развивающихся направлений машинного обучения — обучение с подкреплением — как в реальных практических задачах, так и на модельных примерах.



Как учиться у экспертов Dota 2 с помощью машинного обучения



Обо мне

Меня зовут Никита Сазанович.

До июня 2018 года я три года учился в СПбАУ, а потом вместе с остальными однокурсниками перевелся в Высшую школу? Санкт-Петербург, где я сейчас заканчиваю бакалавриат. В последнее время я также работаю исследователем в JetBrains Research. До поступления в университет я интересовался спортивным программированием и выступал за сборную Беларуси.



Обучение с подкреплением

Обучение с подкреплением — это отрасль машинного обучения, в которой агент при взаимодействии с окружающей средой получает подкрепление (отсюда и название) в виде положительного или отрицательного вознаграждения.

В зависимости от этих сигналов агент меняет свое поведение.

Конечная цель этого процесса – получение максимально возможного вознаграждения или, другими словами, достижение тех действий, которые были поставлены перед агентом.

Агенты оперируют состояниями и выбирают действия.

Например, в задаче выхода из лабиринта нашими состояниями будут координаты x и y, а действиями — движение вверх/вниз/влево/вправо.

Общая схема выглядит так:

Как учиться у экспертов Dota 2 с помощью машинного обучения

Основная проблема при переходе от вымышленных/простых задач (как этот лабиринт) к реальным/практическим задачам заключается в следующем: награды в таких задачах обычно очень редки.

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

действия.

Эту проблему можно решить, давая агенту на старте примеры, как «играть» — так называемые экспертные демонстрации.



Учебная задача

Модельная задача, о которой пойдет речь в статье, — Dota 2. Dota 2 — популярная игра MOBA, в которой команда из пяти героев должна победить команду противника, разрушив ее «крепость».

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

$25000000 .

Возможно, вы слышали о недавнем успехе OpenAI в Dota 2. Во-первых, они создали бота для игры один на один и побежденные профессиональные игроки , а потом перешли к игре 5х5 и этим летом показали впечатляющие результаты , хотя и проиграли профессиональным командам.



Как учиться у экспертов Dota 2 с помощью машинного обучения

Единственная проблема в том, что они обучили агента играть один на один.

своими словами , с 60 000 процессорами и 256 графическими процессорами K80 в облаке Azure. У них, конечно, есть возможность заказать такую власть.

Но если у вас меньше сил, то придется использовать хитрости.

Один из таких приемов — использовать игры, в которые люди уже играли.



Внутриигровые демоверсии

Большинство демок записываются искусственно: вы просто выполняете задание/играете в игру и каким-то образом собираете совершенные вами действия.

Таким образом вы соберете некоторые данные, которые можно будет по-разному интегрировать в обучение.

Это то, что я пока сделал, но как именно станет понятно после части о схеме взаимодействия с игровым клиентом.

Более масштабная и авантюрная цель — выпустить больше данных в открытый доступ.

Одной из причин выбора Dota 2 для ускорения обучения стал такой ресурс, как дотабафф .

Он содержит различную статистику по игре, но, что более важно, содержит полные повторы игр.

И их можно сортировать по рейтингу.

Я еще не ощутил, какую разницу может иметь гигабайт таких данных по сравнению с несколькими эпизодами.

Реализовать сбор данных было довольно просто: получаешь ссылки на игры на дотабаффе, скачиваешь игры и пользуешься.

Парсер игры Dota 2 .



Соединение с игровым клиентом для обучения

У нас есть игра Dota 2, клиент которой существует для платформ Windows, Linux и macOS. Но все же обычно обучение происходит в каком-нибудь питон-скрипте, и в нем вы создаете среду, будь то лабиринт, подъем автомобиля на гору или что-то вроде того.

Но среды для Dota 2 нет. Поэтому мне пришлось создавать эту обертку самому, что было довольно интересно технически.

Мне удалось сделать это так:

Как учиться у экспертов Dota 2 с помощью машинного обучения

Первая часть — это скрипт для общения с игровым клиентом.

К счастью, в Dota 2 есть официальный API для создания ботов: Скрипты для Dota-ботов .

Он реализован в виде вставок в язык Lua, который, как оказалось, популярен в разработке игр.

Скрипт бота, взаимодействуя с игровым клиентом, в нужный момент вытаскивает интересующую нас информацию (например, координаты на карте, позиции противника) и отправляет с ней json на сервер.

Вторая часть — это сама оболочка.

Это спроектировано как сервер, который обрабатывает всю логику запуска Steam, Dota и получения jsons из скрипта внутри игры.

Запуск игр и клиентов управляется через пиаутоги , а связь с lua-вставкой в игре происходит через сервер Flask. Третья часть состоит из самого алгоритма обучения.

Этот алгоритм выбирает действия, получает от сервера очередные состояния и награды, за которыми скрыта вся связь с игрой, и улучшает ее поведение.



Обучение у экспертов

Сам алгоритм не имеет особого значения в этой статье, поскольку эти методы можно использовать с любым алгоритмом.

Мы использовали DQN (о котором вы можете читай в хабе ).

По сути это глубокая нейронная сеть + алгоритм.

Q-обучение .

Да, это тот же DQN, который DeepMind создал для игр Atari. Здесь интереснее поговорить о том, как использовать предыдущие игры.

Я протестировал два подхода: формирование вознаграждения на основе потенциала и советы по действию.

Общая идея подходов заключается в том, что агент будет получать вознаграждение не только за цели задачи (например, прохождение лабиринта или восхождение на гору), но и во время обучения на каждом этапе.

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

Конечно, хотелось бы ставить его автоматически, а не подбирать по правилам/условиям.

Следующие подходы помогают добиться этого.

Суть формирования вознаграждения на основе потенциала заключается в том, что некоторые состояния изначально кажутся нам более перспективными, чем другие, и на основе этого мы модифицируем реальные вознаграждения, которые получает алгоритм.

Мы делаем это следующим образом:

Как учиться у экспертов Dota 2 с помощью машинного обучения

, Где

Как учиться у экспертов Dota 2 с помощью машинного обучения

- изменена награда,

Как учиться у экспертов Dota 2 с помощью машинного обучения

- награда реальная,

Как учиться у экспертов Dota 2 с помощью машинного обучения

— коэффициент дисконтирования от алгоритма обучения (для нас не особо важен), но здесь

Как учиться у экспертов Dota 2 с помощью машинного обучения

и в этом есть наш потенциал для штата, который мы посетили во время

Как учиться у экспертов Dota 2 с помощью машинного обучения

.

Простой пример — решение лабиринта.

Допустим, есть лабиринт, в котором мы хотим пройти от клетки (0,0) к клетке (5,5).

Тогда наш потенциал состояния (x,y) может быть минус евклидово расстояние от (x,y) до нашей цели (5,5):

Как учиться у экспертов Dota 2 с помощью машинного обучения

.

То есть, чем ближе мы к финишу, тем больше потенциал государства (например,

Как учиться у экспертов Dota 2 с помощью машинного обучения

,

Как учиться у экспертов Dota 2 с помощью машинного обучения

,

Как учиться у экспертов Dota 2 с помощью машинного обучения

).

Так мы мотивируем агента любыми способами приблизиться к цели.

Для Dota 2 идея та же, но возможности задаются немного сложнее:

Как учиться у экспертов Dota 2 с помощью машинного обучения

Представьте, что мы просто хотим пройти те же состояния, что и демонстратор.

Тогда чем больше состояний мы пройдем, тем выше потенциал.

Задаем потенциал состояния по проценту завершения реплея, если там есть состояние, близкое к нашему.

В разных задачах это имеет разное значение.

Но конкретно в Доте 2 это означает, что сначала мы хотим, чтобы бот дошел до центра (ведь в начале демонстраций есть только ступеньки до центра), а затем уже придерживались состояний игрока-человека (высокое здоровье , безопасное расстояние от противников и т. д.).

Второй метод, совет-действие, был взят из этого статьи .

Суть его в том, что теперь мы советуем агенту не полезность состояний, а полезность действий.

Например, в нашей игре Дота 2 может быть такой совет: если рядом с вами находится вражеский миньон, то атакуйте его; если вы не дошли до центра, то идите в его направлении; если потеряешь здоровье, то отступай в свою башню.

И в этой статье описан метод установки такого совета без всякой мысли самого программиста - автоматически.

Потенциалы генерируются по такому принципу: потенциал действия

Как учиться у экспертов Dota 2 с помощью машинного обучения

способный

Как учиться у экспертов Dota 2 с помощью машинного обучения

увеличивается при наличии подобных состояний

Как учиться у экспертов Dota 2 с помощью машинного обучения

с тем же самым действие

Как учиться у экспертов Dota 2 с помощью машинного обучения

в демонстрациях.

Далее идет награда за действие на схеме выше.

меняется как

Как учиться у экспертов Dota 2 с помощью машинного обучения

.

Здесь стоит отметить, что потенциалы действий мы задаем в штатах.



Результаты

Для начала отмечу, что цель игры была немного упрощена, т. к.

все это я учил на своем ноутбуке.

Целью агента было нанести как можно больше атак, что чем-то похоже на реальную цель.

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

Для ускорения обучения использовались лишь несколько (от 1 до 3) двухминутных демонстраций, которые я записывал сам.

Обучение агента по любому из подходов занимает всего 20 часов на персональном компьютере (большая часть времени уходит на рендеринг игры Dota 2), а, судя по графикам OpenAI, обучение на их серверах занимает порядки недель.

Краткое описание игры с использованием подхода к формированию вознаграждения на основе потенциала: А что касается подхода к действию: Эти записи были сделаны на тренировочной скорости — х10. Еще есть неточности в поведении агента при движении в центр, но все равно бой в центре показывает заученные маневры.

Например, отступая назад с низким здоровьем.

Также можно увидеть различия в подходах: при формировании вознаграждения на основе потенциала агент движется плавно, потому что «движется в соответствии с потенциалом»; с советами к действию бот играет более агрессивно в центре, так как получает подсказки по атаке.



Полученные результаты

Сразу отмечу, что некоторые моменты были намеренно опущены: что именно представлял собой алгоритм, как было представлено состояние, можно ли обучить агента игре с реальными игроками и т.д. Прежде всего, в этой статье я хотел показать, что в случае обучения с подкреплением не всегда приходится выбирать между очень простой средой (побег из лабиринта) или очень высокой стоимостью обучения (по моим быстрым подсчетам стоимость OpenAI эти серверы для обучения работе с Azure — 4715 долларов в час).

Существуют методы, которые могут ускорить обучение, и единственный, о котором я говорил, — это использование демонстраций.

Важно отметить, что таким образом вы не просто повторяете демонстратора, а лишь «отталкиваетесь» от него.

Важно, что при дальнейшем обучении агент имеет возможность превзойти экспертов.

Если вас интересуют подробности, код процесса обучения можно найти по адресу GitHub .

Теги: #Машинное обучение #Алгоритмы #искусственный интеллект #Процесс обучения в ИТ #jetbrains #обучение с подкреплением #ВШ? #Санкт-Петербург.

Петербургская башня #исследование реактивных мозгов #демонстрации

Вместе с данным постом часто просматривают: