У каждого геймера есть мечта, надеющаяся стать долгожданным и всемогущим героем в виртуальном мире. Потом... потом... прозвенел будильник, и я проснулся, и пора было снова втискиваться в метро на работу.
Тем не менее, в этом проекте я заставлю всех временно забыть о проблемах реальности и использовать фреймворк для глубокого обучения с подкреплением PARL, чтобы реализовать эту «героическую мечту»! Ставьте рендеры первыми:
Обзор знаний
Вы все нетерпеливы? Подождите минутку, чтобы понять глубокое обучение с подкреплением в игре «Завтрашний ковчег», позвольте мне вернуть вас к истории алгоритмов глубокого обучения с подкреплением. DQN — это новаторская разработка алгоритма глубокого обучения с подкреплением, которая добилась очень хороших результатов в классических аркадных играх. Он использует ReplyMemory для хранения и воспроизведения событий, что является обычным приемом для алгоритмов типа Off-policy. Однако возможностей DQN недостаточно при работе с мобильными играми. Поэтому я обратился к более мощному алгоритму --- A3C.
Алгоритм A3C отличается от DQN тем, что он разрабатывает асинхронный многопоточный субъект-критик, каждый агент работает в своем собственном потоке, а затем глобально делится изученными сетевыми параметрами. Таким образом, всегда может быть большой объем интерактивных данных, и данные, собранные этими несколькими потоками, не имеют корреляции (проблема корреляции: см. принцип алгоритма DDQN). Таким образом, алгоритм A3C достигает эффекта, аналогичного ReplyMemory, за счет «асинхронной многопоточности + общих глобальных параметров». При этом он не только имеет большой объем данных для решения проблемы нестабильности тренировочного процесса, но и решает проблему корреляции параметров.
В классическом алгоритме PG наш Агент также называется Актером, а у Актера есть своя политика π для конкретной задачи. Политика π обычно представлена нейронной сетью, параметр которой равен θ. Начиная с определенного состояния и до конца задачи, называется полным Эпизодом. На каждом шаге мы получаем вознаграждение r, а итоговое вознаграждение за выполненное задание называется R.
Если мы используем функцию Q для оценки будущего совокупного вознаграждения и создаем сеть критиков для расчета значения функции Q, то мы получаем метод Актер-Критик.
Основная функция функции Q в A3C — добавить базовый уровень, чтобы обратная связь могла быть положительной или отрицательной Базовый уровень здесь обычно представлен функцией значения состояния V. Однако, когда мы применяем такой метод, нам нужно вычислить как Q-функцию, так и V-функцию, что непросто. Функция Q может быть заменена «функцией V от шага t+1» плюс «r от шага t до шага t+1». Таким образом, мы можем получить вычисление значения Q, представленного V, которое мы обычно называем Advantage (функция преимущества), а сеть Критика в это время становится сетью, которая вычисляет функцию преимущества A.
A3C — это аббревиатура от Asynchronous Advantage Actor-Critic, что в переводе с китайского означает алгоритм оценки действия асинхронного преимущества. Среди них Преимущество относится к функции преимущества А. Следовательно, из названия можно понять, что суть A3C заключается в решении сети πθ и сети Aπ(s, a).
В статье об алгоритме A3C авторы сравнили четыре алгоритма — асинхронный Sarsa, асинхронный Q-Learning, DQN и A3C. После того, как статья была опубликована, различные боги алгоритмов проверили вопрос: делает ли асинхронное обновление алгоритм более эффективным, чем другие алгоритмы? . Результаты очень интересны: многопоточность — причина, по которой алгоритм A3C работает быстро, а «асинхронное обновление» — его недостаток. Поэтому ученые предложили алгоритм синхронного обновления A2C (Advantage Actor-Critic), чтобы более эффективно использовать ресурсы ЦП.
PS: Алгоритм Бог все еще получил пощечину, хлоп-хлоп-хлоп!
В следующей части я сначала кратко интерпретирую алгоритм A2C, встроенный в библиотеку PARL, чтобы каждый мог читать меньше кода при просмотре практической части проекта.
Ученик В этом классе интересно то, что библиотека PARL использует имя A3C. Причина в том, что A2C и A3C являются гомологичными алгоритмами. Основное отличие в их реализации — ступенчатая функция (описанная ниже).
create_actors В этом коде интересно то, что он подключается к кластеру XPARL, а затем выполняет run_remote_sample. Учащиеся, ознакомившиеся с исходным кодом DQN, должны хорошо его понять, что означает запуск «выборки» в независимом процессе.
ступенчатая функция Пошаговая функция является наиболее важной и уникальной функцией в алгоритме A2C, и ее функция заключается в синхронном ожидании операции обновления. Поскольку алгоритм A2C будет синхронно ожидать, пока все Агенты (Актеры) завершат раунд обучения, синхронизируют параметры θ сети π и обновят глобальные параметры сети π.
Функция актера Аннотация @parl.remote_class указывает, что класс Actor выполняется в отдельном собственном процессе (поскольку A2C использует собственный многопроцессорный процессор). Распределенный кластер PARL развертывается с помощью двух строк команд, а Актер фактически работает на удаленном сервере.
Обратите внимание, что массив env сохраняется в методе инициализации Актера, модель создается с теми же параметрами, алгоритм создается с той же моделью и передается агенту в качестве параметра.
Момент, на который все должны обратить внимание, заключается в том, что каждый Актер соответствует Агенту.
пример функции Функция образца в Актере вызовет функцию образца Агента и функцию значения Агента, чтобы обновить локальную сеть π и сеть v соответственно, и, наконец, возвратить sample_data на центральный узел.
Структура данных sample_data:
Среди них расчет функции преимущества выглядит следующим образом:
Функция VectorEnv Этот класс представляет собой инкапсуляцию среды env в PARL. Наша смоделированная реальная машинная среда также принимает то же определение, в основном для одновременного запуска нескольких сред и повышения эффективности параллельных вычислений, как показано ниже:
Исходные данные для симулятора возвращаются пакетами с помощью пошагового метода в этом классе.
Практическое программирование
1. Написание и обучение игровому симулятору Создайте новый проект симулятора «Tomorrow's Ark»: ArKnight_A2C_Симулятор Поскольку «Завтрашний ковчег» — это мобильная онлайн-игра, скорость обработки данных слишком низкая! ! ! Для того, чтобы повысить скорость обучения, вам необходимо разработать собственный тренажер. После использования тренажера скорость можно увеличить в 50-100 раз.
Измените метод инициализации Learner:
Определите новый env.py:
Измените актера:
Определите среду моделирования для обучения:
После примерно 100 000 шагов в симуляторе потеря модели сходится.
2. Напишите механизм вывода состояния Создайте новый проект ARKNIGHT_CLASSIFY, который использует остаточную нейронную сеть для предопределения основного игрового интерфейса в «Ковчеге завтрашнего дня». Используя этот движок, можно определить состояние текущей игры, когда развернута настоящая машина, и использовать ее для расчета двух важных параметров вознаграждения и окончания игры.
3. Оцените модели обучения с подкреплением В глубоком обучении с подкреплением очень важна оценка производительности, потому что нам нужно знать, что алгоритм извлек из данных? Мы получили модель на первом этапе, а вознаграждение и функции завершения игры в реальном машинном окружении — на втором этапе. Затем мы должны протестировать его в реальной машинной среде.
Как видите, я сделал всего 2 шага, и алгоритм успешно достиг установленного состояния завершения [965]. Создайте новый проект развертывания ArKnight_A2C, импортируйте модель, и эффект будет следующим:
4. Разверните механизм вывода модели и состояния на реальной машине. Определите реальную машинную среду:
Механизм вывода состояния игры здесь — это модель вывода, выведенная проектом ARKNIGHT_CLASSIFY. С помощью логического значения состояния награда и окончание игры в коде могут быть сопоставлены с реальной средой машины. В то же время, используя класс AdbUtil для выполнения реальных действий, вы можете использовать реальную машину для выполнения алгоритмических действий.
В этой статье я покажу вам, как создать интерактивную среду Tomorrow's Ark и как быстро вызвать алгоритм A3C через PARL для достижения параллельного обучения Общая реализация проста и понятна.
Увидев это, вам не терпится попробовать это самому!
"Герои", используйте весла, чтобы осуществить свои мечты, yyds (навсегда падение бога)!
Для получения более подробной информации, пожалуйста, нажмите на ссылку с открытым исходным кодом PARL:
Если вы хотите узнать больше о летающих веслах, обратитесь к следующим документам.
·Адрес официального сайта Feipao·
· Адрес проекта фреймворка с открытым исходным кодом Paddle ·
GitHub: GitHub.com/paddle pad DL…
Gitee: git ee.com/paddle pad DL…
· Адрес проекта Paddle Deep Reinforcement Learning Framework ·GitHub.com/paddle pad DL…