Больше о Dota 2

Наши результаты в Dota 2 показывают, что при достаточном объеме вычислений обучение с подкреплением (self-play) способно поднять производительность систем машинного обучения от уровня значительно ниже человеческого до сверхчеловеческого. Всего за месяц наша система прошла путь от едва заметного сходства с высокоуровневым игроком до побед над сильнейшими профессионалами и с тех пор продолжает совершенствоваться. Системы с учителем (supervised deep learning) могут быть лишь настолько хороши, насколько хороши их обучающие датасеты, но в системах с самообучением доступные данные улучшаются автоматически по мере совершенствования агента.

TrueSkill рейтинг (аналог рейтинга Эло в шахматах) нашего лучшего бота с течением времени, рассчитанный путем симуляции игр между ботами и наблюдения за соотношением побед. Улучшения происходили во всех частях системы: от добавления новых функций и алгоритмических доработок до масштабирования. График удивительно линейен, что означает экспоненциальное совершенствование бота командой со временем.
Хронология проекта выглядит следующим образом. Для понимания масштаба: 15% игроков имеют MMR ниже 1.5k MMR; 58% игроков находятся ниже 3k; 99.99% — ниже 7.5k.
- 1 марта: получены первые классические результаты обучения с подкреплением в простой среде Dota, где Drow Ranger учится кайтить запрограммированного вручную Earthshaker.
- 8 мая: игрок с 1.5k MMR говорит, что стал развиваться быстрее, чем бот.
- Начало июня: победа над игроком с 1.5k MMR.
- 30 июня: победы в большинстве игр против тестера с 3k MMR.
- 8 июля: с трудом добыта первая победа над полупрофессиональным тестером с 7.5k MMR.
- 7 августа: обыграны Blitz (бывший про-игрок с 6.2k) со счетом 3–0, Pajkatt (про-игрок с 8.5k) со счетом 2–1 и CC&C (про-игрок с 8.9k) со счетом 3–0. Все сошлись во мнении, что Sumail найдет способ победить бота.
- 9 августа: победа над Arteezy (про-игрок с 10k, топ-игрок) со счетом 10–0. Он говорит, что Sumail сможет разобраться с этим ботом.
- 10 августа: победа над Sumail (про-игрок с 8.3k, топ-игрок 1v1) со счетом 6–0, который заявляет, что бот непобедим. Сыграв против бота от 9 августа, Сумаил выигрывает со счетом 2–1.
- 11 августа: победа над Dendi (про-игрок с 7.3k, бывший чемпион мира, любимец публики старой школы) со счетом 2–0. Бот имеет 60% побед против бота от 10 августа.
Задача
Полная игра представляет собой формат 5v5, но режим 1v1 также используется в некоторых турнирах. Наш бот играл по стандартным турнирным правилам — мы не добавляли упрощений для ИИ, специфичных для формата 1v1.
Бот взаимодействовал с игрой через следующие интерфейсы:
- Наблюдения: Функции API бота, разработанные так, чтобы представлять тот же набор данных, который видит человек: информация о героях, крипах, курьере и ландшафте рядом с героем. Игра имеет частичную видимость (туман войны).
- Действия: Доступные через API бота действия, выбираемые с частотой, сопоставимой с человеческой, включая перемещение в точку, атаку юнита или использование предмета.
- Обратная связь: Бот получал поощрения за победу и базовые метрики, такие как здоровье и добивания крипов.
Мы добавили в белый список несколько десятков сборок предметов, которые могли использовать боты, и выбрали одну для оценки. Отдельно мы обучили начальный крип-скилл (creep block) с помощью традиционных методов обучения с подкреплением, так как это происходит до появления противника.
The International
Наш подход, сочетающий небольшое количество «тренировок с наставником» и самообучение, позволил нам колоссально улучшить агента в период с понедельника по четверг The International. Вечером в понедельник Pajkatt выиграл, используя необычную сборку предметов (купив ранний magic wand). Мы добавили эту сборку предметов в обучающий белый список.
Около часа дня в среду мы протестировали новейшего бота. Бот терял много здоровья на первой волне. Мы думали, что придется откатить изменения, но заметили, что дальнейший игровой процесс был великолепным, а поведение на первой волне было направлено на то, чтобы спровоцировать других ботов проявлять агрессию. Дальнейшее самообучение исправило эту проблему, так как бот научился противодействовать стратегии приманивания. Тем временем мы объединили его с ботом от понедельника исключительно для первой волны и завершили процесс за двадцать минут до того, как Arteezy появился на сцене в 16:00.
После матчей с Arteezy мы обновили модель блокировки крипов, что увеличило TrueSkill на один пункт. Дальнейшее обучение перед матчем Сумаила в четверг увеличило TrueSkill еще на два пункта. Сумаил указал на то, что бот научился применять заклинания (razes) вне поля зрения противника. Это было связано с механикой, о которой мы не знали: способности, примененные вне поля зрения противника, не дают врагу заряды для волшебной палочки (wand charge).
Arteezy также сыграл матч против нашего полупрофессионального тестера с рейтингом 7.5k. Arteezy лидировал всю игру, но нашему тестеру все же удалось удивить его стратегией, которой он научился у бота. Позже Arteezy отметил, что эту стратегию однажды использовал против него Paparazi и она не является общепринятой.
Pajkatt побеждает бота от понедельника. Обратите внимание, что он провоцирует бота на драку и использует регенерацию (faerie fires и magic wand), чтобы восстановить здоровье. Бот в целом очень хорошо определяет победителя в драке, но он никогда раньше не играл против соперника с ранним wand.
Уязвимости бота (эксплойты)
Хотя Сумаил назвал бота «непобедимым», его все же можно запутать в ситуациях, сильно отличающихся от того, что он видел ранее. Мы установили бота на LAN-мероприятии в рамках The International, где игроки сыграли более 1 000 матчей, пытаясь победить бота любыми возможными способами.
Успешные эксплойты свелись к трем основным типам:
- Отводы крипов (Creep pulling): можно заставить крипов линии преследовать вас сразу после их появления (между вышками уровня 2 и 3 бота) снова и снова. В итоге за вами по всей карте бегают десятки крипов, и в конце концов башня бота падает от изнурения.
- Orb of venom + wind lace: это дает вам большое преимущество в скорости передвижения перед ботом на 1 уровне и позволяет быстро совершить первую кровь (first blood). Вам нужно использовать это преимущество, чтобы убить бота еще раз.
- Raze 1 уровня: это требует высокого мастерства, но нескольким игрокам с рейтингом 6–7k MMR удалось убить бота на 1 уровне, успешно попав 3–5 разерами за короткий промежуток времени.
Устранение этих проблем для формата 1v1 было бы аналогично исправлению бага Пайкатта. Но для 5v5 подобные проблемы эксплойтами не являются, и нам понадобится система, способная справляться с совершенно странными и безумными ситуациями, с которыми она никогда не сталкивалась.
Инфраструктура
Мы пока не готовы рассказывать о внутреннем устройстве агента — команда сосредоточена на решении задачи 5v5 в первую очередь.
Первым шагом в проекте было выяснить, как запустить Dota 2 в облаке на физическом GPU. Игра выдавала непонятное сообщение об ошибке на облачных инстансах с GPU. Но когда мы запустили ее на персональном компьютере Грега с видеокартой (том самом ПК, который вынесли на сцену во время шоу), мы заметили, что Дота запускается, когда подключен монитор, но выдает ту же ошибку при его отключении. Поэтому мы настроили наши облачные экземпляры GPU так, чтобы они имитировали подключенный физический монитор.
В то время Дота не поддерживала кастомные выделенные серверы, а это означало, что масштабируемый запуск без GPU был возможен только с очень медленным программным рендерингом. Тогда мы создали специальную прокладку (shim) для заглушки большинства вызовов OpenGL, кроме тех, которые необходимы для загрузки.
В то же время мы написали скриптового бота — нам нужна была база для сравнения (тем более что встроенные боты плохо работают в режиме 1v1) и понимание всей семантики API ботов. Скриптовый бот делает 70 добиваний (last hits) за десять минут на пустой линии, но все равно проигрывает разумным людям. Наш лучший текущий бот для 1v1 достигает показателя около 97 (он уничтожает башню раньше, поэтому мы можем только экстраполировать результат), а теоретический максимум составляет 101.
Бот играет против SirActionSlacks. Стратегия отвлечения бота рашем курьеров не сработала.
5v5
1v1 — это сложно, но 5v5 — это целый океан сложностей. Мы знаем, что для решения этой задачи нам потребуется еще сильнее раздвинуть границы возможностей ИИ.
Хорошо зарекомендовавший себя отправной пункт — клонирование поведения (behavioral cloning). В Dota проходит около миллиона публичных матчей в день. Реплеи этих матчей хранятся на серверах Valve две недели. Начиная с прошлого ноября мы скачивали каждый реплей экспертного уровня и собрали датасет из 5,8 млн игр (каждая игра длится около 45 минут с участием 10 людей). Мы используем OpenDota для поиска этих реплеев и жертвуем $12 тыс. (эквивалентно 10 годам их сбора средств) на поддержку этого проекта.
У нас есть множество других идей, и мы нанимаем инженеров (которых увлекает машинное обучение, но не обязательно являющихся экспертами) и исследователей, чтобы помочь нам воплотить это в жизнь. Мы благодарим Microsoft Azure и Valve за поддержку в этом начинании.
Автор
Полный текст статьи читайте на OpenAI
