假设我们有三个动作。三个选项中价值最高的动作是第一个。在训练 DQN 时,我们如何处理另外两个,因为我们没有为他们设定目标,因为他们没有被选中?
我已经看到一些代码将目标保留为关闭动作,无论预测返回什么,这对我来说有点不对劲,因为在随机动作选择减少后,两个或多个相似的行为动作可能永远无法很好地区分。
我还看到一些实现将所有操作的目标设置为零,并且只针对所采取的操作调整目标。这将有助于长期的行动区分,但它也更加依赖于对任何不熟悉的状态(我相信)采取随机行动,因为否则可能永远不会采取关闭行动。
假设我们有三个动作。三个选项中价值最高的动作是第一个。在训练 DQN 时,我们如何处理另外两个,因为我们没有为他们设定目标,因为他们没有被选中?
我已经看到一些代码将目标保留为关闭动作,无论预测返回什么,这对我来说有点不对劲,因为在随机动作选择减少后,两个或多个相似的行为动作可能永远无法很好地区分。
我还看到一些实现将所有操作的目标设置为零,并且只针对所采取的操作调整目标。这将有助于长期的行动区分,但它也更加依赖于对任何不熟悉的状态(我相信)采取随机行动,因为否则可能永远不会采取关闭行动。
DQN 算法的损失函数为
就像你说的,我们每个时间步只采取一个动作。我们只能移动对计算动作值有影响的网络权重对于我们采取的特定行动。对于那个动作,变量会有价值
我们会有标准形式的 DQN 损失。我们计算该损失相对于网络参数的梯度,反向支持它并稍微改变权重,以便更准确地估计对于那个特定的状态-动作对。
我们从未采取其他行动。由于我们从未带走它们,因此我们没有得到奖励我们无法估计对于那些其他动作。我们不想更改对计算其他动作的动作值有影响的权重,因为我们无法估计它们的准确度。标准方法是设置
这样,其他行动的损失将是这将导致不改变影响计算其动作值的权重。
设定目标到因为所有其他行动都意味着我们想要让他们都稍微转向. 这是不正确的,因为我们无法知道它们的真正价值。我认为您在实现中误解了那部分。