深度强化学习的大动作空间

数据挖掘 深度学习 强化学习
2021-09-28 18:39:00

我知道在正常的深度强化学习(DRL)场景中,我们学习了一个深度神经网络来将当前状态映射到 Q 值。Q 值的数量(神经网络的输出数)与可能动作的数量相同,以便我们可以根据关联的 Q 值选择动作。

然而,在这篇论文“ Deep Reinforcement Learning with a Combinatorial Action Space for Predicting Popular Reddit Threads ”中,作者使用了状态和动作作为输入。网络只输出一个 Q 值(见下图)。st 是当时的状态 tati 是个 ith 及时行动 t (您可以忽略这一点,但每个动作都是向量的组合 ct1ct3 )。 Qt 只是 Q 有时 t 行动 i. 我想知道为什么只学习了一个 Q 值?如果是这种情况,我们如何确定下一步的行动?

在此处输入图像描述

在此处输入图像描述

1个回答

我想知道为什么只学习了一个 Q 值?

这不是一个因素,但它与 Q-learning 理论相匹配,因为它更适合建模 q^(s,a,θ)Q(s,a).

它在数值上并不优越,而且效率通常低于对具有多个动作输出的单个网络进行建模。但是,直接逼近动作价值函数显然是有效的。

如果策略与 Q 值是分开的,并且您使用 Q-learning 来预测该策略的值(而不是使用 Q-learning 来控制和找到最佳策略),那么单个动作值可能更有效。

如果是这种情况,我们如何确定下一步的行动?

如果您想从动作值中对最优策略进行最佳猜测 Q(s,a),那么通常你计算

π(s)=argmaxaQ(s,a)

此规则不依赖于神经网络架构,但实现方式确实有所不同:

  • 如果你的神经网络一次从状态输出所有动作值, Fnn(s)[q^(s,一个0),q^(s,一个1),q^(s,一个2)...] 然后您执行网络的单次前向传递并在单个输出向量中找到最大化动作。

  • 如果你的神经网络从一个状态输出一个动作值,动作 Fnn(s,一个)q^(s,一个)然后您必须为每个可能的操作(通常在小批量中)运行它,并在所有输出中找到最大化操作。

除非您有其他方法来生成策略(例如,您正在使用策略网络和策略梯度,那么 Q 值是作为 Actor-Critic 代理之类的基线),那么您必须从每个状态收集所有动作值为了找到最大化的行动。没有简单的方法可以解决这个问题,并且您链接的论文没有聪明的解决方案。

似乎人们认为将动作作为输入是缓解大动作空间问题的有效方法。[来自评论]

可以,但不是你想象的那样。

相反,动作表示的性质是至关重要的。在您的问题中,您说“您可以忽略这一点,但每个动作都是向量的组合C1C3”(强调我的)。但是,这不是一个可以忽略的细节,并且是论文的重要组成部分。

通过将动作表示压缩为少量标量特征,作者允许神经网络在相似动作之间进行泛化。例如,如果一个动作由C1=0.5,C2=-0.3,C3=0.25 另一个动作由 C1=0.7,C2=-0.3,C3=0.25,那么第一个动作的准确值可能会导致第二个动作的值至少近似准确,即使它以前从未在当前状态下采取过。

警告:这是否正确或有用取决于正在解决的问题的具体情况。以这种方式转换动作空间并不总是正确或有用的。具有相似向量的动作需要以某种影响结果的方式相似。

但是,假设它是真的,网络设计会在学习率方面为您提供优势。与枚举每个可能动作的简单网络相比,代理学习的有关动作值的事物将被更有效地概括。这使得代理更有效率,它需要更少的经验来达到接近最佳的行为。您链接的论文将这种示例效率称为对原始 DQN 的改进。

在这种情况下,当您想要使用 DQN 评估策略时,这些都不会改变迭代所有可能操作的需要。

TL;DR:论文中的智能体仍然需要评估每个状态下的所有动作,以便选择最好的动作。但是,它不必全部尝试才能发现长期最佳的方法。