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

Введение

Прежде всего, что такое алгоритм актер-критик? Согласно статье NIPS Алгоритмы критического и действующего лица (Конда и др., 1999), подавляющее большинство алгоритмов обучения с подкреплением в то время подпадали под две категории: методы только для участников или методы только для критиков.

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

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

Затем в статье представлен новый вид метода, алгоритмы «актер-критик», который сочетает в себе сильные стороны методов, ориентированных только на актеров и только на критиков. Критик будет использовать ту же структуру аппроксимации, чтобы узнать функцию значения, которая используется для обновления параметров политики субъекта.

Теперь давайте сначала рассмотрим REINFORCE с базовым алгоритмом в качестве примера. Хотя Саттон и Барто не считают этого актера-критика, поскольку функция ценности используется в качестве основы, а не критики, другие источники, такие как лекции Дэвида Сильвера и статья о A3C, действительно считают это своего рода актер-критиком. Тем не менее, мы все равно будем использовать его в качестве примера, поскольку мы уже видели этот алгоритм ранее в моем предыдущем посте.

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

Критик

Функция Critic, которая является функцией значения, служит базой для обновления параметров Актера. Обновление работает с использованием функции потерь для вычисления разницы между целевым значением и приблизительным значением. Цель состоит в том, чтобы свести к минимуму эту потерю, чтобы приблизительное значение приблизилось к целевому, которое является оптимальным значением.

В этом примере функция значения представляет собой функцию значения состояния, которая вычисляет потери, используя разницу между Gₜ и v (Sₜ, w) для обновления своих параметров. Мы можем обобщить уравнение потерь δ на J (w), показанное ниже:

Затем мы можем избавиться от ожидания, поскольку мы делаем выборку градиента. Здесь мы применяем цепное правило один раз, чтобы избавиться от экспоненты. Множитель поглощается скоростью обучения.

Теперь у нас есть уравнение обновления, аналогичное тому, которое используется в REINFORCE Sutton & Barto с базовой линией! Обратите внимание, что при реализации обновления для Critic мы можем использовать сеть для прямого обратного распространения функции потерь MSE, поэтому нет необходимости вручную выполнять цепное правило.

Аппроксимация функции цены

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

Это можно сделать с помощью метода Монте-Карло, который используется в REINFORCE с базовой линией. Мы производим выборку всей траектории, накапливаем потери на каждом шаге, а затем обновляем параметры. Целевое значение будет Gₜ, которое представляет собой совокупное дисконтированное вознаграждение на временном шаге t. Мы можем использовать точные кумулятивные награды, которые являются наградами от временного шага t до конца, поскольку мы заранее выбрали всю траекторию.

Другой способ - это TD (0), форма временной разницы, которую использует DQN. Вы можете увидеть, как я реализую DQN в играх Atari в другом посте. При выборке траектории мы применяем обновления на каждом временном шаге, также называемом онлайн-обучением, когда параметры обновляются во время воспроизведения эпизода. Здесь целевым значением будет Rₜ₊₁ + γ v (Sₜ₊₁, w), где мы оцениваем целевое значение, используя другую оценку, v (Sₜ₊₁, w), практику, называемую бутстрэппингом. В отличие от MC, мы используем ориентировочную цель, поскольку смотрим вперед только на один шаг, поэтому мы не знаем точных будущих наград.

Перспективный TD (λ)

Последний метод, который мы можем использовать, - это TD (λ), который является посредником между MC и TD (0). В MC мы можем получить точное целевое значение на временном шаге t, поскольку мы можем «смотреть» от временного шага t до конца эпизода. В TD (0) мы оцениваем целевое значение, поскольку мы можем только «смотреть» от временного шага t к временному шагу t + 1. В TD (λ) мы можем обобщить это, заглянув на N шагов вперед. Целевое значение будет:

и уравнение обновления будет выглядеть так:

Есть несколько способов, которыми мы можем воспользоваться, заглядывая на N шагов вперед. Мы можем комбинировать различные N, например, взятие среднего на 1 шаг вперед и 2 шага вперед. Итак, вопрос в том, на сколько шагов вперед мы должны смотреть? Ответ не ограничен только одним N, мы можем усреднить N-шаговую отдачу по всем N, чтобы получить более надежное целевое значение. Вместо обычного усреднения N-шаговых возвратов мы присваиваем вес каждому N-шагу и суммируем все взвешенные N-шаговые возвраты. Как теперь назначить веса?

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

Вес рассчитывается по формуле (1 - λ) λ ^ (n-1), где n - количество шагов, на которые мы рассчитываем, а λ - постоянная из [0, 1]. Каждый вес умножается на λ ^ (n-1), так что в сумме веса будут равны 1. Мы можем заметить, что изменение λ определяет, насколько быстро утрачиваются веса и сколько разных N у нас есть. Целевое значение будет:

Этот способ просмотра вперед N шагов и получения средних значений N шагов называется TD прямого обзора (λ). Мы можем обновить параметры функции значения, производя выборку по всей траектории, а затем периодически применяя автономные обновления, аналогично методу Монте-Карло.

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

Здесь мы используем тот же самый спад от временного шага t до временного шага T - 1. Затем мы используем другой термин для терминального состояния, который учитывает веса от T-1 до бесконечности. Это гарантирует, что наши веса в сумме будут равны 1. Вот диаграмма, которая иллюстрирует две части этого уравнения:

Мы можем видеть, что каждый вес соответствует части площади под кривой, а окончательный вес для конечного состояния составляет остальную часть кривой. Вот уравнение обновления для TD (λ) прямого обзора:

