0

最近,我一直在创建神经网络,计划培训他们玩我已经做的游戏(神经网络可以访问所有的游戏数据)。我对神经网络,遗传算法和NEAT实现有深入的理解。然而,我遇到的问题是正常化玩家看到的输入。如果我们有敌方目标,医疗箱对象和武器对象,他们需要输入和处理不同。我看到了SethBling here的一段视频,他在那里简单介绍了他如何设置神经网络。他只使用值1,0和-1。但是,对于更复杂的游戏,这是行不通的。我尝试了一个小模拟,当输入是.25 < x < .75时返回true,否则返回false,但它找不到解决方案。因此,我似乎不能把对象的ID扔进神经网络。任何帮助深表感谢!如何规范化视频游戏机器学习(神经网络)的输入

回答

1

我打算发表评论,但不幸的是我没有足够的声望点。所以,我有几个建议,希望能给你一些想法。我将假定您正在使用NEAT算法作为您的游戏播放算法。现在,从我收集的问题来看,您的问题在于,因为您的游戏中有不同数量的实际对象进行交互,所以实际上不可能为每一帧都提供一个标签。因此,正如你似乎已经想出的那样,你需要为对象提供一个非整数域,无论是通过类的总数规范化检测到的类ID,还是其他方法。我有3个命题为了尝试完成这个(或避免问题):

1:使用某种类型的图像处理(无论是分割还是阈值),物体检测以及图像时刻以便创建您感兴趣的对象的数据库,然后在游戏进行时,您可以重新创建更简单的实际游戏环境版本

2:训练语义分割神经网络以执行类似的操作到1

3:训练(或使用预先训练的)深度卷积神经网络来提取高级特征。然后使用这些功能(以及潜在的某种位置编码方法)作为NEAT算法的输入。然后,您的NEAT算法会选择想要查看的滤波器组合,以便做出决定。

我想我会亲自尝试选项编号3,因为它需要最少量的手动工作才能初始设置。

我希望这给你一些想法。

+0

我已经把整个环境简化成一个简单的版本(正如你在选项1中提到的那样),但是,主要问题是将对象ID转化为有意义的输入。例如,Enemy对象的ID为1,Coin对象的ID为2等,需要将它标准化为神经网络读取的数据。请注意,即使在环境中有二十个,所有硬币的ID都是2。 –

+0

正如我所提到的,您可以将数据标准化为激活函数的范围。例如,如果您有10个不同的对象(即10个不同的ID),那么您只需将该对象的ID除以10就可以了。在您的示例中,敌人的标准化ID为0.1,硬币将具有标准化的ID为0.2。这允许您将ID编码到激活功能的范围内,以防止网络饱和。 – Adam

0

当使用神经网络时,一个好的方法就是将它们看作是人类。人类需要知道什么?我总是做的是我给不同类型的东西的网络不同的传感器。我的传感器几乎总是只有一定长度的光线。 在你的情况下,我相信你没有更好的选择,比如使用3个硬币传感器,3个传感器用于医疗检测等。 你还必须决定是否要使用布尔传感器(如果触发了某些事件传感器与否,无论多么接近)或双重传感器(这将返回一个值告诉网络事件发生的距离)或者如果你想要两者合并。