游戏开发论坛

 找回密码
 立即注册
搜索
查看: 75825|回复: 0

游戏中的机器学习AI真的好用吗?

[复制链接]

5万

主题

5万

帖子

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
86215
发表于 2023-8-23 08:45:19 | 显示全部楼层 |阅读模式
微信图片_20230823083715.png

最近这几年,人工智能、机器学习一直都是热门话题,尤其是在游戏界,从AlphaGo在围棋上击败人类开始,就不断有新的游戏被抬上“人机对战”的擂台,例如刀塔2、星际争霸都不断传出机器学习AI战胜职业选手的新闻。

微信图片_20230823083716.jpg

而这2年ChatGPT的火热更是给机器学习AI的火上加了一把柴,似乎能像真人一样沟通、思考的AI马上就要出现了。

我相信屏幕前的各位朋友都或多或少地想象过游戏里出现“像人一样”的AI时是一种怎样的场景。

  • 会不会自己打得还不如AI厉害?
  • 发现游戏里和自己配合打出精妙配合的其实是AI时会是什么感觉?
  • 会不会以后开局要先判断那些队友、敌人是AI,哪些是真人?

但真的只要用上机器学习技术,就能做出非常拟人的游戏AI么?是不是游戏里的AI越像人,玩家的游戏体验就会越好呢?

本期《游门弄斧》就让我根据我自己工作中与机器学习团队合作、交流的经验,聊聊游戏中的机器学习AI真的好用吗,机器学习对于游戏设计的帮助会在哪里这个话题。

www.bilibili.com/video/BV12u41177mH

必须先叠个甲,由于我本人对于机器学习的专业知识了解得也十分有限,本文的内容来源为自己工作交流中的经验和血泪史,如果内容中关于机器学习原理、技术的部分有错误的地方,欢迎大家在弹幕、评论区指正。

奖励函数不好定

首先要给大家科普,或者说“班门弄斧”一个必要知识点,目前机器学习在游戏领域应用最多的是“强化学习”技术,而“强化学习”中有一个关键内容,叫“奖励函数”。

大家可以理解为,当你想用机器学习技术来训练游戏AI时,你需要告诉AI什么是“好”,什么是“不好”,做什么事情、完成什么任务可以加分,或者会被扣分。只有当你定好“规则”也就是奖励函数之后,机器学习才能运转起来。

这非常像一场考试,你首先得有一位“阅卷老师”来给AI答出的试卷打分,AI会不断尝试用各种方法获得高分,最后总结出一套“答题技巧”或者“答题经验”来保证自己不管遇到什么题目都能获得高分。

例如对于吃鸡游戏来说,你可以定义活得越久越好、杀人数越多越好,然后AI就会开始尝试各种操作,来保证自己存活尽量久、杀人尽量多,你可以定义被人打中掉血是不好,开火但没命中敌人是不好,然后AI就会尽量避免被打中、尝试提高自己的命中率。

微信图片_20230823083716_1.jpg

听上去这些没有什么问题,我们平时玩游戏也是这样的,“奖励函数”不过是把我们平时打游戏时总结的“经验技巧”“上分攻略”给描述出来罢了。

但这一切有一个前提,就是AI按照人玩游戏的思路和攻略去玩游戏时,能给其他真人玩家带来好的游戏体验。

之前我就提到过,有的游戏玩法是双向的,一方求胜时的行为就是另一方正常的游戏内容,例如绝大多数PVP游戏。

但有的游戏玩法是单向的,有一方并不是为了求胜,而是在“陪玩”,陪玩的目标不是赢,而是“把玩家哄开心”,例如绝大多数PVE游戏中的“E”就是典型的“陪玩”。

这时我们就会发现,如果按照“求胜”去设计奖励函数非常容易,因为游戏获胜的规则是明确的,例如前面提到的存活时间、杀人数等等,毕竟获胜规则是游戏规则的一部分,一定是能够客观、准确地描述的。

但“陪玩”的奖励函数就很难设计了,毕竟做出什么样的行为能让对面的玩家觉得“好玩”,是非常难以描述的,PVE游戏里的AI存活时间越长越好么?杀人数越多越好么?

