如何训练人造神经网络以使用视觉输入来玩“暗黑破坏神2”?

我目前正试图让人工神经网络来玩电子游戏,而且我希望能从这里的精彩社区获得一些帮助。

我决定使用暗黑破坏神2.游戏玩法因此是实时的,从等轴测视角来看,玩家可以控制相机居中的单个化身。

为了使事情具体化,任务是让你的角色x经验值不会降低到0,而经验值是通过杀死怪物获得的。 这是一个游戏的例子:

这里

现在,因为我希望网络完全基于从屏幕上的像素获得的信息进行操作,为了有效地播放它,它必须学习非常丰富的表示,因为这可能需要它知道(至少隐含)如何把游戏世界分成对象和如何与它们交互。

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

所以,我的问题是:您还有什么其他方式可以用来培训网络来完成这项任务的至少一部分? 最好不要制造数千个标记的例子......

只是稍微指出一点:我正在寻找一些其他的强化学习来源和/或任何无监督的方法来提取此设置中的有用信息。 或者是一个监督算法,如果你能想到一种从标签中获取标签数据而不需要手动标签的方法。

UPDATE(04/27/12):

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

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

UPDATE(15年10月21日):

只记得我今天回答了这个问题,并且认为我应该提到这不再是一个疯狂的想法。 自从我上次更新以来,DeepMind发布了关于让神经网络从视觉输入中玩Atari游戏的自然论文。 事实上,阻止我使用他们的体系结构玩一个有限的暗黑2的一个唯一因素就是缺乏对底层游戏引擎的访问。 渲染到屏幕然后将其重定向到网络太慢而无法在合理的时间内进行训练。 因此,我们很可能不会在近期看到这类机器人玩Diablo 2,但仅仅是因为它会播放开源或通过API访问渲染目标。 (地震也许?)


我可以看到你担心如何训练人工神经网络,但这个项目隐藏了你可能没有意识到的复杂性 。 通过图像处理在计算机游戏上进行对象/字符识别是一件非常具有挑战性的任务(对于FPS和RPG游戏,不要说疯狂)。 我不怀疑你的技能,我也没有说它不能完成,但你可以轻松地花10倍的时间在识别东西上,而不是实现ANN本身(假设你已经有数字图像处理技术方面的经验) )。

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

我记得其他人不久前也在寻找不同但类似项目的提示。 这值得检查。

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

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

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

在这个答案中,我简要描述了两种方法,通过图像处理完成你想要的。 如果你对它们感兴趣,你可以在Exploiting Online Games(第六章)中找到更多关于它们的信息,这本关于这个主题的优秀书籍。


UPDATE 2017-01:自AlphaGo成功以来,该领域发展非常迅速,几乎每个月都有新的框架来促进游戏机器学习算法的发展。 以下是我找到的最新的列表:

  • OpenAI的Universe: 使用机器学习玩几乎任何游戏的平台。 该API使用Python,它运行在VNC远程桌面环境后面的游戏,因此它可以捕捉任何游戏的图像! 您可以使用Universe通过机器学习算法来玩Diablo II!
  • OpenAI的健身房:与Universe类似,但专门针对强化学习算法(所以这是AlphaGo使用的框架的一般化,但对于更多的游戏)。 有一个关于Udemy的课程,介绍了使用OpenAI Gym进行机器学习的应用,如突破或Doom游戏。
  • TorchCraft:Torch(机器学习框架)和StarCraft:Brood War之间的桥梁。
  • 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来控制代理(例如,如果您尝试使用人员输入来控制游戏,那么您的某些命令可能会丢失,因此您还需要处理输出的不可靠性......)。
  • 轻松设置自定义场景
  • 可定制的渲染 (可以用于“简化”您轻松处理的图像)
  • 同步(“turn-by-turn”)游戏 (所以你不需要你的算法在第一时间实时工作,这是一个巨大的复杂性减少)。
  • 额外的便利功能,如跨平台兼容性,逆向兼容性(当有新游戏更新时,您不会再冒险使您的机器人不再与游戏一起工作)等。
  • 总而言之,这些平台的优点在于, 它们可以缓解许多以前需要处理的技术问题 (如何操作游戏输入,如何设置场景等),以便您只需处理学习算法本身。

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


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

    与上述一些同事相反,我认为这个问题不容易解决。 但它确实是一个难题!

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

    然后,另一个问题是,即使你已经提取了你需要的所有数据,游戏也只能部分观察到 。 因此,你需要注入一个世界的抽象模型,并将它与来自游戏的处理过的信息一起提供给它,例如你的化身的位置,而且还包括任务物品的位置,目标和屏幕外的敌人。 你也许可以看看Vermaak 2003的Mixture Particle Filters。

    此外,您需要拥有一个自治代理 ,其中包含动态生成的目标 。 您可以尝试的着名架构是BDI代理,但您可能必须对此架构进行调整才能在实际情况下运行。 作为替代方案,还有递归Petri网,您可以将它与各种各样的Petri网结合起来,以达到您想要的效果,因为它是一个研究得非常灵活的框架,具有很好的形式化和证明程序。

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

    总而言之,你想在这里达到的是当前最先进的算法的极限(也许有点超出) 。 我认为这可能是可能的,但即使是这样, 你也会花费很多时间 ,因为这不是一个理论问题,而是一个你在这里接近的实际问题 ,因此你需要实施并且合并很多不同的AI方法来解决它。

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

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

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


    你所追求的问题在你定义它的方式上是棘手的。 认为神经网络会“神奇地”学习对问题的丰富回报通常是错误的。 在决定ANN是否是正确的工具时,记住一个好的事实是它是一种插值方法。 想一想,您是否可以将问题视为寻找函数的近似值,从这个函数中获得许多点,并且有很多时间来设计网络并对其进行培训。

    你提出的问题没有通过这个测试。 游戏控制不是屏幕上图像的功能。 玩家必须记住很多信息。 举个简单的例子,每次你在游戏中进入商店时,情况都是如此。 但是,您购买什么取决于具体情况。 无论网络多么复杂,如果屏幕像素是其输入,它在进入商店时总是执行相同的动作。

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

    链接地址: http://www.djcxy.com/p/84693.html

    上一篇: How to train an artificial neural network to play Diablo 2 using visual input?

    下一篇: How to program a neural network for chess?