如何训练人工神经网络使用视觉输入玩暗黑破坏神2?

zer*_*ord 131 machine-learning video-processing computer-vision reinforcement-learning neural-network

我正在努力让人工神经网络玩电子游戏,我希望能从这里的精彩社区获得一些帮助.

我已经确定了暗黑破坏神2.因此,游戏玩法是实时的,并且从等角度的角度来看,玩家控制着摄像机所在的单个化身.

为了使事情具体化,任务是获得你的角色x经验值,而不将其生命值降为0,通过杀死怪物获得经验值.以下是游戏玩法的示例:

这里

现在,由于我希望网络仅根据屏幕上的像素获得的信息进行操作,因此必须学习非常丰富的表示以便有效地发挥作用,因为这可能需要它(至少隐含地)知道如何将游戏世界划分为对象以及如何与它们进行交互.

所有这些信息都必须以某种方式传授给网络.我不能为我的生活想到如何培养这件事.我唯一的想法就是有一个单独的程序从屏幕上直观地从游戏中提取一些好的/坏的东西(例如健康,黄金,经验),然后在强化学习过程中使用该属性.我认为这将是答案的一部分,但我认为这还不够; 从原始视觉输入到目标导向行为的抽象层次太多,这种有限的反馈在我的一生中训练网络.

所以,我的问题是:你还有什么其他的方法来训练网络至少完成这项任务的某些部分?最好不要制作数千个带标签的例子......

只是为了更多方向:我正在寻找其他一些强化学习来源和/或任何用于在此设置中提取有用信息的无监督方法.或者,如果您可以想到一种将标记数据从游戏世界中取出而无需手动标记的方法,则可以采用监督算法.

UPDATE(04/27/12):

奇怪的是,我仍然在努力,似乎正在取得进展.让ANN控制器工作的最大秘诀是使用适合该任务的最先进的ANN架构.因此,我一直在使用一个深层次的信念网络,这是由我用无人监督的方式训练的因素条件限制Boltzmann机器(在我玩游戏的视频中),然后使用时间差异反向传播进行微调(即用标准进行强化学习)前馈人工神经网络.

仍在寻找更有价值的输入,特别是关于实时动作选择的问题以及如何编码用于ANN处理的彩色图像:-)

UPDATE(15年10月21日):

记得我在今天回答了这个问题,我想应该提一下,这不再是一个疯狂的想法.自从我上次更新以来,DeepMind发布了他们的自然论文,用于通过视觉输入获取神经网络来玩atari游戏.事实上,唯一阻止我使用他们的架构来玩,暗黑2的有限子集是缺乏对底层游戏引擎的访问.渲染到屏幕然后将其重定向到网络的速度太慢,无法在合理的时间内进行训练.因此,我们可能不会很快看到这种机器人在玩暗黑破坏神2,但这只是因为它会播放某些东西,无论是开源还是对渲染目标的API访问.(也许是地震?)

kar*_*lip 51

我可以看到你担心如何训练人工神经网络,但这个项目隐藏了你可能不知道的复杂性.通过图像处理对计算机游戏进行对象/角色识别这是一项极具挑战性的任务(对FPS和RPG游戏来说并不疯狂).我不怀疑你的技能,我也不是说它不能做,但你可以轻松地花费10倍的时间来识别东西,而不是实现ANN本身(假设你已经有数字图像处理技术的经验)).

我认为你的想法非常有趣,而且非常雄心勃勃.此时您可能想重新考虑它.我觉得这个项目是你为大学规划的,所以如果工作的重点是ANN,你应该选择另一个游戏,更简单.

我记得有人在不久前找到了关于不同但不太相似的项目的提示.值得一试.

另一方面,如果您接受建议,可能会有更好/更简单的方法来识别游戏中的对象.但首先,让我们把这个项目称为你想要的东西:智能机器人.

一种用于实现机器人的方法访问游戏客户端的存储器以查找相关信息,例如屏幕上角色的位置及其健康状况.读取计算机内存是微不足道的,但要确切地找出内存中寻找的位置不是.像Cheat Engine这样的内存扫描仪对此非常有帮助.

另一种在游戏下工作的方法涉及操纵渲染信息.必须将所有游戏对象渲染到屏幕上.这意味着所有3D对象的位置最终将被发送到视频卡进行处理.准备好进行一些严肃的调试.

在这个答案中,我简要介绍了通过图像处理实现所需要的两种方法.如果您对它们感兴趣,可以在开发在线游戏(第6章)上找到更多关于它们的信息,这是一本关于这一主题的优秀书籍.


