还有其他方法来处理可变动作空间吗?

人工智能 强化学习 参考请求 深度学习 函数逼近 行动空间
2021-10-30 20:16:21

这个问题是关于强化学习每个/某些状态的可变动作空间

可变动作空间

假设您有一个 MDP,其中动作的数量因状态而异(例如,如图 1 或图 2 所示)。我们可以将可变动作空间正式表示为

sS:sS:A(s)A(s)ss

也就是说,对于每个状态,都存在一些其他状态不具有相同的动作集。

在图 1 和图 2 中,每个状态的动作相对较少。而是想象状态sSms动作的数量,其中1msnn是一个非常大的整数。

一些MDP

环境

为了更好地理解这个问题,这里有一个环境示例。以图 1 为例,让它爆炸成一个非常大的有向无环图,其中包含一个源节点、巨大的动作空间和一个目标节点。目标是遍历一条路径,从任何起始节点开始,这样我们就可以最大化我们只会在目标节点处获得的奖励。在每个状态下,我们都可以调用一个函数M:sA它将状态作为输入并返回有效数量的操作。

方法

  1. 解决这个问题的一种简单方法(在此处此处讨论)是为每个状态平等地定义动作集,每当执行的动作时返回负奖励aA(s)并将代理移动到相同的状态,从而让代理“学习”在每个状态下哪些动作是有效的。这种方法有两个明显的缺点:

    • 学习A需要时间,特别是当 Q 值在终止或某些语句完成之前没有更新时(例如在体验回放中)

    • 我们知道A,为什么要学呢?

  2. 另一种方法(这里的第一个答案,也非常相似的论文,如大型离散动作空间中的深度强化学习Deep RL 的连续动作的离散序列预测)是在连续空间中预测一些标量,并且通过某种方法,将其映射为有效的操作。这些论文正在讨论如何处理大的离散动作空间,并且所提出的模型似乎也可以解决这个问题。

  3. 遇到的另一种方法是,假设不同动作集的数量n很小,有功能fθ1,fθ2, ...,fθn返回有关该特定状态的操作n有效的行动。换句话说,一个状态的执行动作s有 3 个动作将被预测argmaxa fθ3(s,a).

在论文中找不到任何方法(1、2或3),只是纯粹的猜测。我搜索了很多,但我找不到直接关于这个问题的论文。

有人知道关于这个主题的任何论文吗?还有其他方法来处理可变动作空间吗?

2个回答

有人知道关于这个主题的任何论文吗?

我不熟悉我的头顶上的任何东西。我确实知道绝大多数强化学习文献都关注具有固定动作空间的设置(例如机器人技术,您的动作决定您如何尝试移动/旋转机器人的特定部分,或者您始终拥有相同设置的简单游戏移动的动作,也许是“射击”或“使用”等)。另一类常见的设置是动作空间可以很容易地被视为始终相同(通过枚举在某些状态下可能合法的所有动作),并在某种后处理步骤中过滤掉非法动作(例如 RL 在棋盘游戏中的工作)。

所以,可能会有一些东西,但它肯定不常见。大多数 RL 人喜欢尽可能少地涉及领域知识,我认为在给定特定状态下生成一组合法动作的函数在很大程度上可以被认为是领域知识。

还有其他方法来处理可变动作空间吗?

您描述的问题主要是使用函数逼近的强化学习中的问题,特别是使用神经网络的函数逼近。如果你能侥幸使用表格 RL 算法,问题就会立即消失。例如,一个表Q(s,a)表格中常用的值,基于值的算法不需要包含所有可能的条目(s,a)对;如果它只包含以下条目就可以了(s,a)对这样a是合法的s.

可变动作空间主要成为深度强化学习方法中的一个问题,因为我们通常使用固定的神经网络架构DQN 风格的算法涉及采用描述状态的特征向量的神经网络s作为输入,并提供Q(s,a)估计作为输出。这立即意味着我们需要为每个动作一个输出节点,这意味着您必须枚举所有动作,这就是您的问题所在。同样,策略梯度方法传统上也需要每个动作一个输出节点,这再次意味着您有能够提前枚举所有动作(在确定网络架构时)。

如果您仍想使用神经网络(或具有类似输入和输出的其他类型的函数逼近器),解决您的问题的关键(如果您已经在问题中列出的建议都不符合您的喜好)是意识到你必须找到一种不同的方式来制定你的输入和输出,这样你就不再需要提前枚举所有的动作

我能想到的唯一方法是,如果您能够为完整的状态-动作对计算有意义的输入特征(s,a). 如果你能做到这一点,那么你可以,例如,构建神经网络:

  • 取一个特征向量x(s,a)作为输入,它描述(希望以某种有意义的方式)完整的状态对s 行动a
  • 制作单曲Q^(s,a)估计作为输出,对于作为输入给出的特定状态+动作对,而不是产生多个输出。

如果你能做到这一点,那么在任何给定的状态下s您可以简单地遍历所有法律行动A(s), 计算Q^(s,a)对他们所有的估计(注意:我们现在需要|A(s)|通过网络而不是像 DQN 风格算法中通常需要的单次通过),否则类似于标准 DQN 风格算法进行。

显然,对动作具有良好输入特征的要求并不总是能得到满足……但我怀疑有很多好的方法可以解决这个问题。这与各州的情况非常相似。在表格 RL 中,我们枚举了所有状态(和所有动作)。使用函数逼近,我们通常仍然枚举所有动作,但通过用有意义的特征向量替换它们来避免枚举所有状态(这可以实现跨状态的泛化)。如果您想避免枚举动作,您将不得不以非常相似的方式对动作进行泛化,这再次意味着您需要描述动作的特征。

  1. 遇到的另一种方法是,假设不同动作集的数量n很小,有功能fθ1,fθ2, ...,fθn返回有关该特定状态的操作n有效的行动。换句话说,一个状态的执行动作s有 3 个动作将被预测argmaxa fθ3(s,a).

这听起来很复杂,而且不同动作集的数量通常非常多,即使对于最简单的游戏也是如此。想象一下跳棋,忽略促销和跳跃,为简单起见,还有一些742=56可能的动作(这很好),但是这些动作的不同集合的数量要高得多。实际上很难计算在一个真正的游戏中可能有多少这样的集合——它肯定比256,但也肯定太大而不能实用。

还有其他方法来处理可变动作空间吗?

假设动作的数量不太大,您可以简单地忽略不适用于给定状态的动作。这与学习不同 - 您不必学习为非法行为返回负面奖励,您根本不在乎并选择返回最佳奖励的合法行为。


注意你的表达

sS:sS:A(s)A(s)ss

可以简化为

sS:sS:A(s)A(s)

甚至

|A(s)|sS>1