当不采用随机路径时,epsilon-greedy 方法是否总是选择“最佳动作”(100% 的时间)?

人工智能 强化学习
2021-11-07 13:11:22

我现在正在阅读以下博客文章,但是关于 epsilon-greedy 方法,作者暗示 epsilon-greedy 方法以概率 epsilon 随机采取行动,并以概率 1-epsilon 100% 的时间采取最佳行动.

例如,假设 epsilon = 0.6 有 4 个动作。在这种情况下,作者似乎说每个动作都以以下概率采取(假设第一个动作具有最佳价值):

  • 行动 1:55% (.40 + .60 / 4)
  • 行动 2:15%
  • 行动 3:15%
  • 行动 4:15%

但是,我觉得我了解到 epsilon-greedy 仅以 epsilon 的概率随机采取行动,否则取决于决定采取行动的策略功能。并且策略函数返回动作的概率分布,而不是具有最佳值的动作的标识符。例如,假设 epsilon = 0.6,每个动作有 50%、10%、25% 和 15%。在这种情况下,采取每个动作的概率应该如下:

  • 行动 1:35% (.40 * .50 + .60 / 4)
  • 行动 2:19% (.40 * .10 + .60 / 4)
  • 行动 3:25% (.40 * .25 + .60 / 4)
  • 行动 4:21% (.40 * .15 + .60 / 4)

我的理解在这里不正确吗?epsilon (1 - epsilon) 的非随机部分总是采取最佳行动,还是根据概率分布选择行动?

2个回答

Epsilon-greedy 最常用于确保您在算法中有一些探索元素,否则会输出确定性策略。

例如,基于价值的算法(Q-Learning、SARSA 等)不直接将策略作为输出;它们具有状态值或状态-动作对作为输出。我们从中“提取”的标准策略是一个确定性策略,它只是试图最大化预测值(或者,从技术上讲,一个“略微”的非确定性策略,因为在适当的实现中,它应该打破关系(其中有多个相等的值在顶部)随机)。对于这样的算法,没有足够的内在探索,所以我们通常使用像 epsilon-greedy 这样的东西来引入探索元素。在这些情况下,您问题中的两种可能解释都是相同的。

如果您的算法已经产生了完整的概率分布作为输出,而不是将所有概率质量集中在一个或几个点上,例如您在问题中作为示例给出的概率分布,通常不是真的有必要在它上面使用 epsilon-greedy;由于所有动作都分配了相当大的概率,您已经获得了固有的探索。

现在,到目前为止,我个人实际上主要使用基于价值的方法,而不是使用策略梯度方法,所以我不确定它们是否也存在“收敛”到它们的情况的风险将太多概率质量放在某些动作上,而太快放在其他动作上。如果是这样的话,我希望额外的 epsilon-greedy 探索层可能会有用。而且,在那种情况下,我确实会发现你的解释是最自然的。例如,如果我查看PPO 文件,我快速浏览了一下使用 epsilon-greedy 并没有找到任何关于他们的信息。因此,我认为 epsilon-greedy 与“非确定性”策略的组合(忽略此处基于价值的方法中的平局)根本不是一个常见的组合。

让我举个例子说明 epsilon-greedy 的问题:假设你有一个具有非常大的分支因子的环境,比如 Go;如果您使用 epsilon-greedy 进行探索,那么您可能会发现搜索树更高的级别被很好地探索,因为它们被更频繁地命中,因此您希望更贪婪地选择那些探索良好的区域,但是在未探索动作的树的更下方,您希望鼓励更多级别的随机探索。Epsilon-greedy 不能让你这样做。这是所有情况下的一种概率。所以在状态空间很小的地方使用是可以的,但对于大的状态空间则不行。

Actor-critic 方法,例如 PPO,使用策略的熵(随机性的度量)来形成固有地鼓励探索的损失函数的一部分。对此进行详细说明;在训练的早期,您会期望高水平的熵,因为所有动作可能被选中的概率几乎相等,但是随着模型探索动作并获得奖励,它会逐渐倾向于采取导致更高奖励的动作,因此随着训练的进行,熵将减少,并且逐渐开始表现得更加贪婪。

因为熵被添加到损失(或在 RL 的情况下的奖励,即负损失)中,如果代理选择低概率的动作但最终获得高奖励,它将获得更高的奖励。这将产生推高其未来再次被重新选择的概率的效果,同时推低之前更受欢迎的动作概率。

这很好,因为它确保总是有一些好奇的元素,这意味着它会在它已经很好探索的状态空间区域中贪婪地行动,但继续探索它不熟悉的状态空间区域,这就是为什么(在我看来)这是一种比使用 epsilon-greedy 更好的方法。

也就是说,我个人所做的是,一旦训练收敛,我将其定义为代理没有获得更高的奖励并且策略中的熵非常低,然后我添加一些少量的 epsilon-greedy 只是为了强制一定程度的勘探。