ML-Agents играет в DodgeBall

В последнем сообщении в блоге ML-Agents мы объявили о новых возможностях для создания совместного поведения с помощью обучения с подкреплением. Сегодня мы рады поделиться новой средой, которая еще больше демонстрирует возможности ML-агентов. DodgeBall - это соревновательный шутер типа "команда против команды", в котором агенты соревнуются в раундах Elimination или Capture the Flag. Среда имеет открытый исходный код, поэтому обязательно ознакомьтесь с репозиторием.
Недавно добавленный в ML-Agents алгоритм MA-POCA позволяет любому желающему обучать группы агентов совместному поведению. Этот новый алгоритм представляет собой реализацию централизованного обучения с децентрализованным исполнением. Централизованный критик (нейронная сеть) обрабатывает состояния всех агентов в группе, чтобы оценить, насколько хорошо они работают, в то время как несколько децентрализованных агентов (по одному на агента) управляют агентами. Это позволяет каждому агенту принимать решения, основываясь только на том, что он воспринимает локально, и одновременно оценивать, насколько правильным является его поведение в контексте всей группы. Приведенная ниже диаграмма иллюстрирует централизованное обучение и децентрализованное исполнение MA-POCA.

Одна из новинок алгоритма MA-POCA заключается в том, что он использует особый тип архитектуры нейронных сетей, называемых сетями внимания, которые могут обрабатывать нефиксированное количество входов. Это означает, что централизованный критик может обрабатывать любое количество агентов, поэтому MA-POCA особенно хорошо подходит для кооперативного поведения в играх. Она позволяет добавлять или удалять агентов из группы в любой момент - точно так же, как персонажи видеоигр могут исчезать или появляться в середине командного боя. MA-POCA также разработана таким образом, чтобы агенты могли принимать решения в интересах команды, даже если это идет во вред им самим. Такого альтруистического поведения трудно добиться с помощью закодированного вручную поведения, но его можно выучить, основываясь на том, насколько полезным было последнее действие агента для общего успеха группы. Наконец, многие многоагентные алгоритмы обучения с подкреплением предполагают, что все агенты выбирают свое следующее действие одновременно, но в реальных играх с большим количеством агентов обычно лучше, чтобы они принимали решения в разное время, чтобы избежать падения кадров. Поэтому MA-POCA не делает таких допущений и будет работать, даже если решения агентов в одной группе не совпадают. Чтобы показать, насколько хорошо MA-POCA работает в играх, мы создали среду DodgeBall - увлекательную игру в формате "команда против команды" с ИИ, полностью обученным с помощью ML-агентов.
DodgeBall - это шутер от третьего лица, в котором игроки пытаются собрать как можно больше мячей и бросить их в противников. Она включает в себя два игровых режима: Ликвидация и Захват флага. В игре Elimination каждая группа пытается уничтожить всех членов другой группы - два попадания, и они выбывают из игры. В игре "Захват флага" игроки пытаются украсть флаг другой команды и вернуть его на свою базу (они могут забить только тогда, когда их собственный флаг все еще находится в безопасности на их базе). В этом режиме попадание мяча означает, что вы уроните флаг и будете оглушены на десять секунд, после чего вернетесь на базу. В обоих режимах игроки могут держать до четырех мячей, а также уворачиваться от летящих мячей и проходить через живые изгороди.
В процессе обучения с подкреплением агенты наблюдают за окружающей средой и предпринимают действия, направленные на максимизацию вознаграждения. Наблюдения, действия и вознаграждения для обучения агентов игре в DodgeBall описаны ниже.
В игре DodgeBall агенты наблюдают за окружающей средой с помощью следующих трех источников информации:
- Передачи: С помощью лучей агенты могут ощущать, как выглядит окружающий их мир. Агенты используют эту информацию, чтобы обнаруживать и захватывать мячи, избегать стен и нацеливаться на противников. Различные наборы лучей, представленные ниже разными цветами, используются для обнаружения различных классов объектов.

