1

pytorch神经网络的典型骨架有一个forward()方法,然后我们根据正向传递的输出计算损失,并在该损失上调用backward()来更新梯度。如果我的损失是外部确定的(例如通过在RL环境中运行模拟)会怎样?我仍然可以这样利用这种典型结构吗?有没有办法在pytorch中使用外部丢失函数?

  • 这可能有点愚蠢,因为我们不再确切知道每个输出元素有多少影响损失,但也许有一些我不知道的诡计。否则,我不确定神经网络如何与其他RL算法结合使用。

谢谢!

回答

1

在这种情况下,我最容易从损失计算中抽象出正向通行证(您的策略?)。这是因为(如您所知),在大多数情况下,您需要从您的环境中获取状态,然后计算一个动作(本质上是正向传球),然后将该动作反馈回环境以获得奖励/损失来自你的环境。

当然,一旦计算出一个行动来计算结果损失,你可以在正向通行证内调用你的环境。但为什么要麻烦?一旦你在你的环境中采取了几个步骤,直到你获得奖励/损失,它将变得更加复杂(尽管可能)。

我建议你看看下面的RL例子政策梯度openAI健身房内的应用程序:https://github.com/pytorch/examples/blob/master/reinforcement_learning/reinforce.py#L43

的基本思路是:

  • 创建策略(作为nn.module)该状态处于一个状态并返回 随机策略
  • 将策略的计算和策略的采样从策略包装到一个函数中。
  • 重复调用此函数以采取步骤通过您的环境,记录行动和奖励。
  • 一集完成后,注册奖励并仅执行反向传播和渐变更新。

虽然这个例子是特定于REINFORCE的,但是构造代码的一般思想适用于其他RL算法。另外,你会在同一个回购中找到另外两个例子。

希望这会有所帮助。

相关问题