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

Уравнения Беллмана

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

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

Рекурсия

Ценность состояния — это немедленная награда плюс дисконтированная ценность того, куда попадёшь. Записанное формально, это уравнение, а не определение:

V(s)=maxa[R(s,a)+γsP(ss,a)V(s)]V^*(s) = \htmlData{k=max}{\max_a} \Big[\htmlData{k=now}{R(s,a)} + \gamma \htmlData{k=later}{\textstyle\sum_{s'} P(s'\mid s,a) V^*(s')}\Big]

Заметьте: слева и справа стоит одна и та же неизвестная функция. Это система уравнений, а не формула для вычисления. Без она линейна и решается обращением матрицы; с максимумом — нет, и вот тут появляется весь аппарат.

Оператор и сжатие

Обозначим правую часть как оператор TT, действующий на функции: (TV)(s)=maxa[](TV)(s) = \max_a[\dots]. Тогда уравнение Беллмана — это V=TVV = TV, то есть поиск неподвижной точки.

Ключевое свойство:

TUTWγUW\|TU - TW\|_\infty \le \gamma\, \|U - W\|_\infty

Оператор сближает любые две функции в γ\gamma раз. Проверено численно на случайном MDP с шестью состояниями и тремя действиями — во всех пробах неравенство выполняется с большим запасом (например, 1.251.25 против границы 5.865.86).

Отсюда по теореме Банаха о неподвижной точке получается сразу всё:

следствиечто означает
неподвижная точка существуетоптимальная ценность определена
она единственна«оптимально» — не двусмысленно
итерации Vk+1=TVkV_{k+1} = TV_k сходятся к нейvalue iteration работает
из любого начального V0V_0инициализация не важна для сходимости
со скоростью γk\gamma^kсходимость геометрическая

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

Практическая оценка ошибки

Теоретическая оценка γkV0V\gamma^k\|V_0 - V^*\| бесполезна: VV^* неизвестна. Работает другая, где всё измеримо:

VkVγ1γVkVk1\|V_k - V^*\|_\infty \le \frac{\gamma}{1-\gamma}\,\|V_k - V_{k-1}\|_\infty

Справа — изменение за последний проход, то есть ровно то, что показывает виджет. Измерено на том же случайном MDP при γ=0.9\gamma = 0.9:

проходреальная ошибкаизменениеграница
223.4203.4200.4060.4063.6583.658
552.4882.4880.2760.2762.4882.488
10101.4691.4690.1630.1631.4691.469

Начиная с пятого прохода граница становится точной до шестого знака. Причина в том, что итерация выходит на геометрический режим и ошибка убывает ровно как γ\gamma за проход; тогда j1γj(изменение)\sum_{j\ge1}\gamma^j\cdot(\text{изменение}) и есть остаток. То есть на практике эта оценка не консервативна, а почти точна, и по ней можно останавливаться осознанно.

0.620.730.861-0.110.730.86-0.11-0.110.620.73-0.11-0.110.62

цель стена

дисконт γ 0.9
проходов 3
цена шага -0.04
горизонт 1/(1−γ)
10
значение старта
-0.108
изменение за проход
7.0e-1
проходов до сходимости
7
Каждый проход — одно применение оператора T. Столбец «изменение за проход» — это ‖V_k − V_{k−1}‖: умножьте его на γ/(1−γ) = 9 при γ = 0.9, и получите гарантию на оставшуюся ошибку. Заметьте также, что при нулевом числе проходов ненулевое значение стоит только в цели: оператор разносит его наружу по одной клетке за раз.

Улучшение политики

Второй кирпич, из которого собран следующий урок. Пусть есть политика π\pi и её ценность VπV^\pi. Построим жадную:

π(s)=argmaxa[R(s,a)+γsP(ss,a)Vπ(s)]\pi'(s) = \arg\max_a \Big[R(s,a) + \gamma \textstyle\sum_{s'} P(s'\mid s,a)V^\pi(s')\Big]

Теорема об улучшении политики: Vπ(s)Vπ(s)V^{\pi'}(s) \ge V^{\pi}(s) для всех ss, причём равенство достигается только если π\pi уже оптимальна.

Утверждение сильнее, чем кажется. Жадность строилась по старой ценности VπV^\pi, а гарантия даётся для новой политики целиком, во всех состояниях и на всём будущем. Не «стало не хуже в среднем», а «не хуже в каждом состоянии». Именно поэтому чередование «оценить — улучшить» не может зациклиться и обязано остановиться на оптимуме.

Ограничение, которое стоит помнить

Всё сказанное требует знания PP и RR — модели среды. Оба уравнения содержат сумму по ss' с вероятностями перехода. Урок 040 показывает, что с этим знанием делать, а урок 050 — как обойтись без него.

Второе ограничение — размер. Проход по всем состояниям стоит O(S2A)O(|S|^2|A|), а S|S| в интересных задачах астрономично: у шахмат порядка 104410^{44} позиций. Точное динамическое программирование — инструмент для малых задач и источник теории для больших, а не метод решения последних.

Итог

  • Уравнение Беллмана — это V=TVV = TV, поиск неподвижной точки, а не формула.
  • TT сжимает с коэффициентом γ\gamma; отсюда существование, единственность и сходимость.
  • Практическая оценка ошибки через изменение за проход почти точна, а не консервативна.
  • Жадное улучшение по VπV^\pi не ухудшает политику ни в одном состоянии.
  • Всё это требует модели среды и перебора всех состояний — отсюда следующие два урока.

Источники

Проверки

0 из 2
  1. Сжатие и неподвижная точка

    Отметьте все верные утверждения об уравнениях Беллмана.

  2. Один проход оператора

    Возьмём цепочку из nn состояний. В каждом доступны два действия:

    • стоять: награда 00, состояние не меняется;
    • идти вперёд: награда rewards[s], переход в состояние s+1s+1; из последнего состояния переход ведёт в терминальное с ценностью 00.

    Реализуйте bellman_backup(values, rewards, gamma) — примените оператор Беллмана один раз к переданным values и верните [first_value, largest_change, error_bound, best_value]:

    • first_value — новое значение состояния 00;
    • largest_change = VnewVold\|V_{\text{new}} - V_{\text{old}}\|_\infty;
    • error_bound = γ1γlargest_change\dfrac{\gamma}{1-\gamma}\cdot\texttt{largest\_change} — гарантия на оставшееся расстояние до неподвижной точки;
    • best_value — наибольшее из новых значений.

    Новое значение состояния равно max(0+γV(s), rs+γV(s+1))\max(0 + \gamma V(s),\ r_s + \gamma V(s+1)), где V(n)=0V(n) = 0.

    функция bellman_backup

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

    Ctrl/⌘ + Enter