Spinning Up: алгоритмы TRPO, DDPG, TD3 и SAC
Перевод описаний четырёх алгоритмов из документации Spinning Up: TRPO с ограничением на KL и сопряжёнными градиентами, DDPG и TD3 для непрерывных действий, SAC с регуляризацией энтропией — формулы, псевдокод, гиперпараметры.
Trust Region Policy Optimization (TRPO)
Заголовок раздела «Trust Region Policy Optimization (TRPO)»(Раньше: основы VPG)
TRPOTRPO (оптимизация политики в доверительной области)EN trust region policy optimization (TRPO)Schulman и др., 2015 — шаг политики с ограничением на KL к старой политике; предшественник PPO. обновляет политику, делая самый большой возможный шаг улучшения качества и при этом соблюдая особое ограничение на то, насколько близкими должны быть новая и старая политики. Ограничение выражено через KL-дивергенцию — меру (чем-то похожую на расстояние, но не совсем им являющуюся) различия между распределениями вероятностей.
Это отличается от обычного градиента политики, который держит новую и старую политику близкими в пространстве параметров. Но даже, казалось бы, маленькая разница в параметрах может дать очень большую разницу в качестве — так что один неудачный шаг может обрушить качество политики. Поэтому с простым градиентом политики опасно брать большие шаги, и это вредит его эффективности по данным. TRPO изящно избегает такого обрушения и обычно быстро и монотонно улучшает качество.
Коротко
Заголовок раздела «Коротко»- TRPO — алгоритм с обучением по текущей политике (on-policy).
- TRPO можно применять в средах как с дискретным, так и с непрерывным пространством действий.
- Реализация TRPO в Spinning Up поддерживает распараллеливание через MPI.
Ключевые формулы
Заголовок раздела «Ключевые формулы»Пусть — политика с параметрами . Теоретическое обновление TRPO таково:
где — суррогатное преимущество, мера того, насколько политика лучше старой политики , посчитанная по данным старой политики:
а — средняя KL-дивергенция между политиками по состояниям, которые посещала старая политика:
Словами: «s.t.» (subject to) — «при условии». Ищем параметры, при которых суррогатное преимущество максимально, но средняя KL-дивергенция между новой и старой политикой не больше (например, 0,01). Отношение — поправка по значимости (importance samplingвыборка по значимости (importance sampling)EN importance samplingПеревзвешивание сэмплов старой политики отношением π_new / π_old — основа PPO.): данные собраны старой политикой, а оцениваем новую.
С теоретическим обновлением TRPO работать не очень удобно, поэтому TRPO делает несколько приближений, чтобы быстро получить ответ. Разложим цель и ограничение в ряд Тейлора до главных членов вокруг :
и получим приближённую задачу оптимизации
Словами: цель приближаем линейной функцией (наклон ), а KL — квадратичной (матрица — гессиан KL, она же информационная матрица Фишера). Линейная цель на «эллипсоиде» допустимых шагов — задача, которая решается формулой.
Эту приближённую задачу можно решить аналитически методами двойственности Лагранжа 1, и решение будет таким:
Если бы мы на этом остановились и просто использовали этот результат, алгоритм в точности вычислял бы натуральный градиент политики (Natural Policy Gradient). Проблема в том, что из-за ошибок приближения рядом Тейлора такой шаг может не удовлетворять ограничению на KL или на самом деле не улучшать суррогатное преимущество. TRPO добавляет к этому правилу обновления поправку — линейный поиск с возвратом (backtracking line search):
где — коэффициент возврата, а — наименьшее неотрицательное целое число, при котором удовлетворяет ограничению на KL и даёт положительное суррогатное преимущество.
Словами: сначала пробуем полный шаг (). Если он нарушает ограничение или ухудшает цель — укорачиваем шаг в раз (например, до 80 %), потом ещё раз, пока не получится.
Наконец: вычислять и хранить обратную матрицу мучительно дорого, когда у нейросетевой политики тысячи или миллионы параметров. TRPO обходит эту проблему с помощью алгоритма сопряжённых градиентов: он решает систему относительно , и для этого нужна только функция, вычисляющая произведение матрицы на вектор , а не вся матрица целиком. Сделать это не так уж трудно: заводим символьную операцию, вычисляющую
которая даёт правильный результат, не вычисляя всю матрицу.
Словами: сначала берём градиент KL (вектор), скалярно умножаем его на (получаем число) и ещё раз берём градиент — это произведение гессиана на вектор за два прохода автодифференцирования. Для сети с миллионом параметров матрица заняла бы чисел, а такой приём требует памяти порядка одного вектора.
Исследование и использование
Заголовок раздела «Исследование и использование»TRPO обучает стохастическую политику on-policy. Это значит, что он исследует среду, выбирая действия по самой свежей версии своей стохастической политики. Насколько случаен выбор действий, зависит и от начальных условий, и от процедуры обучения. По ходу обучения политика обычно становится всё менее случайной, потому что правило обновления подталкивает её использовать награды, которые она уже нашла. Из-за этого политика может застрять в локальном оптимуме.
Псевдокод
Заголовок раздела «Псевдокод»Алгоритм 1. Trust Region Policy Optimization
- Вход: начальные параметры политики , начальные параметры функции ценности .
- Гиперпараметры: предел KL-дивергенции , коэффициент возврата , максимальное число шагов возврата .
- Для :
- Собрать набор траекторий , запуская в среде политику .
- Посчитать reward-to-go .
- Посчитать оценки преимущества (любым методом оценки преимущества) на основе текущей функции ценности .
- Оценить градиент политики:
- Алгоритмом сопряжённых градиентов вычислить где — гессиан выборочной средней KL-дивергенции.
- Обновить политику линейным поиском с возвратом: где — наименьшее значение, которое улучшает выборочную функцию потерь и удовлетворяет выборочному ограничению на KL-дивергенцию.
- Подогнать функцию ценности регрессией по среднеквадратичной ошибке: обычно каким-нибудь алгоритмом градиентного спуска.
Документация
Заголовок раздела «Документация»spinup.trpo_tf1(env_fn, actor_critic=<mlp_actor_critic>, ac_kwargs={}, seed=0, steps_per_epoch=4000, epochs=50, gamma=0.99, delta=0.01, vf_lr=0.001, train_v_iters=80, damping_coeff=0.1, cg_iters=10, backtrack_iters=10, backtrack_coeff=0.8, lam=0.97, max_ep_len=1000, logger_kwargs={}, save_freq=10, algo='trpo')Trust Region Policy Optimization (с поддержкой натурального градиента политики). Параметры env_fn, ac_kwargs,
seed, steps_per_epoch, epochs, gamma, vf_lr, train_v_iters, lam, max_ep_len, logger_kwargs,
save_freq значат то же, что у VPG. Особые параметры TRPO:
| Параметр | По умолчанию | Смысл |
|---|---|---|
delta | 0.01 | Предел KL-дивергенции для обновления TRPO / NPG. (Для устойчивости должен быть маленьким: значения вроде 0,01, 0,05.) |
damping_coeff | 0.1 | Костыль для численной устойчивости, должен быть небольшим. Меняет вычисление произведения гессиана на вектор: , где — коэффициент затухания. Этот гиперпараметр, скорее всего, лучше не трогать |
cg_iters | 10 | Число итераций метода сопряжённых градиентов. Если увеличить, приближение к станет точнее и качество, возможно, немного вырастет, но ценой замедления. Тоже, скорее всего, лучше не трогать |
backtrack_iters | 10 | Максимальное число шагов в линейном поиске с возвратом. Поиск обычно не возвращается, а если и возвращается, то обычно на один шаг, поэтому этот гиперпараметр редко важен |
backtrack_coeff | 0.8 | Насколько далеко шагать назад при линейном поиске. (Всегда между 0 и 1, обычно больше 0,5.) |
algo | 'trpo' | Либо 'trpo', либо 'npg': код поддерживает оба, потому что они почти одинаковы |
Граф вычислений, который сохраняет логгер, содержит: x — placeholder TensorFlow для входного состояния; pi —
сэмплирует действие агента при состояниях из x; v — оценка ценности для состояний из x. К модели можно обратиться
через инструмент test_policy.py или загрузить граф функцией restore_tf_graph.
Статьи по теме
Заголовок раздела «Статьи по теме»- Trust Region Policy Optimization, Schulman et al. 2015
- High Dimensional Continuous Control Using Generalized Advantage Estimation, Schulman et al. 2016
- Approximately Optimal Approximate Reinforcement Learning, Kakade and Langford 2002
Почему эти статьи?
Заголовок раздела «Почему эти статьи?»Schulman 2015 включена, потому что это исходная статья с описанием TRPO. Schulman 2016 включена, потому что наша реализация TRPO использует Generalized Advantage Estimation для вычисления градиента политики. Kakade and Langford 2002 включена, потому что в ней есть теоретические результаты, которые мотивируют теоретические основы TRPO и глубоко с ними связаны.
Другие открытые реализации
Заголовок раздела «Другие открытые реализации»Deep Deterministic Policy Gradient (DDPG)
Заголовок раздела «Deep Deterministic Policy Gradient (DDPG)»(Раньше: Введение в RL, часть 1: оптимальная Q-функция и оптимальное действие)
Deep Deterministic Policy Gradient (DDPG) — алгоритм, который одновременно учит Q-функцию и политику. Q-функцию он учит по off-policy данным с помощью уравнения Беллмана, а политику — с помощью Q-функции.
Этот подход тесно связан с Q-обучениемQ-learningEN Q-learningQ(s,a) ← Q(s,a) + α[r + γ max_a′ Q(s′,a′) − Q(s,a)]. Off-policy: учит Q* при любом поведении. и мотивирован так же: если известна оптимальная функция ценности действия , то в любом состоянии оптимальное действие можно найти, решив
DDPG чередует обучение аппроксиматора с обучением аппроксиматора и делает это способом, специально приспособленным для сред с непрерывным пространством действий. Но что значит, что DDPG приспособлен именно для непрерывных действий? Это связано с тем, как мы вычисляем максимум по действиям в .
Когда дискретных действий конечное число, максимум не проблема: можно просто посчитать Q-значения для каждого действия отдельно и напрямую их сравнить. (Это заодно сразу даёт действие, на котором Q-значение максимально.) Но когда пространство действий непрерывно, перебрать его целиком нельзя, а решать задачу оптимизации совсем не просто. Обычный алгоритм оптимизации сделал бы вычисление мучительно дорогой подпрограммой. А поскольку её пришлось бы запускать каждый раз, когда агент хочет сделать шаг в среде, это неприемлемо.
Раз пространство действий непрерывно, предполагается, что функция дифференцируема по аргументу-действию. Это позволяет построить эффективное правило обучения политики на основе градиента, которое пользуется этим фактом. Тогда вместо дорогой подпрограммы оптимизации при каждом вычислении можно приблизить его: . Подробности — в разделе «Ключевые формулы».
Коротко
Заголовок раздела «Коротко»- DDPG — алгоритм с обучением вне текущей политикиoff-policy (обучение на данных другой политики)EN off-policyПолитика, которую учим, отличается от той, что собирала данные. Пример — Q-learning; в PPO и GRPO — поправка π/π_old. (off-policy).
- DDPG можно применять только в средах с непрерывным пространством действий.
- DDPG можно считать глубоким Q-обучением для непрерывных пространств действий.
- Реализация DDPG в Spinning Up не поддерживает распараллеливание.
Ключевые формулы
Заголовок раздела «Ключевые формулы»Здесь мы объясним математику двух частей DDPG: обучения Q-функции и обучения политики.
Q-обучение в DDPG
Заголовок раздела «Q-обучение в DDPG»Сначала напомним уравнение Беллмана для оптимальной функции ценности действия . Оно имеет вид
где — краткая запись того, что следующее состояние среда выбирает из распределения .
Это уравнение Беллмана — отправная точка для обучения аппроксиматора . Пусть аппроксиматор — нейросеть с параметрами , и мы собрали набор переходов (где показывает, терминально ли состояние ). Можно построить функцию среднеквадратичной ошибки Беллмана (mean-squared Bellman error, MSBE), которая грубо показывает, насколько близка к тому, чтобы удовлетворять уравнению Беллмана:
Здесь, вычисляя , мы пользуемся соглашением Python, по которому True равно 1, а False — 0. Поэтому когда
d==True — то есть когда терминальное состояние, — Q-функция должна показывать, что после текущего состояния агент
не получит дополнительных наград. (Такой выбор обозначений соответствует тому, что мы потом реализуем в коде.)
Алгоритмы Q-обучения с аппроксиматорами функций, такие как DQNDQN (глубокая Q-сеть)EN deep Q-network (DQN)Mnih и др., 2015 — Q-learning с нейросетью, буфером воспроизведения и целевой сетью; играл в Atari по пикселям. (и все его варианты) и DDPG, в основном построены на минимизации этой функции потерь MSBE. Все они используют два главных приёма, которые стоит описать, и ещё одну особую деталь DDPG.
Приём первый: буферы воспроизведения. Все стандартные алгоритмы обучения глубокой нейросети, приближающей , используют буфер воспроизведения опытабуфер воспроизведения (replay buffer)EN experience replay bufferХранилище прошлых переходов (s, a, r, s′), из которого сэмплируют случайные мини-батчи. (experience replay buffer). Это и есть множество прошлого опыта. Чтобы алгоритм вёл себя устойчиво, буфер должен быть достаточно большим, чтобы вмещать широкий спектр опыта, но не всегда хорошо хранить всё подряд. Если использовать только самые свежие данные, модель на них переобучится и всё сломается; если использовать слишком много опыта, обучение может замедлиться. Чтобы найти баланс, может понадобиться настройка.
Приём второй: целевые сети. Алгоритмы Q-обучения используют целевые сетицелевая сеть (target network)EN target networkЗамороженная копия Q-сети для вычисления цели r + γ max Q; её веса обновляют редко. (target networks). Выражение
называется целью (target), потому что, минимизируя потери MSBE, мы пытаемся сделать Q-функцию похожей на эту цель. Беда в том, что цель зависит от тех же параметров , которые мы обучаем. Из-за этого минимизация MSBE неустойчива. Решение — использовать набор параметров, близкий к , но с запаздыванием: вторую сеть, называемую целевой, которая отстаёт от первой. Параметры целевой сети обозначают .
В алгоритмах на основе DQN целевую сеть просто копируют из основной раз в фиксированное число шагов. В алгоритмах в стиле DDPG целевая сеть обновляется при каждом обновлении основной сети усреднением Поляка (polyak averaging):
где — гиперпараметр от 0 до 1 (обычно близкий к 1). (В нашем коде этот гиперпараметр называется polyak.)
Словами: при целевая сеть на каждом шаге сдвигается к основной всего на 0,5 % — это экспоненциальное скользящее среднееэкспоненциальное скользящее среднее (EMA)EN exponential moving average (EMA)m ← βm + (1 − β)x. Помнит примерно последние 1/(1 − β) значений; при β = 0.9 — около 10. весов, которое отстаёт примерно на обновлений.
Деталь DDPG: вычисление максимума по действиям в цели. Как говорилось выше, вычислить максимум по действиям в цели трудно, когда пространство действий непрерывно. DDPG справляется с этим, используя целевую сеть политики (target policy network), которая вычисляет действие, приблизительно максимизирующее . Целевая сеть политики получается так же, как целевая Q-функция: усреднением Поляка параметров политики по ходу обучения.
Собирая всё вместе, Q-обучение в DDPG выполняется минимизацией следующей функции потерь MSBE стохастическим градиентным спуском:
где — целевая политика.
Обучение политики в DDPG
Заголовок раздела «Обучение политики в DDPG»Обучение политики в DDPG довольно простое. Мы хотим выучить детерминированную политику , которая выдаёт действие, максимизирующее . Раз пространство действий непрерывно и мы предполагаем, что Q-функция дифференцируема по действию, можно просто делать градиентный подъём (только по параметрам политики), чтобы решить
Обратите внимание: параметры Q-функции здесь считаются константами.
Словами: критик подсказывает, в какую сторону сдвинуть действие, чтобы оценка выросла (), а цепное правило переносит эту подсказку на параметры политики: .
Исследование и использование
Заголовок раздела «Исследование и использование»DDPG обучает детерминированную политику off-policy. Поскольку политика детерминированная, при исследовании по текущей политике агент в начале, скорее всего, не попробовал бы достаточно разнообразных действий, чтобы найти полезные обучающие сигналы. Чтобы политики DDPG лучше исследовали среду, мы во время обучения добавляем к их действиям шум. Авторы исходной статьи о DDPG рекомендовали коррелированный во времени шум Орнштейна — Уленбека (OU noise), но более свежие результаты говорят, что некоррелированный гауссов шум с нулевым средним работает ничуть не хуже. Поскольку последний проще, он предпочтительнее. Чтобы получать более качественные обучающие данные, масштаб шума можно уменьшать по ходу обучения. (В нашей реализации мы этого не делаем и держим масштаб шума постоянным.)
Во время тестирования, чтобы увидеть, насколько хорошо политика использует выученное, мы не добавляем к действиям шум.
Псевдокод
Заголовок раздела «Псевдокод»Алгоритм 1. Deep Deterministic Policy Gradient
- Вход: начальные параметры политики , параметры Q-функции , пустой буфер воспроизведения .
- Приравнять целевые параметры к основным: , .
- Повторять:
- Наблюдать состояние и выбрать действие , где .
- Выполнить в среде.
- Наблюдать следующее состояние , награду и сигнал завершения , показывающий, терминально ли .
- Сохранить в буфер воспроизведения .
- Если терминально, сбросить среду.
- Если пора обновляться, то столько раз, сколько нужно обновлений:
- Случайно выбрать из батч переходов .
- Вычислить цели
- Обновить Q-функцию одним шагом градиентного спуска по
- Обновить политику одним шагом градиентного подъёма по
- Обновить целевые сети:
- До сходимости.
Документация
Заголовок раздела «Документация»У DDPG есть реализации на PyTorch (spinup.ddpg_pytorch) и TensorFlow (spinup.ddpg_tf1) с почти одинаковыми
вызовами. Параметры общие для DDPG, TD3 и SAC собраны в таблицу после SAC;
особый параметр DDPG:
| Параметр | По умолчанию | Смысл |
|---|---|---|
act_noise | 0.1 | Стандартное отклонение гауссова шума для исследования, добавляемого к политике во время обучения. (Во время теста шум не добавляется.) |
Сохранённую модель PyTorch можно загрузить командой ac = torch.load('path/to/model.pt') — получится объект
актор-критика (ac) со свойствами, описанными в docstring функции ddpg_pytorch. Действия из неё:
actions = ac.act(torch.as_tensor(obs, dtype=torch.float32)).
Граф TensorFlow, который сохраняет логгер, содержит: x — placeholder для входного состояния; a — placeholder для
входного действия; pi — детерминированно вычисляет действие агента при состояниях из x; q — оценка ценности
действия для состояний из x и действий из a.
Статьи по теме
Заголовок раздела «Статьи по теме»- Deterministic Policy Gradient Algorithms, Silver et al. 2014
- Continuous Control With Deep Reinforcement Learning, Lillicrap et al. 2016
Почему эти статьи?
Заголовок раздела «Почему эти статьи?»Silver 2014 включена, потому что в ней заложена теория детерминированных градиентов политики (DPG). Lillicrap 2016 включена, потому что в ней теоретически обоснованный алгоритм DPG адаптирован к глубокому RL — так получился DDPG.
Другие открытые реализации
Заголовок раздела «Другие открытые реализации»Twin Delayed DDPG (TD3)
Заголовок раздела «Twin Delayed DDPG (TD3)»(Раньше: основы DDPG)
DDPG иногда показывает отличное качество, но часто капризен к гиперпараметрам и прочим настройкам. Типичный сбой DDPG: выученная Q-функция начинает резко завышать Q-значения, и тогда ломается политика, потому что она эксплуатирует ошибки Q-функции. Twin Delayed DDPG (TD3) — алгоритм, который решает эту проблему тремя ключевыми приёмами:
Приём первый: обрезанное двойное Q-обучение (clipped double-Q learning). TD3 учит две Q-функции вместо одной (отсюда «twin», «близнецы») и для целей в функциях потерь ошибки Беллмана берёт меньшее из двух Q-значений.
Приём второй: «отложенные» обновления политики. TD3 обновляет политику (и целевые сети) реже, чем Q-функцию. Статья рекомендует одно обновление политики на каждые два обновления Q-функции.
Приём третий: сглаживание целевой политики (target policy smoothing). TD3 добавляет шум к целевому действию, чтобы политике было труднее эксплуатировать ошибки Q-функции: шум сглаживает Q вдоль изменений действия.
Вместе эти три приёма дают заметно лучшее качество, чем базовый DDPG.
Коротко
Заголовок раздела «Коротко»- TD3 — алгоритм с обучением вне текущей политики (off-policy).
- TD3 можно применять только в средах с непрерывным пространством действий.
- Реализация TD3 в Spinning Up не поддерживает распараллеливание.
Ключевые формулы
Заголовок раздела «Ключевые формулы»TD3 одновременно учит две Q-функции, и , минимизацией среднеквадратичной ошибки Беллмана — почти так же, как DDPG учит свою единственную Q-функцию. Чтобы показать, как именно TD3 это делает и чем он отличается от обычного DDPG, пойдём от самой внутренней части функции потерь наружу.
Первое: сглаживание целевой политики. Действия, по которым строится цель Q-обучения, берутся из целевой политики , но к каждой координате действия добавляется обрезанный шум. После добавления обрезанного шума целевое действие обрезается так, чтобы лежать в допустимом диапазоне (все допустимые действия удовлетворяют ). Итак, целевые действия:
Сглаживание целевой политики по сути служит регуляризатором алгоритма. Оно устраняет особый сбой, который случается в DDPG: если у аппроксиматора Q-функции появляется ложный острый пик на каких-то действиях, политика быстро начинает его эксплуатировать и ведёт себя хрупко или неправильно. Этого можно избежать, сгладив Q-функцию по похожим действиям, — для этого и придумано сглаживание целевой политики.
Далее: обрезанное двойное Q-обучение. Обе Q-функции используют одну общую цель, вычисленную по той из двух Q-функций, которая даёт меньшее значение цели:
и обе учатся регрессией к этой цели:
Если брать для цели меньшее Q-значение и регрессировать к нему, это помогает не допустить завышения Q-функции.
Словами: у каждой из двух сетей свои случайные ошибки. Если одна завысила оценку, а другая нет, минимум возьмёт более скромную — систематическое завышение «через максимум» сменяется лёгким занижением, которое для обучения безопаснее.
Наконец, политика учится просто максимизацией :
что почти не отличается от DDPG. Но в TD3 политика обновляется реже, чем Q-функции. Это помогает гасить нестабильность, которая обычно возникает в DDPG из-за того, что обновление политики меняет цель.
Исследование и использование
Заголовок раздела «Исследование и использование»TD3 обучает детерминированную политику off-policy. Поскольку политика детерминированная, при исследовании по текущей политике агент в начале, скорее всего, не попробовал бы достаточно разнообразных действий, чтобы найти полезные обучающие сигналы. Чтобы политики TD3 лучше исследовали среду, мы во время обучения добавляем к их действиям шум, обычно некоррелированный гауссов шум с нулевым средним. Чтобы получать более качественные обучающие данные, масштаб шума можно уменьшать по ходу обучения. (В нашей реализации мы этого не делаем и держим масштаб шума постоянным.)
Во время тестирования, чтобы увидеть, насколько хорошо политика использует выученное, мы не добавляем к действиям шум.
Псевдокод
Заголовок раздела «Псевдокод»Алгоритм 1. Twin Delayed DDPG
- Вход: начальные параметры политики , параметры Q-функций , , пустой буфер воспроизведения .
- Приравнять целевые параметры к основным: , , .
- Повторять:
- Наблюдать состояние и выбрать действие , где .
- Выполнить в среде.
- Наблюдать следующее состояние , награду и сигнал завершения , показывающий, терминально ли .
- Сохранить в буфер воспроизведения .
- Если терминально, сбросить среду.
- Если пора обновляться, то для от 0 до нужного числа обновлений:
- Случайно выбрать из батч переходов .
- Вычислить целевые действия
- Вычислить цели
- Обновить Q-функции одним шагом градиентного спуска по
- Если
policy_delay:- обновить политику одним шагом градиентного подъёма по
- обновить целевые сети:
- До сходимости.
Документация
Заголовок раздела «Документация»У TD3 есть реализации на PyTorch (spinup.td3_pytorch) и TensorFlow (spinup.td3_tf1). Общие параметры — в таблице
после SAC; особые параметры TD3:
| Параметр | По умолчанию | Смысл |
|---|---|---|
act_noise | 0.1 | Стандартное отклонение гауссова шума для исследования, добавляемого к политике во время обучения. (Во время теста шум не добавляется.) |
target_noise | 0.2 | Стандартное отклонение сглаживающего шума, добавляемого к целевой политике ( в формулах) |
noise_clip | 0.5 | Предел для модуля сглаживающего шума целевой политики ( в формулах) |
policy_delay | 2 | Политика обновляется только один раз на каждые policy_delay обновлений Q-сетей |
Сохранённая модель PyTorch загружается так же, как у DDPG. Граф TensorFlow содержит: x и a — placeholder для
состояния и действия; pi — детерминированно вычисляет действие при состояниях из x; q1 — одна оценка ценности
действия для x и a; q2 — другая оценка ценности действия для x и a.
Статьи по теме
Заголовок раздела «Статьи по теме»- Addressing Function Approximation Error in Actor-Critic Methods, Fujimoto et al, 2018
Другие открытые реализации
Заголовок раздела «Другие открытые реализации»Soft Actor-Critic (SAC)
Заголовок раздела «Soft Actor-Critic (SAC)»(Раньше: основы TD3)
Soft Actor Critic (SAC) — алгоритм, который оптимизирует стохастическую политику off-policy; он служит мостом между стохастической оптимизацией политики и подходами в стиле DDPG. Это не прямой наследник TD3 (они опубликованы примерно одновременно), но SAC использует приём обрезанного двойного Q, а благодаря стохастичности, присущей политике SAC, в итоге получает и что-то вроде сглаживания целевой политики.
Центральная особенность SAC — регуляризация энтропией. Политика обучается максимизировать компромисс между ожидаемой отдачей и энтропией — мерой случайности политики. Это тесно связано с компромиссом между исследованием и использованием: рост энтропии ведёт к большему исследованию, что может ускорить обучение в дальнейшем. Он также может помешать политике преждевременно сойтись к плохому локальному оптимуму.
Коротко
Заголовок раздела «Коротко»- SAC — алгоритм с обучением вне текущей политики (off-policy).
- Реализованная здесь версия SAC применима только в средах с непрерывным пространством действий.
- Альтернативную версию SAC, слегка меняющую правило обновления политики, можно реализовать для дискретных пространств действий.
- Реализация SAC в Spinning Up не поддерживает распараллеливание.
Ключевые формулы
Заголовок раздела «Ключевые формулы»Чтобы объяснить Soft Actor Critic, сначала нужно ввести постановку RL с регуляризацией энтропией. В ней формулы для функций ценности немного другие.
RL с регуляризацией энтропией
Заголовок раздела «RL с регуляризацией энтропией»Энтропияэнтропия (информационная)EN (Shannon) entropyH(p) = −Σ p log p — среднее «удивление», мера неопределённости распределения. Максимальна у равномерного распределения. — величина, которая, грубо говоря, показывает, насколько случайна случайная величина. Если монета утяжелена так, что почти всегда выпадает орлом, у неё низкая энтропия; если она честная и оба исхода выпадают с вероятностью половина, у неё высокая энтропия.
Пусть — случайная величина с функцией вероятности или плотностью . Энтропия величины вычисляется по её распределению так:
Словами и числами: честная монета: нат; монета с орлом в 99 % случаев: нат.
В RL с регуляризацией энтропией агент на каждом шаге получает бонус к награде, пропорциональный энтропии политики на этом шаге. Это меняет задачу RL на такую:
где — коэффициент компромисса. (Примечание: здесь и далее на этой странице мы предполагаем бесконечный горизонт с дисконтированием.) Теперь можно определить немного другие функции ценности в этой постановке. меняется так, чтобы включать бонусы за энтропию на каждом шаге:
меняется так, чтобы включать бонусы за энтропию на каждом шаге, кроме первого:
При таких определениях и связаны соотношением
а уравнение Беллмана для имеет вид
Soft Actor-Critic
Заголовок раздела «Soft Actor-Critic»SAC одновременно учит политику и две Q-функции . Сейчас стандартны два варианта SAC: один использует фиксированный коэффициент регуляризации энтропией , а другой обеспечивает ограничение на энтропию, меняя по ходу обучения. Для простоты Spinning Up использует версию с фиксированным коэффициентом, но практики обычно предпочитают вариант с ограничением на энтропию.
Обучение Q. Q-функции учатся похоже на TD3, но с несколькими ключевыми отличиями.
Сначала — что похоже?
- Как и в TD3, обе Q-функции учатся минимизацией MSBE, регрессией к одной общей цели.
- Как и в TD3, общая цель вычисляется с помощью целевых Q-сетей, а целевые Q-сети получаются усреднением Поляка параметров Q-сетей по ходу обучения.
- Как и в TD3, общая цель использует приём обрезанного двойного Q.
Что отличается?
- В отличие от TD3, в цели есть ещё слагаемое, которое появляется из-за регуляризации энтропией в SAC.
- В отличие от TD3, действия в следующем состоянии, используемые в цели, берутся из текущей политики, а не из целевой политики.
- В отличие от TD3, явного сглаживания целевой политики нет. TD3 учит детерминированную политику и поэтому сглаживает, добавляя случайный шум к действиям в следующем состоянии. SAC учит стохастическую политику, и шума от этой стохастичности хватает для похожего эффекта.
Прежде чем дать окончательный вид функции потерь Q, разберёмся, как в неё входит вклад регуляризации энтропией. Начнём с рекурсивного уравнения Беллмана для с регуляризацией энтропией и немного перепишем его, используя определение энтропии:
Правая часть — матожидание по следующим состояниям (они берутся из буфера воспроизведения) и следующим действиям (они берутся из текущей политики, а не из буфера воспроизведения). Раз это матожидание, его можно приблизить выборкой:
SAC строит функцию потерь MSBE для каждой Q-функции с помощью такого выборочного приближения цели. Не определено осталось только одно: какую Q-функцию использовать для выборочного подсчёта цели. Как и TD3, SAC использует приём обрезанного двойного Q и берёт минимальное Q-значение из двух аппроксиматоров.
Собирая всё вместе, функции потерь для Q-сетей в SAC таковы:
где цель задаётся так:
Обучение политики. Политика в каждом состоянии должна действовать так, чтобы максимизировать ожидаемую будущую отдачу плюс ожидаемую будущую энтропию. То есть она должна максимизировать , которую мы раскрываем так:
Способ, которым мы оптимизируем политику, использует трюк с репараметризациейтрюк репараметризацииEN reparameterization trickz = μ + σ·ε, ε ~ N(0, 1): случайность выносится во вход, и градиент проходит к μ и σ: выборка из получается вычислением детерминированной функции от состояния, параметров политики и независимого шума. Для иллюстрации: вслед за авторами статьи о SAC мы используем «сплющенную» гауссову политику (squashed Gaussian policy), то есть выборки получаются так:
Трюк с репараметризацией позволяет переписать матожидание по действиям (в котором есть неприятность: распределение зависит от параметров политики) в матожидание по шуму (в котором неприятность исчезает: распределение больше не зависит от параметров):
Чтобы получить функцию потерь политики, остаётся последний шаг: заменить одним из наших аппроксиматоров. В отличие от TD3, который использует (только первый аппроксиматор Q), SAC использует (минимум из двух аппроксиматоров Q). Таким образом, политика оптимизируется по
что почти совпадает с оптимизацией политики в DDPG и TD3, за исключением приёма с минимумом двух Q, стохастичности и слагаемого с энтропией.
Исследование и использование
Заголовок раздела «Исследование и использование»SAC обучает стохастическую политику с регуляризацией энтропией и исследует среду по текущей политике. Коэффициент регуляризации энтропией явно управляет компромиссом между исследованием и использованием: большее соответствует большему исследованию, меньшее — большему использованию. Правильный коэффициент (тот, что ведёт к самому устойчивому обучению или к самой высокой награде) может различаться от среды к среде и требовать тщательной настройки.
Во время тестирования, чтобы увидеть, насколько хорошо политика использует выученное, мы убираем стохастичность и используем среднее действие вместо выборки из распределения. Обычно это улучшает качество по сравнению с исходной стохастической политикой.
Псевдокод
Заголовок раздела «Псевдокод»Алгоритм 1. Soft Actor-Critic
- Вход: начальные параметры политики , параметры Q-функций , , пустой буфер воспроизведения .
- Приравнять целевые параметры к основным: , .
- Повторять:
- Наблюдать состояние и выбрать действие .
- Выполнить в среде.
- Наблюдать следующее состояние , награду и сигнал завершения , показывающий, терминально ли .
- Сохранить в буфер воспроизведения .
- Если терминально, сбросить среду.
- Если пора обновляться, то для от 0 до нужного числа обновлений:
- Случайно выбрать из батч переходов .
- Вычислить цели для Q-функций:
- Обновить Q-функции одним шагом градиентного спуска по
- Обновить политику одним шагом градиентного подъёма по где — выборка из , дифференцируемая по благодаря трюку с репараметризацией.
- Обновить целевые сети:
- До сходимости.
Документация
Заголовок раздела «Документация»У SAC есть реализации на PyTorch (spinup.sac_pytorch) и TensorFlow (spinup.sac_tf1). Общие параметры — в таблице
ниже; особые параметры SAC:
| Параметр | По умолчанию | Смысл |
|---|---|---|
lr | 0.001 | Скорость обучения (одна и та же для политики и для обучения ценности) |
alpha | 0.2 | Коэффициент регуляризации энтропией. (Эквивалентен величине, обратной масштабу награды в исходной статье о SAC.) |
Сохранённая модель PyTorch загружается так же, как у DDPG. Граф TensorFlow содержит: x и a — placeholder для
состояния и действия; mu — детерминированно вычисляет среднее действие агента при состояниях из x; pi —
сэмплирует действие агента при состояниях из x; q1 и q2 — две оценки ценности действия для x и a; v —
оценка ценности для состояний из x.
Примечание: для SAC правильная политика для оценки качества — mu, а не pi. Политику pi можно считать политикой
исследования, а mu — политикой использования.
Статьи по теме
Заголовок раздела «Статьи по теме»- Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor, Haarnoja et al, 2018
- Soft Actor-Critic Algorithms and Applications, Haarnoja et al, 2018
- Learning to Walk via Deep Reinforcement Learning, Haarnoja et al, 2018
Другие открытые реализации
Заголовок раздела «Другие открытые реализации»- SAC release repo (исходная «официальная» кодовая база)
- Softlearning repo (текущая «официальная» кодовая база)
- Yarats and Kostrikov repo
Общие параметры DDPG, TD3 и SAC
Заголовок раздела «Общие параметры DDPG, TD3 и SAC»Функции spinup.ddpg_pytorch, spinup.td3_pytorch и spinup.sac_pytorch (и их версии *_tf1) принимают одни и те
же основные параметры. Значения по умолчанию одинаковые у всех трёх, кроме отмеченных.
| Параметр | По умолчанию | Смысл |
|---|---|---|
env_fn | — | Функция, которая создаёт копию среды. Среда должна удовлетворять API OpenAI Gym |
actor_critic | MLPActorCritic | Конструктор модуля PyTorch с методом act, модулем pi и модулем (или модулями) q. У DDPG один q, у TD3 и SAC — q1 и q2; у SAC pi возвращает действие и его лог-вероятность. Критично: выход q должен быть плоским, формы (batch,) |
ac_kwargs | {} | Любые именованные аргументы для объекта ActorCritic, переданного в алгоритм |
seed | 0 | Сид генераторов случайных чисел |
steps_per_epoch | 4000 | Число шагов взаимодействия (пар «состояние — действие») агента со средой за эпоху |
epochs | 100 | Число эпох, в течение которых агент работает и обучается |
replay_size | 1 000 000 | Максимальная длина буфера воспроизведения |
gamma | 0.99 | Коэффициент дисконтирования. (Всегда между 0 и 1.) |
polyak | 0.995 | Коэффициент интерполяции при усреднении Поляка для целевых сетей: , где — polyak. (Всегда между 0 и 1, обычно близок к 1.) |
pi_lr, q_lr | 0.001, 0.001 | Скорости обучения политики и Q-сетей (у DDPG и TD3; у SAC вместо них один lr) |
batch_size | 100 | Размер минибатча для SGD |
start_steps | 10 000 | Число шагов, в течение которых действия выбираются равномерно случайно, прежде чем запустить настоящую политику. Помогает исследованию |
update_after | 1000 | Сколько шагов взаимодействия со средой собрать, прежде чем начинать обновления градиентным спуском. Гарантирует, что в буфере достаточно данных для полезных обновлений |
update_every | 50 | Сколько шагов взаимодействия со средой должно пройти между обновлениями градиентным спуском. Важно: как бы долго вы ни ждали между обновлениями, отношение шагов в среде к шагам градиента зафиксировано на 1 |
num_test_episodes | 10 | Сколько эпизодов в конце каждой эпохи тестировать детерминированную политику |
max_ep_len | 1000 | Максимальная длина траектории / эпизода / роллаута |
logger_kwargs | {} | Именованные аргументы для EpochLogger |
save_freq | 1 | Как часто (через сколько эпох) сохранять текущие политику и функцию ценности |
Что дальше
Заголовок раздела «Что дальше»- VPG и PPO — два других алгоритма оптимизации политики.
- Упражнения: упражнение 1.3 — дописать математику TD3; упражнение 2.2 — найти «тихий» баг в DDPG.
- В модуле курса 6.0 те же идеи в простых средах и с кодом: 6.0.2, 6.0.3.
Footnotes
Заголовок раздела «Footnotes»-
См. книгу Convex Optimization Бойда и Ванденберге, особенно главы 2–5. ↩