gab*_*ous 41

更新2018-07-26:就是这样!我们现在正在接近这种游戏可以解决的问题!使用OpenAI并基于DotA 2游戏,团队可以制作一个可以在5v5游戏中击败半专业游戏玩家的AI .如果你了解DotA 2,你知道这个游戏在力学方面与类似暗黑破坏神的游戏非常相似,但有人可能会认为由于团队游戏它更复杂.

正如预期的那样,这得益于强化学习和深度学习的最新进展,以及使用像OpenAI这样的开放式游戏框架,它可以简化AI的开发,因为你可以获得一个简洁的API,同时也因为你可以加速游戏(AI玩过相当于每天180年的游戏玩法!).

在2018年8月5日(10天!),计划将这个AI与顶级DotA 2游戏玩家进行对比.如果能够实现这一目标,那么期待一场大革命,或许不像解决Go游戏一样充满媒介,但它仍然是游戏AI的一个重要里程碑!

更新2017-01:自AlphaGo成功以来,该领域的发展速度非常快,而且几乎每个月都有新的框架可以促进机器学习算法的开发.这是我发现的最新列表:

  • OpenAI的宇宙:使用机器学习几乎可以玩任何游戏的平台.API是在Python中运行的,它在VNC远程桌面环境下运行游戏,因此它可以捕获任何游戏的图像!您可以使用Universe通过机器学习算法玩暗黑破坏神II!
  • OpenAI的健身房:类似于Universe,但专门针对强化学习算法(所以它是AlphaGo使用的框架的一种概括,但是更多的游戏).Udemy一门课程,涵盖了使用OpenAI Gym进行突破或Doom等游戏的机器学习应用.
  • TorchCraft:Torch(机器学习框架)和星际争霸:母巢之战的桥梁.
  • pyGTA5:一个仅使用屏幕截图(在线播放大量视频)在GTA5中构建自动驾驶汽车的项目.

非常激动人心!

重要更新(2016-06):正如OP所指出的,培训人工网络仅使用视觉输入来玩游戏的问题现在正由几个认真的机构解决,结果非常有希望,例如DeepMind Deep-Qlearning-Network(DQN) ).

现在,如果您想要接受更高级别的挑战,您可以使用各种AI视觉游戏开发平台之一,例如ViZDoom,一个高度优化的平台(7000 fps)来训练网络仅使用视觉输入来玩Doom :

ViZDoom允许开发仅使用可视信息(屏幕缓冲区)播放Doom的AI机器人.它主要用于机器视觉学习和深度强化学习的研究.ViZDoom基于ZDoom提供游戏机制.

结果非常惊人,在这里看到他们网页上的视频精彩的教程(在Python中)!

Quake 3 Arena也有一个类似的项目叫做Quagents,它也提供对底层游戏数据的简单API访问,但你可以废弃它,只使用屏幕截图和API来控制你的代理.

如果我们只使用屏幕截图,为什么这样的平台会有用?即使您不访问基础游戏数据,这样的平台也提供:

  • 高性能的游戏实现(您可以用更少的时间生成更多的数据/游戏/学习代,以便您的学习算法可以更快地收敛!).
  • 一个简单且反应灵敏的API来控制您的代理(即,如果您尝试使用人工输入来控制游戏,您的某些命令可能会丢失,因此您还要处理输出的不可靠性......).
  • 轻松设置自定义方案.
  • 可自定义的渲染(可用于"简化"您获得的图像以简化处理)
  • 同步("转弯")播放(所以你不需要你的算法首先实时工作,这是一个巨大的复杂性减少).
  • 其他便利功能,例如跨平台兼容性,后向兼容性(当您有新的游戏更新时,您不会冒机器不再使用游戏),等等.

总而言之,这些平台的优点在于它们可以缓解您必须处理的大部分先前技术问题(如何操纵游戏输入,如何设置场景等),这样您就必须处理学习算法本身.

所以现在,开始工作,让我们成为有史以来最好的AI视觉机器人;)


旧帖子描述了仅依靠视觉输入开发AI的技术问题:

与上面的一些同事相反,我认为这个问题并不棘手.但它肯定是一个很难的!

