Набор инструментов Unity Machine Learning Agents Toolkit предлагает разработчикам широкий спектр различных сред, с которыми они могут поиграть. Среди всех этих сред я лично нашел многоагентную среду наиболее сложной и интересной. Недавно я некоторое время работал над Теннисом и хотел бы поделиться здесь своими скромными знаниями.
Об окружающей среде
Эта среда включает 2 независимых агента. Каждый из этих агентов должен научиться управлять действиями теннисной стойки. Эти агенты не знают о существовании других агентов. Чтобы набрать очки / награду, каждый агент должен управлять стойкой, чтобы отбросить теннисный мяч на другую сторону корта. Однако для достижения эталонного результата эти агенты должны научиться взаимодействовать друг с другом и подбрасывать теннисный мяч вперед и назад, чтобы получить максимальное количество очков. Следовательно, успешно обученные агенты должны действовать сообща. Цель этого обучения - научить этих агентов сотрудничать, чтобы набирать более высокие баллы, подбрасывая мяч.
Многоагентная архитектура DDPG для критиков
Для достижения целевого показателя была выбрана многоагентная архитектура DDPG (глубокий детерминированный политический градиент) «Критик-исполнитель».
Подобно архитектуре с одним агентом «Критик-исполнитель», у каждого агента есть собственная сеть акторов и критиков. Сеть акторов принимает текущее состояние агента и выводит рекомендованное действие для этого агента. Однако критическая часть немного отличается от обычного одноагентного DDPG. Здесь сеть критиков каждого агента имеет полную видимость среды. Он учитывает не только наблюдение и действия этого конкретного агента, но также наблюдения и действия всех других агентов. Критическая сеть имеет гораздо большую видимость того, что происходит, в то время как сеть субъектов может получить доступ только к информации наблюдения соответствующего агента. Выход сети критиков, тем не менее, по-прежнему является оцененным значением Q с учетом входных данных полного наблюдения (все агенты) и входных данных полного действия (все агенты). Выходные данные сети акторов - это рекомендованное действие для этого конкретного агента.
Сеть критиков активна только во время обучения. Эта сеть будет отсутствовать во время работы.
Испытайте хранилище и целевую сеть
Хранилище опыта развернуто, чтобы максимально использовать опыт / траекторию, собранную во время взаимодействия с окружающей средой. В этом развертывании для каждого агента был развернут отдельный буфер памяти опыта. Идея состоит в том, чтобы обеспечить достаточную случайность выборки, избегая сопряжения записей опыта между агентами.
Также для повышения стабильности обучения была развернута целевая сеть как для сети акторов, так и для сетей критиков. Параметры этой целевой сети время от времени мягко обновляются, так что активная / обучающаяся / локальная сеть будет иметь относительно более стабильную «цель», которую можно будет преследовать.
Исследование с использованием шума
Шум был добавлен к действию, рекомендованному сетью актеров в качестве способа исследования. Установлено, что агенты очень чувствительны к шуму. Величина шума, его вариация и то, как он добавляется и затухает, если таковые имеются, очень важны.
Оказывается, лучший алгоритм для добавления шума - Орнштейн – Уленбек. Шум с относительно меньшей величиной стандартного отклонения был добавлен во время цикла обучения, когда агенты взаимодействуют с окружающей средой. Величина шума уменьшается медленно. И это минимальная величина, при которой шум никогда не достигнет нуля.
Кропотливый процесс настройки
Самая большая проблема здесь - синхронизация. Хорошо обученного отдельного агента недостаточно для прохождения контрольной оценки, если другой агент также хорошо обучен и ведет себя правильно примерно в то же время. На начальном этапе обучения агенты не знают о возможности подпрыгивания. Учились только отбивать падающий с неба мяч. И награда очень ограничена. Агент получает шанс научиться подпрыгивать только тогда, когда другой агент может отбить мяч и отправить его на другую сторону площадки. Таким образом, агент должен быть в состоянии вместе достичь стадии «подпрыгивания», чтобы произошло отскок. Для этого оба агента в идеале должны иметь примерно одинаковый цикл обучения. Это когда агент A готов к прыжку, B тоже готов. А добиться этого очень сложно. Было сделано много попыток, прежде чем был наконец достигнут проходной балл.
Выбраны гиперпараметры
Вот краткое изложение используемых гиперпараметров:
Результат
После стольких различных проб и ошибок агент MADDPG может решить среду (средний балл по 100 эпизодам с максимум 2 агентами ›0,5) в эпизоде 1500.
А вот видео, на котором запечатлено движение обученного агента (ов).
Если вас интересуют детали реализации, вы можете заглянуть в мой репозиторий github здесь.
Вопросов? пришлите мне письмо по адресу [email protected]. Спасибо за прочтение.