pytorch神经网络的典型骨架有一个forward()方法,然后我们根据正向传递的输出计算损失,并在该损失上调用backward()来更新梯度。如果我的损失是外部确定的(例如通过在RL环境中运行模拟)会怎样?我仍然可以这样利用这种典型结构吗?有没有办法在pytorch中使用外部丢失函数?
- 这可能有点愚蠢,因为我们不再确切知道每个输出元素有多少影响损失,但也许有一些我不知道的诡计。否则,我不确定神经网络如何与其他RL算法结合使用。
谢谢!
pytorch神经网络的典型骨架有一个forward()方法,然后我们根据正向传递的输出计算损失,并在该损失上调用backward()来更新梯度。如果我的损失是外部确定的(例如通过在RL环境中运行模拟)会怎样?我仍然可以这样利用这种典型结构吗?有没有办法在pytorch中使用外部丢失函数?
谢谢!
在这种情况下,我最容易从损失计算中抽象出正向通行证(您的策略?)。这是因为(如您所知),在大多数情况下,您需要从您的环境中获取状态,然后计算一个动作(本质上是正向传球),然后将该动作反馈回环境以获得奖励/损失来自你的环境。
当然,一旦计算出一个行动来计算结果损失,你可以在正向通行证内调用你的环境。但为什么要麻烦?一旦你在你的环境中采取了几个步骤,直到你获得奖励/损失,它将变得更加复杂(尽管可能)。
我建议你看看下面的RL例子政策梯度openAI健身房内的应用程序:https://github.com/pytorch/examples/blob/master/reinforcement_learning/reinforce.py#L43
的基本思路是:
nn.module
)该状态处于一个状态并返回 随机策略虽然这个例子是特定于REINFORCE的,但是构造代码的一般思想适用于其他RL算法。另外,你会在同一个回购中找到另外两个例子。
希望这会有所帮助。