Мысли и теория

Глубокое обучение с подкреплением: от SARSA до DDPG и не только

Собираем основные ингредиенты, которые делают RL успешным

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

Всего пару лет назад алгоритм AlphaGo DeepMind победил чемпиона мира по го Ли Седола. Этот впечатляющий подвиг стал возможен с помощью обучения с подкреплением, но, несомненно, не произошел в одночасье. Исследования этого амбициозного проекта начались в начале 2000-х годов. И с тех пор эта область сильно продвинулась вперед. В этой статье рассматривается часть перехода к современным подходам.

Основы

Прежде чем мы начнем, мы должны сузить значение обучения с подкреплением: цель обучения с подкреплением - действовать как можно лучше. Это определение является упрощенной версией

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

Чтобы это произошло, у нас есть несколько компонентов, которые работают вместе, как видно на этом изображении:

Агент взаимодействует с окружающей средой, которая меняет свое состояние и дает вознаграждение за действие. Затем начинается еще один раунд. Математически этот цикл основан на Марковском процессе принятия решений (MDP). Такой MDP состоит из пяти компонентов: S, A, R, P и p₀.

S - это пространство состояний, которое содержит все возможные состояния s, в которых может находиться среда. Например, если бы мы моделировали автомобиль, он мог бы иметь следующие состояния: движение вперед, движение назад, поворот, торможение и так далее.

Второй компонент, A, - это пространство действий, которое определяет все действия a, которые может выполнять агент. Для настройки автомобиля это может быть поворот колеса, ускорение, торможение. Такие действия приводят к новым состояниям.

Третий компонент, R, - это функция вознаграждения. Эта функция отвечает за вознаграждение агента на основе его действия и результирующего состояния. Например, если машина удачно остановилась на светофоре, агент получит положительное вознаграждение. Однако, если бы это не было остановлено, агент получил бы отрицательное вознаграждение.

Четвертый компонент, P, представляет собой функцию вероятности перехода. Часто может случиться так, что действие не обязательно приведет к желаемому состоянию. Поэтому это свойство моделируется как функция вероятности. Например, он может сказать: «С вероятностью 90% мы попадаем в желаемое состояние, но с 10% может произойти что-то другое».

Наконец, у нас есть p₀ - набор начальных состояний. Каждый раз, когда агент обучается, он начинается в одном из этих состояний.

Теперь, когда мы рассмотрели составляющие настройки RL, как мы можем научить агента обучаться желаемому поведению? Это делается с помощью политики π, о которой я вкратце упоминал ранее. Формально политика отображает из пространства состояний S вероятность всех возможных действий. Звучит сложно? Подумайте вот о чем: вы стоите на обочине и хотите перейти дорогу. Эта ситуация - ваше начальное состояние. Теперь в политике будут перечислены все возможные действия: смотреть налево, смотреть направо, бегать вперед, ждать и т. Д. Все эти варианты имеют вероятность быть выбранными. Например, вы можете посмотреть влево с вероятностью 20%, а с вероятностью 50% вы можете выбрать бег.

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

Но как мы узнаем, хорошее ли состояние, в котором мы находимся? Что касается действий, которые мы можем предпринять, мы можем спросить: как мы узнаем, насколько они хороши? Эта оценка достигается с помощью функций ценности. У нас их два, одно для состояний и одно для действий.

Первая функция называется функцией значения состояния и обозначается аббревиатурой V. Для каждого состояния она «знает», насколько хорошо это состояние. Хорошее состояние определяется наградой, которую мы ожидаем получить, начиная с этого состояния. Например, поул в гонках с большей вероятностью выиграет гонку; этот водитель получает положительное вознаграждение. Этот факт влияет на ценность поул-позиции: по мере того, как все больше и больше людей начинают здесь и выигрывают игру, количество положительных наград, вытекающих из этого состояния, увеличивается. В свою очередь, значение поул-позиции увеличивается.

Вторая функция - это функция значения действия и сокращенно Q. Для всех действий, которые мы можем выполнить в данном состоянии, она «знает», насколько они хороши. Эти знания получаются аналогично тому, как описано выше: Действия, которые приводят к хорошей награде, имеют более высокую ценность, чем действия, которые приводят к отрицательной награде.

SARSA

Теперь, когда мы рассмотрели основы, мы можем изучить классический алгоритм RL, называемый SARSA [1]. Название представляет собой аббревиатуру от State Action Reward State Action, которая точно отражает функционирование.

