Траектория «Обучение с подкреплением» · конспект 4 из 12

Оценка ценностей без модели: Монте-Карло и TD-обучение

О чём эта тема
Как оценивать функции ценности и улучшать политику, когда модель среды — вероятности \(p(s', r\,|\,s, a)\) — неизвестна и есть только опыт взаимодействия. Разбираются теорема об улучшении политики и схема GPI, методы Монте-Карло с доказательствами сходимости, важностная выборка для off-policy оценивания и TD-обучение — центральная идея всей современной практики RL. По лекциям 3–4 курса «RL: от бандитов до RLHF» (мехмат МГУ) и конспекту преподавателя.
Аннотация
Конспект начинается с недостающей половины динамического программирования: доказывается теорема об улучшении политики, и вместе с оценкой политики из конспекта 3 она складывается в обобщённую итерацию политики (GPI) — каркас почти всех алгоритмов RL. Затем вводится различие on-policy и off-policy обучения. Центральная часть посвящена методам Монте-Карло: оценки first-visit и every-visit с доказательствами сходимости, инкрементальная запись, применение к управлению через ε-мягкие политики с теоремой об улучшении, и важностная выборка для off-policy случая с доказательством несмещённости. Далее совершается ключевой переход: цель обновления Монте-Карло — полный возврат — заменяется одношаговой целью из уравнения Беллмана, и возникает TD(0) с его TD-ошибкой и бутстрапом; доказывается, что при точной функции ценности средняя TD-ошибка равна нулю, обсуждаются условия сходимости Роббинса–Монро. Завершается конспект n-шаговыми возвратами — спектром методов между TD и Монте-Карло — и тренажёром, где оба метода соревнуются на цепочке из конспекта 3.
Пререквизиты
Конспект 3 (MDP, V/Q, уравнение Беллмана, оператор Беллмана и сжатие, марковская цепочка-пример), конспект 2 (инкрементальные обновления Q ← Q + α(цель − оценка), ε-жадные стратегии), конспект 1 (возврат, эпизоды).
Мотивация
Всё, что делалось в конспекте 3, требовало знать модель среды: вероятности переходов стояли в каждой формуле. Но агент в FrozenLake не знает, с какой вероятностью его занесёт вбок, а рекомендательная система не знает распределение кликов. Есть только опыт — эпизоды взаимодействия. Вопрос конспекта: как выучить те же самые ценности из одного опыта. Ответ Монте-Карло: ждать конца эпизода и усреднять возвраты. Ответ TD: не ждать — учиться на каждом шаге, подставляя собственную оценку будущего.

1. Улучшение политики и схема GPI

В конспекте 3 мы научились оценивать политику: итерации оператора Беллмана сходятся к \(V^\pi\) (тренажёр «двигатель»). Осталась вторая половина — как политику улучшать. Ответ даёт одношаговый просмотр вперёд: ценность действия при известном \(V^\pi\) — это \(q^\pi(s, a) = \sum_{s', r} p(s', r|s, a)\,[r + \gamma V^\pi(s')]\) (конспект 3, формула (3.11)).

Теорема (об улучшении политики). Пусть политики \(\pi\) и \(\pi'\) таковы, что

\[ q^{\pi}\bigl(s, \pi'(s)\bigr) \;\ge\; V^{\pi}(s) \qquad \forall s \in \mathcal{S}. \tag{4.1}\]

Тогда \(V^{\pi'}(s) \ge V^{\pi}(s)\) во всех состояниях. В частности, жадная политика \(\pi'(s) \in \arg\max_a q^{\pi}(s, a)\) не хуже \(\pi\).

Доказательство. Условие (4.1) означает покомпонентно \(V^{\pi} \le \mathcal{B}^{\pi'} V^{\pi}\), где \(\mathcal{B}^{\pi'}\) — оператор Беллмана политики \(\pi'\) (конспект 3, формула (3.12)). Оператор монотонен (из \(u \le v\) следует \(\mathcal{B}^{\pi'} u \le \mathcal{B}^{\pi'} v\) — все веса под суммами неотрицательны), поэтому, применяя его \(n\) раз:

\[ V^{\pi} \;\le\; \mathcal{B}^{\pi'} V^{\pi} \;\le\; \bigl(\mathcal{B}^{\pi'}\bigr)^2 V^{\pi} \;\le\; \cdots \;\le\; \bigl(\mathcal{B}^{\pi'}\bigr)^n V^{\pi} \;\xrightarrow[n \to \infty]{}\; V^{\pi'}, \]

где сходимость к \(V^{\pi'}\) — теорема Банаха из конспекта 3. Предельный переход сохраняет неравенство. ∎

Так возникает обобщённая итерация политики (англ. generalized policy iteration, GPI) — каркас, в который укладываются почти все алгоритмы траектории:

GPI: чередование оценки и жадного улучшения до стабилизации политики. Разными будут только способы выполнять шаг «оценка».

Числовой пример этой теоремы уже встречался: в разобранном примере конспекта 3 жадный выбор действия поднял ценность состояния с 4,688 до 4,82.

2. On-policy и off-policy

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

3. Монте-Карло: учиться по завершённым эпизодам

Пусть модель неизвестна, задача эпизодическая, политика \(\pi\) фиксирована. Доступны независимые эпизоды \(S_0, A_0, R_1, S_1, \ldots, S_\tau = T\); награды ограничены, эпизод завершается почти наверное. Идея Монте-Карло — прямое использование определения \(V^\pi(s) = \langle G_t | S_t = s\rangle\): наблюдать возвраты и усреднять.

First-visit MC усредняет возвраты после первого появления состояния \(s\) в каждом эпизоде:

\[ \hat{v}^{\mathrm{FV}}_n(s) = \frac{1}{n} \sum_{i=1}^{n} G^{\mathrm{FV}}_i(s). \tag{4.2}\]

Теорема (сходимость first-visit MC). Оценка (4.2) несмещённа и сходится к \(V^\pi(s)\) почти наверное.

Доказательство. Величины \(G^{\mathrm{FV}}_i(s)\) вычисляются по независимым эпизодам — значит, независимы. По марковскому свойству распределение хвоста траектории после момента первого попадания в \(s\) зависит только от \(s\) (и политики), поэтому каждый \(G^{\mathrm{FV}}_i(s)\) распределён как \(G_t \,|\, S_t = s\) и \(\langle G^{\mathrm{FV}}_i(s)\rangle = V^\pi(s)\) — отсюда несмещённость (линейность ожидания, как в конспекте 2, формула (2.9)). Награды ограничены и эпизод конечен почти наверное — дисперсия конечна, и по усиленному закону больших чисел среднее i.i.d.-величин сходится к их ожиданию. ∎

Every-visit MC использует все посещения состояния в эпизоде: если \(K_i(s)\) — число посещений в \(i\)-м эпизоде, а \(X_i(s)\) — сумма возвратов после каждого из них, то

\[ \hat{v}^{\mathrm{EV}}_n(s) = \frac{\sum_{i=1}^n X_i(s)}{\sum_{i=1}^n K_i(s)}. \tag{4.3}\]

Возвраты внутри одного эпизода зависимы, и аргумент с i.i.d.-выборкой не проходит. Сходимость спасает изящная лемма: \(\langle X_1(s)\rangle = V^\pi(s)\,\langle K_1(s)\rangle\). Действительно, \(\langle \mathbb{1}\{S_t = s\}\, G_t \rangle = V^\pi(s)\, P(S_t = s)\) (внутреннее ожидание возврата при \(S_t = s\) равно \(V^\pi(s)\)), и суммирование по \(t\) даёт слева \(\langle X_1\rangle\), справа — \(V^\pi(s)\sum_t P(S_t = s) = V^\pi(s)\langle K_1\rangle\). Тогда по закону больших чисел числитель и знаменатель (4.3), делённые на \(n\), сходятся к \(\langle X_1\rangle\) и \(\langle K_1\rangle\), а их отношение — к \(V^\pi(s)\). Оба варианта сходятся к одному пределу; first-visit статистически прозрачнее, every-visit выжимает больше из каждого эпизода.

На практике среднее считают инкрементально — в точности схемой из конспекта 2, формула (2.12):

\[ V(s) \;\leftarrow\; V(s) + \alpha \bigl( G - V(s) \bigr), \tag{4.4}\]

с \(\alpha = 1/n\) для точного среднего или постоянным \(\alpha\) для меняющихся сред. Цель обновления — полный наблюдённый возврат \(G\).

Код из конспекта преподавателя — Монте-Карло для цепочки из конспекта 3 (модель \(P\) здесь используется только средой для генерации переходов; агент её не знает):

states      = np.arange(len(r))             # [0,1,2,3,4,5]
terminals   = [3, 4]                        # терминальные состояния
rews, steps = [], []
s0          = 0                             # стартовое состояние

for _ in range(10000):                      # 10000 эпизодов
    rew, s, discont = 0, s0, 1
    for i in range(100):                    # ограничение длины на всякий случай
        s = np.random.choice(states, p=P[s]) # переход по распределению среды
        rew += r[s] * discont               # накапливаем возврат
        discont *= gamma                    # усиливаем дисконт
        if s in terminals:                  # эпизод окончен
            break
    rews.append(rew)
    steps.append(i + 1)

print("V(%d) = %7.2f ± %5.4f" % (s0, np.mean(rews), np.std(rews)/len(rews)**0.5))
# V(0) = -1.19 ± 0.04   — точное значение из конспекта 3: -1.195

Ошибка убывает как \(\sigma/\sqrt{N}\) (конспект 2, формула (2.10)): оценка честно сошлась к точному значению \(-1{,}195\), полученному решением линейной системы, — но потребовала 10 000 завершённых эпизодов.

Типичная ошибка Пытаются применять Монте-Карло в продолжающихся задачах или обновлять оценку до конца эпизода. Цель обновления (4.4) — полный возврат G, который известен только после терминального состояния: MC принципиально ждёт конца эпизода. Для сред без конца эпизода нужен TD (раздел 6).

4. От оценивания к управлению: ε-мягкие политики

Для GPI нужна не \(V^\pi\), а \(Q^\pi\): улучшение через \(V\) требует одношагового просмотра вперёд по модели \(p(s', r|s, a)\), которой нет. Оценка \(Q^\pi(s, a)\) строится тем же Монте-Карло по парам «состояние–действие». Но возникает проблема: жадная политика перестаёт выбирать «плохие» на вид действия, их оценки замерзают — знакомая по бандитам (конспект 2) ловушка. Теоретический выход — exploring starts (каждый эпизод стартует из случайной пары \((s, a)\)), но практичнее заставить разведывать саму политику.

Политика называется ε-мягкой (англ. ε-soft), если \(\pi(a|s) \ge \varepsilon / |\mathcal{A}(s)|\) для всех \(s, a\). ε-жадная политика по текущей оценке \(Q\) (конспект 2, формула (2.6)) — ε-мягкая. Для них теорема об улучшении сохраняется.

Теорема (ε-мягкое улучшение). Пусть \(\pi\) — ε-мягкая политика, \(\pi'\) — ε-жадная относительно \(q^\pi\). Тогда \(V^{\pi'}(s) \ge V^{\pi}(s)\) для всех \(s\).

Доказательство. Обозначим \(m = |\mathcal{A}(s)|\), \(M = \max_a q^\pi(s, a)\). Раз \(\pi\) ε-мягкая, её можно записать как \(\pi(a|s) = \varepsilon/m + \delta_a\), где \(\delta_a \ge 0\) и \(\sum_a \delta_a = 1 - \varepsilon\). Тогда

\[ q^{\pi}(s, \pi) = \frac{\varepsilon}{m} \sum_a q^{\pi}(s, a) + \sum_a \delta_a\, q^{\pi}(s, a) \;\le\; \frac{\varepsilon}{m} \sum_a q^{\pi}(s, a) + (1 - \varepsilon)\, M \;=\; q^{\pi}(s, \pi'), \tag{4.5}\]

поскольку ε-жадная \(\pi'\) кладёт массу \(1-\varepsilon\) именно на максимум \(M\), а обязательную долю \(\varepsilon/m\) — на каждое действие. Левая часть равна \(V^\pi(s)\) (конспект 3, формула (3.7)), и условие (4.1) теоремы об улучшении выполнено. ∎

Итого on-policy Монте-Карло управление: генерировать эпизоды ε-жадной политикой, обновлять \(Q\) по (4.4), после эпизода делать политику ε-жадной по новому \(Q\). Это первый полный алгоритм обучения без модели — сэмплируемый GPI.

5. Off-policy: важностная выборка

Пусть данные собраны политикой \(\mu\), а оценить нужно \(q^\pi\). Обязательное условие покрытия:

\[ \pi(a|s) > 0 \;\Longrightarrow\; \mu(a|s) > 0 \tag{4.6}\]

— иначе целевой политике нужны действия, которых в данных нет вовсе. Коррекция распределений выполняется важностной выборкой (англ. importance sampling): каждому эпизоду приписывается вес — отношение вероятностей его хвоста при двух политиках:

\[ \rho = \prod_{k=1}^{\tau-1} \frac{\pi(A_k | S_k)}{\mu(A_k | S_k)}, \qquad \hat{q}^{\mathrm{OIS}}_n(s, a) = \frac{1}{n} \sum_{i=1}^{n} \rho_i\, G^{(i)}. \tag{4.7}\]

Теорема (несмещённость). При условии (4.6): \(\bigl\langle \rho\, G \,\big|\, S_0 = s, A_0 = a \bigr\rangle_{\mu} = q^{\pi}(s, a)\).

Доказательство. Вероятность хвоста траектории \(h\) при политике \(\mu\) — это произведение \(\prod_k \mu(a_k|s_k)\, p(s_{k+1}, r_{k+1}|s_k, a_k)\). Умножение на \(\rho(h)\) заменяет каждый множитель \(\mu(a_k|s_k)\) на \(\pi(a_k|s_k)\) — вероятности среды сокращаются и остаётся ровно \(P_\pi(h|s,a)\):

\[ \bigl\langle \rho G \bigr\rangle_{\mu} = \sum_h \rho(h)\, G(h)\, P_\mu(h|s,a) = \sum_h G(h)\, P_\pi(h|s,a) = q^{\pi}(s, a). \;\blacksquare \]

Замечательно, что модель среды в \(\rho\) не входит — только отношения политик. Плата — дисперсия: произведение отношений на длинных эпизодах может взрываться. Поэтому на практике часто берут взвешенную важностную выборку

\[ \hat{q}^{\mathrm{WIS}}_n(s, a) = \frac{\sum_i \rho_i G^{(i)}}{\sum_i \rho_i} \tag{4.8}\]

— она смещена на конечных выборках, но её дисперсия существенно меньше: классический размен смещения на дисперсию, который в этом конспекте встретится ещё раз.

6. TD(0): учиться, не дожидаясь конца

Монте-Карло использует в качестве цели обновления полный возврат \(G_t\). Но по свойству одного перехода (конспект 3, формула (3.9)) ожидание возврата равно ожиданию величины \(R_{t+1} + \gamma V^{\pi}(S_{t+1})\). Заменим в (4.4) цель на её одношаговую версию, подставив вместо неизвестного \(V^\pi\) текущую оценку \(V\):

\[ V(S_t) \;\leftarrow\; V(S_t) + \alpha \bigl[ R_{t+1} + \gamma V(S_{t+1}) - V(S_t) \bigr]. \tag{4.9}\]

Это алгоритм TD(0) (англ. temporal difference — «временна́я разность»). Величина в скобках —

\[ \delta_t = R_{t+1} + \gamma V(S_{t+1}) - V(S_t) \tag{4.10}\]

— называется TD-ошибкой; обновление записывается как \(V(S_t) \leftarrow V(S_t) + \alpha\, \delta_t\). Знак читается напрямую: \(\delta_t > 0\) — переход оказался позитивно неожиданным (лучше текущего ожидания, оценку поднять), \(\delta_t < 0\) — негативно неожиданным. Запомните эту величину: она вернётся как главный обучающий сигнал в актор-критике (конспект 10).

Использование собственной оценки \(V\) внутри цели обновления называется бутстрапом (англ. bootstrap). У Монте-Карло бутстрапа нет — его цель \(G_t\) от оценки не зависит; у TD(0) — есть, и это источник и силы (обновление на каждом шаге), и смещения (цель опирается на ещё неточную оценку).

Утверждение (TD-ошибка как индикатор Беллмана). Если \(V = V^{\pi}\), то для любого состояния

\[ \bigl\langle \delta_t \,\big|\, S_t = s \bigr\rangle_{\pi} = 0. \tag{4.11}\]

Доказательство. Подставим \(V^\pi\) в (4.10) и возьмём условное ожидание: \(\langle R_{t+1} + \gamma V^{\pi}(S_{t+1}) | s\rangle_\pi - V^{\pi}(s)\). Первое слагаемое по свойству одного перехода равно \(V^{\pi}(s)\) — разность нулевая. ∎

То есть TD-ошибка измеряет локальное нарушение уравнения Беллмана: у точной функции ценности она в среднем нулевая, и обновления (4.9) прекращают её сдвигать. TD(0) — это стохастическая аппроксимация итераций оператора Беллмана из конспекта 3: вместо точного усреднения по модели — одна наблюдённая реализация перехода. В табличном случае TD(0) сходится к \(V^\pi\) почти наверное, если каждое состояние посещается бесконечно часто, а шаги удовлетворяют условиям Роббинса–Монро:

\[ \sum_{t} \alpha_t = \infty, \qquad \sum_{t} \alpha_t^2 < \infty \tag{4.12}\]

(первый ряд расходится — алгоритм не перестаёт учиться слишком рано; второй сходится — суммарный вклад шума остаётся конечным; пример: \(\alpha_t = 1/t\)). При постоянном \(\alpha\) сходимость точной нет — оценка колеблется вокруг \(V^\pi\) в полосе, пропорциональной \(\alpha\), — знакомый по бандитам компромисс.

TD(0) для цепочки из конспекта 3 — десять строк numpy (сравните с MC-кодом выше: обновление внутри шага, а не после эпизода):

V = np.zeros(6)                              # оценки ценностей
alpha, gamma = 0.1, 0.9

for _ in range(10000):                      # эпизоды
    s = np.random.randint(3)                # старт из 0, 1 или 2
    while True:
        s2 = np.random.choice(states, p=P[s])
        target = r[s2] + gamma * (0 if s2 in terminals else V[s2])
        V[s] += alpha * (target - V[s])      # TD-обновление (4.9)
        if s2 in terminals:
            break
        s = s2
Типичная ошибка Забывают, что ценность терминального состояния равна нулю, и подставляют в цель (4.9) оценку V терминального состояния. Будущих наград после конца эпизода нет: в цели последнего перехода должно стоять только r. Ошибка коварна тем, что оценки всё равно «сходятся» — но к решению другой, неверной системы уравнений.

7. Спектр между TD и Монте-Карло

Одношаговая цель — частный случай. Для любого \(n\) определим n-шаговый возврат: \(n\) реальных наград, а дальше — бутстрап:

\[ G^{(n)}_t = R_{t+1} + \gamma R_{t+2} + \cdots + \gamma^{n-1} R_{t+n} + \gamma^{n} V(S_{t+n}). \tag{4.13}\]

При \(n = 1\) формула (4.13) — в точности TD-цель из (4.9). При \(n \ge T - t\) (до конца эпизода) бутстрап-член исчезает — \(V\) терминального состояния равно нулю — и \(G^{(n)}_t\) совпадает с полным возвратом \(G_t\), то есть с целью Монте-Карло. TD и MC — не два разных мира, а края одного спектра:

Рост n уменьшает бутстрап-смещение (цель ближе к реальному возврату), но увеличивает дисперсию (больше случайных наград в цели). Оптимум обычно посередине.

Тренажёр: Монте-Карло против TD(0)
ошибка оценки по эпизодам: MC — оранжевый, TD — синий

Та же цепочка, что в конспекте 3 (точные ценности V* = −1.195, 1.861, 0.647 известны из решения линейной системы); эпизоды стартуют равновероятно из состояний 0–2, оба метода учатся по одним и тем же эпизодам с одинаковым α по формуле (4.4): MC — с целью-возвратом после конца эпизода, TD — с одношаговой целью (4.9) на каждом переходе. При постоянном α ошибка не уходит в ноль, а колеблется в полосе (условия Роббинса–Монро (4.12) нарушены — уменьшите α и сравните ширину полосы). Сравните и старты: TD быстро подтягивает соседей терминальных состояний, MC — несмещён, но шумит сильнее.

Контрольные вопросы