TD-обучение: временные различия

Урок разбирает TD-обучение — способ обновлять ценность сразу, не дожидаясь конца эпизода.

TD-обучение (temporal difference) обновляет оценку ценности на каждом шаге, используя награду и уже имеющуюся оценку следующего состояния, без ожидания конца эпизода.

Лучшее от двух миров

TD объединяет идеи Монте-Карло и динамического программирования. Как MC, он учится на опыте, без модели среды. Как value iteration, он использует уравнение Беллмана — обновляет оценку на основе оценки следующего состояния. Этот приём называют бутстрэппингом: оценку улучшают через другую оценку, а не только через настоящий итоговый результат.

TD-ошибка — двигатель обучения

Сердце метода — TD-ошибка: разница между «тем, что мы думали» и «уточнённой оценкой после одного шага».

TD-ошибка = r + gamma * V(s') - V(s)
новое V(s) = V(s) + alpha * TD-ошибка

Если после действия мир оказался лучше ожиданий (TD-ошибка положительна) — поднимаем оценку состояния; если хуже — опускаем. alpha — скорость обучения (как быстро доверяем новой информации).

# TD(0): оцениваем V(s) по ходу. Цепочка 0..4, цель=4, шаг=-0.1, политика "вправо".
gamma, alpha = 0.9, 0.1
V = {s: 0.0 for s in range(5)}

for episode in range(300):
    s = 0
    while s != 4:
        ns = s + 1
        reward = 1.0 if ns == 4 else -0.1
        # TD-обновление: V(s) += alpha * (r + gamma*V(s') - V(s))
        V[s] += alpha * (reward + gamma * V[ns] - V[s])
        s = ns

for s in range(4):
    print("V(", s, ") =", round(V[s], 2))

Вывод:

V( 0 ) = 0.46
V( 1 ) = 0.62
V( 2 ) = 0.8
V( 3 ) = 1.0

Оценки совпали с тем, что давал Монте-Карло, но TD обновлял V на каждом шаге, ни разу не дожидаясь конца, чтобы посчитать полный возврат.

TD против Монте-Карло

Монте-КарлоTD
Когда обновляетв конце эпизодана каждом шаге
Нужен конец эпизодаданет
Дисперсия / смещениевысокая дисперсия, без смещенияниже дисперсия, но смещение

Как работает под капотом

Бутстрэппинг — это и сила, и слабость TD. Сила: обучение идёт онлайн, по одному шагу, и применимо к непрерывным задачам. Слабость: оценка V(s') сама неточна, поэтому TD на старте смещён. Но по мере обучения оценки уточняются, и метод сходится. Q-learning и SARSA — это TD, применённый к Q-функции вместо V.

Частые ошибки

  • Слишком большой alpha. Оценки скачут и не стабилизируются; слишком маленький — обучение ползёт.
  • Считать TD точным с первого шага. Бутстрэппинг вносит смещение, которое уходит только со временем.
  • Путать TD-ошибку и награду. Награда — часть TD-ошибки, но не вся: ошибка ещё учитывает разницу оценок состояний.

Итоги

  • TD обновляет ценность на каждом шаге по TD-ошибке r + gamma·V(s') − V(s).
  • Бутстрэппинг: оценка улучшается через другую оценку, без ожидания конца эпизода.
  • TD — основа Q-learning и SARSA; компромисс между MC и динамическим программированием.
Проверьте себя
1. Чем TD-обучение отличается от Монте-Карло?
ATD не использует награды
BTD обновляет оценку на каждом шаге, не дожидаясь конца эпизода
CTD требует модель среды
DTD работает только с нейросетями
2. Что такое бутстрэппинг в TD-обучении?
AЗагрузка операционной системы
BУлучшение оценки через другую (текущую) оценку следующего состояния
CСлучайный выбор действий
DСохранение модели на диск
3. Что выражает TD-ошибка r + gamma·V(s') − V(s)?
AСкорость GPU
BНасколько новая (уточнённая) оценка отличается от прежней оценки состояния
CЧисло состояний
DРазмер награды за эпизод