Лекция 6:

Градиент по Стратегии

Артём Сорокин | 07 Декабря

Целевая Функция в RL

\theta^{*} = \text{argmax}_{\theta} \, \mathbb{E}_{\tau \sim p_{\theta}(\tau)} \biggl[ \sum\limits_t \gamma^{t} r_t \biggr]

Что мы хотим получить при помощи обучения с подкреплением:

where:

  • \(\theta\) - параметры стратегии
  • \(p_{\theta}(\tau)\) - вероятностное распределение по траекториям в среде, которые генерирует стратегия  \(\pi_{\theta}\)
  • \([\sum_t \gamma^{t} r_t]\) - кумулятивная дисконтированная награда за эпизод / доход с первого шага.

 

 

Целевая Функция в RL

\theta^{*} = \text{argmax}_{\theta} \, \mathbb{E}_{\tau \sim p_{\theta}(\tau)} \biggl[ \sum\limits_t \gamma^{t} r_t \biggr]

Задача:

Мы бы хотели найти градиент нашей целевой функции по параметрам стратегии \(\pi_{\theta}\), которая генерирует траектории

\textcolor{blue}{r(\tau)}
\textcolor{red}{J(\theta)}
J(\theta) = \mathbb{E}_{\tau \sim p_{\theta}(\tau)} [ r(\tau) ] = \int p_{\theta}(\tau) r(\tau) d \tau

Целевая функция

кумулятивная награда за траекторию

Градиент по Стретегии

Чтобы максимизировать средний ожидаемый доход:

Найдем:

\nabla_{\theta} J(\theta) = \int \nabla_{\theta} p_{\theta}(\tau) r(\tau) d \tau
J(\theta) = \mathbb{E}_{\tau \sim p_{\theta}(\tau)} [ r(\tau) ] = \int p_{\theta}(\tau) r(\tau) d \tau

Log-derivative trick:

\nabla_{\theta} p_{\theta}(\tau) = p_{\theta}(\tau) \frac{\nabla_{\theta} p_{\theta}(\tau)}{p_{\theta}(\tau)} = p_{\theta}(\tau) \nabla_{\theta}\,log\,p_{\theta}(\tau)
= \int \textcolor{blue}{p_{\theta}(\tau) \nabla_{\theta}\,log\,p_{\theta}(\tau)} r(\tau) d \tau = \mathbb{E}_{\tau \sim p_{\theta}(\tau)} \biggl[ \nabla_{\theta}\,log\,p_{\theta}(\tau) r(\tau) \biggr]

Policy Gradients

Максимизируем средний ожидаемый доход:

Градиент по \(\theta\):

p_{\theta}(\tau) = p_{\theta}(s_0, a_0, ..., s_T, a_T) = p(s_0) \prod\limits_{t=0}^T \pi_{\theta}(a_t|s_t) p(s_{t+1}|a_t,s_t)
J(\theta) = \mathbb{E}_{\tau \sim p_{\theta}(\tau)} [ r(\tau) ]
\nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim p_{\theta}(\tau)} \biggl[ \nabla_{\theta}\,log\,p_{\theta}(\tau) r(\tau) \biggr]

Распишем \(p_{\theta}(\tau)\):

Возьмем логарифм:

log\, p_{\theta}(\tau) = log\, p(s_0) + \sum\limits_{t=0}^T [ log\, \pi_{\theta}(a_t|s_t) + log\, p(s_{t+1}|a_t,s_t) ]

Policy Gradients

J(\theta) = \mathbb{E}_{\tau \sim p_{\theta}(\tau)} [ r(\tau) ]
\nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim p_{\theta}(\tau)} \biggl[ \nabla_{\theta}\,log\,p_{\theta}(\tau) r(\tau) \biggr]
log\, p(s_0) + \sum\limits_{t=0}^T [ log\, \pi_{\theta}(a_t|s_t) + log\, p(s_{t+1}|a_t,s_t) ]
\textcolor{blue}{\nabla_{\theta}} \biggl[ log\, p(s_0) + \sum\limits_{t=0}^T [ log\, \pi_{\theta}(a_t|s_t) + log\, p(s_{t+1}|a_t,s_t) ] \biggr]
\textcolor{black}{\nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim p_{\theta}(\tau)} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_t|s_t) r(\tau) \biggr]}

Градиент по Стратегии:

Максимизируем средний ожидаемый доход:

Градиент по \(\theta\):

