Почему дисконтированная функция вознаграждения обращена вспять? - PullRequest
1 голос
/ 17 марта 2020

Я работаю в лаборатории MIT по обучению подкреплению и застрял в функции вознаграждения. Конкретный кодовый блок таков: https://colab.research.google.com/github/aamini/introtodeeplearning/blob/master/lab3/solutions/RL_Solution.ipynb#scrollTo = 5_Q2OFYtQ32X & line = 19 & uniqifier = 1

Более простая версия соответствующего кода:

import numpy as np

rewards=[0.,0,0,0,0,1]
discounted_rewards = np.zeros_like(rewards)
R = 0
for t in reversed(range(0, len(rewards))):
    # update the total discounted reward
    R = R * .95 + rewards[t]
    discounted_rewards[t] = R
discounted_rewards

, которая дает вывод в виде :

array([0.77378094, 0.81450625, 0.857375, 0.9025, 0.95 ,1.])

Приведенное объяснение состоит в том, что мы хотим поощрять получение вознаграждений раньше, чем позже. Как с этим может помочь reversed в for l oop?

1 Ответ

0 голосов
/ 17 марта 2020

Необходимо поменять местами, чтобы каждое вознаграждение умножалось в x раз на коэффициент дисконтирования, где x - это количество временных шагов, на которое вознаграждение находится за пределами настоящего. Кроме того, поскольку это совокупное вознаграждение, оно добавляет следующее вознаграждение к предыдущему вознаграждению. Это не было бы возможно без обратного хода.

С обратным, последнее вознаграждение - это первое вознаграждение, которое будет добавлено к R, а затем в каждой итерации, когда l oop продолжается, оно будет умножено на 0,95. для количества временных шагов, которые произошли до события вознаграждения.

Что делает l oop, так это:

R = 0
R += 0.95 ** 5 * 1
R += 0.95 ** 4 * 0
R += 0.95 ** 3 * 0
R += 0.95 ** 2 * 0
R += 0.95 ** 1 * 0
R += 0

Правка:

Полученный результат: накопительное дисконтированное вознаграждение. Первый индекс в вашем списке вывода означает, что ваш агент в этот момент накопил дисконтированное вознаграждение 0,7737 для следующих кортежей состояния действия. Затем вы продвигаетесь go в будущее (увеличиваете индекс списка), и ваша дисконтированная награда будет выше, поскольку вы приближаетесь к награде net, равной 1 (выигрывая игру).

...