Сначала мы начинаем с состояния (S), выполняем действие (A) и получаем вознаграждение (R). Теперь мы находимся в состоянии преемника (S) и выбираем другое действие (A). Мы делаем это, чтобы обновить нашу Q-функцию. Как упоминалось ранее, ценность действия - это общая награда, которую мы ожидаем, когда начинаем в состоянии и выбираем это действие. То же свойство сохраняется для следующего состояния, состояния «следующий-следующий» и для состояния «следующий-следующий-следующий». Мы можем выразить это с помощью правила обновления нашей функции значения действия:

Q(s,a) ← Q(s, a) + α(r + γ Q(s’, a’) — Q(s, a))

Что там написано? Новое значение для нашей пары состояние-действие - это старое значение плюс, и это часть в скобках, разница с тем, что мы получаем, идя отсюда: r + γ Q (s ’, a’). Таким образом, со временем наша Q-функция приближается к полученному нами вознаграждению, которое моделируется этим правилом обновления.

Теперь, когда у нас есть Q-функция (или Q-значения, как их иногда называют), что мы можем с ней сделать? Сначала эти значения хранятся в таблице. Каждый раз, когда наша политика должна выбрать действие, она проверяет, в каком состоянии оно находится, а затем просматривает все возможные действия:

Из всех этих действий выбирается то, что имеет наибольшее значение. Это действие приводит к новому состоянию, в котором снова выбирается наиболее ценное действие. Во время обучения Q-значения обновляются в соответствии с ранее введенным правилом обновления. После его завершения мы нашли подходящую подходящую политику и готовы использовать агент в нашей среде.

Но есть по крайней мере один момент, когда мы можем улучшить алгоритм. Вот где в игру вступает Q-Learning.

Q-Learning

Алгоритм Q-Learning [2,3] можно резюмировать как SARSA вне политики. Чтобы объяснить это, давайте еще раз взглянем на правило обновления SARSA:

Q(s,a) ← Q(s, a) + α(r + γ Q(s’, a’) — Q(s, a))

Наша политика π выбирает начальное действие, которое является частью Q (s, a). Затем мы используем ту же политику для выбора последующего действия, которое является частью, которая говорит Q (s ’, a’). Процесс использования одной и той же политики для определения обоих действий обозначается ключевым словом on-policy. Агент узнает значение Q на основе действия, выбранного текущей политикой.

Напротив, в алгоритмах вне политики у нас есть более одной политики. Это можно увидеть в правиле обновления Q-Learning:

Q (s, a) ← Q (s, a) + α (r + γ maxₐ ’(s’, a ’) - Q (s, a))

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

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

Пока что нейронные сети нам не потребовались. Но табличные методы плохо масштабируются для больших пространств состояний и действий: во-первых, они потребляют огромную память. Во-вторых, мы можем даже не посетить все состояния или действия во время обучения, поэтому некоторые записи останутся неинициализированными. В-третьих, время поиска недопустимо. Однако в качестве первой меры мы можем использовать нейронные сети для замены Q-таблиц.

Глубокое Q-обучение

Было показано, что нейронные сети хорошо обобщают. Мы также можем использовать их способность изучать особенности из данных для обучения с подкреплением. В глубоком обучении с подкреплением мы аппроксимируем наши функции, такие как Q, нейронными сетями [4]. Чтобы выделить эту модификацию, функции Q или V часто помечаются θ: Q_θ и V_θ. Существуют методы, выходящие за рамки нейронных сетей, но они не входят в объем данной статьи.

В стандартном Q-обучении правило обновления помогает нам найти оптимальные значения Q. Оптимальный означает, что они приводят к наивысшему вознаграждению; мы можем использовать их для выбора оптимального действия (того, которое имеет наивысшее значение Q в данном состоянии). И, используя нейронные сети, мы напрямую аппроксимируем эту оптимальную функцию Q или V. Мы учимся на небольшом количестве обучающих данных, а затем можем обобщить их на новые ситуации.

В алгоритме глубокого Q-обучения мы используем два метода: воспроизведение опыта и целевые сети.

Первая модификация сохраняет старые переходы (которые представляют собой переходы из одного состояния в другое путем выбора действия) в буфере воспроизведения. Во время обучения мы производим выборку из этого буфера. Этот метод увеличивает эффективность и делает распределение данных более стационарным. Как так? А теперь подумайте, что бы произошло, если бы у нас было несколько действий, и на каждом этапе обучения мы выбирали бы другое. Мы всегда прыгали между возможностями. С помощью буфера воспроизведения мы можем обнаруживать тенденции в распределении, делая выбор действий более стационарным.

