用人工智能和深度学习给游戏带来生命
机器学习打开了在游戏开发中使用训练而不是硬编码的大门
编者注:想了解更多的使用深度学习来开发数字化体验的内容,请查看Danny Lange在2017年9月17-20日人工智能旧金山大会上的议题《使用深度学习给游戏、VR和AR带来生命》。
更多人工智能内容请关注2018年4月10-13日人工智能北京大会

游戏开发是一个复杂且劳动密集型的工作。游戏的环境、故事线和人物个性都需要被仔细地构建。这需要视觉艺术家、编故事的人和软件工程师一起密切协作才能完成。通常,在传统编程的形式下,游戏会有一套专门编写的行为;或是在有大量规则组合的形式下,会以更加有反馈的行为来构成。在过去的几年间,数据密集的机器学习解决方案已经在企业(比如Amazon、Netflix和Uber)里消灭掉了基于规则的系统。在Unity,我们已经在探索使用这样的一些机器学习的技术,比如用深度学习做内容构建,用深度增强学习来进行游戏开发。我们已经看到这一波的机器学习和人工智能在游戏领域的巨大潜力。

对于一些数据驱动的大型企业而言,机器学习并不是什么新东西。2007年,当Netflix发起了著名的Netflix Prize竞赛,让最好的协同过滤算法来预测用户对电影的评分时,就是我们现在所体验的对人工智能的大量媒体报道的开端。但是在2000年初,一些大企业就已经在尝试使用数据驱动的决策和机器学习来提升业务了。Amazon已经非常努力地开发他们自己的推荐算法,尝试去发现用户的偏好,进而把这些偏好转化成更高的销售业绩。广告业的技术则是另外一种早期采用机器学习者,机器学习被用来提升点击率(CTR)。在过去的这些年里,机器学习技术已经成熟并扩散到非常多的行业。

例如,推荐算法已经从仅仅通过推荐来探求更多的信息发展到了探索和搜索的组合。这里的挑战是,当Amazon和Netflix使用推荐系统来收集数据时,如果他们仅仅是给用户推荐高得分的物品,而不是他们商品目录里的其他物品,他们获得的是一个不完整的用户偏好。这一问题的解决方案是微妙地从纯搜索变化到添加一些因素来探索。

最近,因为它们内在的可以探索和搜索的特性,诸如上下文老虎机这样的算法变的流行起来。这些算法可以更好地学习到它们还不了解的客户的东西。相信我,在你访问的很多Amazon网页的背后都潜伏着老虎机算法。我们在Unity的博客上有一篇不错的文章介绍上下文老虎机算法的威力。里面有一个对上下文老虎机算法的交互展示。

在2015年初,DeepMind将上下文老虎机算法进一步发展,并发表了一篇论文。其中介绍了一个把深度神经网络和增强学习组合起来的大规模系统。这个系统可以精通Atari的2600个游戏里的很多个,还仅仅只是依靠原始像素和得分作为输入就能取得超越人类的水平。DeepMind的家伙把探索和搜索的概念变成了兴奋剂。虽然上下文老虎机在学习行为上还比较得浅,但深度增强学习则能够学习一系列的行为用以最大化未来的累积收益。换句话说就是,它们可以学习优化长期价值(LTV)的行为。在一些Atari的游戏里,LTV通常是只有人类玩家掌握的一些策略发展。看这里的一个Breakout游戏的视屏来了解这种策略发展的例子。

在Unity,我们问自己如何才能让一只小鸡学会穿过一条交通繁忙的道路而不被来往的卡车撞死,同时还能收集礼物包。我们用了一个通用的和DeepMind的试验类似的增强学习算法。它会给小鸡一个正分如果它收集了一个礼物包,一个负分如果它被卡车撞死。另外,我们给小鸡四种可能的行动:向前、后、左、右移动。仅仅使用图像的像素和得分作为输入,以及这些非常简单的移动指示,在6个小时的训练后,小鸡就获得了超越人类的水平。可以在这里看相关的视频:

我们具体是怎么实现这一切的?实际上很简单。一套Python的API让我们可以把Unity的游戏与运行在Amazon云服务(Amazon Web Services,AWS)上的TensorFlow的服务连接起来。TensorFlow是Google在2015年发布的一个深度学习的框架。如你在这个视频里看到的,在训练的早期阶段,小鸡主要是在进行探索。但随着学习的深入,它逐渐地转变到搜索了。可以看到这一学习系统的一个重要能力就是它能成功地应对“没见过的”情形。卡车出现和礼物包的位置的组合是完全随机的。当小鸡被训练了几个小时候后,统计意义上它还是会持续地的碰到没有见过的场景。我们的Python API能很容易地从游戏里读取游戏框架和内部状态,并使用机器学习模型来反向控制游戏里的代理(比如小鸡)。

现在让我们对小鸡和它超人的能力做一个反思。小鸡游戏自身只是提醒了我们Amazon、Netflix和Uber是如何使用相同的技术来更好地服务他们的客户(不管是Uber的无缝载客体验或是Netflix给我展示按照我的口味定制的内容),不过它的确打开了在游戏开发中使用训练而不是硬编码的大门。

设想一下在游戏里训练一个非玩家角色(NPC, non-player character),而不是去编码它的行为。游戏开发人员需要做的会涉及到创建一个NPC需要被训练的游戏场景,他们会使用前面提到的Python API连接云端的增强学习的环境来进行这个训练。这个场景可以是完全人工设计的,或者是有NPC要去学习的一群人类玩家参与的。当NPC的表现令人满意后,另外一套Unity的API会允许开发人员直接把TensorFlow的模型嵌入到他们的游戏里面去,从而消除了需要继续把游戏连接到云端的TensorFlow服务的需求。

一些游戏开发人员可能会说他们在10到15年前最后尝试机器学习时“就已经这样做了”。但那是一个不一样的时代。那时候,通过富于表达的循环神经网络(RNN)——比如长短期记忆(LSTM)——来学习序列数据,以及通过卷积神经网络(CNN)来学习空间特征等技术都已经被发明出来了。但缺乏计算能力以及缺乏可扩展和精细的软件框架阻止了这些技术在实际中的成功应用,以及在诸如游戏开发这样有需求的行业里被采用。

在游戏开发里使用深度增强学习依然处于它的早期阶段。但对我们而言一切正在变得很清晰:类似于在其他大型企业里被证明的一样,这是一个潜在的颠覆性游戏技术。诸如TensorFlow这样成熟的、可扩展的、运行在云端并有集成的API接口的机器学习框架正在降低游戏开发人员和机器学习研究人员进入这个领域的门槛。正如机器学习正在进入企业的每个角落一样,你应该也会期待在你的下一个游戏里面机器学习会无处不在。

Danny Lange

Danny B. Lange是Unity Technologies公司的人工智能和机器学习副总裁。在Unity之前,Danny是Uber的机器学习的主管。在那里他领导着构建世界上最灵活的机器学习平台的工作,来支持Uber的快速成长。他还曾是Amazon机器学习(Amazon Machine Learning,Amazon提供的一个机器学习的云服务产品)的总经理;以及微软的资深开发经理,领导了一个产品团队专注于用于大数据的大规模机器学习;和IBM研究院的计算机科学家。Danny拥有丹麦技术大学的计算机科学博士学位。

Screenshot from the Unity Reinforcement Learning Demo (source: Danny Lange, used with permission)