Почему REINFORCE вообще работает?

Aug 15 2020

Вот скриншот популярного алгоритма градиента политики из книги Саттона и Барто -

Я понимаю математический вывод правила обновления, но не могу интуитивно понять, почему этот алгоритм вообще должен работать. Что меня действительно беспокоит, так это то, что мы начинаем с неправильной политики (т.е. мы не знаем параметры$\theta$ пока), и мы используем эту политику для создания эпизодов и последующего обновления.

Почему REINFORCE вообще должен работать? В конце концов, эпизод, который он использует для обновления градиента, генерируется с использованием политики, параметризованной параметрами$\theta$ которые еще предстоит обновить (эпизод не создан с использованием оптимальной политики - мы никак не можем это сделать).

Я надеюсь, что мои опасения понятны, и прошу вас дать некоторую интуицию относительно того, почему это работает! Я подозреваю, что каким-то образом , даже если мы отбираем эпизод из неправильной политики, мы приближаемся к правильному после каждого обновления (монотонное улучшение). Как вариант, мы могли бы приблизиться к оптимальной политике (оптимальный набор параметров$\theta$) в среднем.

Итак, что здесь происходит на самом деле?

Ответы

4 DavidIreland Aug 15 2020 at 21:16

Ключ к работе REINFORCE - это способ сдвига параметров в сторону $G \nabla \log \pi(a|s, \theta)$.

Обратите внимание, что $ \nabla \log \pi(a|s, \theta) = \frac{ \nabla \pi(a|s, \theta)}{\pi(a|s, \theta)}$. Это делает обновление интуитивно понятным - числитель сдвигает параметры в направлении, которое дает наибольшее увеличение вероятности того, что действие будет повторяться с учетом состояния, пропорционально возвратам - это легко увидеть, потому что по сути это градиентный подъем шаг. Знаменатель управляет действиями, которые имеют преимущество перед другими действиями, потому что они будут выбираться чаще, путем обратного масштабирования по отношению к вероятности предпринимаемого действия; представьте, если бы были высокие награды, но действие во время$t$ имеет низкую вероятность быть выбранным (например, 0,1), тогда это умножит результаты на 10, что приведет к большему шагу обновления в направлении, которое увеличило бы вероятность того, что это действие будет выбрано больше всего (что является тем, что числитель контролирует, как упоминалось ).

То есть для интуиции - понять , почему он делает работу, то подумайте о том, что мы сделали. Мы определили целевую функцию,$v_\pi(s)$, которые мы заинтересованы в максимальном соблюдении наших параметров $\theta$. Мы находим производную этой цели по нашим параметрам, а затем выполняем градиентное восхождение по нашим параметрам, чтобы максимизировать нашу цель, то есть максимизировать$v_\pi(s)$, таким образом, если мы продолжаем выполнять градиентный подъем, то наши параметры политики сходятся (в конечном итоге) к значениям, которые максимизируют $v$ и поэтому наша политика будет оптимальной.