理解 Keras 中的 DDPG 算法

人工智能 喀拉斯 算法 数学 ddpg
2021-11-07 10:39:08

我正在尝试使用 Keras 理解 DDPG 算法

我找到了该站点并开始分析代码,我无法理解两件事。

用于编写页面上呈现的代码的算法

在此处输入图像描述

在算法图像中,更新critic的网络不需要梯度

但是渐变是在代码中实现的,为什么呢?

with tf.GradientTape() as tape:
    target_actions = target_actor(next_state_batch)
    y = reward_batch + gamma * target_critic([next_state_batch, target_actions])
    critic_value = critic_model([state_batch, action_batch])
    critic_loss = tf.math.reduce_mean(tf.math.square(y - critic_value))

critic_grad = tape.gradient(critic_loss, critic_model.trainable_variables)
critic_optimizer.apply_gradients(zip(critic_grad, critic_model.trainable_variables))

第二个问题是为什么在算法的照片中计算actor的策略梯度时是2个梯度乘以自己,而在代码中只计算了一个梯度,而不是乘以第二个梯度?

with tf.GradientTape() as tape:
    actions = actor_model(state_batch)
    critic_value = critic_model([state_batch, actions])
    # Used `-value` as we want to maximize the value given
    # by the critic for our actions
    actor_loss = -tf.math.reduce_mean(critic_value)

actor_grad = tape.gradient(actor_loss, actor_model.trainable_variables)
actor_optimizer.apply_gradients(zip(actor_grad, actor_model.trainable_variables))
1个回答

您的第一个问题的答案是因为“通过最小化损失来更新评论家”这一行L=1Ni(yiQ(si,ai|θQ))2暗示您将通过使用梯度来做到这一点,即您计算参数的损失梯度并执行梯度下降步骤。

对于第二个问题,我不是 100% 确定,因为我不使用 tensorflow,但我会假设在使用的自动微分中,它会在幕后自动进行乘法运算。在 PyTorch 中我知道它会在你取导数时自动计算链式法则,所以很可能是与此类似的原因。