Оценка Градиента по Стратегии

Мы не знаем реального значения мат. ожидания здесь:

Как всегда можем оценить его используя сэмплирование:

\nabla_{\theta} J(\theta) = \textcolor{red}{\mathbb{E}_{\tau \sim p_{\theta}(\tau)}} \biggl[ \nabla_{\theta}\,log\,p_{\theta}(\tau) r(\tau) \biggr]
\nabla_{\theta} J(\theta) \approx \textcolor{blue}{\frac{1}{N} \sum\limits_{i=1}^{N}} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_{\textcolor{blue}{i},t}|s_{\textcolor{blue}{i},t}) r(\tau_{\textcolor{blue}{i}}) \biggr]
= \textcolor{blue}{\frac{1}{N} \sum\limits_{i=1}^{N}} \biggl[ \biggl( \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_{\textcolor{blue}{i},t}|s_{\textcolor{blue}{i},t}) \biggr) \biggl( \sum\limits_{t=0}^{T} r_{\textcolor{blue}{i},t} \biggr) \biggr]

Алгоритм REINFORCE

Оцениваем Градиент по стратегии:

Обновляем параметры стратегии:

\theta \leftarrow \theta + \alpha \nabla_{\theta} J(\theta)
\nabla_{\theta} J(\theta) \approx \textcolor{black}{\frac{1}{N} \sum\limits_{i=1}^{N}} \biggl[ \biggl( \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_{\textcolor{black}{i},t}|s_{\textcolor{black}{i},t}) \biggr) \biggl( \sum\limits_{t=0}^{T} r_{\textcolor{black}{i},t} \biggr) \biggr]

Псевдокод:

  1. Сэмплируем i эпизодов \(\{\tau^i\}\) стратегией \(\pi_{\theta}\)
  2. Оцениваем градиент по стратегии \(\pi_{\theta}\)  на эпизодах \(\{\tau^i\}\)
  3. Обновляем параметры стратегии
  4. Переходим к пункту 1

REINFORCE это on-policy алгоритм

REINFORCE оценивает градиент по стратегии (Policy Gradient):

\nabla_{\theta} J(\theta) = \mathbb{E}_{\textcolor{red}{\tau \sim p_{\theta}(\tau)}} \biggl[ \nabla_{\theta}\,log\,p_{\theta}(\tau) r(\tau) \biggr]

Для оценки градиента по параметрам \(\theta\) нужно собирать сэмплы при помощи  \(\pi_{\theta}\)!

 On-policy алгоритмы:

  • После обновления параметров сэмплы собранные со старыми параметрами становятся бесполезны.
  • Алгоритмы на основе PG требуют много сэмплов!

Псевдокод:

  1. Сэмплируем i эпизодов \(\{\tau^i\}\) стратегией \(\pi_{\theta}\)
  2. Оцениваем градиент по стратегии \(\pi_{\theta}\)  на эпизодах \(\{\tau^i\}\)
  3. Обновляем параметры стратегии
  4. Переходим к пункту 1

Основная идея Градиента по Стратегии

Представим, что учим стратегию по экспертным траекториями

при помощи обучения с учителем:

Используем Cross Entropy-loss для каждого перехода (\(s_t, a_t, s_{t+1}\)) в датасете :

H(\overline{y}, y_t) = \frac{1}{|C|} \sum\limits^{|C|}_{j} - y_j\,log\,\overline{y}_{j} = - log\, \overline{y}_{a_t} \textcolor{red}{\frac{1}{|C|}}

0.2

0.7

0.1

\pi_{\theta}(*|s_t) = \overline{y} =

1

0

0

y =

Ground Truth из датасета в \(s_t\):

Стратегия в \(s_t\):

= - log\, \pi_{\theta}(a_t|s_t) \, \textcolor{red}{c}

\(a_t\)

Градиент при клонировании поведения (Behaviour Clonning):

\nabla_{\theta} J_{BC}(\theta) = \mathbb{E}_{\textcolor{red}{\tau \sim D}} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\,\textcolor{red}{-} log\, \pi_{\theta}(a_{t}|s_{t})\,\textcolor{red}{c} \biggr]

Градиент по стратегии:

\nabla_{\theta} J(\theta) = \mathbb{E}_{\textcolor{blue}{\tau \sim p_{\theta}(\tau)}} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_{t}|s_{t}) \textcolor{blue}{r(\tau)} \biggr]

