DDPG(Deep Deterministic Policy Gradients),actor是如何更新的?

And*_*Wei 5 reinforcement-learning keras

我目前正在尝试在 Keras 中实现 DDPG。我知道如何更新评论家网络(普通 DQN 算法),但我目前坚持更新演员网络,它使用等式:

方程

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

这看起来不错,但我无法理解如何从这两个网络中推导出梯度。有人可以向我解释这部分吗?

Rui*_*ian 4

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

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

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

要导出梯度,请执行以下操作:

  1. 使用在线参与者网络,发送从重播内存中采样的一批状态。(用于训练批评家的同一批次)
  2. 计算每个状态的确定性操作
  3. 将用于计算这些动作的状态发送到在线评论家网络,以将这些确切的状态映射到 Q 值。
  4. 计算 Q 值相对于步骤 2 中计算的动作的梯度。我们可以使用 tf.gradients(Q value, actions) 来执行此操作。现在,我们有 dQ/dA。
  5. 再次将状态发送给演员在线评论家并将其映射到操作。
  6. 再次使用 tf.gradients(a, network_weights) 计算动作相对于在线参与者网络权重的梯度。这将为您提供 dA/dTheta
  7. 将 dQ/dA 乘以 -dA/dTheta 即可得到GRADIENT ASCENT。我们留下目标函数的梯度,即梯度J
  8. 将梯度 J 的所有元素除以批量大小,即

    对于 J 中的 j,

     j / batch size
    
    Run Code Online (Sandbox Code Playgroud)
  9. 通过首先使用网络参数压缩梯度 J 来应用梯度下降的变体。这可以使用 tf.apply_gradients(zip(J, network_params)) 来完成
  10. 砰,你的演员正在训练其参数以最大化 Q。

我希望这是有道理的!我也很难理解这个概念,而且说实话,我对某些部分仍然有点模糊。如果我能澄清任何事情,请告诉我!