首页 文章

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

提问于
浏览
126

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

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

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

here

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

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

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

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

UPDATE(04/27/12):

奇怪的是,我在使用temporal difference back-propagation(即使用标准前馈人工神经网络强化学习)进行微调之前,已经使用deep belief net,我以无人监督的方式(在我玩游戏的视频中)训练了deep belief net .

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

UPDATE(10/21/15):

记得我记得我今天回答了这个问题,并认为我应该提到这不再是一个疯狂的想法 . 自从我上次更新以来,DeepMind发布了他们的性质paper on getting neural networks to play atari games from visual inputs . 事实上,阻止我使用他们的架构(Diablo 2的有限子集)的唯一因素是缺乏对底层游戏引擎的访问 . 渲染到屏幕然后将其重定向到网络对于在合理的时间内训练来说太慢了 . 因此,我们可能会赢得开源或使用API访问渲染目标的东西 . (也许是地震?)

7 回答

  • 51

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

    我认为你的想法非常 interesting and . 此时您可能想重新考虑它 . 我觉得这个项目是你为大学规划的,所以如果工作的重点是人工神经网络你应该选择另一个游戏,更简单 .

    我记得有人在不久前找到了关于_597720的提示 . 值得一试 .

    另一方面,如果您按照自己的意愿调用此项目,可能会有更好/更简单的方法来识别游戏中的对象:a smart-bot .

    One method 用于实现机器人 accesses the memory of the game client 以查找相关信息,例如屏幕上角色的位置及其 Health 状况 . 读取计算机内存是微不足道的,但要确切地找出内存中寻找的位置不是 . 像Cheat Engine这样的内存扫描仪对此非常有帮助 .

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

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

  • 39

    UPDATE 2018-07-26: 就是这样!我们现在正在接近这种游戏可以解决的问题!使用OpenAI并基于DotA 2游戏,团队可以创建一个可以beat semi-professional gamers in a 5v5 game的AI . 如果你知道DotA 2,你知道这个游戏在力学方面与类似暗黑破坏神的游戏非常相似,但有人可能会认为由于团队游戏它更复杂 .

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

    On the 5th of August 2018 (in 10 days!),计划将这款AI与顶级DotA 2游戏玩家联系起来 . 如果能够实现这一目标,那么期待一场大革命,或许不像解决Go游戏一样充满媒介,但它仍然是游戏AI的一个重要里程碑!

    UPDATE 2017-01: 自AlphaGo 's success, and there are new frameworks to facilitate the development of machine learning algorithms on games almost every months. Here is a list of the latest ones I' ve发现以来,该领域的发展非常快:

    • OpenAI's Universeplay virtually any game using machine learning 的平台 . API是在Python中运行的,它在VNC远程桌面环境下运行游戏,因此它可以捕获任何游戏的图像!您可以使用Universe通过机器学习算法玩暗黑破坏神II!

    • OpenAI's Gym:与Universe类似,但专门针对强化学习算法(因此它是AlphaGo使用的框架的一种概括,但是对更多游戏而言) . 有一个a course on Udemy涵盖了使用OpenAI Gym对突破或Doom等游戏进行机器学习的应用 .

    • TorchCraftTorch(机器学习框架)和星际争霸:母巢之战的桥梁 .

    • pyGTA5:一个仅使用屏幕截图(大量的videos online)在GTA5中构建自动驾驶汽车的项目 .

    非常激动人心!

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

    现在,如果你想要接受下一级挑战,你可以使用各种 AI vision game development platforms 之一,例如ViZDoom,一个高度优化的平台(7000 fps)来训练网络只使用视觉输入来玩Doom:

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

    结果非常惊人,see the videos on their webpagenice tutorial(在Python中)在这里!

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

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

    • high performance 游戏的实施(你可以用更少的时间生成更多的数据/游戏/学习世代,这样你的学习算法可以更快地收敛!) .

    • 一个简单的 responsive API 来控制你的代理人(即,如果你试图使用人类输入来控制一个游戏,你的一些命令可能会丢失,所以你也要处理输出的不可靠性......) .

    • 轻松设置 custom scenarios .

    • customizable rendering (对于"simplify"您可以轻松处理的图像非常有用)

    • synchronized ("turn-by-turn") play (所以你不要太过复杂) .

    • 其他便利功能,例如跨平台兼容性,后向兼容性(当您有新的游戏更新时,您不会冒任何机器人不再使用该游戏),等等 .

    总而言之,这些平台的优点在于你必须处理(如何操纵游戏输入,如何设置场景等)以便 you just have to deal with the learning algorithm 本身 .

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


    Old post 描述了仅依靠视觉输入开发AI的技术问题:

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

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

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

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

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

    总而言之,您想要实现的目标是 the limit (and maybe a bit beyond) of current state-of-the-art algorithms . 我认为这可能是可能的,但即使它是 you are going to spend a hella lot of time ,因为这不是一个理论问题,而是一个 practical problem 你正在接近这里,因此你需要实现和 combine a lot of different AI approaches 才能解决它 .

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

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

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

  • 1

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

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

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

  • 25

    似乎这个项目的核心是探索人工神经网络的可能性,所以我建议选择一个你在这里没有答案的游戏,在实时游戏中看起来像是一项困难的任务 . 您可以使用Starcraft API构建机器人,它们可以让您访问所有相关游戏州 .

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

  • 16

    好吧,假设你可以在任何时候从一组所有可能的“移动”中产生一组“结果”(可能涉及概率),并且在游戏中存在一些一致性的概念(例如,你可以一遍又一遍地玩X级再次),您可以从具有随机权重的N个神经网络开始,并让他们每个人以下列方式玩游戏:

    1)对于每个可能的“移动”,生成可能的“结果”列表(具有相关概率)2)对于每个结果,使用您的神经网络确定“结果”的相关“ Value ”(得分)(例如,数字介于-1和1,1之间是最好的结果,-1是最差的结果3)选择导致最高概率*得分的'移动'4)如果移动导致'赢'或'输',停止,否则回到第1步 .

    经过一段时间(或“胜利”/“失败”)后,评估神经网络与“目标”的接近程度(这可能涉及一些领域知识) . 然后扔掉离目标最远的50%(或其他一些百分比)的NN,进行前50%的交叉/变异,再次运行新的NN集 . 继续运行直到满意的NN出现 .

  • 1

    作为第一步,您可以查看连续帧的差异 . 你必须区分背景和实际的怪物精灵 . 我猜这个世界也可能包含动画 . 为了找到那些我会让角色四处移动并将与世界一起移动的所有东西收集到一个大的背景图像/动画中 .

    您可以检测并识别具有相关性的敌人(使用FFT) . 但是,如果动画重复像素精确,则只需查看几个像素值就会更快 . 您的主要任务是编写一个强大的系统,该系统将识别新对象何时出现在屏幕上,并将精灵帧的所有帧逐渐转换为数据库 . 也许你必须为武器效果 Build 模型 . 应该减去那些可以使它们不会弄乱你的对手数据库 .

  • 1

    我认为你最好的选择是涉及少数/可能网络的复杂架构:即一个识别和回应物品,一个用于商店,一个用于战斗(可能在这里你需要一个用于敌人识别,一个用于攻击),等等 .

    然后试着想想最简单的暗黑破坏神II游戏,可能是野蛮人 . 然后一开始就保持简单,就像第一幕,第一区 .

    然后我猜有 Value 的“目标”将是敌人物体的消失,以及 Health 状况的减少(反过来得分) .

    一旦您完成了这些单独的“更简单”任务,您就可以使用“主”ANN来决定激活哪个子ANN .

    至于训练,我只看到三个选项:你可以使用上面描述的进化方法,但是你需要手动选择'获胜者',除非你为此编写一个完整的程序 . 你可以让网络'看'有人玩 . 在这里,他们将学习模仿球员或球员的风格 . 网络试图预测玩家的下一个动作,加强正确的猜测等等 . 如果你真的得到你想要的人工神经网络可以通过视频游戏来完成,不需要真正的实时游戏 . 最后你可以让网络玩游戏,让敌人死亡,升级,恢复 Health 等作为积极强化和玩家死亡,失去 Health 等作为消极强化 . 但是看看即使是一个简单的网络需要成千上万的具体训练步骤来学习甚至简单的任务,你也需要很多耐心 .

    总而言之,你的项目非常雄心勃勃 . 但我认为,如果有足够的时间,它可以“在理论上完成” .

    希望它有所帮助,祝你好运!

相关问题