显然不是,PVE游戏里E的设计更像是策划出题给让玩家去解,什么样的题目解起来有意思,不同的策划可能会有完全不同的设计思路,但这个话题就大了,挖个坑以后聊聊吧。

正式因为这个原因,单向玩法的游戏,例如PVE游戏里的AI,就很难用机器学习的方式去实现,因为没有什么很好的方式描述这种游戏中AI的奖励函数。实际上我们也能看到,目前所有用上机器学习的游戏,都是PVP游戏。

行为不可解释导致调参困难

而且,即使是“理论”上比较好设计奖励函数的PVP游戏,其实在实践过程中也并不是一帆风顺的,例如即使是“杀人越多越好”“存活越久越好”的吃鸡游戏,如果你不给AI加限制,最后就会训练出一个透视+自瞄的挂逼,没人会觉得与挂逼战斗有趣吧?

微信图片_20230823083716_2.jpg
BV1rj411D7T7——网传和平精英的机器学习AI瞬秒玩家

那合理的限制是什么呢?这就涉及到机器学习的另一问题——调参困难。

要将机器学习跑起来是需要很多参数的,其中有的是前面提到的奖励函数里的参数,例如每活1分钟加多少分,被命中一次扣多少分。

还有很多是用来描述、限制AI行为的,例如反应速度、操作精准度等等。

这些参数设置的合理性,将直接影响到训练出的AI表现是否符合预期、满足需求。

但这里有一个非常非常大的问题,就是到底参数设置为多少是“合理”的呢?

有一些参数相对来说客观一些,例如反应速度,可以参考不同段位的人类玩家的平均反应速度来进行设置。

但另一些参数就非常主观,例如杀人加多少分,存活加多少分。杀人加分太多,AI可能就会完全不顾自己的死活,成为一个无脑莽夫;存活加分太多,AI又成了一个恰烂分的怂包。

可能有的朋友会说,那我就水多加面面多加水呗,多调调总能调出来。

这句话是有一定道理的,也是很多机器学习的底层工作者自称是“调参民工”的原因,因为最核心的算法模型轮不到他们去设计,自己就仅仅只是负责“水多加面面多加水”把参数确定下来的人,会感觉到自己没啥存在感。

微信图片_20230823083716_3.png

但水多加面面多加水也没法解决全部的问题,因为能这么做有一个前提,就是当训练出的AI行为不符合预期时,你知道是哪个参数导致的,而且你还得知道是因为这个参数太高还是太低,否则你也不知道应该加面还是加水。

而机器学习AI最大的一个特点,就是行为不可解释,你不知道它为什么会做出这个行为。有一次和一个机器学习团队交流时对方直接就说:“确实我们的AI行为不可解释,但实际上人类的行为也经常不可解释,这也是拟人的表现之一”。道理虽然是这么个道理,但真在工程应用中就会出现问题。

以我自己的亲身经历为例,曾经合作训练出的AI会经常原地突然360度转一圈,无论是空旷的平原还是封闭的室内都可能这么来一下,甚至可能在与敌人战斗的过程中来这么一下,这种行为显然很诡异,不可接受。

但是为什么呢?不知道,于是只能猜。

是不是AI视图通过这样来发现侧面、背后的敌人?于是加上一个参数,如果一次大范围转向后并没有发现敌人或者并没有听见什么动静,就扣分,想通过这种方式让AI进行有意义的转向,只在可能会发现敌人的时候,看向最可能出现敌人的方向。再训练一次,还是这样,没变化。

微信图片_20230823083716_4.jpg

是不是AI觉得转向不影响自己的攻击,反正能收集到更多的信息,不转白不转?于是加上一个参数,每次大范围转向之后,一段时间内反应速度和操作精准度降低,模拟一下人转向之后暂时看不清楚画面的效果,避免AI在战斗中还转。

再训练一次,还是这样,没变化。

微信图片_20230823083716_5.jpg

最后没办法,只能加上一个限制,一次转向最多转120°、战斗中不允许转向,除非目标方向上有已经被确认的敌人、声源。

当时我就发出感叹,这种无法被解释、最后只能靠人工增加硬性规则限制,才能做出合理行为的人工智能,到底依赖的是“人工”?还是“智能”?

动作空间大了不好训练

行为的不可解释还导致了另一个问题,就是一旦游戏中的操作太复杂,学术上的说法叫“动作空间太大”,AI就很难学会一些高端、精妙的操作。

