Проксимальная оптимизация политики (PPO) - это метод градиента политики, который относительно просто реализовать и может разрабатывать политики для максимизации вознаграждения для широкого класса проблем [1].

Как и другие методы градиента политики, PPO может оптимизировать повторяющиеся политики нейронной сети. Это может быть очень полезно, потому что во многих средах наблюдения не отражают полное состояние системы, но рекуррентная модель может определить, какие состояния есть из серии наблюдений, т. Е. Частично наблюдаемые марковские процессы принятия решений (POMDP) ​​можно решать, как если бы они были марковскими процессами принятия решений (MDP). Этот подход был использован OpenAI Five для победы над чемпионами мира по Dota [2].

В гораздо меньшем масштабе полезность этого подхода демонстрируется в частично наблюдаемой среде [3] ниже:

HardcoreBipedalWalker-v2

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

CartPole-v2 (параметры маскированной скорости в наблюдениях)

Маятник-v0 (параметры маскированной скорости в наблюдениях)

LunarLander-v2 (параметры маскированной скорости в наблюдениях)

LunarLanderContinuous-v2 (параметры маскированной скорости в наблюдениях)

BipedalWalker-v2 (параметры скорости не замаскированы)

Дальнейшее обоснование

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

  1. Модель может вычислить состояние на основе наблюдений для нас.

Многие среды состоят из динамической механической системы или включают ее. Чтобы быть MDP, среда должна включать в себя как положение, так и скорость, что в точности то, что делают среды тренажерного зала, такие как CartPole, Pendulum и LunarLander. Без повторяющейся модели и использования наблюдений непосредственно в качестве состояния могут быть достигнуты только низкие баллы, потому что политика не может знать, тормозить или ускоряться для данной позиции. В этом простом случае мы знаем ответ, но по мере роста сложности наблюдений будет все труднее спроектировать подходящее состояние и легче позволить моделировать его для нас. Примером этого является BipedalWalkerHardcore, где [2] объясняет, что ходунок должен помнить, что, возможно, видел в предыдущих кадрах, чтобы не упасть в них.

2. Иногда наблюдения контролируются самим агентом.

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

3. Модель может защитить нас от незнания проблемы.

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

Примечательные подробности реализации

Большинство важных деталей алгоритма можно получить из [1], поэтому здесь я остановлюсь на некоторых технических деталях:

1. Реализация Gym Vector

Стандартная среда тренажерного зала работает только с одной средой за раз. Другие реализации RL, которые я видел, обходят это путем параллельного запуска отдельных процессов. Это работает, но требует много ресурсов, особенно при выводе на несколько отдельных моделей. Gym теперь предлагает хорошее решение этой проблемы, заключающееся в упаковке среды, чтобы несколько экземпляров одной среды могли работать вместе либо синхронно в одном процессе, либо асинхронно с использованием нескольких процессов. Увеличение размера пакета для политики и критика с 1 (одиночная среда) до 32 параллельных сред намного быстрее, чем 32 модели, работающие параллельно, выполняющие вывод для одного пакета.

2. Google Colab

Обучение и тестирование модели проводились на платформе Google Colab. Основная причина этого в том, что среда щедро предлагает бесплатный графический процессор. Однако у него есть ограничения, и, по моему опыту, он не позволит непрерывно использовать графический процессор более 12 часов. Существуют и другие проблемы, например, отключения. Это означает, что для учебных заданий, занимающих несколько дней, таких как BipedalWalkerHardcore-v2, необходимо было добавить возможность сохранения и возобновления с контрольных точек, сохраненных на Google Диске.

3. Инициализация состояния

При захвате траектории для обучения модели легко инициализировать скрытое состояние LSTM и состояние ячейки равными нулю. Затем выполните итерацию по всему эпизоду, позволяя LSTM обновлять собственное состояние для каждого шага. Во время тренировки мы разбиваем эпизод на части, обычно длиной около 8 шагов. Во время обучения мы также можем инициализировать скрытое состояние и состояние ячейки равными нулю, однако в этих условиях соотношение pi / pi_old может сильно отличаться даже при одинаковых параметрах политики. Эта проблема становится лучше с большей длиной обучающей последовательности, такой как 16 или 32, потому что состояние инициализации имеет меньшее влияние на конечное состояние, но и обратное также верно, и оно становится хуже для более коротких длин последовательностей. Чтобы смягчить эту проблему, мы можем сохранить состояния LSTM во время развертывания и использовать их для инициализации во время обучения. Для первой итерации обучения в каждой итерации PPO эти сохраненные скрытые состояния и состояния ячеек являются точными, но по мере изменения параметров они становятся менее точными. Тем не менее, это по-прежнему гораздо более точная инициализация, чем ноль, и поэтому дает более точные градиенты для обучения, позволяя использовать очень короткие длины последовательностей.

4. Формирование награды

Полученные награды могут иметь большое влияние на то, как PPO решает проблему. В средах BipedalWalker и BipedalWalkerHardcore награда дается за движение вперед, применяется штраф за крутящий момент и большое отрицательное вознаграждение (-100) за падение. Я использовал тот же подход, что и в [ 4], чтобы ограничить награду минимум -1 для окружения ходока. Разница в поведении весьма разительна:

Неоформленная награда:

  1. Уокер учится принимать очень устойчивую стойку и остается в ней до конца эпизода.
  2. Уокер медленно учится двигаться вперед.
  3. Походка Уокера постепенно становится менее консервативной и движется быстрее.

Формованная награда:

  1. Уокер быстро учится падать вперед.
  2. Падение Walkers становится все длиннее и длиннее, поскольку он учится «ловить» себя ногами.
  3. Уокер больше не падает и обрел скоростную походку.

Хотя PPO может решить обе эти проблемы, неформальное вознаграждение занимает намного больше времени, чтобы решить проблему, а походка менее удовлетворительна, потому что она настолько консервативна.

Ссылки для реализации и настройка

Реализация состоит из двух Блокнотов. Один для обучения политики в выбранной среде: recurrent_ppo.ipynb

и один для создания тестового видео: test_recurrent_ppo.ipynb

Ноутбуки ожидают следующие каталоги на Google Диске:

/ рабочее пространство / контрольные точки

/ рабочие области / журналы

/ рабочее пространство / видео

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

Сохраненные контрольные точки, используемые для генерации результатов, включены сюда: контрольные точки, они могут быть добавлены в облако Google для возобновления, тестирования или даже передачи обучения.

15 минут тренированной ходьбы на двух ногахHardcore-v2

Этот ролик состоит примерно из 70 серий. Обратите внимание, что это все еще довольно часто дает сбой. Средняя награда была около 160, когда я потерял терпение, тренируя ее.

Вывод

Алгоритм PPO вместе с рекуррентной моделью - действительно мощная комбинация. Способен давать хорошие результаты по широкому кругу проблем, решая как MDP, так и POMDP в непрерывных и дискретных пространствах действий.

использованная литература

[1] Алгоритмы проксимальной оптимизации политики https://arxiv.org/pdf/1707.06347.pdf

[2] Dota 2 с крупномасштабным обучением с глубоким подкреплением https://arxiv.org/pdf/1912.06680.pdf

[3] Рекуррентный детерминированный метод градиента политики для двуногого передвижения на пересеченной местности https://arxiv.org/pdf/1710.02896.pdf

[4] PPO с LSTM и параллельной обработкой https://github.com/jet-black/ppo-lstm-parallel