百度智能云

飞桨强化学习框架PARL发布首个工业级深度进化学习库EvoKit
发布日期:2020-04-30 10:58浏览量:702次
飞桨强化学习框架PARL曾两次夺得NeurIPS强化学习赛事世界冠军。近期PARL升级1.3版本,通过发布深度进化学习库EvoKit,多智能体强化学习(Multi-Agent RL)算法,助力强化学习进一步落地工业应用场景。

 

深度进化学习库EvoKit

PARL 1.3 重点发布了首个工业级进化学习框架EvoKit,支持大规模神经网络在真实业务场景中调研和部署进化学习算法,针对性解决进化学习算法部署到业务场景所遇到的难题


什么是进化学习算法?

进化学习(Evolution Strategy)借鉴自然界种群进化过程,通过演化的方式找到全局最优。进化学习由来已久,近年来被不少学者用于解决强化学习(Reinforcement Learning),AutoML(Auto Machine Learning)等场景的问题。相对于梯度优化而言,进化学习直接通过参数空间的扰动来观察最终目标(如下视频所示),并且和强化学习一样,进化学习不要求优化目标和参数之间可导,因此适用范围非常广泛,易于并行化。基于EvoKit,可以利用数百台CPU优化百万量级参数的模型。


进化学习能用到哪些地方?

 
1. 优化目标和模型之间不可导的场景。例如,模型超参数的搜索;一些推荐类产品留存,总时长等不能建模,或者直接建模成本较高的场景。
2. 模型和业务规则逻辑或和其他流程耦合的场景。例如,某业务线的流程包括上下游总共十几个模块串行处理,希望优化中间某个模块的模型参数,但是下游处理模块的逻辑对于当前优化是黑箱。通过进化算法可以避免黑箱对于优化的不确定性,直接提升最终评价指标。
3. 元学习。很多模型不是直接使用,而是需要在多个场景上进一步fine-tune。进化学习算法可以利用最终fine-tune结果来优化元学习模型,破解求导链条过长等问题。

 

EvoKit有哪些特点?

 
1. EvoKit提供一整套可供线下调研及线上部署的进化学习工具。线下借助飞桨开源框架 API实现快速调研,线上基于Paddle Lite等工具,支持以较小的成本完成调研到上线的流程。同时,EvoKit提供包含异步更新机制,参数压缩和还原等线上业务普遍需求的功能。

2. EvoKit使用上非常便利。用户可以利用飞桨开源框架 API搭建任意结构的复杂网络。进化学习算法包含两个关键步骤,采样(或者扰动)和更新。网络参数不断通过扰动收集反馈,并基于相关反馈迭代进化网络(如上图所示)。EvoKit定义了主接口分别用于网络的扰动(AddNoise)和更新迭代(Update)。用户只需通过简单几行代码就能实现完整的进化流程,下图展示了一个伪代码的样例。EvoKit内置了包括ES, GA, CMA-ES等常用进化策略,也提供了很好的便于二次开发的可扩展接口,可以方便实现新的算法。

 

多智能体强化学习

PARL 1.3还实现了全新的多智能体强化学习算法(Multi-Agent RL,MARL)的框架支持。MARL是RL挑战群体决策问题的“杀手锏”,可以被广泛运用在包括地图派单,游戏AI, 任务分配等等问题中,但是算法的复现难度比起传统算法更大。很多RL框架很难利用一套框架兼容多种单智能体RL算法和MARL算法的开发。PARL在这一点上有新的突破。在单智能体算法中,PARL抽象出了Model、Algorithm、Agent三个模块,分别定义了前向网络(forward)、算法损失函数(backward)、数据交互等逻辑(见下图)。这种以智能体为核心的设计方式,在扩展到多智能体算法的时候,只需创建多个Agent实例,就可以让多个智能体交互起来,共同更新MARL算法
 
以主流的MADDPG算法的评估为例,可以看到PARL在MARL的扩展性:

当通过Model、Algorithm搭建好多个Agent之后,这些Agent可以很方便地和环境进行交互,存储各自的数据,然后训练模型。PARL1.3此次开源的MADDPG算法在OpenAI的8个MARL场景都进行了验证,效果能完全复现最优的表现。

此外,PARL 1.3版本还针对使用文档、应用样例进行了全面梳理,并开源了NuerIPS 2019强化学习赛事的冠军解决方法。
 
基于这些全新的功能,希望PARL和EvoKit能给相关领域的同学带来新的便利,助力强化学习和进化学习算法在工业场景的进一步应用落地。
 
PARL和EvoKit完全开源,欢迎大家使用,反馈和贡献。
 
PARL链接:
https://github.com/PaddlePaddle/PARL
 
如在使用过程中有技术问题,欢迎加入飞桨官方QQ群进行提问703252161
 
飞桨开源框架项目地址:
GitHub: https://github.com/PaddlePaddle/Paddle
Gitee:  https://gitee.com/paddlepaddle/Paddle