Q-learning учится на отдельных переходах, не зная таблицу вероятностей среды: одно наблюдение подставляется вместо математического ожидания, и ошибка этой подстановки со временем усредняется. Actor–critic решает ту же задачу разделением труда: actor меняет поведение, critic оценивает, оказалось ли действие лучше ожидания.

Один переход вместо полной модели

В марковском процессе решений итерация ценности опиралась на сумму по всем ss' с известными вероятностями P(ss,a)P(s'\mid s,a). Робот в настоящем коридоре, станция велопроката, накопитель в здании такой таблицы не имеют. Им доступен один-единственный факт опыта — четвёрка

(st,at,rt+1,st+1).(s_t,a_t,r_{t+1},s_{t+1}).

Из этой четвёрки нужно извлечь всё. Идея temporal difference проста до неприличия: там, где уравнение Беллмана требует ожидания, подставим одну случайную реализацию и сделаем маленький шаг в её сторону. Ожидание восстановится не в одном обновлении, а в среднем по многим.

Q-learning оценивает ценность действия при оптимальном продолжении. Для наблюдаемого перехода беллмановская цель равна

yt=rt+1+γmaxaQ(st+1,a).y_t=r_{t+1}+\gamma\max_{a'}Q(s_{t+1},a').

Разница между целью и текущей оценкой называется ошибкой временной разности:

δt=ytQ(st,at).\delta_t=y_t-Q(s_t,a_t).

Она и есть весь учебный сигнал:

Q(st,at)Q(st,at)+αtδt.Q(s_t,a_t)\leftarrow Q(s_t,a_t)+\alpha_t\,\delta_t.

Если переход оказался лучше текущего ожидания, δt>0\delta_t>0 и ценность растёт. Если хуже — падает. Обновления шумны, потому что вместо ожидания стоит одна реализация, но в среднем они направлены к решению уравнения Беллмана.

Беллман писал это про задачу с известной моделью. TD-методы берут то же свойство и превращают его в правило пересчёта одной ячейки таблицы по одному наблюдению — без суммы, без вероятностей, без карты мира.

Почему подстановка одного перехода работает

Запишем истинное уравнение оптимальности для пары (s,a)(s,a):

