Чанбай Ли и Ян Дорниг

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

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

Unity добилась поразительного прогресса в проведении экспериментов с машинным обучением (ML) в своем движке с помощью платформы Unity ML Agents и предоставляет программистам различные модели ML для довольно легкого развертывания в играх. Просматривая примеры онлайн, мы искали возможности познакомить игрока со свойствами обучения моделей машинного обучения — мы хотели, чтобы игрок

  1. Наблюдайте за осмысленным обучением алгоритма
  2. Оказать максимальное влияние на производительность машинного обучения

Обучение с подкреплением против демонстративного обучения

Агенты Unity ML предлагают на выбор различные модели обучения. В целом, для нас были интересны эти две категории — обучение с подкреплением (RL) и демонстративное обучение (DL).

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

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

RL осуществляется путем вознаграждения агентов за то, что они ведут себя так, как мы хотим, и наказания, когда они этого не делают. — Короче говоря, я получаю очки за достижение цели и отрицательное вознаграждение, когда терплю неудачу — и поскольку это логика многих игр, связь довольно очевидна. Благодаря этому алгоритм постепенно изучает методом проб и ошибок лучшие стратегии для максимизации вознаграждений/баллов/монет/выигрышей. Поскольку в игры часто встроена эта механика, их часто можно использовать напрямую. Но более сложные игровые сценарии также требуют настраиваемых систем вознаграждения, которые помогают ИИ найти свой путь, а не слишком долго спотыкаться в темноте.

Помимо фактической математики, стоящей за всем этим, это включает в себя настройку систем вознаграждения-наказания и, что важно, то, что модель/агенты могут чувствовать/собирать об окружающей среде.

Вот некоторые из демонстраций, доступных для RL от Unity. Обычно они устроены таким образом, что после установки сцены и модели нет вмешательства человека.

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

Теперь некоторые вещи, которые мы могли бы представить:

  1. Игрок как архитектор: например. Игра-платформер, в которой игрок строит разные уровни с возрастающей сложностью, чтобы научить ИИ все более сложным движениям с заданным конечным уровнем, который он должен освоить. Немного похоже на недавний вызов Unity, где участников попросили написать ИИ, который может решать разные простые головоломки, которые становятся все сложнее от одного уровня к другому, но вместо того, чтобы писать ИИ напрямую, вы будете действовать как тренер через подготовка задач для ИИ.
  2. Игрок как судья/система вознаграждения: например. Пусть игрок на самом деле предоставляет награды и наказания в режиме реального времени. Возможно, вы помните, как тренировали свое существо в Черном и белом Молинье. В этих случаях вы являетесь тренером.

Эти примеры намекают на возможный игровой дизайн и механику, и это то, что мы, безусловно, хотели бы попробовать, но в течение 48-часового спринта казалось неясным, сможем ли мы заставить такую ​​систему работать, поскольку интерактивные части должны быть реализованы. . В то же время было очень неясно, сможет ли ИИ осмысленно обучаться с ограниченным количеством обратной связи, которую может дать человек.

Когда дело доходит до суждений о том, насколько хорош ИИ, большинство примеров Unity просто смотрят на то, какой прогресс был достигнут в течение определенного периода времени. Нам бы очень хотелось посмотреть, что произойдет, если человек будет давать обратную связь о том, находится ли агент на правильном пути. Будет ли этот подход работать лучше? Если вы знаете несколько примеров, которые пытались это сделать, сообщите нам об этом в комментариях.

Демонстративное обучение

К нашему удивлению, агент Unity ML также обеспечивает демонстративное обучение. Вместо того, чтобы обучать агентов с помощью вознаграждений и наказаний, этот метод дает им примеры того, как выполнять задачу. Например, если вы хотите, чтобы агент толкал коробку, вы можете записать кадры, на которых вы толкаете коробку, и агент будет следовать за вами. Хотя нам не нужно устанавливать систему вознаграждения-наказания, нам все же нужно определить, что агенты могут ощущать в окружающей среде.

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

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

Агенты научились подталкивать коробку к зоне ворот всего после одной демонстрации.

Геймдизайн

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

Мы начали думать обо всем, что мы могли бы сделать с нашими недавно обученными и, следовательно, умными маленькими подчиненными. Основываясь на существующей демонстрации Unity, где ИИ толкает коробки, первая идея заключалась в том, чтобы использовать наших миньонов для коллективного строительства башни. Два игрока будут оцениваться по высоте башни. В идеале все это должно быть построено непосредственно игроком и ИИ вместе, и это может привести к некоторым забавным ситуациям, когда ИИ продолжает строить действительно нестабильными способами, а игроку приходится помогать в качестве архитектора.

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

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

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

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

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

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

То, что игроки противостоят друг другу, означает, что проблемы, с которыми они столкнутся, будут довольно динамичными — все будет полностью зависеть от того, как ведут себя противники. Оптимальные стратегии могут меняться на протяжении всей игры в зависимости от того, как играет противник. Поэтому игроку, возможно, придется научить агентов новой стратегии, чтобы победить стратегию противника. Затем противник может повторно обучить агента другой новой стратегии. Цикл обратной связи может продолжаться вечно!

Код

Инструментарий агентов машинного обучения разделен на две части: среда Python, управляемая Анакондой, обучает модели машинного обучения; и Unity SDK используется для запуска симуляций.

mlagents-learn config/online_bc_config.yaml — train — slow

