Обучение с подкреплением и выравнивание
REINFORCE и дисперсия
Почему вычитание константы ничего не меняет и меняет всё
Алгоритм
REINFORCE — прямая реализация теоремы прошлого урока: сыграть эпизод, посчитать возвраты, сделать шаг.
Работает, несмещён — и почти неприменим в чистом виде из-за дисперсии. Урок про то, откуда она берётся и что с ней делают.
Базовая линия
Вычтем из веса произвольную величину , не зависящую от действия:
Оценка остаётся несмещённой, потому что
Вся выкладка — в последнем шаге: сумма вероятностей равна единице всегда, значит её градиент равен
нулю тождественно.
Насколько это важно
Возьмём трёхрукий бандит с наградами , , и равномерную политику. Точная дисперсия оценки градиента (не выборочная — посчитанная по определению):
| базовая линия | дисперсия |
|---|---|
Градиент при этом во всех строках одинаков — . Оптимум приходится на , то есть на среднюю награду, и даёт четырёхкратное снижение.
Но настоящий эффект виден, если сдвинуть все награды на константу. Возьмём , , — задача та же, предпочтения те же:
| дисперсия | градиент | |
|---|---|---|
| без базовой линии | ||
| с базовой линией |
Разница в тридцать тысяч раз при том же самом градиенте. Вот что означает базовая линия: без неё оценка чувствительна к абсолютному уровню награды, который к задаче отношения не имеет. Сдвиг наград — операция, не меняющая ни одной оптимальной политики, — способен сделать обучение невозможным.
Практический вывод, который стоит унести: если ваш агент не учится, а награды все положительные и крупные, дело может быть не в алгоритме.
рука вероятность
- ожидаемая награда
- 1.956
- дисперсия градиента
- 0.0919
- смещение оценки
- 2.5e-3
- базовая линия
- 1.956
Базовая линия включена и равна текущей ожидаемой награде — той самой, что минимизирует дисперсию в простых случаях.
Какая базовая линия лучшая
Естественный выбор — , ожидаемый возврат из состояния. Тогда вес превращается в — оценку преимущества из урока 020, и градиент читается как «сделать вероятнее то, что оказалось лучше ожидаемого».
Строго говоря, не минимизирует дисперсию: оптимум — взвешенное по квадрату градиента среднее возврата. Разница обычно мала, а нужна и по другим причинам, поэтому на практике берут её.
Заметьте, что как только обучается вместе с политикой, получается actor–critic: одна сеть выбирает действия, другая оценивает состояния и служит базовой линией. Ничего нового в схему при этом не добавилось — только конкретный выбор .
Другие источники дисперсии
Базовая линия убирает один вклад, но не все:
| источник | лечение |
|---|---|
| абсолютный уровень награды | базовая линия |
| награды из прошлого в весе | причинность: суммировать только с |
| длинный горизонт | бутстрэппинг, -шаговые возвраты (урок 080) |
| стохастичность политики | понижение энтропии по ходу обучения |
| стохастичность среды | не лечится, только усреднением |
Вторая строка стоит пояснения. В исходной формуле веса включают награды до момента , хотя действие на них повлиять не могло. Их вклад в среднем нулевой (по тому же доводу, что и для базовой линии), но дисперсию они добавляют. Отсюда версия «reward-to-go», которую и используют всегда.
Итог
- REINFORCE несмещён и почти неприменим без снижения дисперсии.
- Базовая линия не вносит смещения, потому что градиент единицы равен нулю.
- Измерено: сдвиг наград на константу меняет дисперсию в тридцать тысяч раз, не меняя градиента.
- Выбор превращает вес в преимущество и даёт actor–critic.
- Причинность, -шаговые возвраты и контроль энтропии убирают другие вклады.
Источники
- Williams — Simple Statistical Gradient-Following Algorithms — REINFORCE и базовая линия
- Greensmith и др. — Variance Reduction Techniques for Gradient Estimates in RL — Оптимальная базовая линия и её анализ
Проверки
0 из 2Базовая линия и причинность
Отметьте все верные утверждения о снижении дисперсии в REINFORCE.
Веса REINFORCE
Реализуйте
reinforce_weights(rewards, gamma, baseline)для одного эпизода из шагов. Верните[full_return, first_reward_to_go, last_reward_to_go, mean_centred_weight]:full_return= — весь дисконтированный возврат эпизода;first_reward_to_go— возврат, считая от шага : ;last_reward_to_go— возврат, считая от последнего шага, то есть просто ;mean_centred_weight— среднее по шагам от , где .
Обратите внимание, что первые два числа обязаны совпадать: возврат «от нулевого шага» и есть возврат всего эпизода. Различаются они только тем, как вы их вычислили, и это удобная проверка индексации — самого частого источника ошибок в этой формуле.
Загрузка редактора…
Ctrl/⌘ + Enter