Цель минимизировать \(J_{BC}(\theta)\)

Цель максимизировать \(J(\theta)\)

\nabla_{\theta} J_{BC}(\theta) = \mathbb{E}_{\textcolor{red}{\tau \sim D}} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\, log\, \pi_{\theta}(a_{t}|s_{t})\,\textcolor{red}{c} \biggr]

Цель максимизировать \(-J_{BC}(\theta)\)

BC учит модель выбирать теже действия что и эксперт!

PG учит модель выбирать действия ведущие к высоким наградам за эпизод!

Основная идея Градиента по Стратегии

Основная Идея Градиента по Стратегии

Градиент по стратегии:

\nabla_{\theta} J(\theta) = \mathbb{E}_{\textcolor{blue}{\tau \sim p_{\theta}(\tau)}} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_{t}|s_{t}) \textcolor{blue}{r(\tau)} \biggr]

PG учит стратегию выбирать действия ведущие к высокому доходу за эпизод!

Проблемы Градиенты по Стратегии

Проблема: высокая дисперсия!

\nabla_{\theta} J(\theta) = \mathbb{E}_{\textcolor{blue}{\tau \sim p_{\theta}(\tau)}} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_{t}|s_{t}) \textcolor{blue}{r(\tau)} \biggr]
\tau
\pi(a)
p_{\theta}(\tau)
\tau
\textcolor{red}{r(\tau)}
p_{\theta}(\tau)
\textcolor{red}{r(\tau)}

Уменьшаем Дисперсию: Причинность