- Государственные данные: Эта информация включает в себя положение агента, количество мячей, которые он держит в данный момент, количество ударов, которые он может принять, прежде чем будет уничтожен, а также информацию о флагах в режиме "Захват флага". Агенты используют эту информацию для выработки стратегии и определения своих шансов на победу.
- Другие агенты указывают данные: Эта информация включает в себя положение и здоровье товарищей агента по команде, а также то, держит ли кто-нибудь из них флаг. Обратите внимание, что, поскольку количество агентов не фиксировано (агенты могут быть исключены в любой момент), мы используем буферный датчик для агентов, чтобы обрабатывать переменное количество наблюдений. Здесь количество наблюдений означает количество товарищей по команде, которые все еще находятся в игре.
В среде DodgeBall также используются гибридные действия, которые представляют собой смесь непрерывных и дискретных действий. У агента есть три непрерывных действия для передвижения: Один из них - движение вперед, другой - движение в сторону, а последний - вращение. В то же время есть два дискретных действия: Один бросает мяч, другой бежит. Это пространство действий соответствует действиям, которые человеческий игрок может выполнить в сценариях "Захват флага" и "Устранение".
При этом мы намеренно следим за тем, чтобы вознаграждения, выдаваемые агентам, были довольно простыми. Мы даем большую, окончательную награду за победу и поражение, а также несколько промежуточных наград за то, что вы научились играть в игру.
Для устранения:
- За попадание мячом в противника агенты получают вознаграждение +0,1.
- За победу в игре (уничтожение всех соперников) команда получает +1, а за поражение - -1.
- За быструю победу команде-победителю также начисляется бонус времени, равный 1 (оставшееся время) / (максимальное время).
Для игры в "Захват флага":
- За попадание мячом в противника агенты получают вознаграждение +0,02.
- За победу в игре (возвращение флага противника на базу) команде дается +2, а за поражение - -1.
Хотя очень заманчиво дать агентам множество небольших вознаграждений, чтобы поощрить желательное поведение, мы должны избегать чрезмерного предписания стратегии, которой должны придерживаться агенты. Например, если бы мы давали вознаграждение за сбор мячей в Elimination, агенты могли бы сосредоточиться исключительно на сборе мячей, а не на ударах по противникам. Благодаря тому, что мы делаем вознаграждение как можно более "разреженным", агенты могут свободно открывать свои собственные стратегии в игре, даже если это удлиняет период обучения.
Поскольку существует множество различных выигрышных стратегий, которые могут принести агентам эти награды, мы должны были определить, как будет выглядеть оптимальное поведение. Например, стоит ли хранить шары или перемещать их, чтобы потом удобно было взять? Стоит ли держаться вместе, как команда, или рассредоточиться, чтобы быстрее найти врага? Ответы на эти вопросы зависели от выбора дизайна игры, который мы сделали: Если шаров было мало, агенты держали их дольше, чтобы они не достались врагам. Если бы агентам было позволено постоянно знать, где находится враг, они бы держались группой как можно чаще. При этом, когда мы хотели внести изменения в игру, нам не приходилось вносить какие-либо изменения в код ИИ. Мы просто обучили его новому поведению, которое адаптировалось бы к новым условиям.
По сравнению с обучением одного агента решению задачи, обучение группы агентов взаимодействию является более сложной задачей. Чтобы помочь управлять группой агентов, мы создали скрипт DodgeBallGameController.cs. Этот скрипт служит для инициализации и сброса игрового поля (включает в себя порождение шаров и сброс позиций агентов). Он распределяет агентов по их SimpleMultiAgentGroup и управляет вознаграждениями, которые получает каждая группа. Например, вот как сценарий DodgeBallGameController.cs обрабатывает агента, ударяющего другого мячом.

В этом коде бросающий мяч получает небольшое вознаграждение за попадание в противника, но только когда последний противник будет уничтожен, вся группа получит вознаграждение за свои коллективные усилия.
MA-POCA работает с агентами в группе SimpleMultiAgentGroup иначе, чем с отдельными агентами. MA-POCA объединяет их наблюдения для централизованного обучения. Он также обрабатывает вознаграждения, выдаваемые всей группе, в дополнение к индивидуальным вознаграждениям - независимо от того, сколько агентов присоединяется или покидает группу. В TensorBoard можно отслеживать совокупное вознаграждение, которое получают агенты как группа.
Поскольку и Elimination, и Capture the Flag - это состязательные игры, мы совместили MA-POCA с самостоятельной игрой, чтобы агенты могли сразиться с более старыми версиями самих себя и узнать, как их победить. Как и в случае с любой самостоятельной игрой в ML-Agents, мы можем отслеживать прогресс в обучении агентов, следя за тем, чтобы ELO продолжало расти. После десятков миллионов шагов агенты могут играть так же хорошо, как и любой из нас.

Это видео показывает, как агенты прогрессируют со временем, когда учатся играть в Elimination. Видно, что в самом начале обучения агенты учатся стрелять, но плохо прицеливаются и стреляют наугад. После 40 миллионов временных интервалов прицеливание агентов улучшается, хотя они все еще бродят в беспорядке в надежде натолкнуться на врага. Когда они встречают противника, то, как правило, сражаются с ним один на один. Наконец, после еще 120 миллионов временных шагов обучения агенты становятся гораздо более агрессивными и уверенными в себе и разрабатывают сложные стратегии, такие как групповое нападение на вражескую территорию.
А вот агенты, которые учатся играть в "Захват флага": В самом начале обучения, на этапе 14 миллионов шагов, агенты учатся стрелять друг в друга, не захватывая при этом флаг. За 30 миллионов агенты учатся подбирать вражеский флаг и возвращаться на базу, но кроме агента, несущего флаг, неясно, какой вклад вносят остальные агенты. Однако к 80 миллионам временных шагов агенты демонстрируют интересные стратегии.
Агенты, у которых нет вражеского флага, иногда будут охранять свою базу, преследовать противника, у которого находится их флаг, или ждать на базе противника, пока флагоносец вернется и закидает их мячами. Если у агента есть флаг, он может подождать на своей базе, пока его товарищи по команде не заберут флаг и не смогут забить гол. В следующем видеоролике показаны некоторые из интересных эмерджентных стратегий, которым научились агенты. Обратите внимание, что мы никогда явно не указывали эти модели поведения - они были усвоены в ходе сотен итераций самостоятельной игры.
Среда DodgeBall имеет открытый исходный код и доступна для загрузки здесь. Мы будем рады, если вы его опробуете. Если вы хотите работать на этом захватывающем перекрестке машинного обучения и игр, мы открываем несколько вакансий и приглашаем вас подать заявку здесь.
Наконец, мы будем рады услышать ваши отзывы. Для получения обратной связи по инструментарию Unity ML-Agents, пожалуйста, заполните следующий опросник или напишите нам по адресу ml-agents@unity3d.com. Если у вас возникнут какие-либо проблемы, не стесняйтесь обращаться к нам на странице проблем ML-Agents на GitHub. Любые другие общие комментарии или вопросы, пожалуйста, сообщайте нам на форумах Unity ML-Agents.
