Q-network 的输入和输出在有序动作空间的情况下应该是什么?

人工智能 强化学习 dqn 深度学习 行动空间 离散化
2021-11-13 09:58:32

我最近开始更详细地研究 DQN 算法(例如TensorFlow )的实现。我发现的所有实现都使用为每个可能的动作提供输出的网络(例如,如果您有三个可能的动作,您的网络中将有三个输出单元)。从计算的角度来看,这很有意义,并且如果您正在处理分类动作空间(例如“左”或“右”),它似乎可以正常工作。

但是,我目前正在处理我离散化的动作空间,并且这些动作具有序数含义(例如,您可以以 5 度的增量向左或向右行驶)。我假设动作值函数在动作分量中具有一些单调性(认为向左行驶 45 度而不是 40 度将具有相似的值)。

如果我使用的网络对每个可能的动作都有一个输出单元,我是否会丢失有关动作相似性的信息?

是否有可用的 DQN 实现将动作用作网络输入?

1个回答

是的,可以将动作用作 DQN 中神经网络的输入。对于表示为 one-hot 编码特征的离散动作,差异很小:

  • 如果所有动作都在输出中,则您的神经网络函数为f(s):SR|A|=[q^(s,a1),q^(s,a2),q^(s,a3)...],并且您将输出向量中的最大值作为贪心动作。

  • 如果动作作为输入参数提供,您的神经网络函数是f(s,a):S×AR=q^(s,a), 并找到您构造的最大值并在所有可能的值上运行一个小批量a对于给定的状态。

另请参阅此问题的答案:为什么 Deep Q Network 会输出多个 Q 值?

在您的情况下,您希望利用类似的值a因为您希望它可以很好地与近似值配合使用。正如您正确建议的那样,这仅适用于使用动作作为输入的第二种方法。因此,使用归一化为适合输入到神经网络的范围的转向角作为输入。每次你需要找到maxaQ(s,a)对于 Q-learning 算法,您必须构建一个小批量的当前状态,并将每个离散转向角与您想在 DQN 中视为动作的每个离散转向角连接起来,并向前运行当前(或目标)神经网络。

如果您想更进一步并使用连续动作空间,您将需要更改您正在使用的强化学习方法。各种策略梯度和 actor-critic 方法,例如 REINFORCE、A3C、DDPG 等,可以应对连续动作,因为它们不需要找到maxaQ(s,a),这对于非常大的动作空间变得不切实际。