百度正式发布PaddlePaddle深度强化学习框架PARL

Wofficre 2019-01-18

近日,百度PaddlePaddle正式发布了深度强化学习框架 PARL,同时开源了基于该框架的、在 NeurIPS 2018 强化学习赛事中夺冠的模型完整训练代码。

项目地址如下:https://github.com/PaddlePaddle/PARL

PARL 框架的名字来源于 PAddlepaddle Reinfocement Learning,是一款基于百度 PaddlePaddle 打造的深度强化学习框架。PARL 与现有强化学习工具和平台相比,具有更高的可扩展性、可复现性和可复用性,支持大规模并行和稀疏特征,能够快速 对工业级应用案例的验证。

百度正式发布PaddlePaddle深度强化学习框架PARL

为了帮助用户快速搭建可以和环境交互的机器人,PARL 抽象出数个基础类,包括 Model、Algorithm、Agent 等。

Model 类负责强化学习算法中的网络前向计算(forward)部分,通常嵌套在 Algorithm 类中。

Algorithm 类则定义了网络的更新机制(backward),通常属于一个 Agent。

Agent 类负责和环境进行交互,负责数据 I/O,并且收集数据训练集下的 algorithm。

百度正式发布PaddlePaddle深度强化学习框架PARL

通过这样的设计方案,PARL 保证了算法的可扩展性:针对同一个场景,用户想调研不同的网络结构对算法效果影响的时候,比如调研 RNN 建模或者 CNN 建模,只需要重写 model 部分即可;针对不同场景想用同一个算法调研的时候,也是也只需重写 model 即可。可复现性主要体现在框架提供的 algorithm 集合上,在下一段和复用性一起结合理解。

此外,PARL 的这种结构设计方式也保证了高复用性。仓库内的提供了大量经典算法的例子 (algorithms 目录内), 包括主流的 DQN 、DDQN、Dueling DQN、DDPG、PPO 等,值得注意的是,这些算法由于和网络结构进行了解耦(网络结构的定义在 Model 类中),因此,算法并不针对特定任务,而相当于一个相当通用的算法抽象。用户在通过 PARL 搭建强化学习算法来解决自己目前遇到的问题时,可以直接 import 这些经典算法,然后只需要定义自己的网络前向部分,即可在短时间内构建出经典的 RL 算法。这种高复用性在极大地降低了用户的开发成本之外,也让 PARL 提供的多个算法的完整的超参数列表得以确保仓库内模型具备复现论文级别指标的能力。

下图是 PARL 官方提供的一个构建示例,展示了如何快速构建可以解决 Atari 游戏的 DQN 模型。用户只需要定一个前向网络(Model 类),然后调用框架算法集合里面的 DQN algorithm 即可构建一个经典 DQN 算法了。DQN 算法里面的繁琐的构建 target 网络,同步 target 网络参数等细节,已经包含在构建的 algorithm 里面,用户无需再特别关注。

百度正式发布PaddlePaddle深度强化学习框架PARL

百度对强化学习的关注由来已久。早在 2012 年,百度就将在 multi-armed bandit 问题上的研究成果部署到了推荐系统中,应用于搜索、对话、推荐等产品,通过点击反馈结合在线训练的方式,动态调整探索 (exploration) 和收益 (exploitation) 的平衡点,在降低探索风险的同时最大化推荐收益。近年来,强化学习在百度工业应用方面落地在了凤巢,新闻 Feed 推荐等产品线上,在学术方面也在机器人控制、通用人工智能等领域发表了多篇学术论文。2018 年,在第二届机器人控制会议 CoRL 上,百度发表了干预强化学习机制的工作。而在 NeurIPS 2018 的强化学习赛事上,百度也击败了 400 多支来自全球各个研究机构的参赛队伍,获得冠军。

随着强化学习领域的发展,多家 AI 公司都在尝试进行深度强化学习框架的设计,比如 Intel 的 Coach、OpenAI 的 baseline、Google 的 Dopamine 等。如今的开源社区中仍然是「百家争鸣」态势,并未出现一个主导的 RL 框架。

这其中主要的一个原因是强化学习近年来发展迅猛,新的研究方向不断涌现导致设计框架难以追赶算法本身的发展速度。从 15 年 Deepmind 发表 DQN 算法以来,大量的 DQN 算法变种纷纷涌现,包括 Double DQN、Dueling DQN、Rainbow 等,同时在连续控制 (continuous control RL),分层控制 (hierarchical RL),多机器人控制 (multi-agent RL) 上涌现出相当多的新技术,甚至和元学习(meta-learning)以及环境建模(model-based)等结合起来。当前社区中存在的开源框架均可支持上述的一部分算法,但是由于技术迭代太快,并没有一个框架能够覆盖所有新算法。

第二个原因是深度强化学习算法和应用,具有方法各异、超参难调、随机性大等特点,即便是针对同一个问题,使用同一种算法,不同的实现方式会带来极大的差异,学术界也一再强调强化学习可复现性问题。综合这些因素,要实现一个统一的模型和计算平台,是相当困难的事情。

PARL 在设计之初就将上述问题考虑在内,强调可复制(reproducible)可重用(reusable)以及可扩展(extensible)。

此外,由于 PARL 基于百度内部的成熟应用开源,因此更能方便地定制大规模并行算法。通过调用简单的函数接口,用户可以将算法从单机版扩展成 GA3C、A3C、IMPALA 等并行训练架构。PARL 对于通讯机制,数据 I/O 等也有独特的加速处理。此外,基于 PaddlePaddle 对大规模工业级排序/推荐等稀疏模型的支持能力,PARL 也能轻松扩展到百亿级别数据或特征的训练。

百度正式发布PaddlePaddle深度强化学习框架PARL

根据百度在 NeurIPS 上做的技术分享,基于 PARL 最多可以同时通过 8 块 GPU 来拉动近 20000 个 CPU 节点运算,完全发挥整个 CPU 集群的计算潜力,在 NeurIPS 2018 强化学习赛事中,成功将需要近 5 个小时迭代一轮的 PPO 算法加速到了不到 1 分钟每轮,实现了相对单机运算数百倍的加速比。这种目前开源社区中框架难以支持的并行提速,是他们拿下本次冠军的关键因素之一。

百度正式发布PaddlePaddle深度强化学习框架PARL

相关推荐