Набор инструментов Unity ML Agents использует «мозги» для связи моделей машинного обучения и агентов в игре. Мозги могут записывать действия игрока, использовать их для обучения модели и позволять модели управлять агентами в игре одновременно.

Чтобы обучить нейронную сеть с помощью этого набора инструментов, мы должны сначала запустить процесс обучения Python в командной строке, затем вернуться в редактор Unity и нажать кнопку воспроизведения в течение 30 секунд. По общему признанию, это не очень дружелюбный игровой опыт; но с 48 часами и передовыми технологиями нам приходится идти на компромисс.

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

Пока online_bc_config.yaml содержит конфигурацию мозга и в активной игре есть агент, использующий этот мозг, набор инструментов начнет обучение.

Примеры Unity каждый раз тренируют только один мозг, но, похоже, ограничений не было, поэтому мы попытались ввести конфигурацию мозга обеих команд и… ура! Обе команды сейчас учатся у своих игроков. Вы можете посмотреть, как мы настроили конфигурацию обучения здесь.

Паукбокс

Чтобы позволить агентам собирать информацию об их окружении, мы пометили все в сцене тегами, а затем настроили агентов на чтение их с помощью raycasting. Как и у паука, у каждого зомбокса есть 8 «глаз», которые могут видеть в разных направлениях; в отличие от паука, один из глаз смотрит прямо за зомбоксом. Это представляет собой основной ввод для нейронной сети, которая изучает, какое действие следует предпринять, основываясь на том, что она видит.

Активы игры

Для простоты мы придерживались общей темы коробки и расширили ее до использования пиксельного/воксельного стиля, создав игровые активы в MagicaVoxel перед экспортом в Unity. И парочка базовой пиксельной графики для пользовательского интерфейса.

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

Заключение/Примечания

Разочаровывающие зомби

Самым важным выводом было то, что зомби глупы и что демонстративное обучение не дает результатов достаточно быстро для долгосрочного взаимодействия. Хотя можно увидеть первые результаты зомбоксов, которые, казалось бы, начинают двигаться в правильном направлении, быстро возникает ощущение, что улучшение достигает дна на этапе, который все еще очень бесполезен. Поскольку первоначальное тестирование, казалось, дало более полезные результаты, возможно, при достаточной оптимизации переменных и среды это можно было бы улучшить. В то же время тема зомбокса и игровой дизайн уже пытаются сбалансировать это с механикой PvP, но в целом ничего не поделаешь, что игроки могут смотреть на свои беговые ящики с видом и чувством сожаления разочарованных родителей.

Сочетание RL и DL

В какой-то момент мы искали способы ускорить обучение для достижения лучших результатов и решили использовать DL и RL в комбинации. Это практика, которую можно найти в других областях, особенно в робототехнике. Человек будет показывать начальные демонстрации, чтобы получить базовый уровень «правильных» входных данных, что заметно сокращает время обучения, поскольку в противном случае алгоритмы начинают со случайных действий и требуют много времени, чтобы прийти к чему-либо полезному — что хорошо для симулированных/виртуальных обучение, но проблематично с реальной робототехникой.

После некоторого поиска в Google и хотя мы нашли несколько людей, которые спрашивали об одном и том же, мы обнаружили, что платформа Unity не допускает эту комбинацию. Сделал — потому что кажется, что многое улучшилось за последний год, и Unity приняла популярный сейчас подход GAN, который позволяет постоянно совершенствоваться.

Из блога Unity: В версии 0.9 мы представили GAIL, который решает обе эти проблемы на основе исследования, проведенного Джонатаном Хо и его коллегами. …Поскольку GAIL просто дает агенту вознаграждение, оставляя процесс обучения неизменным, мы можем объединить GAIL с основанным на вознаграждении DRL [Deep Reinforcement Learning], просто взвешивая и суммируя вознаграждение GAIL с теми, что дает сама игра. https://blogs.unity3d.com/2019/11/11/training-your-agents-7-times-faster-with-ml-agents/

Дивный новый мир, полный коробок

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

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

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

Одна ссылка, к которой мы продолжаем возвращаться, больше напоминает вышеупомянутое Черное и белое — разновидность жанра симуляции/бога — Sandkings GRRMartin описывает историю коллекционера редкостей, который находит что-то вроде самой занимательной домашней муравьиной фермы. где разные племена жукоподобных существ соревнуются за благосклонность своего бога (коллекционера), и постепенно они развиваются, и начинают проявляться более сложные модели поведения и способности. Экспериментальные игры могут исследовать генеративные возможности, позволяя группе агентов бегать и создавать свои собственные среды обитания, и смотреть, как это согласуется с такими вещами, как игры в бога и строительство базы. Такие игры, как Spore, исследовали аналогичные концепции без машинного обучения, а экосистемные среды с ИИ-агентами исследовались рядом людей, включая Андрея Карпати или Полимир Ларри Ягера. Хотя это более рудиментарные и эволюционирующие существа в основном в песочнице, возможно, мы увидим, что довольно скоро мы увидим новые способы того, какие формы они могут принимать в более сконструированных и сложных средах с такими компаниями, как Klang и их игра Seed.io на горизонте.

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

Если вы работаете над чем-то подобным или у вас есть другие комментарии по этому поводу, сообщите нам об этом в комментариях! И отправляйтесь на Github, чтобы попробовать наше демо, сделать форк и показать нам, как это делается на самом деле!