A3C - 将行动概率转化为强度

数据挖掘 机器学习 强化学习 可能性 演员评论家
2022-03-01 19:22:57

我正在尝试使用 A3C 网络来学习玩旧的 Atari 视频游戏。我的网络为每个可能的动作(例如左、右、射击)输出一组概率,我使用这些信息来确定在游戏中要采取的动作。

但是,我开始思考如何使用非二元动作玩游戏。例如,用轮子而不是键盘键向左或向右转向汽车。我考虑过简单地将概率转换为强度(例如,如果我的左右值为 1.0/0.0,则尽可能进行最困难的左转,但如果我的值为 0.6/0.4,则进行更缓慢的转向)但我不是确定这在数学上是否有意义,甚至在实践中。

有这样做的标准方法吗?

2个回答

一般来说,使用策略梯度 (PG),您可以有两种“风格”:随机确定

在您的情况下,您可以构建一个输出连续动作的神经网络,或者一个近似概率分布的充分统计数据的神经网络,您将从中对动作进行采样。主要参考资料是:理论证明带有 DPG 的神经网络

没有关于使用哪一个的规则。我引用的论文中有很多例子表明 DPG 优于 SPG,但也恰恰相反。有时你真的希望输出是确定性的。例如,在定价方面:如果客户进入商店,您使用 SGD 分配价格,客户每次都会遇到不同的价格(差异很小但仍然存在差异)。

根据我的个人经验,我发现使用 NN 稳定 DPG 有点困难,您还需要提出一个好的探索策略。但是,一旦网络稳定,您将获得可以控制您的车辆的连续动作值。这是一个使用 tensorflow 和 Keras 使用 DPG 控制汽车的详细示例。

对于关于这两个框架的一般理论探索,我建议你 这篇硕士论文。它提供了这两种方法的简明概述(没有 NN 实现)。如果您决定加入 PG,您还可以查看我在此处给出的答案。

用于连续动作空间的策略梯度的标准方法是将参数向量输出到概率分布。要将策略解析为代理的操作,然后从分发中采样。

在具有离散动作空间的策略梯度中,实际上已经是这种情况了——softmax 层为您提供了一个离散分布,您必须从中进行采样以选择动作。

一般规则是您的概率分布函数需要是可微的。一个常见的选择是正态分布,输出向量是平均值和标准差。这除了 NN 之外,还为 agent 的模型增加了一个额外的“解释层”,它需要包含在梯度计算中。

你的想法:

例如,如果我的左右值为 1.0/0.0,则尽可能进行最困难的左转,但如果我的值为 0.6/0.4,则进行更平缓的转弯

. . . 快到了。但是,为了使用策略梯度,您需要随机而非确定地解释输出值。基于您的参数的确定性输出对策略的改进没有梯度,因此无法调整策略*。另一种思考方式是,策略梯度方法必须在策略函数中内置探索。

将您拥有的左/右输出转换为 PDF 是非常困难的,当智能体专注于最佳操作时,该 PDF 可以在最优值附近逐渐变窄,因此我建议使用共同均值、标准差拆分为这个,如果采样动作最终为例如硬左时间 1.7,则让环境在最小/最大转向时切断动作


* 实际上,正如康斯坦丁诺斯的回答中指出的那样,这是不正确的。确定性策略梯度求解器,有时它们更好。他们通过学习off-policy来工作。您的网络可以简单地输出一个转向方向 -1.0 到 1.0,但您需要一个行为策略,为该输出添加一些随机性以便学习。

我还认为您需要从 A3C 切换到 A2C 才能利用确定性策略梯度求解器。