这里需要科普第二个知识,现在机器学习中最主流的“强化学习”可以理解为一种高级的“左右互博术”,本质上是最初完全空白的AI随便尝试各种操作,然后靠前面提到的阅卷老师打分,AI通过数以百万、千万次的重复考试,逐渐摸清阅卷老师的打分原理,掌握答题的经验。

正是因为AI是通过“随便尝试”+“总结规律”来完成学习,才造成了前面提到的“行为不可解释”,因为AI自己也不知道自己为什么要这么做,只知道这么做了大概率能获得高分。

例如最近火热的ChatGPT,你问他1+1等于几,他回答2并不是因为他懂数学,知道1+1等于2,而是因为在观摩了大量的已有资料之后,他发现当问1+1等于几时,回答2的概率最大。这也是为什么ChatGPT经常瞎编、嘴硬的原因,因为本质上他一直都是在编,只是大部分时候编得对、编得合理。

微信图片_20230823083716_6.jpg
并不存在的接口

回到游戏AI的话题上,这种“随便尝试”+“总结规律”在遇到非常复杂的游戏时,就会遇到困难。

还是以吃鸡为例,游戏中的地图很大,几公里*几公里,游戏里的操作非常复杂,移动、转向、蹲起、侧身、开火、瞄准、换弹等等,有的吃鸡游戏还有滑铲、技能。基于强化学习的AI在遇到这种游戏时,很多我们觉得“理所当然”的技巧AI并不一定会。例如人会觉得,我躲在掩体后面,等敌人过来时侧身出去打很正常,可以尽量减少自己的暴露面积。

但AI要学会这一招,就必须有一次正好站在掩体边缘,正好侧身出去,正好有敌人在能打到的范围内,AI开火正好打中了敌人,最后在“阅卷老师”那里获得了加分。然后AI开始更多地尝试这么做,而且他发现如果这么做,真的能更容易获得高分,于是AI就学会了在掩体边缘侧身攻击这个行为。

微信图片_20230823083716_7.jpg

如果没有这一连串正好,AI就不会觉得站在掩体边缘侧身有什么好处。或者某一次正好碰上了,但当AI想要复刻时又好几次遇不上这样的情况,也会导致AI学不会在掩体边缘侧身攻击这个行为,而是每次都选择直接走出掩体,放弃自身掩体优势去跟人对枪。

显然,训练时间越长,或者更准确地说训练投入的资源越多,那么就越容易遇到这样一串正好的情况。

但实际情况是,由于前面提到的参数多、调参困难的原因,反而训练时间必须被压缩,因为需要不断调整、尝试各种参数组合,留给每一种组合的训练时间自然是更少的。

于是乎,如果有一种操作或者技巧在游戏中真的非常重要,不会这个操作会显得很蠢,例如射击游戏里的侧身、peek,那么就需要像前面提到的转向问题一样,加入生硬的参数或者逻辑,例如额外检测一下当前位置是不是在掩体边缘,如果是就在需要开火时侧身尝试开火。

这种方法叫“后处理”,也就是在机器学习模型给出的操作基础上打补丁,前面提到的莫名其妙的转身也可以通过这种方式给屏蔽掉。但这同样会让人发出这到底是“人工”还是“智能”的感叹。

当然了,如果你有“钞能力”,能买非常多的服务器进行训练,那上面说的都不是问题,但这势必会造成训练成本的上升,而这笔买卖是否划算,是否值得呢?

运行时资源消耗大

而提到成本,就要提到另一个不可忽视的问题,就是机器学习AI运行时的性能消耗了。

我们现在看到的绝大多数“演示”中的机器学习AI,例如Dota2、星际2的表演赛,都是尽量保证AI与真人有一样的输入输出能力,通俗的说就是,AI也需要像真人一样通过游戏画面来获取信息,而非直接读取游戏数据,因为只有这样才能保证公平。

但既然是通过游戏画面来获取信息,也就意味着你需要为AI也生成出游戏画面来。

对游戏了解比较多的朋友都清楚,大部分游戏对性能要求最高的部分,就是画面,画面越好的游戏,需要的电脑配置也就越高。