Мы также можем видеть, как MC и TD (0) исходят из TD (λ) прямого взгляда. Когда λ = 1, вес каждого N-шага становится равным 0, за исключением последнего, где N-шаг - длина эпизода. Когда λ = 0, первый вес равен 1, а все остальные веса становятся 0, поэтому мы заглядываем вперед только на один шаг.

Обратный взгляд TD (λ)

Другой способ присвоения весов - использование трассировок правомочности, называемых TD обратного обзора (λ). Концепция следа за правомерностью проста. Я приведу сценарий, описанный в лекции Дэвида Сильвера UCL 4. Предположим, вы - мышь. Трижды звонит колокольчик, загорается лампочка, потом ты шокируешься.

Итак, в чем причина того, что вы были потрясены из-за звонка или света? Большинство людей сказали бы, что это произошло из-за света, потому что именно это произошло прямо перед тем, как вы были потрясены. Кто-то может подумать, что это произошло из-за колокола, поскольку колокол прозвенел три раза, а свет погас один раз. Мы можем думать об этих двух рассуждениях как о частотной эвристике, где мы возлагаем вину на звонок, поскольку это происходило чаще, и как об эвристике Recency, где мы относим вину к свету, поскольку это произошло совсем недавно. Трассировка правомочности объединяет две эвристики для присвоения веса каждому N-шагу.

Мы можем определить трассу правомочности как вектор z и инициализировать трассу как 0. Мы обновляем трассу правомочности, добавляя самый последний градиент и дисконтируя текущую трассу, используя коэффициент дисконтирования естественного временного шага γ и константу λ. Константа λ ∈ [0, 1] здесь определяет, насколько вы цените частоту по сравнению с давностью. Высокое значение λ означало бы, что кривая приемлемости не распадается так быстро, поэтому мы больше ценим частоту, поскольку, если такое же состояние появится снова, тогда кривая снова будет скорректирована в направлении ∇v (Sₜ, w). Низкое значение λ будет означать, что мы больше ценим новизну, так как большая часть трассировки правомочности будет определяться более поздним ∇ (Sₜ, w). Эта трасса соответствия z будет служить весовым коэффициентом для каждого N-шага.

Так как же использовать этот z для выполнения TD (λ)? Вот псевдокод от Sutton & Barto о том, как мы можем использовать эту трассировку соответствия критериям для обновления нашей функции значения.

В отличие от TD (λ) прямого обзора, мы можем использовать трассировки соответствия для выполнения онлайн-обновлений, где мы обновляем функцию значения на каждом временном шаге. Сначала мы инициализируем трассу соответствия z для текущего эпизода. Затем мы обновляем график соответствия критериям, используя вышеупомянутое уравнение обновления. Как и в случае с TD (0), мы рассчитываем убыток, используя целевое значение, если смотреть на шаг вперед. Затем мы обновляем функцию значения, обновляя параметры w пропорционально трассе приемлемости.

Мы можем наблюдать некоторые параллели с TD (λ) прямого взгляда. В TD (λ) прямого обзора мы усредняем все N шагов, присваивая убывающий вес каждому N шагу. Мы можем обновлять только в конце эпизода, поскольку нам нужно «смотреть вперед» с каждого временного шага t, чтобы вычислить целевое значение N-шага. В обратном просмотре TD (λ) кажется, что мы смотрим только на один шаг вперед, чтобы получить целевое значение. Однако это не так. Трасса соответствия - это совокупный вес, который обновлялся на каждом временном шаге и содержит информацию из каждого обнаруженного состояния. Когда мы обновляем функцию значения пропорционально трассе, мы, по сути, смотрим на N-шаг назад от временного шага t.

Мы также можем видеть, как MC и TD (0) происходят из TD (λ) с обратным взглядом. Когда λ = 1, трасса соответствия критериям z обесценивается только коэффициентом дисконтирования временного шага γ, поэтому кривая смотрит назад от временного шага t до начала эпизода, так же, как Монте-Карло. Когда λ = 0, трасса приемлемости z равна самому последнему градиенту функции значения, поэтому трасса смотрит только на один шаг назад. Если мы просуммируем все обновления в эпизоде ​​с λ = 0, результат будет эквивалентен всем обновлениям метода TD (0).

Резюме

В этом посте мы подробно рассмотрели различные способы обновления функции значения, алгоритма «Критик-критик». Способ обновления функции значения - это обновление параметров, чтобы минимизировать потерю между истинным целевым значением и приблизительным значением. Мы рассмотрели три метода обновления функции ценности на практике: Монте-Карло, TD (0) и TD (λ), а также то, как они выбирают свои целевые значения. Монте-Карло использует Gₜ в качестве точного целевого значения, заглядывая вперед до конца эпизода, TD (0) использует Rₜ + V (Sₜ₊₁, w) в качестве расчетного целевого значения при просмотре вперед на один шаг, а TD (λ) строит оценочное целевое значение, глядя на N шагов вперед. Мы также создали два типа механизмов обновления: офлайн и онлайн. MC и TD (λ) прямого обзора обновляются в конце эпизода, в то время как TD (0) и TD (λ) заднего обзора обновляются на каждом этапе эпизода.

В целом, это очень ценный опыт для меня, когда я более подробно рассказываю о приближении функций стоимости. Пока я изучал Q-обучение и внедрял DQN, я действительно не понимал концепций, лежащих в основе аппроксимации функций ценности, и понимал только уравнение Беллмана, которое используется для обновления параметров Q-функции. Затем я углубился в Градиенты Политики и узнал, как обновить параметры политики для Актера. Теперь, с более глубоким пониманием того, как обновлять параметры функции значения для Critic, я буду изучать и реализовывать алгоритмы Actor-Critic в следующих статьях.

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