强化学习,你还在为重新发明轮子而苦恼吗?您是否正在为寻找操作环境而苦恼?DeepMind为您带来Acme框架!Acme是一个基于python的强化学习研究框架,由谷歌旗下的DeepMind于2020年开源。该框架简化了新的RL智能体的开发,加快了RL研究的步伐。DeepMind是强化学习和人工智能研究的先驱,据他们自己的研究人员称,Acme已经成为DeepMind每天都在使用的框架。目前Acme在Git中已经获得了超过2.1k的stars。Acme的学习曲线也相当平缓。但是因为Acme有多个不同复杂度的接口作为切入点,也就是说这个框架不仅适合高级研究人员,也可以让初学者实现哪怕是简单的算法,类似于TensorFlow和PyTorch,可以被初学者和专家都在使用。但此框架的唯一缺点是,由于该框架仍然相当新,因此没有真正完整的文档可用,也没有任何好的教程。针对这个问题,伦敦政治经济学院的博士生写了一篇教学博客,帮助理解Acme框架。按照作者的说法,这篇教程文章无意成为或替代一个完整的文档,而是对Acme的简明介绍。,实用介绍。最重要的是,它应该让读者了解框架下的设计选择,以及这对RL算法的实现意味着什么。Acme的基本架构以二十一点游戏(BlackJack)为例介绍框架。Acme智能体的运行环境并不是为了与Gym运行环境交互而设计的,而是使用了DeepMind自己打造的RL环境API。它们的主要区别在于时间步长的表示方式。幸运的是,Acme的开发人员已经为Gym环境提供了包装函数。Blackjack有32x11x2种状态,尽管并非所有状态都可以实际出现在游戏中,并且有两种操作选项,击中或棍子。三个重要的角色是演员、学习者和代理人。学习者使用参与者收集的数据来学习或改进策略,通常以迭代在线方式进行。例如,学习可能涉及更新神经网络的参数。新的参数被传递给演员,演员根据更新后的政策行动。代理只是将行为和学习组件结合起来,但通常不需要实施额外的强化学习逻辑。下图包含所有三个组件。这种分解参与者、学习者和代理的主要原因之一是为了促进分布式强化学习。如果我们不关心这个,或者如果算法足够简单,也可以只实现演员并将学习步骤简单地集成到演员的更新方法中。比如下面这个随机代理,就是继承自acme的Actor类。开发人员必须实现的方法是select_action、observe_first、observe和update。正如刚才提到的,后者是在没有额外学习者组件的情况下进行学习。请注意,此代理将以相同的方式工作,而无需子类化acme.Actor。基类只确定必须重写的方法。这也确保代理按预期与其他Acme组件集成,例如环境循环。代理使用随机选择命中或坚持的策略,但通常框架允许您在如何实施策略方面有很大的灵活性。稍后将实施贪婪政策。在其他情况下,该策略可能包括一个神经网络,它可以使用TensorFlow、PyTorch或JAX来实现。Acme与框架无关,因为它可以与任何机器学习库结合使用。在更新方法中,actor通常只从learner中提取最新的参数。但是,如果不使用单独的学习器,则RL逻辑会进入更新方法。强化学习算法通常由一个循环组成,每个循环由四个步骤组成,这些步骤不断重复直到达到终止状态。1.观察状态2.根据行为策略选择下一步动作3.观察奖励4.更新策略大多数情况下,这个循环总是完全一样的。方便的是,Acme中有一个快捷方式:EnvironmentLoop,它执行与上面看到的步骤几乎完全相同的步骤。只需传递环境和代理实例,然后使用一行代码运行单个事件或任意数量的事件。还有一些记录器可以跟踪重要指标,例如所采取的步数和每次迭代收集的奖励。SARSAAgentSARSA是一种基于策略的算法,其更新依赖于状态(state)、动作(action)、奖励(reward)、下一状态(nextstate)和下一动作(nextaction)。首先,在代理的__init__方法中,我们初始化Q、状态-动作-值矩阵和行为策略,这是一个epsilon贪婪策略。另请注意,此代理必须始终存储其先前的时间步长、操作和下一个时间步长,因为它们在更新步骤中是必需的。在observe函数中,通常没有什么必须做的。在这种情况下,我们只存储观察到的时间步长和采取的行动,但这并不总是必要的。例如,有时可能需要将时间步长(和整个轨迹)存储在数据集或回放缓冲区中。Acme还为此目的提供了数据集和附加组件。事实上,DeepMind开发的Reverb库就是这样做的。上面的transform_state方法只是将状态转换为正确格式以正确索引Q矩阵的辅助函数。最后,训练SARSA环境500,000步。Qlearningagent下面的Qlearningagent和SARSAagent很像。它们的区别仅在于Q矩阵的更新方式。这是因为Q-learning是一种off-policy算法。据博主介绍,Acme是一个非常好的强化学习框架,因为你不需要从头开始开发你的算法。因此,与其自己弄清楚如何编写可读和可重现的RL代码,不如依靠DeepMind聪明的研究人员和开发人员,他们已经为您完成了这些工作。在他们的仓库中,常用算法的实现,例如深度Q网络(DQN)、深度确定性策略梯度(DDPG)、蒙特卡洛树搜索(MCTS)、行为克隆(BC)、IMPALA等。
