Давайте создадим код для футбольного агента по обучению с подкреплением!

Добро пожаловать в первую часть серии туториалов по математике и программированию. Я покажу, как реализовать алгоритм обучения с подкреплением, известный как проксимальная оптимизация политики (PPO), для обучения ИИ-агента игре в футбол. К концу этого руководства вы получите представление о том, как применить метод обучения на основе политики в системе «субъект-критик», чтобы научиться ориентироваться в любой игровой среде. Мы увидим, что означают эти термины в контексте алгоритма PPO, а также реализуем их на Python с помощью Keras. Итак, давайте сначала начнем с установки нашей игровой среды.

Примечание. Код всей этой серии доступен в репозитории GitHub по ссылке ниже.



Настройка Google Football Environment

Я использую Google Football Environment для этого урока, но вы можете использовать любую игровую среду, просто убедитесь, что она поддерживает OpenAI’s Gym API на python. Обратите внимание, что футбольная среда в настоящее время поддерживает только платформу Linux на момент написания этого руководства.

Начните с создания виртуальной среды с именем footballenv и ее активации.

>> virtualenv footballenv
>> source footballenv/bin/activate

Теперь установите системные зависимости и пакеты python, необходимые для этого проекта. Убедитесь, что вы выбрали правильную версию gfootball CPU / GPU, подходящую для вашей системы.

>> sudo apt-get install git cmake build-essential libgl1-mesa-dev 
libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-gfx-dev libboost-all-dev libdirectfb-dev libst-dev mesa-utils xvfb x11vnc libsqlite3-dev glee-dev libsdl-sge-dev python3-pip
>> pip3 install gfootball[tf_gpu]==1.0
>> pip3 install keras

Управление футбольной средой

Теперь, когда у нас установлена ​​игра, давайте попробуем проверить, правильно ли она работает в вашей системе.

Типичная установка обучения с подкреплением работает, когда агент ИИ взаимодействует с нашей средой. Агент наблюдает за текущим state нашим окружением и на основе somepolicy принимает решение о выборе конкретного action. Затем это действие передается обратно в среду, которая продвигается вперед на один step. Это генерирует reward, который указывает, было ли предпринятое действие положительным или отрицательным в контексте игры. Используя это вознаграждение в качестве обратной связи, агент пытается выяснить, как изменить существующую политику, чтобы получить лучшие вознаграждения в будущем.

Итак, давайте продолжим и реализуем это для случайного ИИ-агента, взаимодействующего с этой футбольной средой. Создайте новый файл python с именем train.py и выполните следующее, используя виртуальную среду, которую мы создали ранее.

Это создает объект окружения env для сценария academy_empty_goal, где наш игрок появляется на пол-линии и должен забивать пустые ворота с правой стороны. representation='pixels' означает, что состояние, которое будет наблюдать наш агент, будет в виде RGB-изображения кадра, отображаемого на экране. Если вы видите на экране игрока, выполняющего случайные действия в игре, поздравляю, все настроено правильно, и мы можем приступить к реализации алгоритма PPO!

Вот те же шаги по установке в видеоформате, если вам это больше нравится.

Проксимальная оптимизация политики (PPO)

Алгоритм PPO был представлен командой OpenAI в 2017 году и быстро стал одним из самых популярных методов RL, узурпировавших метод обучения Deep-Q. Он включает в себя сбор небольшого пакета опыта взаимодействия со средой и использование этого пакета для обновления своей политики принятия решений. Как только политика обновляется этим пакетом, опыт отбрасывается, и собирается новый пакет с недавно обновленной политикой. Это причина того, почему это подход «обучения на основе политики», когда собранные образцы опыта полезны только для однократного обновления текущей политики.

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

Актерско-критический метод

Мы будем использовать подход «актер-критик» для нашего агента PPO. В нем используются две модели, обе - глубокие нейронные сети, одна из которых называется «Актер», а другая - «Критик».

Модель-актер

Actor model выполняет задачу изучения того, какие действия следует предпринять в конкретном наблюдаемом состоянии окружающей среды. В нашем случае он принимает RGB-изображение игры в качестве входных данных и дает на выходе определенное действие, такое как выстрел или пас.

Давайте сначала реализуем это.

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

Я использую несколько первых слоев предварительно обученной CNN MobileNet для обработки нашего входного изображения. Я также делаю параметры этих слоев необучаемыми, так как мы не хотим изменять их вес. Только слои классификации, добавленные поверх этого экстрактора признаков, будут обучены предсказывать правильные действия. Давайте объединим эти слои как Keras Model и скомпилируем его, используя среднеквадратичную потерю ошибок (на данный момент это будет изменено на настраиваемую потерю PPO позже в этом руководстве).

Модель критики

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

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

Давайте реализуем Критика.

Как видите, структура нейронной сети Critic почти такая же, как у Actor. Единственное существенное отличие состоит в том, что последний уровень Critic выводит действительное число. Следовательно, используется активация tanh, а не softmax, поскольку здесь нам не нужно распределение вероятностей, как в случае с Актером.

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

Связывая все вместе

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

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

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

Продолжение следует…

Это все для этой части руководства. Мы установили среду Google Football в нашей системе Linux и реализовали базовую структуру для взаимодействия с этой средой. Затем мы определили модели «Актер» и «Критик» и использовали их для взаимодействия и сбора образцов опыта из этой игры. Надеюсь, вы смогли успеть, иначе дайте мне знать ниже в комментариях, если вас что-то задержало, и я постараюсь помочь.

В следующий раз мы увидим, как использовать полученный опыт для обучения и улучшения моделей актеров и критиков. Мы рассмотрим алгоритм Generalized Advantage Estimation и воспользуемся им для вычисления custom PPO loss для обучения этих сетей. Так что держись!

РЕДАКТИРОВАТЬ: Вот ЧАСТЬ 2 этой серии руководств.

Спасибо за чтение. Если вам понравилась эта статья, вы можете следить за моими работами на Medium, GitHub или подписываться на мой канал на YouTube.