Набор инструментов Unity Machine Learning Agents Toolkit предлагает разработчикам широкий спектр различных сред, с которыми они могут поиграть. Среди всех этих сред я лично нашел многоагентную среду наиболее сложной и интересной. Недавно я некоторое время работал над Теннисом и хотел бы поделиться здесь своими скромными знаниями.

Об окружающей среде

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

Многоагентная архитектура DDPG для критиков

Для достижения целевого показателя была выбрана многоагентная архитектура DDPG (глубокий детерминированный политический градиент) «Критик-исполнитель».

Подобно архитектуре с одним агентом «Критик-исполнитель», у каждого агента есть собственная сеть акторов и критиков. Сеть акторов принимает текущее состояние агента и выводит рекомендованное действие для этого агента. Однако критическая часть немного отличается от обычного одноагентного DDPG. Здесь сеть критиков каждого агента имеет полную видимость среды. Он учитывает не только наблюдение и действия этого конкретного агента, но также наблюдения и действия всех других агентов. Критическая сеть имеет гораздо большую видимость того, что происходит, в то время как сеть субъектов может получить доступ только к информации наблюдения соответствующего агента. Выход сети критиков, тем не менее, по-прежнему является оцененным значением Q с учетом входных данных полного наблюдения (все агенты) и входных данных полного действия (все агенты). Выходные данные сети акторов - это рекомендованное действие для этого конкретного агента.

Сеть критиков активна только во время обучения. Эта сеть будет отсутствовать во время работы.

Испытайте хранилище и целевую сеть

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

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

Исследование с использованием шума

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

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

Кропотливый процесс настройки

Самая большая проблема здесь - синхронизация. Хорошо обученного отдельного агента недостаточно для прохождения контрольной оценки, если другой агент также хорошо обучен и ведет себя правильно примерно в то же время. На начальном этапе обучения агенты не знают о возможности подпрыгивания. Учились только отбивать падающий с неба мяч. И награда очень ограничена. Агент получает шанс научиться подпрыгивать только тогда, когда другой агент может отбить мяч и отправить его на другую сторону площадки. Таким образом, агент должен быть в состоянии вместе достичь стадии «подпрыгивания», чтобы произошло отскок. Для этого оба агента в идеале должны иметь примерно одинаковый цикл обучения. Это когда агент A готов к прыжку, B тоже готов. А добиться этого очень сложно. Было сделано много попыток, прежде чем был наконец достигнут проходной балл.

Выбраны гиперпараметры

Вот краткое изложение используемых гиперпараметров:

Результат

После стольких различных проб и ошибок агент MADDPG может решить среду (средний балл по 100 эпизодам с максимум 2 агентами ›0,5) в эпизоде ​​1500.

А вот видео, на котором запечатлено движение обученного агента (ов).

Если вас интересуют детали реализации, вы можете заглянуть в мой репозиторий github здесь.

Вопросов? пришлите мне письмо по адресу [email protected]. Спасибо за прочтение.