Как OpenAI создавали бота, который победил проигроков в Dota 2
Содержание:
Введение
В ближайшие годы AI/ML будет развиваться намного быстрее, чем ожидают люди. Это позволит масштабировать модели и улучшить их производительность. Примером этого является случай обучения, когда модель, обученная на предсказание следующего символа в отзывах на Amazon, автоматически приобрела навыки анализа настроения. Такой результат может показаться невероятным, но он демонстрирует, как модели могут неожиданно приспосабливаться к задачам.
Однако, с увеличением вычислительной мощности и размеров моделей появляются новые вопросы. Исследователи пока не знают, как изменится эффективность моделей при увеличении их размеров. Это означает, что сейчас активно обсуждаются перспективы исследований в области искусственного интеллекта.
В то время как уже есть значительные достижения в таких областях, как классификация, планирование и обучение с подкреплением, недостаточно исследований, посвященных реальному пониманию существующих методов и их ограничений.
Например, ранее считалось, что для оптимальной параллелизации вычислений необходимо использовать как можно меньшие данных. Однако реальные эксперименты, такие как проведенные компанией Baidu, показывают, что иногда простые изменения в архитектуре могут сделать вычисления более эффективными. Это позволяет сделать вывод о том, что современные исследования в области искусственного интеллекта должны уделять больше внимания не только методам, но и основам уже существующих алгоритмов.
Таким образом, в ближайшем будущем можно ожидать значительных инноваций в архитектуре ПО и методах обучения моделей искусственного интеллекта.
Развитие специализированного оборудования, близкого к архитектуре мозга, может привести к еще более значительному ускорению работы моделей искусственного интеллекта. Интерес к вопросам входа в индустрию искусственного интеллекта нарастает, и одним из наиболее обсуждаемых вопросов является, с чего начать для студентов, изучающих компьютерные науки. Ответ зависит от характера проекта, над которым они хотели бы работать.
Какие навыки ценятся в ML?
Проект по разработке крупномасштабного обучения с подкреплением для игры Dota 2 требует инженерной работы. Основная задача заключается в масштабировании уже реализованных алгоритмов для улучшения производительности. Поэтому для таких проектов ценными являются инженерные навыки.
Важно понимать, что для старта в индустрии искусственного интеллекта не всегда необходима долгая подготовка. Например, хороший инженер может быть продуктивным с первого дня работы в компании, такой как OpenAI, даже без предыдущего опыта работы в области искусственного интеллекта.
Когда речь идет о реальном машинном обучении, важно учитывать разницу между наукой и инженерией. В повседневной работе они часто переплетаются. Например, для проекта по игре Dota 2, где требуется масштабирование алгоритмов, инженерная работа преобладает над наукой. Структурированный подход к решению задачи и понимание, что делать, а также что не делать, являются ключевыми аспектами успешного выполнения проекта.
Зарождение проекта по Dota 2
Во время нашего проекта по разработке бота для игры Dota 2 наша команда состояла из десяти человек, что создавало высокую плотность разработчиков. Мы активно искали пути расширения возможностей искусственного интеллекта через тестирование алгоритмов.
В качестве первого шага мы решили выбрать игру для разработки ботов. Мы обратили внимание на Twitch и выяснили, что Dota 2 обладает всеми необходимыми свойствами для наших целей. Valve, компания за игрой Dota 2, предоставила API, специально ориентированное на ботов, что было идеальным решением для наших задач.
В начале проекта нашей команде нужно было тщательно изучить игровое API, чтобы понять его семантику и различные угловые случаи. Одновременно мы начали разработку скриптовых ботов. Мы разбирались в основах игры, изучая все детали. Смотрели повторы матчей
Последующие шаги включали разработку инфраструктуры для работы с API и ботами. Нам пришлось столкнуться с техническими ограничениями, такими как размеры файлов игры и ограничения контейнера Docker. Несмотря на сложности, мы разработали систему, позволяющую эффективно работать с игровым API и интегрировать наши боты.
Перенос скриптов с Lua на Python также потребовал определенных усилий. Мы переименовали файлы и переписали код, учитывая специфику двух языков программирования. Мы стремились максимально механизировать этот процесс, чтобы обеспечить быструю и эффективную адаптацию скриптов.
Перенос скриптов на Python позволил нам использовать более продвинутые инструменты для машинного обучения и ускорить процесс разработки итераций.
Как обучали модель?
Для обучения бота мы использовали метод поведенческого клонирования. Этот метод заключается в том, что бот наблюдает за текущим состоянием игрового окружения и выполняет определенные действия на основе этого состояния. Затем мы оцениваем эффективность действий бота и даем ему обратную связь.
Обучение бота происходит следующим образом:
Наблюдение за состоянием среды: Бот наблюдает за текущим состоянием игрового мира, например, расположение игровых объектов, здоровье персонажей, наличие определенных ресурсов и т.д.
Выбор действия: На основе наблюдаемого состояния бот принимает решение о следующем действии, которое ему следует выполнить в игре.
Выполнение действия: Бот выполняет выбранное действие в игровом мире.
Оценка эффективности: После выполнения действия оценивается его эффективность. Например, если бот атакует вражеского героя и успешно наносит урон, это может быть считаться положительным результатом.
Обратная связь и обновление стратегии: В зависимости от оценки эффективности действия бота, мы даем ему обратную связь. Если действие было успешным, мы поощряем бота продолжать использовать такие действия в будущем. В противном случае, если действие было неэффективным, мы корректируем стратегию бота, чтобы он выбирал более эффективные действия в будущем.
Таким образом, процесс обучения бота состоит из цикла наблюдения, выбора действия, выполнения действия и обратной связи, который позволяет боту постепенно улучшать свою стратегию и достигать более высокого уровня мастерства в игре.
Когда бот достигал определенного уровня мастерства, мы проводили турниры, чтобы проверить его эффективность. Кроме того, у нас было табло, отображающее метрику успеха бота, которая была определена как процент побед в играх. Это позволяло нам видеть прогресс бота и определять, насколько хорошо он справляется с поставленной задачей.
В процессе разработки мы столкнулись с вызовами, связанными с необходимостью постоянного обновления стратегии и поиска новых идей для улучшения бота. Однако благодаря целенаправленному подходу к обратной связи и постоянному изучению результатов, мы смогли добиться значительного прогресса и достичь высокого уровня производительности бота в игре.
Тестирование бота в «Боевых условиях»
Итак, за две недели до начала турнира The International, мы уже понимали, что наша подготовка подходит к завершению. Мы собирались провести наш самый крупный эксперимент, объединив все наши вычисления в одну стратегию и посмотреть, что из этого выйдет. Иногда нам приходилось консультироваться с профессионалами, чтобы проверить наши тесты, но не всегда это было возможно.
Для нас 8 июля стал важной датой. В тот день мы одержали первую победу над нашим профессиональным тестером. После этого мы стали более последовательными, хотя наш тестер отправился в отпуск и использовал не очень мощный ноутбук. Это происходило за неделю до The International, и мы не знали, насколько хорошо мы подготовились. Нам было известно только, что мы шли вверх, судя по последним результатам.
Перед турниром мы оценивали свои шансы как 50/50. Мы понимали, что вероятность всегда подвержена изменениям, и мы не могли полностью доверять статистике. Наши фанаты каждую ночь говорили, что у нас есть все шансы выиграть каждую игру, но мы знали, что это не так просто. Мы были готовы к тому, что всякое может произойти.
Мы прибыли в Сиэтл за неделю до начала события. Нам предоставили раздевалку под Key Arena. Там мы проводили большую часть времени, готовясь к турниру. Мы привлекали профессиональных игроков для тренировок и проводили многочисленные сессии. Настроение было напряженным, мы не знали, что нас ждет, но мы были готовы к любым испытаниям.
Наши оппоненты привели с собой полупрофессиональго игрока с высоким рейтингом. Нам было неизвестно, что ожидать, но мы сумели победить со счётом 3:0. Это было волнующим для нас и всех наших болельщиков.
Мы продолжили показывать хорошие результаты в последующих играх. Наши оппоненты принесли второго профессионального игрока. Мы смогли выиграть у него один раз, затем ещё один, но потом он смог победить нас. Мы анализировали каждую игру и были уверены в своих действиях.
Один из ключевых моментов в игре был связан с выбором предметов. Противник выбрал стратегию , которая была нам неизвестна. Наши боты не были готовы к такому ходу, и это стало проблемой. Наш бот не умел использовать стики и накапливать их заряды, что существенно повлияло на исход битвы (информация исключительно для тру дотеров).
Мы потерпели поражение в третьей игре против другого профессионала со счётом 3:0. Мы интересовались реакцией профессионалов на этот опыт, и получили разные мнения. Некоторые нашли это интересным и обсуждали его с увлечением, в то время как другие считали это неэффективным.
Реакция профессиональных игроков была очень эмоциональной. Они никогда раньше не сталкивались с поражением от компьютера, поэтому это было невероятным опытом. Один из игроков, которого я лично победил, сначала был разочарован, но затем признал, что это хороший урок. Он даже позвонил мне через пять или десять минут и сказал, что это будет полезным для его практики.
После того, как профессиональные игроки ушли, мы провели четыре часа обсуждая наших ботов и возможные улучшения…
Работа над ошибками
Мы начали обсуждать контринтуитивные стратегии, которые помогли победить. Профессиональные игроки интересуются тем, что может улучшить их игровую практику. Однако после мероприятия мы организовали большую LAN-вечеринку, на которой около 50 человек стали тестировать все возможные «трюки» в игре. Мы понимали, что боты могут учиться только в определенных условиях, и новые «трюки» могут быть для них полезны.
Мы волновались о том, как применить наши знания в 5 на 5 играх, где можно использовать новые стратегии. Мы поняли, что большая часть нашей работы заключалась в поиске и исправлении алгоритмов поведения. Теперь я задумываюсь о том, как системы машинного обучения могут помочь улучшить наши боты. Эти системы дают нам возможность увеличить эффективность нашего программирования и быстрее адаптироваться к новым стратегиям.
Это похоже на обучение человека, который изучает математику. Сначала он может быть запутан, но постепенно начинает понимать. Так же и наши боты учатся использовать новые стратегии и предметы в игре.
На что похожа работа над ботом?
Мы стараемся сделать все возможное, чтобы уменьшить количество работы, которую бот должен выполнять. Это позволяет ему лучше сосредоточиться на стратегии игры. Большая часть нашей работы как разработчиков системы заключается в том, чтобы обеспечить модели больше возможностей для изучения интересных аспектов игры.
Наша работа похожа на производственный процесс, где каждый пытается сделать улучшения. От дня к дню наш бот постепенно улучшался, но был достаточно хорош, чтобы победить следующего профессионала. Мы поняли, что нам нужно загрузить новые параметры сети, чтобы улучшить его производительность. Но мы поняли это только за день до следующего мероприятия. Какое совпадение…
Игра против Денди
Мы организовали специальное мероприятие, чтобы сыграть против Денди, одного из лучших игроков на то время. Мы также решили проверить нашего бота против других профессионалов, которые были физически здесь.
После начал эксперимента мы провели несколько игр и получили обратную связь о проблемах, с которыми столкнулся бот. Мы поняли, что у нас был баг, который не позволял боту эффективно играть. Мы устранили эту проблему и запустили бота снова, чтобы проверить его исправность
Он играл пять игр, и каждый раз проигрывал, пока наконец не понял, как использовать стратегию «приманки».
Это стало примером того, как иногда отсутствие явного стимула приводит к тому, что модели находят неожиданные решения. И это также вызвало интересный психологический эффект на людей, которые реагировали на такую стратегию.
Постоянные итерации и игры с профи
Нам предстояло соревнование с лучшими игроками, и у нас был сломанный бот. Мы знали, что наш бот не справится. Поэтому мы решили объединить его с другой версией бота, который был сильным на первой волне.
Мы смогли сшить двух ботов вместе за три часа, и это сработало так, что каждый бот играл определенное время, а затем переключался на другого. Мы завершили эту операцию за 20 минут до прихода лучших игроков. Было здорово, что мы смогли сделать это в такие краткие сроки.
Сначала мы проверили его против T’II, который уже играл с нашим ботом, и он обыграл его три раза. Потом мы попробовали его против другого бота, и он тоже выиграл. Он просто веселился. В конечном итоге он сыграл десять игр, и это было круто.
<Пропущенный кусок с описанием итераций игр против профессиональных игроков.>
Иногда это было вызовом. Мы вынуждены были проявлять творчество, когда что-то неожиданное происходило, но это было частью процесса. Нам приходилось понимать систему на более глубоком уровне, чем обычно, потому что машинное обучение требовало такого подхода. Некоторые дни были трудными, но мы продолжали работать вместе с профессионалами.
Это был хороший пример того, как боты могут обнаружить неочевидные стратегии, которые могут быть использованы против людей. В очередной игре с профессионалом мы выиграли 5–0. Мы также играли против группы профессионалов, и это было удивительно видеть, как они борются с ботом.
Я думаю, что это интересно для анализа статистики. Есть ли игроки, которые последовательно побеждают ботов? Да, есть один, который имеет около 20% побед. Он играл много игр и нашел стратегии, чтобы победить. Это доказывает, что боты могут стать чрезвычайно сложными противниками, и игроки должны применять серьезные стратегии, чтобы с ними справиться.
Рефлексия после завершения эксперимента
Игра профессионального игрока в видеоигры — это довольно высокая планка. Каждый хочет стать профессиональным игроком в видеоигры, но количество профессионалов очень мало.
Какие навыки ты бы смог назвать ключевыми?
Концентрация: Повторное выполнение одних и тех же действий много раз требует высокой концентрации.
Написание чистого кода: Предпочтение короткому, но чистому коду для минимизации ошибок.
Чтение кода для отладки: Навык, позволяющий эффективно находить и исправлять ошибки. Это важно, потому что каждая ошибка в ML имеет очень высокую стоимость
Что касается минимизации ошибок, то это важный аспект при разработке программного обеспечения. Хотя невозможно избежать ошибок полностью, стремление к написанию чистого и надежного кода может существенно снизить их количество и улучшить качество продукта.
Наш проект требует знания о распределенных системах и умения писать эффективный код. Кроме того, навыки в линейной алгебре и базовой статистике важны для проведения экспериментов. Наши проекты также требуют умения в области оптимизации.
Какие нетехнические аспекты важны?
Смирение: Важное качество для работы инженера, особенно когда экспертность в области ослабевает.
Коммуникация и обратная связь: Навыки, необходимые для эффективного взаимодействия с коллегами и принятия обратной связи.
Вы правильно заметили, что использование инженерной дисциплины может значительно улучшить рабочий процесс и привести к созданию ценных инструментов. Это особенно важно в контексте машинного обучения, где техническая экспертиза часто требуется для создания и оптимизации алгоритмов.
Образование и разъяснение вопросов, связанных с искусственным интеллектом и его этическими аспектами, могут помочь людям лучше понимать его влияние и принимать обоснованные решения в этой области.
Какая связь между играми и развитием искусственного интелекта?
Игры действительно представляют собой замечательную среду для тестирования и обучения алгоритмов машинного обучения. Игровые сценарии могут представлять сложные ситуации, которые помогают алгоритмам развивать и улучшать навыки. Поэтому игры являются очень удобным испытательным полем, и, я думаю, вы увидите, что много работы будет сделано в области игр.
Но, конечно, целью является вывод этой работы из мира игр и использование её для решения реальных проблем, для взаимодействия с людьми и выполнения полезных задач.
Мне нравится проект Dota потому, что он позволяет нам понять, как будущее будет связано с продвинутыми системами искусственного интеллекта. Сейчас у нас мало представлений о том, как эти системы работают, где возникают проблемы и как с ними взаимодействовать. Игра дает возможность начать это понимание и взаимодействие с передовой технологией искусственного интеллекта.
Раз вы дочитали до конца, буду рад видеть вас в своём тг канале. Aктивно выжимки из эссе Пола Грэма (находятся по #пг) Ежедневно по 1–2. Так же пишу про мой EdTech стартап и разные технические материалы, которые нахожу в процессе работы. Силой никого не тяну :)