发布人:Google Research 软件工程师 Leopold Haller 和 Hernan Moraldo
在过去二十年里,计算和连接性方面的巨大进步让游戏开发者能够创造出范围更广、且更为复杂的作品。简单的线性关卡已演变成逼真的开放世界,程序化算法赋予了游戏前所未有的多样性,加之不断扩大的互联网访问,游戏已被转换成为动态的在线服务。然而,范围和复杂性的增长速度超过了质量保证团队的规模或传统自动化测试的容量。这对产品质量(如延迟发布和发布后补丁程序)和开发者的生活质量产生了挑战。
机器学习 (ML) 技术为此提供了一个可能的解决方案,因为它们已经在深刻影响游戏开发流程方面展示出潜力——可以帮助设计师 平衡游戏,帮助艺术设计师 产出高质量的资产,而这所花费的时间,只占以往所需的一小部分。
此外,它们可以被用来训练具有挑战性的对手,展现最高水准的竞技。然而,一些 ML 技术要求目前对于游戏制作团队来说不切实际,包括设计特定游戏的网络架构,增进 ML 算法实施的专业知识,或是生成数以十亿的数据训练框架。相反,游戏开发者的操作环境为利用 ML 技术提供了独特优势,如直接访问游戏源,大量专家演示,以及视频游戏独特的交互性。
今天,我们推出了一款基于 ML 的系统,游戏开发者可以用它快速有效地训练游戏测试智能体,从而在快速发现严重错误的同时,允许人工测试人员专注于更为复杂和棘手的问题。由此产生的解决方案不需要 ML 专业知识,且适用于多款最流行的游戏类型。它还可以在一小时内,在单个游戏实例上,从游戏状态中生成游戏操作,从而训练 ML 策略。我们还发布了一个 开放源代码库,展示这些技术的功能性应用。
支持的类型包括街机、动作/冒险和赛车游戏
为任务选择合适的工具
视频游戏测试 (Game testing) 的最基本形式很简单,就是玩游戏,疯狂地玩游戏。许多严重的错误(如崩溃或掉出游戏世界)可以很容易地被检测出来,并进行修复;因此其难点在于如何在现代游戏的巨大状态空间中找到它们。为此,我们决定专注于训练一个可以大规模“专心玩游戏”的系统。
我们发现,实现此目的最有效的方法不是试图训练一个能从头到尾玩完整个游戏的、单一的、超级有效的智能体,而是为开发者提供训练游戏测试智能体集合的能力,其中每个智能体都能有效地完成几分钟的任务,游戏开发者称之为“游戏试玩循环”。
这些核心游戏试玩行为,如果通过传统的方式进行编程,成本通常比较高;但相较于单一的从头到尾的 ML 模型,这种训练模型更加高效。在实践中,商业游戏通过重复和重新混合核心游戏试玩循环来创建更长的循环,这意味着开发者可以通过将 ML 策略与少量简单脚本相结合的方式,测试大段游戏玩法。
以模拟为中心的语义 API
将 ML 应用于游戏开发的最基本的挑战之一,是用于弥合以模拟为中心的视频游戏世界和以数据为中心的 ML 世界之间的鸿沟。我们的系统没有要求开发者直接将游戏状态转换为自定义、低级别的 ML 特征(这种操作的工作量过于繁重)或试图从原始像素中学习(这种操作需要海量数据用于训练),而是为开发者提供了一个惯用的、对游戏开发者友好的 API,让他们能够用玩家观测到的基本状态和可执行的语义行动来描述游戏。所有这些信息都是通过游戏开发者所熟悉的概念来表达的,如实体 (Entity component system)、光线投射 (Ray casting)、三维位置和旋转、按钮和操纵杆。
正如下列例子所示,该 API 只需几行代码就能指定观测和操作。
赛车游戏中操作和观测的例子
从 API 到神经网络
这种高级语义 (High level semantic) API 不仅易于使用,而且还能让系统灵活地适应正在开发的特定游戏——开发者所采用的 API 构建块的特定组合,提供了系统部署中的游戏场景类型信息,从而影响了我们对网络架构的选择。这方面的一些例子包括:根据它们代表数字按钮还是模拟操纵杆,以不同的方式处理动作输出;或使用卷积神经网络 (Convolutional neural network),来处理智能体利用光线投射探测周围环境的观测行为(类似于自动驾驶车辆用激光雷达 (Lidar) 探测周围环境)。
我们的 API 具有足够的通用性,可以对游戏中许多常见的控制方案(控制运动的动作输出配置)进行建模,例如第一人称游戏、具有摄像头相关控制的第三人称游戏、赛车游戏、双摇杆射击游戏等。由于三维运动和瞄准通常是游戏玩法的固有组成部分,我们依此创建了在这些游戏中倾向于自动进行的,如瞄准、接近或回避行为网络等简单行为。该系统实现此目的的方式是,通过分析游戏的控制方案来创建神经网络层,从而对该游戏中的观测和操作进行自定义处理。例如,游戏世界里对象的位置和旋转被自动转换为 AI 视角控制的游戏实体的方向和距离。这种转换通常会提高学习的速度,并帮助习得网络更好地泛化。
从游戏生成的神经网络例子,该游戏有操纵杆控制和光线投射输入。根据输入(红色)和控制方案,该系统生成了自定义的前处理层和后处理层(橙色)
向专家实时学习
生成神经网络架构后,需要选择适当的学习算法对网络进行训练来试玩游戏。
强化学习 (RL) :通过直接训练 ML 策略以实现奖励最大化,是显而易见的选择,它已被成功应用于游戏中,来训练高度胜任的游戏 ML 策略。然而,RL 算法所需的数据往往多于单个游戏实例在合理时间内产生的数据,而且在新网域得到良好的结果往往需要超参数调整 (Hyperparameter optimization) 和强大的 ML 专业知识。
相反,我们发现 模仿学习 (IL) 这种能够通过观测专家玩游戏来训练 ML 的策略在我们的案例场景中十分有效。与 RL 智能体需要自主发现良好策略不同的是,IL 只需要重现人类专家的行为。由于游戏开发者和测试者是自己游戏的专家,他们很容易就能提供游戏演示。
我们使用了一种受 DAgger 算法 启发的 IL 方法,让我们能够充分利用视频游戏最吸引人的特性——互动性。由于我们的语义 API 减少了训练时间和数据要求,训练实际上是实时的,让开发者能够在提供游戏玩法演示和观察系统运行之间流畅切换。这就形成了一个自然的反馈循环,在这个循环中,开发者需要对连续的 ML 策略流进行迭代修正。
从开发者的角度来看,提供演示或纠正错误行为,就像拿起控制器开始玩游戏一样简单。这些工作完成后,他们就可以放下控制器,观看 ML 策略玩游戏。这实现了实时的、互动的、高体验感的训练体验,且往往具有很高的乐趣。
利用我们的系统进行训练的 FPS 游戏 ML 策略
结论
我们推出了一个系统,它结合了高级语义 API 和受 DAgger 算法启发的交互式训练流程,能够为多种类型的视频游戏测试提供实用的 ML 策略训练。我们已经发布了一个 开放源代码库,作为此系统的功能说明。无需 ML 专业知识,在单一设备上训练智能体只需要 1 小时。我们希望这项工作将有助于推动 ML 技术的发展,使这些技术能够通过易用、有效和有趣的方式,部署于实际游戏开发流程中。
致谢
在此对本项目的核心成员表示感谢:Dexter Allen、Leopold Haller、Nathan Martz、Hernan Moraldo、Stewart Miles 和 Hina Sakazaki。训练算法由 TF Agents 提供,设备端推理由 TF Lite 提供。特别感谢我们的研究顾问 Olivier Bachem、Erik Frey 和 Toby Pohlen,以及为我们提供帮助性指导和支持的 Eugene Brevdo、Jared Duke、Oscar Ramirez 和 Neal Wu。
原文:Quickly Training Game-Playing Agents with Machine Learning
中文:TensorFlow 公众号