我正在尝试使用 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))