Q(s,a)=E[r+γmaxaQ(s,a)].Q^*(s,a)=\mathbb E\bigl[r+\gamma\max_{a'}Q^*(s',a')\bigr].

Оператор в правой части обозначим TQ\mathcal TQ. Он является сжатием: для любых таблиц Q1,Q2Q_1,Q_2

TQ1TQ2γQ1Q2.\|\mathcal TQ_1-\mathcal TQ_2\|_\infty\le\gamma\|Q_1-Q_2\|_\infty .

Если бы мы умели вычислять TQ\mathcal TQ точно, повторное применение сходилось бы к неподвижной точке QQ^* по теореме Банаха. Мы не умеем: у нас есть только несмещённая выборочная версия

T^Q(s,a)=r+γmaxaQ(s,a),E[T^Q]=TQ.\widehat{\mathcal T}Q(s,a)=r+\gamma\max_{a'}Q(s',a'),\qquad \mathbb E\bigl[\widehat{\mathcal T}Q\bigr]=\mathcal TQ .

Поэтому TD-обновление — это в точности стохастическая аппроксимация из урока о SGD: шаг делается по зашумлённой оценке нужного направления. Тот же аппарат, та же плата — дисперсия, и та же награда — отсутствие необходимости знать всё сразу.

Волна ценности идёт назад

Пока таблица пуста, TD-ошибка отлична от нуля только там, где встретилась настоящая награда. В следующем эпизоде ненулевой становится соседняя ячейка, и знание ползёт от цели к старту со скоростью один переход за эпизод.

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

Цепочка из пяти состояний, награда +1+1 в конце, α=0,5\alpha=0{,}5, γ=1\gamma=1. Слева обновления идут по ходу движения: после первого эпизода изменилась лишь последняя ячейка (0,50{,}5), после второго — предпоследняя (0,250{,}25), и до старта сигнал доходит только к пятому эпизоду (0,0310{,}031). Справа тот же опыт перепрошит в обратном порядке: старт получает 0,0310{,}031 уже после первого эпизода. Данные одни и те же — порядок обновлений решает, как быстро знание доходит до начала.

Отсюда два практических вывода. Первый: длинные цепочки обучаются мучительно медленно, и именно поэтому существуют nn-шаговые возвраты и повтор опыта в обратном порядке. Второй: скорость обучения — свойство не только алгоритма, но и того, в каком порядке ему скармливают собственную память.

Каким должен быть шаг

Табличный Q-learning сходится к QQ^* с вероятностью 1 при двух условиях: каждая пара (s,a)(s,a) посещается бесконечно часто, а шаги удовлетворяют условиям Роббинса–Монро

tαt(s,a)=,tαt2(s,a)<.\sum_t\alpha_t(s,a)=\infty,\qquad \sum_t\alpha_t^2(s,a)<\infty .

Первое требование означает «шагов хватит, чтобы уйти от любой начальной ошибки», второе — «шум в конце концов усредняется». Постоянный шаг второму условию не удовлетворяет: оценка вечно дрожит вокруг цели с амплитудой порядка α\alpha. Классический выбор — αn=1/np\alpha_n=1/n^{\,p} с p(0,5;1]p\in(0{,}5;1], где nn — число посещений именно этой ячейки.

На реальной задаче эту разницу видно глазами: на нашей станции велопроката (о ней ниже) постоянный шаг α=0,02\alpha=0{,}02 за 8000 эпизодов дотягивает лишь до 88,21 руб., постоянный α=0,6\alpha=0{,}6 — до 101,04 руб., а убывающий αn=1/n0,7\alpha_n=1/n^{0{,}7} — до 111,15 руб. при оптимуме 114,88 руб.

Off-policy: действуем одним правилом, учим другое

Поведение агента может быть ε\varepsilon-жадным, но цель содержит maxaQ(s,a)\max_{a'}Q(s',a') — оценку идеального продолжения. Значит, Q-learning учит жадную target-policy по данным, собранным другой, исследующей behavior-policy. Это и называется off-policy.

SARSA поступает иначе: в цель подставляется действие, которое агент действительно выбрал:

Q(st,at)Q(st,at)+α[rt+1+γQ(st+1,at+1)Q(st,at)].Q(s_t,a_t)\leftarrow Q(s_t,a_t)+ \alpha\left[r_{t+1}+\gamma Q(s_{t+1},a_{t+1})-Q(s_t,a_t)\right].

Разница выглядит косметической — maxaQ(s,a)\max_{a'}Q(s',a') против Q(s,a)Q(s',a') — но она меняет то, о чём вообще идёт речь.

Обрыв: цена оптимизма

Возьмём сетку 4×84\times8. Старт слева внизу, цель справа внизу, между ними нижний ряд — обрыв: попадание в него стоит 100-100 и возвращает на старт. Каждый обычный шаг стоит 1-1. Оба алгоритма живут по одной и той же ε\varepsilon-жадной политике с ε=0,1\varepsilon=0{,}1 и α=0,5\alpha=0{,}5.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Слева сетка с обрывом: красный маршрут Q-learning идёт по ряду прямо над обрывом, синий маршрут SARSA поднимается к верхнему ряду; справа кривые среднего возврата, у SARSA выше
Рис. 71.2. Off-policy идёт по краю, on-policy отходит от края

Жадные маршруты после обучения и средний возврат по 100 запускам. Q-learning находит кратчайший путь длиной 9 шагов по самому краю: он оценивает жадное продолжение, в котором случайных шагов не бывает. SARSA строит обход длиной 13 шагов через верхние ряды, потому что его цель помнит про ε\varepsilon-шум, который иногда столкнёт агента вниз. Средний возврат за последние 100 эпизодов: 30,7-30{,}7 у Q-learning против 20,7-20{,}7 у SARSA. Оптимальная политика найдена одним, а живётся лучше другому.

Это не дефект Q-learning, а честный ответ на другой вопрос. Q-learning отвечает: «как ходить, если исследование выключат». SARSA: «как ходить, если я останусь таким же нервным». Выбор между ними — вопрос о том, кто будет исполнять политику, а не о том, чья математика красивее.

Исследование нельзя выключить слишком рано

Жадная политика

π(s)=argmaxaQ(s,a)\pi(s)=\arg\max_aQ(s,a)

использует накопленное знание, но ничего не проверяет. Ячейка с ошибочно низкой оценкой не будет посещена никогда, и ошибка останется навсегда. Самый простой ремонт — ε\varepsilon-greedy:

π(as)={1ε+ε/A,a=argmaxbQ(s,b),ε/A,иначе.\pi(a\mid s)= \begin{cases} 1-\varepsilon+\varepsilon/|A|, & a=\arg\max_bQ(s,b),\\[2pt] \varepsilon/|A|, & \text{иначе}. \end{cases}

На нашей станции велопроката при нулевой инициализации и ε=0\varepsilon=0 агент навсегда застревает в политике «ничего не завозить» и получает 25,00 руб. против оптимума 114,88 руб. Достаточно ε=0,3\varepsilon=0{,}3, чтобы за 6000 эпизодов дойти до 113,40 руб., причём даже расточительное ε=0,6\varepsilon=0{,}6 даёт 113,16 руб.: исследование стоит дорого во время обучения, но оценивается жадная политика, а она от него только выигрывает.

Фельдбаум: управление, которое учится по дороге

Дилемму «изучать или использовать» в советской теории автоматического управления сформулировали раньше, чем появилось обучение с подкреплением. Александр Аронович Фельдбаум в 1960–1961 годах опубликовал в «Автоматике и телемеханике» цикл статей «Теория дуального управления». Его тезис: если характеристики объекта неизвестны, управляющее воздействие обязано играть двойную роль — вести объект к цели и одновременно доставлять информацию о нём. Оптимальное управление в условиях неопределённости не бывает чисто исполнительным: оно всегда содержит пробующую составляющую, и величина этой пробы сама подлежит оптимизации.

Наше ε\varepsilon — самая грубая из возможных реализаций этой идеи: проба, не зависящая ни от состояния, ни от того, много ли мы уже знаем. Фельдбаум ставил вопрос строже — какой должна быть оптимальная проба, если есть апостериорное распределение параметров объекта. Ответ в общем виде оказывается вычислительно чудовищным, и вся последующая история — от бандитов с UCB и Томпсоном до современного RL — это поиск приемлемых приближений к дуальному управлению.

Станция велопроката: учимся без таблицы вероятностей

Возьмём реальные данные: 17 379 часов почасовых наблюдений велопроката — тот же файл, что в уроке о базисных признаках. Спрос на станции в час tt — случайная величина с распределением, снятым прямо с этих наблюдений: минимум приходится на 4 часа ночи (в среднем 0,00 велосипеда), пик — на 17 часов (3,69 велосипеда).

Среда устроена так: ёмкость станции 10 велосипедов, эпизод длится сутки, старт с пятью велосипедами. Каждый час агент выбирает завоз at{0,1,2}a_t\in\{0,1,2\} по 2 рубля за велосипед, затем приходит спрос dtd_t и обслуживается min(qt+at,dt)\min(q_t+a_t,d_t) поездок по 5 рублей:

rt=5min(qt+at,dt)2at,r_t=5\min(q_t+a_t,d_t)-2a_t, qt+1=min(10,qt+at)min(qt+at,dt).q_{t+1}=\min(10,q_t+a_t)-\min(q_t+a_t,d_t).

Мы, авторы задачи, знаем распределение спроса и можем посчитать точный оптимум обратным динамическим программированием: V=114,88V^*=114{,}88 руб. за сутки. Агент его не знает: у него 792 ячейки (t,q,a)(t,q,a) и поток переходов.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Слева столбики среднего спроса по часам с ночным провалом и вечерним пиком; справа кривые ценности выученной политики: Q-learning почти достигает штриховой линии оптимума, actor–critic останавливается ниже
Рис. 71.3. Ученик без модели догоняет точный оптимум

Слева — реальный почасовой спрос, из которого построена среда. Справа — ценность жадной политики, посчитанная точно, по мере накопления опыта. Q-learning с убывающим шагом достигает 98% оптимума за 5250 эпизодов и заканчивает на 114,22 руб. — отставание 0,66 руб. Табличный actor–critic выходит на 107,10 руб.: мягкая стохастическая политика платит за плавность. Политика «никогда не завозить» даёт 25,00 руб. — цена отсутствия обучения.

Actor и critic: разделение труда

Актёр πϕ(as)\pi_\phi(a\mid s) — дифференцируемая стратегия. Критик Vψ(s)V_\psi(s) — оценка ценности состояния. Тот же TD-сигнал

δt=rt+1+γVψ(st+1)Vψ(st)\delta_t=r_{t+1}+\gamma V_\psi(s_{t+1})-V_\psi(s_t)

работает для обоих, но по-разному. Критик уменьшает δt2\delta_t^2, актёр получает направление

ϕϕ+ηδtϕlogπϕ(atst).\phi\leftarrow\phi+\eta\,\delta_t\nabla_\phi\log\pi_\phi(a_t\mid s_t).

Формула читается буквально: «если получилось лучше ожидаемого, сделай это действие вероятнее». Величина δt\delta_t служит приближением преимущества

Aπ(s,a)=Qπ(s,a)Vπ(s),A^\pi(s,a)=Q^\pi(s,a)-V^\pi(s),

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

Для дискретных действий актёр обычно выдаёт softmax πi=ezi/jezj\pi_i=e^{z_i}/\sum_je^{z_j}, и градиент логарифма имеет простой вид

zlogπk=ekπ.\nabla_z\log\pi_k=e_k-\pi .

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

Почему baseline не смещает, но помогает

Градиент политики можно записать через любую функцию b(s)b(s), не зависящую от действия:

ϕJ=E[(Qπ(s,a)b(s))ϕlogπϕ(as)].\nabla_\phi J=\mathbb E\bigl[(Q^\pi(s,a)-b(s))\nabla_\phi\log\pi_\phi(a\mid s)\bigr].

Вычитание b(s)b(s) ничего не меняет в ожидании, потому что

Eaπ[ϕlogπϕ(as)]=aπϕ(as)ϕπϕ(as)πϕ(as)=ϕaπϕ(as)=ϕ1=0.\mathbb E_{a\sim\pi}\bigl[\nabla_\phi\log\pi_\phi(a\mid s)\bigr] =\sum_a\pi_\phi(a\mid s)\frac{\nabla_\phi\pi_\phi(a\mid s)}{\pi_\phi(a\mid s)} =\nabla_\phi\sum_a\pi_\phi(a\mid s)=\nabla_\phi1=0 .

Зато дисперсия меняется сильно: выбор b(s)=Vπ(s)b(s)=V^\pi(s) убирает из сигнала всё, что относится к состоянию, а не к решению. В задаче, где любое действие в богатом состоянии приносит +100+100, а в бедном 100-100, без baseline актёр учит в основном шум состояния. Именно поэтому критик в actor–critic не роскошь, а средство борьбы с дисперсией — ровно как в уроке о смещении и разбросе, только теперь дисперсия убивает не прогноз, а обучение.

Критик ошибается — актёр расплачивается

Актёр не имеет собственного доступа к истине: он видит только δt\delta_t, которую выдал критик. Добавим к TD-сигналу независимый шум N(0,σ2)\mathcal N(0,\sigma^2) — модель критика, который ошибается не систематически, а просто беспорядочно.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Слева три кривые вероятностей действий: у лучшего действия вероятность растёт от одной трети до 0,97; справа три кривые обучения при разном шуме критика, чем больше шум, тем ниже плато
Рис. 71.4. Актёр верит критику на слово

Слева — механика: положительные δ\delta у третьего действия поднимают его вероятность с 0,3330{,}333 до 0,970{,}97 за шесть десятков обновлений. Справа — что бывает, когда сигнал испорчен: на станции велопроката за 8000 эпизодов чистый actor–critic доходит до 105,63 руб., при шуме критика σ=10\sigma=10 — до 94,40 руб., при σ=25\sigma=25 — до 90,68 руб. Потеря почти пятнадцати рублей вызвана не плохой политикой, а плохой оценкой: актёр усиливает случайные действия, приняв ошибку критика за свидетельство.

Сколько шагов брать до того, как поверить критику

Между чистым TD (один шаг и оценка) и Monte Carlo (весь эпизод) лежит семейство nn-шаговых возвратов:

Gt(n)=k=0n1γkrt+k+1+γnV(st+n).G_t^{(n)}=\sum_{k=0}^{n-1}\gamma^kr_{t+k+1}+\gamma^nV(s_{t+n}).

Малое nn означает много доверия критику: мало дисперсии, но всё его смещение попадает в цель. Большое nn — много реального опыта: смещение уходит, дисперсия суммы наград растёт линейно по nn.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Три кривые по длине возврата n: квадрат смещения падает, дисперсия растёт линейно, суммарная ошибка имеет минимум при n равном девяти
Рис. 71.5. У длины возврата есть оптимум

Модельный пример с фиксированным seed: цепочка из 12 шагов, награды N(1,1)\mathcal N(1,1), истинная ценность 12, критик систематически занижает остаток пути в 0,6 раза. Одношаговая цель даёт смещение 4,40-4{,}40 и ошибку 20,33; полный Monte Carlo избавляется от смещения, но набирает дисперсию и даёт 11,95; минимум 10,40 приходится на n=9n=9. Кривая у минимума плоская — точное значение nn обычно не критично, критично не оказаться на краю.

Максимум шумных оценок смещён вверх

Даже если каждая оценка Q^a\widehat Q_a несмещённа, максимум по действиям — нет. По неравенству Йенсена для выпуклой функции максимума

EmaxaQ^amaxaEQ^a.\mathbb E\max_a\widehat Q_a\ge\max_a\mathbb E\widehat Q_a .

Для двух независимых N(0,σ2)\mathcal N(0,\sigma^2) разница считается точно: Emax=σ/π0,564σ\mathbb E\max=\sigma/\sqrt\pi\approx0{,}564\sigma. Эксперимент на 100 000 наборов подтверждает: при σ=1\sigma=1 и двух действиях средний максимум равен 0,5660{,}566, при десяти действиях — 1,5391{,}539. При σ=0,1\sigma=0{,}1 и десяти действиях смещение падает до 0,1540{,}154 — оно пропорционально шуму, а значит, исчезает только вместе с ним.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Слева столбики среднего максимума шумных оценок для двух, пяти и десяти действий при трёх уровнях шума; справа доля выбора плохого действия у Q-learning и Double Q-learning по эпизодам
Рис. 71.6. Оптимизм максимума и как его разъединить

Слева: истинная ценность всех действий равна нулю, но средний максимум оценок положителен и растёт с числом действий. Справа: модельная задача, где левое действие ведёт в состояние с восемью бесполезными действиями (награда N(0,1;1)\mathcal N(-0{,}1;1)), а правое сразу даёт ноль. За первые 50 эпизодов Q-learning выбирает заведомо плохое «влево» в 86,2% случаев, Double Q-learning — в 23,1%; к концу обучения 11,2% против 7,0% при оптимуме 5%. Усреднение по 500 запускам.

Лекарство — разделить выбор действия и его оценку:

y=r+γQθˉ(s,argmaxaQθ(s,a)).y=r+\gamma\,Q_{\bar\theta}\bigl(s',\arg\max_aQ_\theta(s',a)\bigr).

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

От таблицы к сети: replay, target-сеть и deadly triad

Для изображения или непрерывного состояния таблица невозможна. Заменим её сетью Qθ(s,a)Q_\theta(s,a) и минимизируем

L(θ)=E[(r+γmaxaQθˉ(s,a)Qθ(s,a))2].\mathcal L(\theta)=\mathbb E\left[\bigl(r+\gamma\max_{a'}Q_{\bar\theta}(s',a') -Q_\theta(s,a)\bigr)^2\right].

Два костыля делают это работоспособным. Target-сеть с параметрами θˉ\bar\theta обновляется медленнее основной — иначе цель убегает синхронно с предсказанием и задача превращается в погоню за собственным хвостом. Replay buffer перемешивает прошлые переходы: соседние наблюдения в потоке почти одинаковы, и градиенты по ним не независимы.

Лаборатория TD

Q-learning, SARSA и actor–critic в мире с обрывом

Загружается живая иллюстрация…

Здесь видно всё сразу. Оставьте Q-learning и следите, как окраска ценности расползается от цели к старту — это тот же процесс, что в таблицах рисунка 71.1, только на плоскости. Затем сравните трёх учеников при одном и том же ε=0,1\varepsilon=0{,}1: жадный маршрут Q-learning прижмётся к обрыву, SARSA уйдёт наверх, и при этом средний возврат у SARSA окажется выше. Поставьте ε=0\varepsilon=0 и нажмите «забыть всё»: обучение остановится почти сразу — таблица не может исправить того, чего не пробует. Наконец, поднимите α\alpha до 0,9 и посмотрите, как ценности начинают дрожать: таблица повторяет последний шумный опыт вместо того, чтобы усреднять.

Offline-ловушка

Предположим, взаимодействовать со средой нельзя, а есть журнал старой политики. Q-learning всё равно берёт максимум по действиям — включая те, которых в журнале почти нет. Аппроксиматор способен назначить им произвольно высокое значение, bootstrap перенесёт это значение назад, и агент уверует в несуществующий выигрыш. Это extrapolation error, и она тем сильнее, чем уже поддержка данных:

надёжноμданные(as)>0 всюду, где πновая(as)>0.\text{надёжно}\quad\Longleftrightarrow\quad \mu_{\text{данные}}(a\mid s)>0\ \text{всюду, где}\ \pi_{\text{новая}}(a\mid s)>0 .

Безопасные offline-методы либо штрафуют действия вне поддержки, либо строят консервативные оценки QQ. Но первый вопрос должен быть другим: нужен ли здесь RL вообще. Если решения не влияют на будущие состояния, достаточно контекстного бандита. Если для фиксированного действия есть хорошие метки исхода, хватит обычного обучения с учителем.

Что должно быть в отчёте

Кривая обучения — самая обманчивая картинка в RL: она показывает результат поведения с исследованием, а внедряют обычно политику без него. Минимальный честный отчёт содержит:

  • ценность итоговой политики без exploration noise, отдельно от кривой;
  • разброс по нескольким seed, а не одну «удачную» кривую;
  • показатели, ради которых всё затевалось (рубли, пики, отказы), а не только reward;
  • число нарушений ограничений и поведение в редких состояниях;
  • деградацию при сдвиге среды — например, при переносе вечернего пика спроса на другие часы без дообучения.

От перехода к устойчивой политике

Q-learning переносит уравнение Беллмана в поток наблюдаемых переходов: подставляет одну реализацию вместо ожидания и платит за это дисперсией и смещением максимума. SARSA отвечает на другой вопрос — как жить с собственным шумом. Actor–critic отделяет выбор действия от оценки продолжения, покупая низкую дисперсию ценой доверия к критику. Общее у них одно: агент учится на данных, которые сам же и породил, поэтому исследование, поддержка действий и честная оценка важнее красивой финальной кривой. Устойчивость нейросетевого RL достигается устройством эксперимента, а не одной формулой.

Задачи