金融、视觉领域外,AI也成为游戏开发的颠覆性技术
机器学习为我们开启了游戏开发训练的大门,而非游戏编程的大门。
“游戏开发”是一项非常复杂的任务,并且需要耗费大量的人力资源。图形艺术家、故事叙述者和软件工程师需要共同努力,才能打造出比较好的游戏环境、游戏情节和人物角色行为。
通常,游戏是以传统代码的形式出现的“硬线行为”的微妙组合,也是以大量规则的形式出现的更具响应性的行为集合。
在过去的几年间,数据导向型的“机器学习”已经逐渐取代了一些企业(比如亚马逊、Netflix和优步)中的规则导向型系统。在Unity,我们探究了“机器学习”技术的使用,包括“深度学习”在文本创作中的应用,以及“深度强化学习”在游戏开发中的应用。在机器学习和人工智能的浪潮中,我们看到了巨大的希望和发展空间。
对于那些数据导向型的大企业来说,机器学习已经不算是新兴技术了。2007年,Netflix发起了一个“过滤算法”的公开赛,为能够预测电影用户评分的最佳过滤算法专门设立了“Netflix奖”,这正是我们现在所经历的人工智能媒体报道浪潮的开端。
不过早在2000年年初,一些大企业为了谋求更好的发展,已经对“数据导向型决策”和“机器学习”有所涉猎了。为了充分了解顾客们的偏好,进而将顾客偏好转化为更高的销售额,亚马逊一直在潜心研究他们的“推荐算法”。
除了亚马逊的“推荐算法”之外,广告技术是另一个较早利用“机器学习”来提高网站点入率的领域。近年来,机器学习已经扩展至更多的行业,并且不断趋于成熟。
举例来说,我们在前面提到过的“推荐算法”最初只是作简单的推荐方案,如今已经发展到能够通过“探索”和“开发”寻求更多的信息。
而亚马逊和Netflix在使用他们的推荐系统进行数据收集时所面临的挑战是,如果只向客户展示推荐频率高的产品,而不展示其他的产品,那么他们获得的客户偏好信息就不全面。
而解决这一问题的方法是:将纯开发行为转变为加入了探索元素的开发行为。最近,由于同时具备了“开发”和“探索”能力,像“上下文老虎机”(contextual bandits)这样的算法能够更好地了解客户的未知信息,也因此越来越受欢迎。
相信我,“上下文老虎机” (contextual bandits)算法肯定会在你浏览亚马逊商城的时候隐藏了一些网页。
在2015年,DeepMind进一步发展了“上下文老虎机” (contextual bandits)算法,并且将其从一个 深度神经网络与强化学习大规模结合的系统 上发布出来。
该系统仅靠一些作为输入的原始像素和分数就能以超人类的水平掌握各种范围的Atari 2600游戏。DeepMind的研究人员将“开发”和“探索”的概念完全对立,“上下文老虎机” (contextual bandits)算法不太擅长行为学习,但是“深度强化学习”却能够学习用于最大化“未来累积红利”的行为顺序。
换句话来说, 深度强化学习会学习那些能够实现“长期价值”(LTV)最优的行为。在一些Atari游戏中,“长期价值”表现在那些通常为人类玩家保留的策略发展上。
在Unity,我们给自己提出了这样一个问题:如何让一只鸡学会穿过繁忙的道路而不被迎面而来的汽车撞上,同时还要收集道路上的礼包?我们采用了一种与DeepMind实验非常类似的通用“强化学习”算法,并且规定如果小鸡捡到礼包获得正分,被车撞到则获得负分。
除此之外,我们还给小鸡设定了四个动作:左移、右移、前进和后退。依靠这些原始像素和分数输入,以及几个非常简单的指令,小鸡在不足六个小时的训练后就达到了超人类水平的性能。
那么我们究竟是如何从实际应用的角度做到这一点的呢?其实很简单。我们使用了一组Python APIs,将Unity游戏与运行于“亚马逊网络服务器”(AWS)的TensorFlow服务相联系,TensorFlow是谷歌在2005年首次发布的深度学习框架。
仔细观看,你会发现小鸡在训练的初期阶段主要是探索如何不被汽车撞上(探索阶段),随着训练的深入,小鸡开始学习收集礼包(开发阶段)。
值得关注的是,这个学习系统的一个重要能力就是处理从未遇到的状况。游戏中汽车的出现和礼包的放置都是完全任意的,而尽管小鸡已经经过了几个小时的训练,它还是会遇到之前训练中没有经历过的情境。有了我们的Python API,读取游戏框架和游戏内部状态,使用机器学习对游戏进行反向操作就变得非常简单了。
这只游戏小鸡的训练给亚马逊、Netflix和优步的发展提供了一些灵感,他们可以运用相同的技术来优化其客户服务。
想象一下,假如要训练一个“非玩家游戏角色”(NPC),而不是对其行为进行编码,那么游戏开发者就需要创建一个游戏场景。在这个场景中,我们将会利用与Python API相联的“云强化学习”来训练NPC。
这个游戏场景可以是完全虚拟合成的,也可以在其中加入一些人类玩家。当训练到一定程度,这个NPC的性能已经相当不错的时候,游戏开发者就能利用另一组Unity API将TensorFlow模型直接嵌入他们的游戏中,这样一来,游戏就不需要连接TensorFlow的云服务了。
有些游戏开发者可能会说:“早在10到15年前,我们就已经这么做过了。”