ARM技术论坛
直播中

贾熹

7年用户 1627经验值
私信 关注
[经验]

如何在基于Arm的设备上运行游戏AI呢

在本系列的第 2 部分中,我们展示了游戏 AI 代理是如何设计的。我们还展示了为 Dr Arm 的 Boss Battle 演示生成的神经网络 (NN) 模型的外观。第 3 部分着眼于代理训练的工作原理以及游戏如何在基于 Arm 的设备上运行。

培训策略

是时候开始训练了

一切准备就绪后,就该开始训练了。训练区域的许多副本可以在场景中实例化。这加快了训练,允许环境同时收集许多经验。这可以简单地通过实例化许多具有相同行为名称的代理来实现。在我们的案例中,我们实例化了 6 个训练区域,如下所示。这大约是单个实例的两倍。我们也尝试了 8 个实例,但由于 CPU 负载较高,效果与 6 个实例差别不大。

跟踪学习进度的训练指标

累积奖励和情节长度通常用作跟踪学习进度的指标。除了这些训练指标,我们还提到了 ELO 评级系统。您可以将 ELO 视为在线游戏的评分系统或技能点。如果代理赢了目标,则速率数上升,如果输了,则下降。在对抗性游戏中,累积奖励和情节长度可能不是跟踪学习进度的有意义的指标。这是因为他们完全依赖于对手的技术,我们也在不断改进。例如,中级智能体在对抗低级对手时比专家级智能体获得的奖励要多得多。

培训结果

下图显示了指标如何在训练步骤中转换:

图 2. 跟踪学习进度的训练指标

在训练的初始阶段,您可以看到累积奖励的值在 -1 左右。这是因为代理的动作一开始几乎是随机的。情节在超时发生时结束,给予 -1 的奖励。剧集长度的图表显示超时在此阶段继续。ELO 值在开始时保持不变。

经过一些迭代后,奖励开始增加。在这个中间阶段,智能体通过击败目标的经验逐渐学会如何表现。每集的长度将相应减少。同时,ELO 值开始增加。这意味着代理变得越来越聪明。

当训练进一步进行时,奖励稳定在零附近。在这个后期阶段,每一集都没有超时。代理的大脑与目标的大脑大致相同。获胜率接近 50%,平均奖励为零。(准确地说,收敛值略低于零。这是因为目标的大脑应该总是比当前训练的大脑略强。)

每集的长度变短,收敛到一定长度。因此,仅通过参考奖励和情节长度很难判断训练进度。如果我们查看 ELO 值,我们可以看到它仍在稳步增长。因此,ELO 值是该阶段训练进度的更好指标。当这个值收敛时,就是结束训练的信号。在智能体过度拟合目标之前结束训练也很重要。

下面列出了用于训练该代理的参数:


基于 Arm 的设备上的游戏部署

接下来,我们将描述我们如何在基于 Arm 的设备上的游戏中使用训练有素的代理。

不同的难度级别

如前所述,我们在演示中准备了具有不同难度级别的游戏 AI。具有不同训练时间的 NN 模型的过去快照被拾取为不同的难度级别。三个难度级别,Easy、Medium 和 Hard,对应于此处显示的训练结果快照。

图 4. ELO 值(技能点)

让我们看看每个难度级别的一些特征。下面的 GIF 是战斗的片段。请注意,这是实际的游戏玩法,Dr Arm 由我控制,Knight 由 AI 控制。

首先,我们可以说易代理倾向于直接攻击目标。容易的代理处于他们开始理解目标是将目标的HP减少到零的阶段。其次,中型特工开始尝试移动到目标后面。中型代理开始了解到,如果他们落后于目标,他们就有更高的成功攻击机会。最后,硬代理采取等待玩家行动然后做出相应反应的策略。在这个游戏中,角色的攻击动作有点慢,所以硬代理明白如果他们先攻击,他们就处于劣势。硬代理通常不会攻击,直到玩家采取行动。

附带说明一下,可以在运行时切换 NN 模型,如下面的示例代码所示:


基于 Arm 的设备上的智能代理

该游戏已部署到 Arm 设备上的 Windows。然后,我们使用Unity profiler测量了代理的运行性能。

下面的时间线显示了在单个帧内正在执行的处理。在此分析中,游戏以 25fps 的速度运行,每帧大约需要 40 毫秒。其中,代理花费的时间可以通过查找root.AgentSendState、root.DecideAction和root.AgentAct来找到。在这一帧中,NN 模型在三星 Galaxy Book S 上执行的时间为 2.66 毫秒。超过 20 帧的平均时间约为 2.67 毫秒。

图 6. 单帧内的分析时间线

代理上的决策请求者组件以设置的时间间隔为开发人员调用 NN 模型。我将组件中的决策周期参数设置为 5,这意味着代理的决策每 5 帧完成一次。我们尝试将执行间隔设置为 1,但角色动作变得不稳定且不自然。有必要通过考虑任务和游戏的外观来决定价值。

图 7. Decision Requester 组件(左)和显示具有特定间隔的 NN 模型执行的时间线(右)

默认情况下,所有 ML-Agents 模型都使用 Barracuda 执行。Barracuda包是 Unity的跨平台 NN 推理库。它可以在 GPU 和 CPU 上运行 NN 模型。但通常,代理 NN 模型最好在 CPU 上执行。

我们的实验表明,NN 模型的大小不足以有效地使用 GPU。在这种情况下,与 GPU 之间的数据传输时间成为瓶颈,而不是 NN 模型的执行时间。此外,GPU 通常忙于渲染图形,可能没有足够的容量来运行 NN 模型。

结论

在游戏中使用 ML 是一个令人兴奋的领域。其中,其在游戏AI中的应用是最先进的实际应用领域之一。我们期待很快看到更多使用基于 ML 的游戏 AI 的游戏,例如强化学习。我们还希望这些游戏可以在更多基于 Arm 的设备上使用,包括移动设备和 WoA。

原作者:三海幸树

更多回帖

发帖
×
20
完善资料,
赚取积分