Horizon 是首个使用应用强化学习(RL)在大规模生产环境中优化系统的端到端开源平台。
这个版本中包含的工作流和算法是以开放框架为基础构建的——PyTorch 1.0、Caffe2 和 Spark——使得任何大规模使用 RL 的人都可以使用 Horizon。
在过去的一年里,我们内部已经在多个应用程序中开使用了 Horizon,包括帮助定制 M 建议、发送更有意义的通知以及优化流媒体视频质量。
今天,我们开源了 Horizon,一个端到端的应用强化学习平台,使用 RL 来优化数十亿人使用的产品和服务。我们开发这个平台是为了弥补 RL 在研究领域日益增长的影响力和在生产领域历来狭窄的应用范围之间的差距。过去一年,我们在 Facebook 部署了 Horizon,提高了该平台把 RL 基于决策的方法运用到大规模应用程序的能力。虽然人们都在开发增强学习应用程序,但 Horizon 是第一个用于生产的开源 RL 平台。
虽然我们正在进行各种强化学习项目,这些项目使用反馈来提高性能,但是,Horizon 主要关注的是将 RL 应用于大型系统。这个版本包括模拟环境的工作流以及用于预处理、训练和导出生产环境模型的分布式平台。该平台已经为 Facebook 带来了性能优势,包括发送更相关的通知、优化流媒体视频比特率以及改进 Messenger 中的 M 建议。但是,Horizon 的开放设计和工具集也有可能让该领域的其他人受益,特别是那些有兴趣使用应用 RL 从大量信息中学习策略的公司和研究团队。Horizon 不仅仅证明了我们在 RL 领域的持续投入,也证明了这个有前途的人工智能研究领域现在可以运用到实际的应用程序中。
大规模决策:Horizon 如何把 RL 运用到生产环境
机器学习(ML)系统通常会生成预测,但随后需要工程师将这些预测转换为策略(即行动策略)。另一方面,RL 创建的系统能够做出决策、采取行动,然后根据反馈进行调整。这种方法有可能优化一组决策,而不需要手工制定策略。例如,RL 系统可以根据其他 ML 系统的估计和视频缓冲区的状态,直接为特定播放中的视频选择高比特率或低比特率。
虽然 RL 的策略优化能力在研究中显示出了良好的效果,但人工智能社区很难使用这些模型处理生产环境中有很大差别的实际需求。借助 Horizon,我们关注的是如何将两种完全不同类型的应用连接起来:复杂但终究有限的研究用模拟器环境;基于 ML 的策略优化系统,依赖于存在固有噪声的、稀疏的、任意分布的数据。与游戏中基于 RL 的机器人可以对一组有限且可预见、可重复的规则做出反应不同,现实场景很难模仿,反馈更难以纳入已部署代码,与在可控的实验环境中相比,任何修改通常都需要更加小心。
就像深度学习彻底改变了神经网络的应用那样,像 Horizon 这样的项目有可能将定义科学家和工程师如何将 RL 应用到生产环境中,使用策略优化来产生影响。特别地,Horizon 考虑了特定于生产环境的问题,包括特征规范化、分布式训练、大规模部署和服务、具有数千种不同特征类型和分布的数据集,以及高维离散的连续动作空间。
Horizon 的管道包括三个组件:
(1)时间轴生成,运行在数千个 CPU 上;
(2)训练,跨多个 GPU;
(3)服务,这也跨越了数千台机器。
这个管道允许 Horizon 扩展到 Facebook 的数据集。对于策略学习(例如使用 OpenAI Gym), Horizon 可以选择在一个闭环中将数据直接提供给训练过程。
Horizon 还解决了大规模构建和部署 RL 系统所带来的独特挑战。RL 通常以在线方式训练,系统从随机选择动作开始,然后实时更新。考虑到这些系统在 Facebook 的规模和影响,这种随机性和实时更新目前还不是一个选项。相反,我们的模型是从在一个产品工程师设计的策略上训练开始的。这些模型必须离线训练,使用 off-policy 方法和反事实策略评估(CPE)来估计 RL 模型在过去的决策中会做什么。一旦 CPE 结果被接受,我们将在一个小实验中部署 RL 模型,收集结果信息。有趣的是,我们发现,与之前相对稳定的系统不同,RL 系统会随着时间的推移不断学习和改进。
行业数据集通常包含数十亿条记录,以及数千个具有任意分布和高维离散连续动作空间的状态特征。通过研究和观察,我们发现,与传统的深度网络相比,应用 RL 模型对噪声和非规范化数据更敏感。Horizon 使用 Apache Spark 并行对这些状态和动作特征进行预处理,我们的 Spark 管道也包含在开源版本中。在对训练数据进行预处理之后,我们使用基于 PyTorch 的算法在图形处理单元上进行规范化和训练。
虽然 Horizon 可以在单个 GPU 或 CPU 上运行,但该平台的设计侧重于大型集群,一次在多个 GPU 上进行分布式训练,使工程师可以使用数百万个样本来解决问题,并更快地迭代他们的模型。我们在 PyTorch 中使用数据并行和分布式数据并行功能进行分布式训练。该版本包括深度 Q 网络(DQN)、参数化 DQN 和深度确定性策略梯度(DDPG)模型。在训练过程中,我们还运行 CPE,并将评估结果记录到 TensorBoard 上。训练完成后,Horizon 将使用 ONNX 导出这些模型,以实现大规模地高效服务。
在许多 RL 领域中,你可以通过尝试来度量模型的性能。在 Facebook,我们希望确保在大规模部署模型之前对它们进行彻底地测试。由于 Horizon 解决了策略优化任务,训练工作流还自动运行了几种最先进的策略评估技术,包括时序双鲁棒性策略评估和 MAGIC。生成的策略评估报告从训练流中导出,可以使用 TensorBoard 进行观察。评估可以与异常检测相结合,在将策略公开部署之前,如果模型再次迭代的性能与前一个迭代相比有很大的差别,就会自动向工程师发出警报。
在工作中学习:Horizon 对 Messenger、360 视频等的影响
自从我们开始在内部使用 Horizon 以来,该平台已经示范了 RL 如何利用即时反馈来做出提高性能的决策,从而对生产应用程序产生影响。
例如,Horizon 使我们可以通过实时优化比特率参数来提高 Facebook 上 360 视频的图像质量。该平台既考虑了可用带宽的数量,也考虑了已缓冲视频的数量,以确定是否有可能转换到更高质量的视频。这个过程利用了 RL 随时产生奖励的能力,使用新的无监督数据——它在给定的视频正在播放时工作,而不是事后再分析性能和仔细标注的数据。
反事实策略评估为在离线环境中部署 RL 模型的工程师提供了见解。这个图比较了几种 CPE 方法和日志策略(最初生成训练数据的系统)。得分 1.0 意味着 RL 和日志策略在性能上是匹配的。这些结果表明,RL 模型的累积奖励大约是日志系统的两倍。
这个高级图表说明了 Horizon 的反馈循环。首先,我们对现有系统记录的一些数据进行预处理。然后,我们训练一个模型并分析离线环境下的反事实策略结果。最后,我们将模型部署到一组人员中,并度量真正的策略。来自新模型的数据反馈到下一次迭代中,大多数团队每天都部署一个新模型。
Horizon 还过滤了 Messenger 中智能助手 M 的建议。M 在人们的开放式对话中提供相关内容的建议,丰富人们的交流方式,在 Messenger 中完成工作。Horizon 使用 RL——比基于规则的对话学习策略方法更具可扩展性、前瞻性、更能响应用户的反馈——帮助 M 逐步学习。例如,如果人们更有规律地与一个建议交互,M 可能会更多地提供这个建议。在 Horizon 的帮助下,M 变得更加智能化和高度个性化,因为它每天都能帮助数百万人进行交流。
该平台还改进了我们使用人工智能的方式,帮助我们决定向用户发送哪些 Facebook 通知,以及多久发送一次。在过去,我们不是发送所有可能的通知(说明有新帖子、评论等),而是使用 ML 模型来帮助预测哪些可能最有意义或最相关,并过滤掉其他的。但这些模型依赖于监督学习,没有考虑到发送通知的长期价值。例如,每天多次访问该平台的人可能不需要系统为他们本来会看到的帖子发出通知,而不太活跃的人可能会从通知中受益,这可以确保他们不会错过家人和朋友发表的值得关注的帖子。
为了更好地处理这些长期信号——并使通知按照预期工作,为平台上的所有人提供价值——我们使用 Horizon 训练了一个离散动作 DQN 模型,用于发送推送通知。当某人参与了他们可能会错过的帖子时,这个模型会收到奖励,而发送通知则会受到惩罚。RL 模型仅在对用户的价值(例如,让他们注意到好友或家人发布的值得关注的帖子)高于惩罚值(在他们的设备上弹出额外的警告)时才允许通知。该模型还定期更新大量的状态转换,使其能够逐步改进,并最终调整通知的数量。自从我们将以前的基于监督学习的系统替换为基于 Horizon 的版本之后,我们观察到,通知的相关性得到了改善,而发送通知的总数没有增加。与通过点击或单击通知来定义相关性不同,我们可以更广泛、更深入地查看信息以确保它们提供了真正的好处。
使任何人都可以在生产环境中部署 RL 的工具
这些好处突显了 RL 能为行业提供的东西,即能够直接从以前的次优策略下收集样本,并从中学习最优策略。尽管我们已经确定了非常适合 RL 的具体场景和应用程序,但这仅仅是激动人心的旅程的开始。鉴于人工智能社区的集体才华和创造力,我们迫不及待地想看到 Horizon 所激发的创意、功能和产品。
任何使用机器学习来做决定的人都可以试试 Horizon。第一步是记录倾向(采取行动的概率)和备选方案(其他可能的行动)。Horizon 使用倾向性和备选方案来了解何时可以采取更好的行动。第二步,定义并记录奖励(采取行动所获得的价值)。在收集到这些数据之后,就可以运行 Horizon 的训练循环,导出一个能够做出新决策并最大化总回报的模型。
Horizon 是我们致力于 AI 开放开发的一部分——它是 Facebook 的内部平台,我们现在正在开放源代码,它使用的工具我们已经提供给社区,包括 PyTorch 1.0 和 Caffe2。虽然 Horizon 已经针对在生产环境应用进行了优化,但我们使用该平台的经验也揭示了与 RL 集成到其他系统相关的重要研究。我们正利用 Horizon 平台探索基于模型的 RL 和“奖励塑造(reward shaping)”的新技术,并利用该平台在 Facebook 更广泛地挖掘其他应用,比如数据中心资源分配和视频推荐。我们还计划添加更多的模型和工作流,以帮助其他人将 RL 的长期承诺转化为即时行动。
有关详细信息,请阅读关于 Horizon 开发和内部用例的完整白皮书:https://arxiv.org/abs/1811.00260
除了对新应用程序产生影响外,Horizon 还可以改变工程师和 ML 模型协同工作的方式。不再通过编写难以理解和维护的规则来驱动模型,我们设想,在工程师和他们使用的模型之间有一个双向对话,工程师可以指定他们的高层目标,并与机器学习协同实现这些目标,把它们应用到一个不断变化的决策环境中。Horizon 是这个旅程的第一步,我们邀请您复制我们的 GitHub 库并进行试用。
查看英文原文:
https://code.fb.com/ml-applications/horizon/
评论