Понимание современных алгоритмов обучения с подкреплением
Вступление
В этом посте мы рассматриваем Soft Actor-Critic (Haarnoja et al., 2018 и 2019), очень успешный алгоритм обучения с подкреплением, который обеспечивает высочайшую производительность в задачах непрерывного управления (таких как перемещение и манипуляции роботов). Soft Actor-Critic использует концепцию обучения с максимальной энтропией, которая дает некоторые концептуальные и практические преимущества, которые мы обсудим в этом посте.
Вот как структурирован этот пост:
Во-первых, у нас будет краткий обзор итерации общей политики (я предполагаю, что читатель знаком с марковскими процессами принятия решений) - концепции, необходимой для понимания любого алгоритма обучения с подкреплением. Затем мы обсудим интуицию, лежащую в основе Soft Actor-Critic, и концептуальные преимущества, которые она приносит. Далее мы обсудим итерацию мягкой политики, теоретическую основу, приближенную к Soft Actor-Critic (SAC), а затем перейдем к SAC. Я также буду предоставлять фрагменты кода, объясняющие алгоритм, на протяжении всего сообщения.
Каким образом SAC достигает передовых результатов?
По сути, SAC стремится максимизировать «энтропию» политики в дополнение к ожидаемому вознаграждению от окружающей среды. Энтропию в политике можно интерпретировать как случайность в политике.
Из рисунка выше мы видим, что распределения вероятностей с низкой энтропией имеют тенденцию «жадно» отбирать определенные значения, поскольку масса вероятности распределяется относительно неравномерно. Тем не менее, поощрение политики за высокую энтропию дает несколько концептуальных преимуществ: во-первых, она явно поощряет исследование пространства состояний, улучшая собираемые данные о переходах; во-вторых, это позволяет политике захватывать несколько режимов хороших политик, предотвращая преждевременную конвергенцию к плохим локальным оптимумам.
Эта мотивация и формулировка эмпирически подтверждены в статьях Soft Actor-Critic; Во многих задачах управления MuJoCo Soft Actor-Critic превосходит другие современные алгоритмы:
Предыстория: итерация общей политики
В классической теории MDP стандартным подходом к поиску оптимальной политики, которая максимизирует ожидаемое накопленное дисконтированное вознаграждение для каждого состояния, является итерация политики. Итерация политики - это двухэтапная итерационная схема, чередующаяся между оценкой политики и ее улучшением.
На этапе оценки политики мы хотим найти точную функцию ценности для нашей текущей политики. Для этого мы неоднократно применяем оператор Беллмана, определенный ниже:
Шаг улучшения политики осуществляется путем многократного применения оператора оптимальности Беллмана:
которая, учитывая функцию начального значения V
, гарантированно сходится к функции истинного (оптимального) значения V*
. В частности, свойства сходимости оператора Беллмана и оператора оптимальности связаны с тем, что они оба являются сжимающими отображениями. Кроме того, теоретически оптимальная политика pi*
может быть построена на основе функции оптимального значения; учитывая начальную политику pi
, мы минимизируем некоторую метрику между текущей политикой и производной политикой обновления.
Таким образом, чередуя оценку политики и ее улучшение, мы можем найти точное решение для марковских процессов принятия решений в табличном случае (то есть в конечном пространстве состояний и действий и отсутствии аппроксимации функций).
Итерация мягкой политики
В статье Хаарноя представил Soft Policy Iteration, расширение общей итерации политики с энтропией политики в качестве дополнительного условия вознаграждения. В частности, агент стремится максимизировать как ожидаемое вознаграждение среды, так и энтропию политики.
С этой целью в исходный оператор Беллмана добавлен член регуляризатора энтропии:
Как и в нерегуляризованном случае, повторное применение регуляризованного по энтропии оператора Беллмана к любой исходной Q-функции гарантированно сходится к оптимальной «мягкой» Q-функции.
На этапе улучшения политики мы обновляем распределение политики в сторону распределения softmax для текущей функции Q (чтобы понять, почему это происходит, ознакомьтесь с этой статьей Хаарноя и др., (2017)). В частности, мы хотим минимизировать расстояние (расхождение) между двумя распределениями. Это достигается за счет минимизации расхождения Кульбака-Лейблера (KL) между двумя распределениями:
Эта схема обновления гарантирует монотонное улучшение политики в табличном случае (то есть, когда пространства состояний и действий конечны и не используется аппроксимация функций), как показано в Haarnoja et al. (2018). Позже Geist et al. (2019) обобщают эти свойства на любую формулировку регуляризатора.
Мягкий актер-критик (Предупреждение: плотно!)
Для сложных обучающих областей с многомерными и / или непрерывными пространствами состояний и действий в большинстве случаев невозможно найти точные решения для MDP. Таким образом, мы должны использовать приближение функций (то есть нейронные сети), чтобы найти практическое приближение к итерации мягкой политики.
С этой целью Haarnoja et al. моделирует мягкую Q-функцию как выразительную нейронную сеть, а политику как гауссово распределение по пространству действий со средним значением и ковариацией, заданными как выходы нейронной сети с текущим состоянием в качестве входных данных. Вот как это выглядит в коде для процесса реализации:
Кроме того, Soft Actor-Critic - это алгоритм обучения вне политики, что означает, что мы можем обновлять параметры Q-сети и политики, используя данные опыта, собранные из политики, отличной от текущей; для каждого развертывания актера мы сохраняем все данные перехода в буфере воспроизведения (обозначенном как D в приведенных ниже уравнениях).
Параметры Q-функции можно оптимизировать на каждом шаге обновления, используя градиент среднеквадратичного убытка между прогнозируемым значением действия и целевым значением действия q_t
:
Здесь термин alpha
представляет «температуру энтропии», то есть насколько мы взвешиваем «случайность» нашей политики по сравнению с вознаграждением за окружающую среду.
В коде мы можем реализовать это как:
Теперь перейдем к этапу улучшения политики: на практике Soft Actor-Critic использует несколько модификаций из итерации мягкой политики. Используя тот факт, что Q-параметры дифференцируемы, Хаарноя и др. использует «трюк с повторной параметризацией» выходных данных политики для получения оценки низкой дисперсии; в частности, мы представляем действия как гиперболический тангенс (tanh), применяемый к z-значениям, выбранным из среднего и ковариационного значения, выведенного нейронной сетью политики.
Кроме того, чтобы обратиться к границам действия в нашем неограниченном гауссовском распределении, мы должны изменить вычисление log(pi)
следующим образом:
Здесь log(mu)
представляет кумулятивную функцию распределения (CDF), вычисленную из среднего значения и ковариации из нейронной сети политики. Возможно, это яснее в коде:
Затем параметр политики может быть оптимизирован напрямую путем минимизации упрощенной формы отклонения KL от итерации мягкой политики; берем стохастический градиент целевой функции:
Эта упрощенная форма возникает из-за игнорирования знаменателя распределения softmax Q, поскольку он не влияет на градиент целевой функции.
В коде мы можем реализовать это как:
Необязательно: автоматическая регулировка нашей энтропийной температуры alpha
В первой версии SAC (2018) используется фиксированная энтропийная температура alpha
. Хотя производительность оригинального SAC была впечатляющей, alpha
оказался очень чувствительным гиперпараметром. Чтобы исправить это, вторая версия SAC (2019) использует alpha
как параметр с возможностью обновления. В частности, мы обновляем, беря градиент целевой функции ниже:
где H_bar представляет желаемую минимальную энтропию, обычно равную нулевому вектору. Рекомендуется использовать SAC (2019) с этим регулируемым alpha
, поскольку он улучшает производительность и стабильность алгоритма.
В коде:
На этом обзор алгоритма Soft Actor-Critic завершен!
Полная реализация
Чтобы мой пост был как можно более кратким, я включил только релевантные конкретные фрагменты реализации; чтобы увидеть полную реализацию, загляните в мой репозиторий GitHub: