0

Pytorch 提供了一个在 OpenAI 健身房环境中使用 actor-critic 玩 Cartpole 的好例子。

我对https://github.com/pytorch/examples/blob/master/reinforcement_learning/actor_critic.py#L67-L79中的代码片段中的几个方程感到困惑:

saved_actions = model.saved_actions
value_loss = 0
rewards = []
for r in model.rewards[::-1]:
    R = r + args.gamma * R
    rewards.insert(0, R)
rewards = torch.Tensor(rewards)
rewards = (rewards - rewards.mean()) / (rewards.std() + np.finfo(np.float32).eps)
for (action, value), r in zip(saved_actions, rewards):
    action.reinforce(r - value.data.squeeze())
    value_loss += F.smooth_l1_loss(value, Variable(torch.Tensor([r])))
optimizer.zero_grad()
final_nodes = [value_loss] + list(map(lambda p: p.action, saved_actions))
gradients = [torch.ones(1)] + [None] * len(saved_actions)
autograd.backward(final_nodes, gradients)
optimizer.step()

在这种情况下 r 和 value 是什么意思?为什么他们在行动空间上运行 REINFORCE,奖励等于 r - 值?他们为什么要尝试设置该值以使其与 r 匹配?

谢谢你的帮助!

4

1 回答 1

1
  • 首先是一段时间内收集的奖励,以及导致奖励的状态:动作

  • 那么 r - value 是预期奖励和实际奖励之间的差异

  • 该差异用于从该状态调整该操作的预期值

因此,如果处于“中间”状态,动作“跳跃”的预期奖励为 10,而实际奖励仅为 2,则 AI 偏离 -8 (2-10)。Reinforce 的意思是“调整预期”。因此,如果我们将它们调整一半,我们将新的预期奖励为 10-(8 *.5),或 6。这意味着 AI 真的认为它会为此获得 10,但现在它不太自信,认为 6 更好猜测。因此,如果 AI 没有偏离太多,即 10 - ( 2 *.5) = 9,它将调整较小的数量。

于 2017-04-12T23:33:16.663 回答