Обучение с подкреплением и выравнивание
Уравнения Беллмана
Сжимающее отображение, неподвижная точка — и откуда берутся все алгоритмы сразу
Рекурсия
Ценность состояния — это немедленная награда плюс дисконтированная ценность того, куда попадёшь. Записанное формально, это уравнение, а не определение:
Заметьте: слева и справа стоит одна и та же неизвестная функция. Это система уравнений, а не
формула для вычисления. Без
Оператор и сжатие
Обозначим правую часть как оператор , действующий на функции: . Тогда уравнение Беллмана — это , то есть поиск неподвижной точки.
Ключевое свойство:
Оператор сближает любые две функции в раз. Проверено численно на случайном MDP с шестью состояниями и тремя действиями — во всех пробах неравенство выполняется с большим запасом (например, против границы ).
Отсюда по теореме Банаха о неподвижной точке получается сразу всё:
| следствие | что означает |
|---|---|
| неподвижная точка существует | оптимальная ценность определена |
| она единственна | «оптимально» — не двусмысленно |
| итерации сходятся к ней | value iteration работает |
| из любого начального | инициализация не важна для сходимости |
| со скоростью | сходимость геометрическая |
Всё это — не пять теорем про обучение с подкреплением, а одна теорема из функционального анализа плюс проверка одного неравенства. Стоит это осознать: содержательная часть здесь — что оператор сжимает, и она держится на дисконте.
Практическая оценка ошибки
Теоретическая оценка бесполезна: неизвестна. Работает другая, где всё измеримо:
Справа — изменение за последний проход, то есть ровно то, что показывает виджет. Измерено на том же случайном MDP при :
| проход | реальная ошибка | изменение | граница |
|---|---|---|---|
Начиная с пятого прохода граница становится точной до шестого знака. Причина в том, что итерация выходит на геометрический режим и ошибка убывает ровно как за проход; тогда и есть остаток. То есть на практике эта оценка не консервативна, а почти точна, и по ней можно останавливаться осознанно.
цель стена
- горизонт 1/(1−γ)
- 10
- значение старта
- -0.108
- изменение за проход
- 7.0e-1
- проходов до сходимости
- 7
Улучшение политики
Второй кирпич, из которого собран следующий урок. Пусть есть политика и её ценность . Построим жадную:
Теорема об улучшении политики: для всех , причём равенство достигается только если уже оптимальна.
Утверждение сильнее, чем кажется. Жадность строилась по старой ценности , а гарантия даётся для новой политики целиком, во всех состояниях и на всём будущем. Не «стало не хуже в среднем», а «не хуже в каждом состоянии». Именно поэтому чередование «оценить — улучшить» не может зациклиться и обязано остановиться на оптимуме.
Ограничение, которое стоит помнить
Всё сказанное требует знания и — модели среды. Оба уравнения содержат сумму по с вероятностями перехода. Урок 040 показывает, что с этим знанием делать, а урок 050 — как обойтись без него.
Второе ограничение — размер. Проход по всем состояниям стоит , а в интересных задачах астрономично: у шахмат порядка позиций. Точное динамическое программирование — инструмент для малых задач и источник теории для больших, а не метод решения последних.
Итог
- Уравнение Беллмана — это , поиск неподвижной точки, а не формула.
- сжимает с коэффициентом ; отсюда существование, единственность и сходимость.
- Практическая оценка ошибки через изменение за проход почти точна, а не консервативна.
- Жадное улучшение по не ухудшает политику ни в одном состоянии.
- Всё это требует модели среды и перебора всех состояний — отсюда следующие два урока.
Источники
- Sutton, Barto — Reinforcement Learning, An Introduction — Главы 3.6 и 4, уравнения и их решение итерациями
- Bertsekas — Dynamic Programming and Optimal Control — Сжимающие свойства оператора Беллмана
Проверки
0 из 2Сжатие и неподвижная точка
Отметьте все верные утверждения об уравнениях Беллмана.
Один проход оператора
Возьмём цепочку из состояний. В каждом доступны два действия:
- стоять: награда , состояние не меняется;
- идти вперёд: награда
rewards[s], переход в состояние ; из последнего состояния переход ведёт в терминальное с ценностью .
Реализуйте
bellman_backup(values, rewards, gamma)— примените оператор Беллмана один раз к переданнымvaluesи верните[first_value, largest_change, error_bound, best_value]:first_value— новое значение состояния ;largest_change= ;error_bound= — гарантия на оставшееся расстояние до неподвижной точки;best_value— наибольшее из новых значений.
Новое значение состояния равно , где .
Загрузка редактора…
Ctrl/⌘ + Enter