Neural network 有没有办法在Pytork中使用外部损耗函数?

Neural network 有没有办法在Pytork中使用外部损耗函数?,neural-network,deep-learning,reinforcement-learning,pytorch,Neural Network,Deep Learning,Reinforcement Learning,Pytorch,pytorch神经网络的一个典型骨架有一个forward()方法,然后我们根据前向传递的输出计算损耗,并对该损耗调用backward()来更新梯度。如果我的损失是由外部确定的(例如,通过在某些RL环境中运行模拟),该怎么办。我还能这样利用这种典型的结构吗 这可能有点愚蠢,因为我们不再确切知道输出的每个元素对损失的影响有多大,但可能有一些我不知道的诡计。否则,我不确定神经网络如何与其他RL算法结合使用 谢谢大家! 在这种情况下,从损失计算中提取远期通行证(您的保单?)似乎是最容易的。这是因为(

pytorch神经网络的一个典型骨架有一个forward()方法,然后我们根据前向传递的输出计算损耗,并对该损耗调用backward()来更新梯度。如果我的损失是由外部确定的(例如,通过在某些RL环境中运行模拟),该怎么办。我还能这样利用这种典型的结构吗

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

谢谢大家!

在这种情况下,从损失计算中提取远期通行证(您的保单?)似乎是最容易的。这是因为(正如您所注意到的)在大多数场景中,您将需要(从您的环境中)获取一个状态,然后计算一个动作(基本上是向前传递),然后将该动作反馈给环境以从您的环境中获取奖励/损失

当然,一旦您计算了一个动作,您可能会在向前传递中调用您的环境,然后计算结果损失。但是为什么要麻烦呢?一旦你在你的环境中采取了一些步骤,直到你得到了回报/损失,这将变得更加复杂(尽管可能)

我建议您查看以下RL示例,了解openAI gym中策略梯度的应用:

基本思想是:

  • 创建一个策略(作为
    nn.module
    ),该策略接受状态并返回 随机策略
  • 将策略的计算和策略中操作的采样打包到一个函数中
  • 反复调用此函数,在您的环境中采取步骤,记录操作和奖励
  • 一旦一集结束,注册奖励,现在只执行反向传播和梯度更新
虽然这个示例是专门用于增强的,但是构建代码的一般思想也适用于其他RL算法。此外,你会在同一回购协议中发现另外两个例子

希望这有帮助