我目前正在尝试训练一个ANN来玩视频游戏,希望能从这里的优秀社区中获得一些帮助。
我选择了《暗黑破坏神2》。游戏玩法是实时的,采用等轴视角,玩家控制一个单一的角色,摄像头始终以该角色为中心。
为了使问题具体化,任务是让角色获得x经验值,同时避免其生命值降为0,经验值通过击杀怪物获得。以下是游戏玩法的示例:
现在,由于我希望网络仅基于屏幕上的像素信息进行操作,它必须学会一个非常丰富的表示,以便高效地玩游戏,因为这可能需要它至少隐式地知道如何将游戏世界分解成对象以及如何与它们互动。
所有这些信息都必须以某种方式教给网络。我实在想不出如何训练它。我唯一的想法是使用一个单独的程序从屏幕上视觉提取游戏中固有的好/坏事物(例如,生命值、金钱、经验值),然后在强化学习过程中使用这些统计数据。我认为这将是答案的一部分,但我认为这还不够;从原始视觉输入到目标导向行为的抽象层次太多,仅凭如此有限的反馈来训练网络在我有生之年是不可能的。
所以,我的疑问是:你能想到其他什么方法来训练网络完成这项任务的至少一部分吗?最好是无需制作数千个标记示例。
为了提供更多方向:我正在寻找其他强化学习来源和/或在这种环境中提取有用信息的任何无监督方法。或者,如果你能想到一种从游戏世界中获取标记数据的方法,而无需手动标记,那么也可以使用监督算法。
更新(04/27/12):
奇怪的是,我还在继续这个项目,并且似乎取得了一些进展。让ANN控制器工作的最大秘诀是使用最适合任务的高级ANN架构。因此,我一直在使用由分解的条件限制玻尔兹曼机组成的深度信念网络,我以无监督的方式(在我的游戏视频上)训练它,然后使用时间差分反向传播(即使用标准前馈ANN的强化学习)进行微调。
仍然在寻找更多有价值的输入,特别是在实时动作选择问题和如何为ANN处理编码彩色图像方面 🙂
更新(10/21/15):
我突然想起我之前问过这个问题,我想提一下,现在这不再是一个疯狂的想法。自从我上次更新以来,DeepMind发表了他们在《自然》杂志上的关于让神经网络通过视觉输入玩Atari游戏的论文。事实上,唯一阻止我使用他们的架构来玩《暗黑破坏神2》的一个有限子集的原因是无法访问底层游戏引擎。将渲染到屏幕上然后重定向到网络的速度太慢,无法在合理的时间内进行训练。因此,我们可能很快就不会看到这种机器人在玩《暗黑破坏神2》,但这只是因为它将玩一些开源游戏或具有渲染目标API访问权限的游戏。(可能是《雷神之锤》?)
回答:
我能看出你担心如何训练ANN,但这个项目隐藏着你可能没有意识到的复杂性。通过图像处理在电脑游戏中进行对象/角色识别是一项非常具有挑战性的任务(对于FPS和RPG游戏来说甚至可以说是疯狂的)。我并不怀疑你的技能,我也不是说这不可能做到,但你很可能会花费比实现ANN本身多10倍的时间来识别事物(假设你已经有数字图像处理技术的经验)。
我认为你的想法非常有趣且也非常雄心勃勃。在这一点上,你可能需要重新考虑它。我感觉到这个项目是你为大学计划的,所以如果工作的重点真的是ANN,你可能应该选择另一个更简单的游戏。
我记得不久前还有其他人来寻求关于一个不同但在某种程度上相似的项目的建议。值得一看。
另一方面,如果你接受建议,可能有更好/更简单的识别游戏中对象的方法。但首先,让我们称这个项目为你想要的:一个智能机器人。
一种方法是访问游戏客户端的内存来查找相关信息,例如角色在屏幕上的位置及其生命值。读取计算机内存很简单,但找出确切的内存位置并不容易。内存扫描器如Cheat Engine在这方面非常有帮助。
另一种方法是在游戏下方操作,涉及操纵渲染信息。游戏中的所有对象都必须渲染到屏幕上。这意味着所有3D对象的位置最终都会被发送到视频卡进行处理。准备好进行一些认真的调试吧。
在本回答中,我简要描述了通过图像处理实现你想要的目标的两种方法。如果你对它们感兴趣,可以在《Exploiting Online Games》(第6章)中找到更多相关信息,这是一本关于该主题的优秀书籍。