A2C 和在环境向量中运行代理有什么区别?

人工智能 强化学习 演员批评方法 健身房 优势-演员-评论家
2021-11-07 20:26:47

我已经实施了A2C。我现在想知道为什么我们要让多个参与者在环境中四处走动并收集奖励,为什么不让一个代理在环境向量中运行呢?

我个人认为这会更有效率,因为现在所有动作都可以通过一次网络一起计算。我做了一些测试,这在我的测试中似乎工作正常。我能想到使用多个参与者的一个原因是在多台机器上实现算法,在这种情况下,我们可以在一台机器上拥有一个代理。还有什么理由我们应该更喜欢多个演员?

以OpenAI的gym为基础的环境向量示例

class GymEnvVec:
    def __init__(self, name, n_envs, seed):
        self.envs = [gym.make(name) for i in range(n_envs)]
        [env.seed(seed + 10 * i) for i, env in enumerate(self.envs)]

    def reset(self):
        return [env.reset() for env in self.envs]

    def step(self, actions):
        return list(zip(*[env.step(a) for env, a in zip(self.envs, actions)]))
1个回答

我相信,如果您在多个并行环境中多次运行单个代理,您将在相似的状态下获得类似的操作,多个代理背后的原因是您将拥有具有不同参数的不同代理,并且您还可以有不同的显式探索策略,因此您的探索会更好,您将从环境中学到更多(查看更多状态空间)。使用单一代理您无法真正实现这一点,您将拥有单一的探索策略、单一的代理参数集,并且大多数时候您会看到类似的状态(至少在一段时间后)。你会加快你的学习过程,但这只是因为你在并行运行多个环境(与常规的 actor-critic 或 Q-learning 相比)。