\nabla_{\theta} J(\theta) \approx \textcolor{black}{\frac{1}{N} \sum\limits_{i=1}^{N}} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_{i,t}|s_{i,t}) \textcolor{red}{\biggl( \sum\limits_{t'=0}^{T} \gamma^{t'} r_{i,t'} \biggr)} \biggr]

выглядит подозрительно!

Принцип причинности: действие на шаге \(t\) не может повлиять на награду за шаг \(t'\) если \(t' < t\)

\nabla_{\theta} J(\theta) \approx \textcolor{black}{\frac{1}{N} \sum\limits_{i=1}^{N}} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_{i,t}|s_{i,t}) \textcolor{red}{\biggl( \sum\limits_{t'=0}^{T} \gamma^{t'} r_{i,t'} \biggr)} \biggr]

выглядит подозрительно!

\nabla_{\theta} J(\theta) \approx \textcolor{black}{\frac{1}{N} \sum\limits_{i=1}^{N}} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_{\textcolor{black}{i},t}|s_{\textcolor{black}{i},t}) \biggl( \textcolor{blue}{\sum\limits_{t'=t}^{T}} \gamma^{t'} r_{i,t'} \biggr) \biggr]

Последние действия становятся менее значимыми!

\nabla_{\theta} J(\theta) \approx \textcolor{black}{\frac{1}{N} \sum\limits_{i=1}^{N}} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_{\textcolor{black}{i},t}|s_{\textcolor{black}{i},t}) \biggl(\textcolor{red}{\gamma^t} \textcolor{blue}{\sum\limits_{t'=t}^{T}} \gamma^{\textcolor{blue}{t'-t}} r_{i,t'} \biggr) \biggr]
\nabla_{\theta} J(\theta) \approx \textcolor{black}{\frac{1}{N} \sum\limits_{i=1}^{N}} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_{\textcolor{black}{i},t}|s_{\textcolor{black}{i},t}) \biggl(\textcolor{blue}{\sum\limits_{t'=t}^{T}} \gamma^{\textcolor{blue}{t'-t}} r_{i,t'} \biggr) \biggr]

Финальная Версия:

Уменьшаем Дисперсию: Причинность

Принцип причинности: действие на шаге \(t\) не может повлиять на награду за шаг \(t'\) если \(t' < t\)

Улучшаем PG: Бейзлайн

\nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim p_{\theta}(\tau)} \biggl[ \nabla_{\theta}\,log\,p_{\theta}(\tau) (r(\tau) \textcolor{blue}{- b}) \biggr]

Обновляем стратегию пропорционально доходу \(\tau (r) \):

Обновляем стратегию пропорционально тому на сколько \(\tau (r) \) лучше чем средний доход:

\nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim p_{\theta}(\tau)} \biggl[ \nabla_{\theta}\,log\,p_{\theta}(\tau) r(\tau) \biggr]

где:

b = \mathbb{E}_{\tau \sim p_{\theta}(\tau)} [r(\tau)]

Вычитание бейзлайна дает несмещенную оценку (и часто работает лучше):

\mathbb{E} [\nabla_{\theta}\,log\,p_{\theta}(\tau) b] = \int p_{\theta}(\tau)\,\nabla_{\theta}\,log\,p_{\theta}(\tau)\,b\,d\tau = \int \,b\,\nabla_{\theta}\,p_{\theta}(\tau)\,d\tau =
= b\,\nabla_{\theta}\,\int \,p_{\theta}(\tau)\,d\tau = b\,\nabla_{\theta}\,1 = 0

Улучшаем PG: Регуляризация энтропией

В методах на основе функций ценности (DQN, Q-learning, SARSA, и тд.) мы использовали \(\epsilon\)-жданую стратегию, чтобы агент исследовал новые варианты в среде

H(\pi_{\theta} (\cdot | s_t)) = - \sum_{a \in A} \pi_{\theta}(a|s_t)\, log\, \pi_{\theta}(a|s_t)

Регуляризация энтропии стратегии агента:

В методах с явным представлением стратегии агента, можно использовать более гибкий вариант: 

Добавление к функции потерь \(-H(\pi_{\theta})\):

  • поощряет агента действовать более случайно
  • накладывает менее строгие ограничения чем \(\epsilon\)-жадная стратегия

Алгоритмы Испольнитель-Критик

Финальная версия REINFORCE с "учетом причинности" и бейзлайном

Вспоминаем Функции ценности:

Q_{\pi}(s,a) = \mathbb{E}_{\pi} [\sum^{\infty}_{k=0} \gamma^{k} r_{t+k+1}|S_t=s, A_t=a ]

Что это?

\nabla_{\theta} J(\theta) \approx \textcolor{black}{\frac{1}{N} \sum\limits_{i=1}^{N}} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_{\textcolor{black}{i},t}|s_{\textcolor{black}{i},t}) \biggl(\textcolor{blue}{\sum\limits_{t'=t}^{T}} \gamma^{\textcolor{blue}{t'-t}} r_{i,t'} \textcolor{green}{- b} \biggr) \biggr]
V_{\pi}(s) = \mathbb{E}_{\pi} [\sum^{\infty}_{k=0} \gamma^{k} r_{t+k+1}|S_t=s]

Оценка \(Q_{\pi_{\theta}}(s_{i,t},a_{i,t})\) по одному сэмплу

Совместим  Градиент по стратегии и Функции Ценности!

Вспомним про бейзлайн:

дисперсия меньше чем у оценки по одному сэмплу

\nabla_{\theta} J(\theta) \approx \textcolor{black}{\frac{1}{N} \sum\limits_{i=1}^{N}} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_{\textcolor{black}{i},t}|s_{\textcolor{black}{i},t}) \biggl(\textcolor{blue}{Q_{\pi_{\theta}}(s_{i,t}, a_{i,t})} \textcolor{green}{- b} \biggr) \biggr]
b = \mathbb{E}_{\tau \sim \pi_{\theta}} [r(\tau)] =
= \mathbb{E}_{a \sim \pi_{\theta}(a|s)} [Q_{\pi_{\theta}}(s,a)] =
= \textcolor{green}{V_{\pi_{\theta}}(s)}

Тут тоже стоит учесть причинность....

Алгоритмы Испольнитель-Критик

Advantage Actor-Critic: A2C

Функция приемущества / Advantage Function:

апроксимируем это значение при помощи одного сэмпла

\nabla_{\theta} J(\theta) \approx \textcolor{black}{\frac{1}{N} \sum\limits_{i=1}^{N}} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_{\textcolor{black}{i},t}|s_{\textcolor{black}{i},t}) \biggl(\textcolor{blue}{Q_{\pi_{\theta}}(s_{i,t}, a_{i,t})- V_{\pi_{\theta}}(s_{i,t})} \biggr) \biggr]

на сколько \(a_t\) лучше чем обычное поведение стратегии

A(a,s) = Q_{\pi_{\theta}}(s, a)- V_{\pi_{\theta}}(s)
\nabla_{\theta} J(\theta) \approx \textcolor{black}{\frac{1}{N} \sum\limits_{i=1}^{N}} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_{\textcolor{black}{i},t}|s_{\textcolor{black}{i},t}) \biggl(\textcolor{blue}{A_{\pi_{\theta}}(s_{i,t}, a_{i,t})} \biggr) \biggr]

Легче учить только одну функцию!

...но можно сделать еще лучше:

A(a,s) = \textcolor{black}{\mathbb{E}_{s' \sim p(s'|a,s)}[r(s,a) + E_{a' \sim \pi_{\theta}(s'|s')}[Q_{\pi_{\theta}}(a', s')]} - V_{\pi_{\theta}}(s_t)
= r(s,a) + \textcolor{blue}{\mathbb{E}_{s' \sim p(s'|a,s)}[V_{\pi_{\theta}}(s')]} - V_{\pi_{\theta}}(s)

Совместим  Градиент по стратегии и Функции Ценности!

Advantage Actor-Critic: A2C

Функция приемущества:

\nabla_{\theta} J(\theta) \approx \textcolor{black}{\frac{1}{N} \sum\limits_{i=1}^{N}} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_{\textcolor{black}{i},t}|s_{\textcolor{black}{i},t}) \biggl(\textcolor{blue}{A_{\pi_{\theta}}(s_{i,t}, a_{i,t})} \biggr) \biggr]
A_{\pi_{\theta}}(a_t,s_t) \approx r_t + V_{\pi_{\theta}}(s_{t+1}) - V_{\pi_{\theta}}(s_t)

Выучить \(V\)-функцию легче, т.к. она зависит от меньшего числа аргументов

Совместим  Градиент по стратегии и Функции Ценности!

на сколько \(a_t\) лучше чем обычное поведение стратегии

A2C: Обучение

  • Policy Improvement шаг:
    • Учим испольнителя при помощи градиента по стратегии:
\nabla_{\theta} J(\theta) \approx \textcolor{black}{\frac{1}{N} \sum\limits_{i=1}^{N}} \biggl[ \sum\limits_{t=0}^T \nabla_{\theta}\,log\, \pi_{\theta}(a_{\textcolor{black}{i},t}|s_{\textcolor{black}{i},t}) A_{\pi_{\theta}}(s_{i,t}, a_{i,t}) \biggr]
  • Policy Evaluation шаг:
    • Учим Критика через MSE (по аналогии с DQN)
  • Сэмплируем {\(\tau\)} при помощи \(\pi_{\theta}(a_t|s_t)\)
\nabla_{\phi} L(\phi) \approx \textcolor{black}{\frac{1}{N} \sum\limits_{i=1}^{N}} \biggl[ \sum\limits_{t=0}^T \nabla_{\phi}\,\lVert(r_t + \gamma V_{\hat{\phi}}(s_{t+1})) - V_{\phi}(s_t)\rVert^2 \biggr]

Policy Iteration напоминалка:

В DQN была Target Network, тут просто не проводим градиенты.

\(\phi\): свой набор параметров

Детали реализации: Арихтектура A2C

Асинхронный A2C: A3C

Answer: Учим на нескольких средах одновременно!

Не можем использовать Replay Memory, но нам нужно декоррелировать сэмплы

Каждый рабочий:

  • Получает параметры модели из единого сервера параметров
  • Генерирует траектории
  • Считает Градиенты
  • Отправляет градиенты обратно в сервер параметров

Взаимодествие с каждой средой и обучение происходит асинхронно

Асинхронный A2C: A3C

Приемущества:

  • Работает быстрее (реальное время обучения)

Недостатки:

  • Для N асинхронных рабочих нужно хранить N+1 копий параметров модели
  • Проблема протухших градиентов

Взаимодествие с каждой средой и обучение происходит асинхронно

Синхронный параллельный A2C

Решение проблем A3C:

  • Пусть все среды работают параллельно
  •  Среды синхронизируются после каждого шага
  •  Можно выбирать действия используя только одну копию параметров
  • Обновляем парметры каждые t шагов в среде/средах 

Эту версию обычно называют A2C... снова...

Приемущества:

  • Достаточно хранить только один набор параметров
  • Стабильнее A3C
    • нет протухших градиентов

Недостатки:

  • Немного медленнее, чем A3C
    • Число взаимодействий со средой в еденицу времени

Синхронный параллельный A2C

Эту версию обычно называют A2C... снова...

A3C/A2C Результаты: 

Спасибо за Внимание!

FTIAD RL #5 Policy Gradient

By supergriver

FTIAD RL #5 Policy Gradient

  • 425