Как вывести нашу функцию потерь из градиентного целевого показателя?

Вопрос или проблема

Я изучал теорию и практику RL, и одна часть, которую мне трудно понять, — это связь между практической функцией loss и теоретической целью/градиентом цели. Как мы можем вывести одно из другого? Возможно, это будет легче понять на примерах:

Reinforce с базовой линией:

Теоретический градиент целевой функции критика

enter image description here

Практическая функция потерь (псевдокод), которую я встречал:

critic_loss = 0.5 * (returns - v_hat(states))**2 

Сарса с полу-градиентом:

Теоретический градиент целевой функции

enter image description here

Практическая функция потерь (псевдокод), которую я встречал:

loss = (r + gamma * qvalue(s_next,a_next) - qvalue(s,a)) ** 2 

Откуда это берется? Является ли это отрицательным обратным ∇J(w)? Если да, может кто-то показать, как это делается? Я нахожу ресурсы только по этой теме для w фиксированных размеров.

Возможно, я совершенно ошибаюсь и не понимаю каких-то основ. Если это так, буду искренне благодарен, если вы направите меня на соответствующую (вводную) литературу.

Псевдокод соответствует следующему: (для первого примера)

$$ J(w)=\frac{1}{2}(G_t-\hat{v}(s_t, w))^2 $$

Вы можете получить первое выражение, просто явно вычислив градиент.

$$ \nabla_w J(w)=-(G_t-\hat{v}(s_t, w))\nabla_w \hat{v}(s_t, w) $$

Для второго примера я не уверен в вашем источнике, но я думаю, что это должно быть так (см. стр. 244 в Sutton-Barto)

$$R+\gamma \hat{q}(s’,a’,w)-\hat{q}(s,a,w))\nabla_w\hat{q}(s,a,w). $$

Теперь действительно, это не градиент
$$ J(w)=\frac{1}{2}(R +\gamma \hat{q}(s’,a’,w)-\hat{q}(s,a,w)))^2$$

Наверное, в коде должно быть больше контекста, и с высокой вероятностью есть какой-то stop gradient (в TensorFlow) или detach (в PyTorch), чтобы указать, что если мы берем градиент этой функции потерь, это действительно соответствует нужному обновлению (то есть мы пренебрегаем тем, что $\hat{q}(s’,a’,w)$ зависит от $w$ при вычислении градиента). Этот трюк используется для того, чтобы мы могли использовать вычислительно эффективную обратную передачу ошибки.

Ответ или решение

Вопрос о том, как из теоретической градиентной функции цели получается практическая функция потерь, нередко вызывает путаницу, особенно в контексте обучения с подкреплением (RL). Давайте разберемся в этом вопросе на примере двух подходов: Reinforce с базисом и Semi-gradient SARSA.

Определение функции потерь из градиентной цели

Reinforce с базисом

Теоретическая цель:
На данном этапе важно понимать, что цель заключается в минимизации отклонения между ожидаемым вознаграждением и оценкой ценности состояния. Теоретическая цель представлена как градиент:

[ \nabla_w J(w) = -(G_t – \hat{v}(s_t, w))\nabla_w \hat{v}(s_t, w) ]

Практическая функция потерь (псевдокод):

critic_loss = 0.5 * (returns - v_hat(states))**2

Пояснение:
Формула потерь, используемая в коде, по сути представляет собой квадратичную функцию от разности между эмпирическим возвратом и предполагаемой ценностью состояния (v). Причина, по которой градиент целевой функции выглядит иначе, заключается в том, что формула в псевдокоде уже подразумевает использование цепного правила для обновления параметров (w). Здесь мы вычисляем производную по параметрам и используем скорректированное значение для обновления.

Semi-gradient SARSA

Теоретическая цель:

Обновление по Semi-gradient SARSA выглядит следующим образом:

[ R + \gamma \hat{q}(s’, a’, w) – \hat{q}(s, a, w) ]

Практическая функция потерь (псевдокод):

loss = (r + gamma * qvalue(s_next, a_next) - qvalue(s, a)) ** 2

Пояснение:
В этом случае мы работаем с разницей между ожидаемой ценностью действия и текущей оценкой (q)-функции. Потери представляют собой квадратичную разницу, которая минимизируется с использованием градиентного спуска. Определяющим фактором здесь является то, что градиент не берется в отношении следующего состояния, что объясняет использование оператора остановки градиента («stop gradient») в библиотеке синтаксиса (например, TensorFlow или PyTorch).

Заключение

Связь между градиентной функцией цели и функцией потерь часто оказывает влияние на вычислительную эффективность алгоритма. Важно понимать, как используются цепное правило и механизмы остановки градиента для оптимизации вычислений. Для более детального изучения вы можете обратиться к классическому руководству Ричарда Саттона и Эндрю Барто "Reinforcement Learning: An Introduction". Оптимизация функции потерь является ключевым этапом на пути к повышению эффективности модели.

Это чтение поможет вам более четко понять динамику преобразования теоретических концепций в практические реализации. Помните, что глубокое понимание теоретических основ позволит эффективно применять их на практике.

Оцените материал
Добавить комментарий

Капча загружается...