pytorch神经网络的典型骨架有一个forward()方法,然后我们根据前向传递的输出计算损失,然后对该损失调用backward()来更新渐变。如果我的损失是在外部确定的(例如在某些RL环境中运行模拟),该怎么办?我还能以这种方式利用这种典型的结构吗?
谢谢!
答案 0 :(得分:1)
在这种情况下,我最容易从损失计算中抽象出前向传递(您的策略?)。这是因为(正如您所注意到的)在大多数情况下,您需要获取状态(来自您的环境),然后计算操作(基本上是前向传递),然后将该操作反馈给环境以获得奖励/损失来自你的环境。
当然,一旦计算出一个动作然后计算结果损失,你就可以在前向传递中调用你的环境。但为什么要这么麻烦?一旦你在你的环境中采取了几个步骤,直到你获得奖励/损失,它将变得更加复杂(尽管可能)。
我建议你看一下以下RL示例,了解openAI gym中政策渐变的应用:https://github.com/pytorch/examples/blob/master/reinforcement_learning/reinforce.py#L43
基本思想是:
虽然此示例特定于REINFORCE,但构造代码的一般概念适用于其他RL算法。此外,您还可以在同一个回购中找到另外两个示例。
希望这会有所帮助。