#python #reinforcement-learning #reward
#python #обучение с подкреплением #награда
Вопрос:
Мне интересно, как на самом деле работает скидка на вознаграждения за обучение с подкреплением. Я полагаю, что идея заключается в том, что награды позже в эпизоде взвешиваются тяжелее, чем ранние награды. Для меня это имеет смысл. Мне трудно понять, как это на самом деле работает в примерах, которые я видел.
Я предполагаю, что приведенный ниже код является стандартным способом обучения с подкреплением. Я интерпретирую этот код следующим образом: пройдите каждое действие, обучите модель, чтобы действие прогнозирования было хорошим или плохим.
Похоже, что это равномерно умножает все мои прогнозы на любую гамму, добавляет вознаграждение и использует его для обучения модели.
Поскольку вознаграждение всегда обновляется на каждом шаге, мне трудно понять, как это позволяет достичь цели сделать ранние действия в эпизоде менее поощряемыми / обескураживающими, чем последующие. Разве награды не должны суммироваться шаг за шагом, а затем умножаться на гамму для достижения этой цели?
def replay(self, batch_size):
minibatch = random.sample(self.memory, batch_size)
for state, action, reward, next_state, done in minibatch:
target = reward
if not done:
target = reward self.gamma * np.amax(self.model.predict(next_state))
target_f = self.model.predict(state)
target_f[0][action] = target
self.model.fit(state, target_f, epochs=1, verbose=0)
if self.epsilon > self.epsilon_min:
self.epsilon *= self.epsilon_decay
Ответ №1:
Похоже, у вас есть несколько неправильных представлений о том, какую проблему решает код. Я попытаюсь прояснить вопрос о вознаграждениях со скидкой.
Давайте сначала предположим, что мы не сбрасываем со счетов вознаграждения. Ценность выполнения действия в данном состоянии определяется как сумма вознаграждений, которые агент должен получить, когда он выполняет это действие, а затем следует фиксированной политике.
Мы могли бы использовать это определение и изучить функцию значения. Но одна проблема заключается в том, что если агент живет вечно, он, возможно, получит бесконечное вознаграждение. Кроме того, на агента не будет оказываться никакого давления, чтобы действовать. Он с радостью пройдет через миллион плохих состояний, если это поможет медленно перейти в хорошее состояние, в котором он может оставаться вечно. Сложнее выучить такие значения действий (и стабилизировать их), если мы смотрим вперед на миллионы временных шагов.
Итак, это решается с помощью вознаграждений со скидкой. Цель агента модифицируется таким образом, чтобы максимизировать не сумму вознаграждений, а немедленное вознаграждение плюс 0,9-кратное следующему вознаграждению, плюс 0,9 * 0,9-кратное следующему и т. Д. Таким образом, вознаграждение со скидкой после миллиона временных шагов, при всех практических средствах, не имеет отношения к текущему решению агента. Это не имеет никакого отношения к началу или концу эпизода. Скидка на вознаграждение всегда начинается с текущего состояния.
Эта строка, на которую вы смотрите:
target = reward self.gamma * np.amax(self.model.predict(next_state))
вычисляет лучшую оценку значения действия. Это стандартная формула учебника (см., Например, «Обучение с подкреплением» Саттона и Барто). Он использует сам предиктор (который все еще обучается) для оценки стоимости (суммы дисконтированных вознаграждений) действий, которые будут позже в будущем, со скидкой на один временной шаг с помощью gamma.
Комментарии:
1. Привет. Спасибо за объяснение. Я действительно хочу понять, что при написании градиента политики, почему мы всегда меняем список вознаграждений, а затем вычисляем дисконтированную сумму вознаграждения. Можете ли вы это объяснить?