可能有人会问,AI在游戏中不是很早就应用了吗?
是的,其实有电子游戏就有AI。
在远古的年代的游戏Pong,你的对手就是AI;
红白机年代的中国象棋游戏,你的对手就是AI;
玛丽那只怪物也是AI。
这里的AI指的是游戏中对手使用的智能,所以AI很早就应用在游戏中了。
但在本篇中讨论的,是近几年来逐渐发展起来的,基于深度学习(也有基于运筹学和博弈论等学科)的AI技术。
应该说,本文讨论的AI会范围会更大一点,并不止步于怪物、NPC的智能。
我希望通过这篇文章,看一下现在AI到底能为游戏行业带来什么。
我会列出一些当前的技术引用,也会有一部分我自己的想法。
较后恐吓一下我的同事们,你们会被AI替代吗?
AI为啥这么火?
AI近几年有多火,我就不作论述了。但为什么AI这么火呢?不同的人可能有不一样的看法,这里只讲一下我自己的看法。
现在我们说的AI技术,大部分跟深度神经网络有关。我认为AI之所以火了,就是因为深度神经网络的加持。
深度神经网络独有的解决问题的方式,使得人类解决问题的能力了一个新档次。
所以,我希望用比较简单的语言来描述一下,深度神经网络是什么,好让大家了解,为什么AI技术会突然获得高速的发展。
其实要明白深度神经网络并不难,大家可以把神经网络看作是一个函数。函数的一个重要功能,就是把两个东西对应起来。
在以前,我们要电脑识别一个手写数字“8”,那么程序员就需要写一个函数。
函数里面需要写一堆规则,例如:
图片有两个圈
圆?有多圆?
上面那个大下面小
有多大?有多小?半径是多少?
有时候上面那个圈可以不完全闭合也算...
天,那算什么圆?
我们如果要去识别一个手写数字的图片8,需要写很多很多规则,有时候几乎写不完。
也就是说,在我们现实里,有些人类明明能模糊地了解,但说不上具体规则,不可描述东西。
不可描述就意味着,这个函数没法写,也意味着无法通过编程实现。
深度神经网络改变这一点。
神经网络会先随机初始化网络的权重,就是先随便弄一个魔法函数Magic'(x)。
一开始,Magic'(x)和我们要的Magic(x)并不相同。所以输出不一定是对的,也就是说Magic'(x)=y',y'不等于我们要的y。
也就是说,把图片8放到这个Magic'(x)里,网络可能识别的出8的概率可能只有40,而并不是。
这和我们想要网络识别出8有很大的差距呀,因为我们想f能识别出这些图片是8的概率是。
我们称:y'和y之间的差距叫loss。
但这没关系,通过反向传播,调整f(x)的参数权重,让loss较小化,也就是让y'和y之间的差距减少。
这个过程我们称为学习或者训练。
当loss足够小的时候,y'和y的差异就不大了。也就是说,f(x)的功能和我们要的F(x)相当!
如果以上的话没明白,那不要紧。你只要明白两点:
深度神经网络本质上说是个函数。
有了深度神经网络,我们可以把以前不能描述规则的函数造出来。
这就是人类科技树拓宽的一大原因。
游戏性
回到游戏中,我们以前为游戏角色做AI,会用脚本,行为树,状态机等方式。
这些本质上就是在描述怪物的行为,例如看到某个角色,就做什么动作;到了某个时间,释放某个技能。
但这些行为可以足够丰富而完整地描述吗?
越复杂的行为,我们就需要复杂的行为树;越多的状态,我们就需要越多的状态机。
但当复杂度到了一定程度,人类可能很难理解了自己创造的行为树了。
但神经网络可以,他们制作出的AI不但战胜了游戏,还战胜了人类。
目前,AI在这方面较重要的技术叫学习
较有名的可以算是以下几个:
征服Atari游戏——Deep Mind
较前沿:当我们以为Rainbow就是Atari游戏的时,Ape-X出来把Rainbow秒成了渣!
征服围棋——Alpha GO
AlphaGo
征服德州扑克——Pluribus
机器之心:AI攻陷多人德扑再登Science,训练成本150美元,每小时1000刀
https://zhuanlan.zhihu.com/p/73268685
(Pluribus没有用上深度神经网络,用的更多是博弈论CRF为基础的剪枝)
征服麻将——微软Suphx
真雀神,微软亚研推出麻将AI,还上了专业十段
征服星际争霸——Alpha Star
陈雄辉:浅谈AlphaStar
征服荣耀——绝悟
腾讯:腾讯AI「绝悟」打,把职业选手干掉了
现在的AI已经能把人类花式吊打了!甚至到了有人已经发表AI威胁论的程度了!
但请容我先泼泼冷水,神经网络的训练可不是套套公式就能实现的。神经网络训练的要求都非常高。
首先,AI训练消耗大量资源,包括时间和算力。
跟李世石对战的版本称为AlphaGo Lee,是一个分布式系统,运行在Google云上,使用了48个TPU,总耗能约。
而围棋虽然看上去比较复杂,但和其他游戏来说还算是简单的了。毕竟围棋是个回合制游戏。如果像星际这样的复杂游戏,则需要更多。
另外,AI在开发过程中有不确定性。
我认为算力和时间并不是一个主要因素,至少在游戏制作下不是。
毕竟当前的算力下,很多算法已经能击败人类。而且算力必然会不断。
但深度学习还有一个不能忽略的因素:深度学习算法带有不确定性。
AI的学习能力除了与算法有关,也与环境有关,也和参数有关,不同参数之间可能是天差地别。
调整参数,然后等待AI的训练,根据结果再调整参数。可能经过漫长的等待才能获得大成。
所以很多搞深度学习的人会把自己比喻成炼丹师。
但这种不确定性正在逐步减少,因为算法是不断更新改进的。从DQN到SAC,就是一个不断解决实际问题,让算法更强,更快,更稳定的过程。
以上,我们对学习(Reinforcement Learning)进行了一些介绍。那么学习能够带给游戏什么呢?
我认为学习在游戏中应用应该有一个前提:这项技术并不是为了击败玩家,而是为了增强玩家在游戏中的体验。
经过学习的AI作为玩家的对手或者敌人,上限是很高的。
我们可以通过弱化,把AI调整成适合当前玩家技术水平的难度。
有趣的事情就发生了。
以前我们为了调整难度,通常会从数值入手。
但如果用学习的方法,我们还能开辟另外一个维度的难度,让游戏更丰富。
提醒:AI不可预知性会更强。
不像已经设定好的行为树,AI的不可预测性将会增强。这让AI更像“人”,当然是件好事。但设计师对AI的掌控也会降低,意味着对玩家体验的控制的性也会相应降低。
但数值会消失吗?我想并不会的。
因为数值是很直观,大部分玩家都需要数值,数值在很多游戏中决定了难度。
我不会告诉你:游戏公司需要赚钱,数值是核心。
学习并不会完全替代数值和技能设计,但会给设计师多一项控制难度的工具。
在学习方面国外的deepmind和openAI等公司处于地位,但更多是从事基础算法研究。