Обучение с подкреплением и выравнивание

REINFORCE и дисперсия

Почему вычитание константы ничего не меняет и меняет всё

Шаг 108 из 117 · ~28 мин

Алгоритм

REINFORCE — прямая реализация теоремы прошлого урока: сыграть эпизод, посчитать возвраты, сделать шаг.

θθ+αtGtθlogπθ(atst)\theta \leftarrow \theta + \alpha \sum_t G_t \,\nabla_\theta \log\pi_\theta(a_t \mid s_t)

Работает, несмещён — и почти неприменим в чистом виде из-за дисперсии. Урок про то, откуда она берётся и что с ней делают.

Базовая линия

Вычтем из веса произвольную величину b(s)b(s), не зависящую от действия:

θJ=E[(Gtb(st))θlogπθ(atst)]\nabla_\theta J = \mathbb{E}\Big[\big(G_t - \htmlData{k=base}{b(s_t)}\big)\nabla_\theta\log\pi_\theta(a_t\mid s_t)\Big]

Оценка остаётся несмещённой, потому что

Eaπ[b(s)θlogπθ(as)]=b(s)aπθ(as)θπθ(as)πθ(as)=b(s)θ ⁣ ⁣aπθ(as)=b(s)θ1=0\mathbb{E}_{a\sim\pi}\big[b(s)\nabla_\theta\log\pi_\theta(a\mid s)\big] = b(s)\sum_a \pi_\theta(a\mid s)\frac{\nabla_\theta\pi_\theta(a\mid s)}{\pi_\theta(a\mid s)} = b(s)\,\nabla_\theta\!\!\sum_a \pi_\theta(a\mid s) = b(s)\,\nabla_\theta 1 = 0

Вся выкладка — в последнем шаге: сумма вероятностей равна единице всегда, значит её градиент равен нулю тождественно. исчезает в среднем.

Насколько это важно

Возьмём трёхрукий бандит с наградами 11, 00, 22 и равномерную политику. Точная дисперсия оценки градиента (не выборочная — посчитанная по определению):

базовая линия bbдисперсия
000.8890.889
0.50.50.3890.389
1.01.00.2220.222
1.51.50.3890.389
2.02.00.8890.889

Градиент при этом во всех строках одинаков(0,1/3,+1/3)(0, -1/3, +1/3). Оптимум приходится на b=1.0b = 1.0, то есть на среднюю награду, и даёт четырёхкратное снижение.

Но настоящий эффект виден, если сдвинуть все награды на константу. Возьмём 101101, 100100, 102102 — задача та же, предпочтения те же:

дисперсияградиент
без базовой линии6800.96800.9(0,1/3,+1/3)(0, -1/3, +1/3)
с базовой линией 1011010.2220.222(0,1/3,+1/3)(0, -1/3, +1/3)

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

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

A3%B1%C96%

рука вероятность

скорость обучения 0.1
шагов 200
ожидаемая награда
1.956
дисперсия градиента
0.0919
смещение оценки
2.5e-3
базовая линия
1.956
Переключайте базовую линию и следите за двумя числами сразу: дисперсия меняется заметно, смещение — нет. Именно это и означает «уменьшает дисперсию, не внося смещения», и увидеть обе половины утверждения одновременно полезнее, чем прочитать вывод.

Базовая линия включена и равна текущей ожидаемой награде — той самой, что минимизирует дисперсию в простых случаях.

Какая базовая линия лучшая

Естественный выбор — b(s)=V(s)b(s) = V(s), ожидаемый возврат из состояния. Тогда вес превращается в GtV(st)G_t - V(s_t) — оценку преимущества из урока 020, и градиент читается как «сделать вероятнее то, что оказалось лучше ожидаемого».

Строго говоря, VV не минимизирует дисперсию: оптимум — взвешенное по квадрату градиента среднее возврата. Разница обычно мала, а VV нужна и по другим причинам, поэтому на практике берут её.

Заметьте, что как только VV обучается вместе с политикой, получается actor–critic: одна сеть выбирает действия, другая оценивает состояния и служит базовой линией. Ничего нового в схему при этом не добавилось — только конкретный выбор bb.

Другие источники дисперсии

Базовая линия убирает один вклад, но не все:

источниклечение
абсолютный уровень наградыбазовая линия
награды из прошлого в весе GtG_tпричинность: суммировать только с tt
длинный горизонтбутстрэппинг, nn-шаговые возвраты (урок 080)
стохастичность политикипонижение энтропии по ходу обучения
стохастичность средыне лечится, только усреднением

Вторая строка стоит пояснения. В исходной формуле веса GtG_t включают награды до момента tt, хотя действие ata_t на них повлиять не могло. Их вклад в среднем нулевой (по тому же доводу, что и для базовой линии), но дисперсию они добавляют. Отсюда версия «reward-to-go», которую и используют всегда.

Итог

  • REINFORCE несмещён и почти неприменим без снижения дисперсии.
  • Базовая линия не вносит смещения, потому что градиент единицы равен нулю.
  • Измерено: сдвиг наград на константу меняет дисперсию в тридцать тысяч раз, не меняя градиента.
  • Выбор b=V(s)b = V(s) превращает вес в преимущество и даёт actor–critic.
  • Причинность, nn-шаговые возвраты и контроль энтропии убирают другие вклады.

Источники

Проверки

0 из 2
  1. Базовая линия и причинность

    Отметьте все верные утверждения о снижении дисперсии в REINFORCE.

  2. Веса REINFORCE

    Реализуйте reinforce_weights(rewards, gamma, baseline) для одного эпизода из nn шагов. Верните [full_return, first_reward_to_go, last_reward_to_go, mean_centred_weight]:

    • full_return = kγkrk\sum_{k} \gamma^{k} r_k — весь дисконтированный возврат эпизода;
    • first_reward_to_go — возврат, считая от шага 00: j0γjrj\sum_{j\ge 0}\gamma^{j} r_j;
    • last_reward_to_go — возврат, считая от последнего шага, то есть просто rn1r_{n-1};
    • mean_centred_weight — среднее по шагам от GtbG_t - b, где Gt=jtγjtrjG_t = \sum_{j \ge t}\gamma^{\,j-t} r_j.

    Обратите внимание, что первые два числа обязаны совпадать: возврат «от нулевого шага» и есть возврат всего эпизода. Различаются они только тем, как вы их вычислили, и это удобная проверка индексации — самого частого источника ошибок в этой формуле.

    функция reinforce_weights

    Загрузка редактора…

    Ctrl/⌘ + Enter