Acme框架真香!用过一次后,伦敦博士撰文大赞DeepMind强化学习框架

2021-07-06 11:22:52 浏览数 (1)

新智元报道

来源:DeepMind

编辑:LRS

【新智元导读】2020年DeepMind就推出了他们的强化学习框架Acme,但缺少教程和入门材料。伦敦政经博士用了一次之后直呼好用,立刻写了一篇博客自发推广!

研究强化学习的你还在苦于重复造轮子吗?苦于寻找运行环境吗?

DeepMind给你带来了Acme框架!

Acme是一个基于 python 的强化学习研究框架,2020年由 Google 的 DeepMind 开源。这个框架简化了新型 RL 智能体(agent)的开发,加快了 RL 研究的步伐。

DeepMind 是强化学习和人工智能研究的先行者,根据他们自己的研究人员所说,Acme 已经成为 DeepMind 的日常使用的框架了。

目前Acme在Git已经获得了超过2.1k个星星。

Acme的学习曲线也是相当平缓的。但由于Acme有多个不同复杂程度的接口作为切入点,也就是说,这个框架不仅适用于高级研究人员,而且允许初学者实现甚至是简单的算法,类似于 TensorFlow 和 PyTorch 能够同时被初学者和专家所使用。

但这个框架唯一的缺点就是,由于框架仍然是相当新的,没有真正完整的文档可用,也没有任何优秀的教程。

针对这个问题,伦敦政治经济学院一个博士生写了一篇教学博客,帮助了解Acme框架,据作者所说,这篇教程文章并不打算成为或取代一个完整的文档,而是对 Acme 的一个简洁、实用的介绍。最重要的是,它应该让读者了解框架底层的设计选择,以及这对 RL 算法的实现意味着什么。

Acme的基本架构

以21点游戏(BlackJack)作为例子来介绍框架。

Acme 的智能体的运行环境没有设计与Gym运行环境交互,而是采用DeepMind 自己创建的 RL 环境 API。它们的区别主要在于时间步是如何表示的。

幸运的是, Acme 的开发人员已经为Gym环境提供了包装器函数。

21点有32 x 11 x 2个状态,尽管并不是所有这些状态都能在一场比赛中实际发生,并且有两个action可选,hit或是stick。

三个重要的角色分别是actor, learner, 智能体agent。

learner使用actor收集的数据来学习或改进策略,通常采用迭代的在线方式。例如,学习可能包括更新神经网络的参数。新的参数被传递给actor,然后actor根据更新的策略进行操作。

智能体只是简单地将行为和学习组件结合起来,但是通常不需要实现额外的强化学习逻辑。下面的图片包含了所有三个组件。

这种将actor、learner和agent分解的主要原因之一是为了促进分布式强化学习。如果我们不关心这些,或者算法足够简单,那么也可以只实现actor,并简单地将学习步骤集成到actor的更新方法中。

例如,下面的随机智能体继承自 acme的Actor类。开发人员必须实现的方法是 select_action、 observe_first、observe 和 update。正如刚才提到的,后者是没有额外的learner组成部分的学习。

注意,这个agent将以同样的方式工作,而不会子类化 acme.Actor。基类仅确定必须覆盖的方法。这还确保agent按照预期的方式与其他 Acme 组件集成,例如环境循环(environment loop)。

这个agent使用一个随机选择hit或stick的策略,但是通常框架允许您在如何实现策略方面有很大的灵活性。后面还会实现一个贪婪的政策。

在其他情况下,策略可能包含一个神经网络,可以使用 TensorFlow、 PyTorch 或 JAX 来实现它。在这个意义上,Acme 是框架是不可知的,可以将它与任何机器学习库结合起来。

在更新方法中,actor通常只从learner中提取最新的参数。

但是,如果不使用单独的学习者,那么 RL 逻辑将进入update方法。

一个 强化学习算法通常由一个循环组成,每个循环由四个步骤组成,重复这四个步骤,直到达到一个终止状态。

1、观察状态

2、根据行为策略选择下一步行动

3、观察奖励

4、更新策略

在大多数情况下,这个循环总是完全相同的。

方便的是,在 Acme 中有一个快捷方式: EnvironmentLoop,它执行的步骤几乎与上面看到的步骤一模一样。只需传递环境和代理实例,然后可以使用单行代码运行单个事件或任意多个事件。还有一些记录器可以跟踪重要的指标,比如每一个迭代采取的步骤数和收集到的奖励。

SARSA 智能体

SARSA 是一个基于策略的算法,其更新依赖于状态(state)、行动(action)、奖励(reward)、下一个状态(next state)和下一个行动(next action)而得名。

首先,在智能体的 __init__ 方法中,我们初始化 Q、状态动作值矩阵和行为策略,这是一个 epsilon 贪婪策略。还要注意,这个代理必须始终存储它的上一个 timestep、 action 和下一个 timestep,因为它们在更新步骤中是必需的。

在observe函数中,通常没有什么必须做的事。

在这种情况下,我们只是存储观察到的时间步和所采取的操作,然而,这并不总是必要的。例如,有时可能希望将时间步骤(和整个轨迹)存储在数据集或重播缓冲区中。

Acme 还为此提供了数据集和额外的组件。事实上,还有一个由 DeepMind 开发的Reverb库用来做这件事。

上面的 transform_state 方法只是一个辅助函数,用于将状态转换为正确的格式,以便正确地对 Q 矩阵进行索引。

最后,训练 SARSA 的环境为500,000步。

Q learning 智能体

下面的 Q learning 智能体与 SARSA 智能体非常相似。它们的不同之处仅在于如何更新 Q 矩阵。这是因为 Q 学习是一种非策略算法。

博客作者认为, Acme 是一个非常好的强化学习框架,因为你不需要从头开发你的算法。所以,与其自己琢磨如何编写可读和可重复的 RL 代码,你可以依靠 DeepMind 的聪明的研究人员和开发人员,他们已经为你做到了。

在他们的仓库中,Deep Q-Networks (DQN)、Deep Deterministic Policy Gradient(DDPG)、Monte Carlo Tree Search (MCTS)、Behavior Cloning(BC)、 IMPALA 等常用算法的实现。

参考资料:

https://towardsdatascience.com/deepminds-reinforcement-learning-framework-acme-87934fa223bf

0 人点赞