Вторая модификация, целевые сети, используется при вычислении наших целей. Как правило, наша цель - максимизировать ожидаемое вознаграждение. Проблема в том, как мы узнаем, что наша награда уже не самая лучшая из возможных? Целевые сети помогают нам решить этот вопрос. Мы используем сеть из более старого шага обновления и рассматриваем ее Q-значения как целевые. Это может показаться трудным, поэтому давайте посмотрим на правило обновления с целевыми сетями:

Q_θ (s, a) ← Q_θ (s, a) + α ((r + γ maxₐ ’Qₜₐᵣ (s’, a ’)) - Q_θ (s, a))

Разница заключается в вычислении цели обновления. Минимизируя разницу между нашим текущим значением Q_θ (s, a) и Qₜₐᵣ (s ’, a’), мы приближаемся к цели, обозначенной здесь сокращенно как «tar». И эта цель - ценность целевой сети.

Теперь, если бы мы не использовали такую ​​целевую сеть, а только текущую сеть Q_θ, наша цель постоянно изменялась бы: с каждым обновлением параметра сети мы получали бы разные Q-значения. Вот почему мы используем старые сети (то есть из нескольких шагов обновления до нашей текущей сети), которые служат фиксированной целью. Его параметры обновляются медленнее, делая цель более неподвижной. В конце концов, мы уменьшаем риск того, что наша основная сеть может в конечном итоге преследовать собственный хвост.

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

Две представленные модификации, использующие буфер воспроизведения и целевые сети, использовались, чтобы помочь агентам RL играть в игры Atari, иногда даже на сверхчеловеческом уровне [5].

Глубокий детерминированный градиент политики

До сих пор мы рассматривали только дискретные пространства действий. В дискретных пространствах действий у нас есть фиксированное количество действий только с одним уровнем детализации. Напротив, подумайте об углу между дверью и стеной. Если у нас есть, скажем, две позиции, которые он может занять, у нас есть дискретное пространство. Но мы можем разместить дверь в любом произвольном положении: широко открытое, закрытое, открытое на 45 градусов, 30 градусов, 30,1 градуса, 30,01 градуса и так далее. Это пространство непрерывно и сложно охватить как табличными методами, так и подходом Deep Q-Learning.

Проблема непрерывных действий - это шаг обновления Q-функции, который у нас есть:

Q_θ (s, a) ← Q_θ (s, a) + α ((r + γ maxₐ ’Qₜₐᵣ (s’, a ’)) - Q_θ (s, a))

Та часть, где написано maxₐ ’Qₜₐᵣ (s’, a ’), является проблемой. В дискретных пространствах действий легко найти действие, которое приводит к наивысшей награде. Однако в пространствах непрерывного действия с произвольными мелкими действиями это очень дорого, если не невозможно.

Наивным решением было бы дискретизировать это пространство. Но тогда проблема в том, как дискретизировать. Однако мы можем полностью пропустить эту проблему и изменить алгоритм глубокого Q-обучения для поддержки непрерывных действий. Это приводит к алгоритму глубокого детерминированного градиента политики (DDPG) [6,7], который, по сути, является глубоким Q-обучением для непрерывных действий. Он также использует буфер воспроизведения и целевые сети, но адаптирует максимальную операцию.

Вместо «ручного» поиска лучшей пары состояние-действие (лучшего Q-значения) мы вводим другую нейронную сеть. Эта нейронная сеть учится приближать максимайзер. Затем, каждый раз, когда мы запрашиваем его с состоянием, он возвращает наиболее соответствующее действие, а это именно то, что нам нужно.

Новая сеть, которая заменяет максимайзер, затем используется при вычислении целей. Таким образом, предыдущее уравнение можно переписать как

Q_θ(s, a) ← Q_θ(s, a) + α((r + γ Qₜₐᵣ(s’, μₜₐᵣ(s’))) — Q_θ(s,a))

Как я уже упоминал, мы используем сеть μₜₐᵣ для определения наилучшего действия. Как и раньше, мы используем более старую версию сети, отсюда и «tar». Несмотря на то, что и μₜₐᵣ, и Qₜₐᵣ обновляются на каждом шаге, они никогда не будут обновлены до самых последних параметров. Вместо этого они обычно сохраняют 90% значений своих параметров, а оставшиеся 10% поступают из текущей сети. Таким образом, целевые сети не слишком старые и не слишком современные.

