0

首先:此问题不寻求有关强化学习 (RL) 的帮助,RL 仅用作示例。

Keras 文档包含一个使用Gradient Tape的示例演员评论家强化学习实现。基本上,他们创建了一个具有两个独立输出的模型:一个用于演员(动作),一个用于评论家(奖励)。以下几行描述了反向传播过程(在代码示例中的某处找到):n1

# Backpropagation
loss_value = sum(actor_losses) + sum(critic_losses)
grads = tape.gradient(loss_value, model.trainable_variables)
optimizer.apply_gradients(zip(grads, model.trainable_variables))

尽管演员和评论家损失的计算方式不同,但它们将这两个损失相加以获得用于计算梯度的最终损失值。

在看这个代码示例时,我想到了一个问题:有没有办法计算输出层相对于相应损失的梯度,即根据nactor损失和梯度计算第一个输出节点的梯度使用评论家损失的最后一个输出节点?据我了解,这比添加损失(不同!)和基于这种累积方法更新梯度要方便得多。你同意吗?

4

1 回答 1

0

好吧,经过一番研究,我自己找到了答案:可以根据层名称提取给定层的可训练变量。然后我们可以将tape.gradientoptimizer.apply_gradients应用于提取的可训练变量集。我目前的解决方案很慢,但它有效。我只需要弄清楚如何改进它的运行时间。

于 2022-01-19T10:54:42.947 回答