传统的AI是不需要通过游戏画面获取游戏数据的,本质上都“作弊”了,而且现在的大部分机器学习AI为了“不作弊”,为了“像人”,就必须通过画面来获取游戏数据,而为AI生成游戏画面所占用的服务器计算资源是非常高的。

举个简单的例子,普通AI判断目标“是否在视野中”时,通常每帧会进行10次左右的“射线检测”,而机器学习AI所依赖的“游戏画面”即使是用最最低质量的“800*600深度图”,也是800*600=48W次检测。

微信图片_20230823083716_8.jpg
深度图

也就是说在“视野检测”这一块,运行一个机器学习AI所消耗的计算量,可以运行接近5W个普通AI。

而如果真的要提供和玩家一模一样的画面,也就是有颜色、有模型、有材质的画面,还得再翻个10倍以上。

那么问题就来了,假设之前一台服务器能够运行10W个AI,如果每一局游戏里有10个AI,可以支撑1W局游戏同时运行,而现在如果换成机器学习AI,一台服务器就只能运行2个AI连一局游戏都不够,这个成本真的是可以接受的么?

所以如果你感觉一个游戏里的AI有2种状态,那很可能是因为如果全程都使用机器学习,服务器成本会扛不住。

可能有的朋友会说,那我不让AI通过画面获取信息,而是和普通AI一样直接读游戏数据不行么,作弊一点就作弊一点吧。

但如果真这么做了,你就会发现AI一点也不像人,因为机器学习AI能像人,本质上就是通过输入和人一样的信息,用和人一样的评价指标打分(也就是奖励函数),从而训练出行为模式像人的AI,如果输入和人不同,那自然最后训练出的行为模式也就不同。

微信图片_20230823083716_9.jpg

例如,人看见这个画面会知道自己前方是一道墙,右边是墙的边缘,可以作为掩体埋伏敌人。

只有当你把这个画面,或者将这个画面的简化版本,例如深度图提供给AI之后,AI才有可能像人一样因为看到前方被挡住了,从而向右移动,并在边缘位置埋伏敌人。

如果你不告诉AI这个画面,只告诉AI“目标当前不可见”“打向目标的射线在面前1米位置被挡住了”,AI怎么可能知道目标不可见是因为自己面前有一堵墙呢?也可能是箱子、汽车、树或者别的东西,更不可能知道走到右边可以埋伏敌人。

机器学习AI能用在哪里

因此,在我看来,机器学习AI在很长一段时间内,都不太可能以“行为模式完全模拟真实玩家的敌方角色”的形式大规模出现在商业游戏中。

但你说机器学习AI真的没有应用场景么?我觉得也不是,我认为关键在于,机器学习可能并不适合完全控制游戏中AI的全部行为,因为控制的越细致,就意味着计算所需要输入的信息就越多、动作空间也越大,这会导致AI训练速度降低,实际应用中的性能消耗也会越高。

实际上,很多时候我们并不需要用机器学习去控制AI的全部行为,具体的执行部分(Action),也就是OODA中A的部分,完全可以交给普通行为树来实现,现在的行为树已经能做得非常好了。

微信图片_20230823083716_10.jpg

机器学习应当解决的是目前行为树难以解决的问题,例如如何与玩家互动、合作,甚至是交流沟通 很多游戏中都有和玩家同队的AI队友,但玩家的行为是多种多样的,几乎不可能用传统行为树的设计方式去“穷举”各种情况,因此设计AI队友非常困难,总是会跟不上玩家的节奏和行为,最后变成玩家玩玩家的,AI玩AI的,毫无配合可言。

而机器学习则能在“随机尝试”的过程中总结出各种不同情况下的最佳应对方案,如果让机器学习作为“谋士”来为传统行为树AI出谋划策,告诉行为树目前的情况下应该干什么,是进攻还是防守,是跟着玩家跑还是占住某个关键位置压制敌人,玩家就更能感受到与AI之间的合作体验。

如果再加上ChatGPT这样大语言模型对于玩家打字、语音内容的识别,让AI可以根据玩家的指令去行动,并生成与玩家互动的内容,实现一个能让玩家感受到配合、陪伴的AI队友就是完全可能的。大家觉得这样的AI,你想要么?

文/命运Sniper
原文:https://zhuanlan.zhihu.com/p/651451588

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-12-22 19:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表