上面提到的第一个问题是游戏状态表示:你不能只用一个图像来表示完整的状态,你需要保持某种记忆(健康,但也有装备的物品和可用的物品)使用,任务和目标等).要获取此类信息,您有两种方法:通过直接访问游戏数据,这是最可靠和最容易的; 或者你可以通过实现一些简单的程序(打开清单,截取屏幕截图,提取数据)来创建这些信息的抽象表示.当然,从屏幕截图中提取数据要么让您放入一些监督程序(您完全定义)或无人监督(通过机器学习算法,但随后它会扩大复杂性......).对于无监督的机器学习,您将需要使用一种称为结构学习算法的最新算法(它学习数据的结构,而不是如何对它们进行分类或预测值).一种这样的算法是Richard Socher的递归神经网络(不要与递归神经网络混淆):http://techtalks.tv/talks/54422/

然后,另一个问题是,即使您已经获取了所需的所有数据,游戏也只能部分观察到.因此,您需要注入一个世界的抽象模型,并用游戏中处理过的信息(例如您的头像的位置),以及屏幕外的任务物品,目标和敌人的位置来提供它.您可以查看Vermaak 2003的混合粒子滤波器.

此外,您需要拥有一个自动代理,并动态生成目标.您可以尝试的一个众所周知的体系结构是BDI代理,但您可能需要调整它以使该体系结构适用于您的实际情况.作为替代方案,还有递归Petri网,您可以将其与Petri网的各种变体结合起来,以实现您想要的,因为它是一个非常好的研究和灵活的框架,具有很好的形式化和校对程序.

最后,即使您完成上述所有操作,您也需要找到一种以加速的速度模拟游戏的方法(使用视频可能会很好,但问题是您的算法只能在没有控制的情况下观看,并且能够尝试自己对学习非常重要).事实上,众所周知,目前最先进的算法需要花费更多的时间来学习人类可以学习的东西(尤其是强化学习),因此如果不能加速这个过程(即,如果你不能加快游戏​​时间),你的算法甚至不会在一生中收敛......

总而言之,您想要实现的目标是在当前最先进的算法的极限(可能稍微超出).我认为这可能是可能的,但即使是这样,你也会花费很多时间,因为这不是一个理论问题,而是一个你正在接近的实际问题,因此你需要实施和结合很多不同的AI方法,以解决它.

几十年的研究与整个团队合作可能是不够的,所以如果你是独自一人并在兼职工作(因为你可能有一份工作生活),你可能会花一辈子没有到达任何地方一个有效的解决方

因此,我最重要的建议是降低您的期望,并尝试使用您可以使用的所有信息来降低问题的复杂性,并尽可能避免依赖屏幕截图(即尝试直接挂钩游戏,寻找DLL注入),并通过实施监督程序简化一些问题,不要让你的算法学习所有东西(即尽可能地丢弃图像处理并依赖内部游戏信息,如果你的算法运行良好,稍后,你可以用图像处理替换你的AI程序的某些部分,从而可以实现你的完整目标,例如,如果你可以很好地工作,你可以尝试复杂化你的问题,并通过无人监督替换监督程序和记忆游戏数据屏幕截图上的机器学习算法).

祝你好运,如果它有效,一定要发表一篇文章,你肯定会因解决这么难的实际问题而闻名!


Don*_*eba 26

您所追求的问题在您定义它的方式上是难以处理的.认为神经网络会"神奇地"学习对问题的丰富解释通常是错误的.在决定ANN是否是任务的正确工具时要记住的一个好事实是它是一种插值方法.想一想,你是否可以将你的问题构建为找到一个函数的近似值,你可以从这个函数中获得很多点,并且有很多时间来设计网络并对其进行训练.

你提出的问题没有通过这个测试.游戏控制不是屏幕上图像的功能.玩家必须留在内存中的大量信息.举一个简单的例子,每次进入游戏中的商店时,屏幕看起来都是一样的.但是,你买的东西取决于具体情况.无论网络有多复杂,如果屏幕像素是其输入,它将始终在进入商店时执行相同的操作.

此外,还存在规模问题.你提出的任务太复杂,无法在任何合理的时间内学习.您应该看到aigamedev.com了解游戏AI的工作原理.人工神经网络已经在一些游戏中成功使用,但是以非常有限的方式.游戏AI很难开发并且通常很昂贵.如果有一种构建功能神经网络的一般方法,那么该行业最有可能抓住它.我建议你从更简单的例子开始,比如井字游戏.


小智 17

好像这个项目的心脏正在探索什么是可能与ANN,所以我建议选择一个游戏,你不必处理图像处理(这从这里其他的答案,似乎是一个真正的艰巨的任务即时游戏).您可以使用Starcraft API构建机器人,它们可以让您访问所有相关的游戏状态.

http://code.google.com/p/bwapi/