В алгоритм DDPG с двойной задержкой [8] внесены три модификации для повышения производительности версии по умолчанию. Во-первых, TD3, как его также сокращают, изучает две Q-функции и использует меньшее значение для построения целей. Кроме того, политика (отвечающая за выбор начальных действий) обновляется реже, и добавляется шум для сглаживания Q-функции.

Энтропийно-регуляризованное обучение с подкреплением

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

Подход к обучению с подкреплением, регулируемым энтропией, является одним из способов решения этой проблемы: мы обучаем политику, чтобы максимизировать компромисс, как упоминалось выше. Для этого мы используем понятие энтропии. Проще говоря, энтропия дает информацию о «хаосе» распределения. Чем выше хаос («чем неравномернее распределение»), тем ниже значение энтропии. Таким образом, равномерная вероятность, когда все значения имеют одинаковые шансы быть нарисованными, дает максимальное значение энтропии.

Мы используем этот факт, добавляя термин энтропии к нашим функциям значений. Их подробное объяснение выходит за рамки этого поста, но суть такова: дополнительный термин предписывает политику поддерживать баланс между высокой наградой (исследование) и выбором из множества действий (исследование).

В алгоритме Soft Actor-Critic [9, 10] эта концепция, среди прочего, используется для обучения робота ходить. Хотя робота обучали только на ровной местности, полученная в результате политика оказалась достаточно надежной, чтобы работать в средах, невидимых во время обучения.

Библиотеки обучения с подкреплением

Все вышеперечисленные алгоритмы уже реализованы в различных пакетах Python. Фреймворки OpenAI Gym и Safety Gym предоставляют код для создания сред, в которых обучаются агенты. Исследователи из DeepMind предоставляют пакет Control Suite, который используется для моделирования RL на основе физики.

Для построения алгоритмов можно выбирать из множества вариантов. Библиотека Stable Baselines 3 реализована в PyTorch и предоставляет инструмент для сравнения алгоритмов и создания новых. Точно так же библиотека ACME предоставляет агентов RL и строительные блоки и достаточно гибка, чтобы проводить собственные исследования. В качестве третьей альтернативы можно рассмотреть фреймворк Google Dopamine, который ориентирован на быстрое создание прототипов для умозрительных исследований. Он поддерживает JAX и TensorFlow.

Резюме

В последние десятилетия в области обучения с подкреплением возникло множество критических идей. Основа была заложена с идеей обучения функциям, которые позволяют количественно оценить преимущества пребывания в конкретной ситуации. Затем исследователи предложили использовать разные политики для эффективного изучения окружающей среды. Значительный шаг вперед был сделан, когда функции были изучены с помощью нейронных сетей, которые представили много новых возможностей алгоритмического проектирования. Со временем были включены и другие идеи, такие как постепенное обновление дополнительных сетей, которые служат в качестве целей обучения. Однако разработка отнюдь не завершена. Еще предстоит преодолеть множество проблем, таких как преодоление ограничений, преодоление разрыва между обучением и реальной средой или объяснимость.

Литература

[1] Гэвин Раммери и Махесан Ниранджан, Q-обучение онлайн с использованием систем коннекционизма, 1994, Citeseer

[2] C.J.C.H. Уоткинс, Учимся на отсроченных вознаграждениях, докторская диссертация, 1989, Королевский колледж Кембриджа.

[3] C.J.C.H. Уоткинс и Питер Даян, Q-обучение, 1992, Машинное обучение 8

[4] Курт Хорник, Аппроксимационные возможности многослойных сетей прямого распространения, 1991, Нейронные сети 4.

[5] Мних и др., Игра в Atari с глубоким обучением с подкреплением, 2013, arXiv

[6] Сильвер и др., Детерминированные алгоритмы градиента политики, 2014 г., Международная конференция по машинному обучению.

[7] Lillicrap et al., Непрерывный контроль с глубоким обучением с подкреплением, 2015, arXiv

[8] Стивен Данква и Венфенг Чжэн, Двойной отложенный DDPG: метод глубокого обучения с подкреплением для моделирования непрерывного движения интеллектуального робота-агента, 2019, ACM

[9] Хаарноя и др., Мягкий актер-критик: внеполитическое обучение с максимальной энтропией с глубоким подкреплением со стохастическим актором, 2018, ICML

[10] Хаарноя и др., Алгоритмы и приложения мягкого актера-критика, 2018, arXiv.

[11] Хаарноя и др., Обучение ходьбе с помощью глубокого обучения с подкреплением, 2018, arXiv