Keras DDPG(深层确定性策略梯度),参与者如何更新?

Keras DDPG(深层确定性策略梯度),参与者如何更新?,keras,reinforcement-learning,Keras,Reinforcement Learning,我目前正在尝试在Keras中实现DDPG。我知道如何更新批评家网络(正常的DQN算法),但我目前一直在更新演员网络,它使用以下等式: 因此,为了将参与者网络wrt的损失减少到其权重dJ/dtheta,它使用链式规则来获得dQ/da(来自评论网络)*da/dtheta(来自参与者网络) 这看起来不错,但我很难理解如何从这两个网络中导出梯度。有人能给我解释一下这一部分吗?主要的直觉是,在这里,J是你想要最大化而不是最小化的东西。因此,我们可以称之为目标函数,而不是损失函数。方程式简化为: dJ/d

我目前正在尝试在Keras中实现DDPG。我知道如何更新批评家网络(正常的DQN算法),但我目前一直在更新演员网络,它使用以下等式:

因此,为了将参与者网络wrt的损失减少到其权重dJ/dtheta,它使用链式规则来获得dQ/da(来自评论网络)*da/dtheta(来自参与者网络)


这看起来不错,但我很难理解如何从这两个网络中导出梯度。有人能给我解释一下这一部分吗?

主要的直觉是,在这里,J是你想要最大化而不是最小化的东西。因此,我们可以称之为目标函数,而不是损失函数。方程式简化为:

dJ/dTheta=dQ/da*da/dTheta=dQ/dTheta

这意味着你想改变参数θ来改变Q。因为在RL中,我们想最大化Q,对于这部分,我们想做梯度上升。要做到这一点,您只需执行梯度下降,除了将梯度作为负值输入

要导出渐变,请执行以下操作:

  • 使用在线参与者网络,发送从回放内存中采样的一批状态。(用于培训评论家的同一批)
  • 计算每个状态的确定性动作
  • 将用于计算这些动作的状态发送到在线批评家网络,以将这些精确状态映射到Q值
  • 根据步骤2中计算的动作计算Q值的梯度。我们可以使用tf.gradients(Q值,动作)来实现这一点。现在,我们有dQ/dA
  • 再次将状态发送给演员在线评论,并将其映射到动作
  • 再次使用tf.gradients(a,network_weights)计算动作相对于在线参与者网络权重的梯度。这将给你dA/dTheta
  • 将dQ/dA乘以-dA/dTheta,得到梯度上升。剩下的是目标函数的梯度,即梯度J
  • 将梯度J的所有元素除以批次大小,即:

    对于j中的j

     j / batch size
    
  • 通过首先使用网络参数压缩梯度J,应用梯度下降的变体。这可以使用tf.apply_梯度(zip(J,网络参数))实现
  • bam,你的演员正在训练关于Q最大化的参数

  • 我希望这是有意义的!我也很难理解这个概念,老实说,我在某些方面还有些模糊。如果我能澄清任何事情,请告诉我

    它从两个梯度方法返回“None”。我们应该将值传递给该函数还是需要传递一些显式表达式?嗨,Roberto,这可能取决于您使用的Tensorflow的版本。但要传递的参数不是值,它们是DDPG中使用的神经网络的可训练参数(更具体地说,是在线确定性策略梯度网络)。在指定可训练参数后,Tensorflow将对每个参数的损失进行导数,并给出损失函数梯度。如何将两个不同维数的向量相乘?通常,dQ/dA和dA/dTheta是不同的