4

上下文:

我正在尝试使用前馈人工神经网络为视频游戏创建 AI,但我遇到了一个问题,即我的一些输入特征依赖于其他输入特征的存在或价值。

我能想到的最基本、最简单的例子是这样的:

特征 1 是玩家数量(范围 2...5) 特征 2 到 ? 是每个玩家的得分(范围 >=0)

通知 ANN 分数所需的特征数量取决于玩家的数量。

问题:如何将这种动态知识输入表示给 ANN?

我已经考虑过的事情:

  1. 只是不使用这些功能,或者将它们合并到静态输入中。IE 使用玩家得分的总和来代替。我严重怀疑这是否适用于我的问题,它会导致丢失太多信息并且 ANN 将无法正常运行。

  2. 为不存在的输入传递错误值(例如 -1)或默认值(例如 0)我不确定这将如何工作,理论上 ANN 可以轻松地从该输入中学习并适当地对函数建模。在实践中,我担心大量不存在的输入会导致 ANN 出现问题。例如,如果玩家的范围是 2-10,如果只有 2 个玩家,则 80% 的输入数据将不存在,并且会在 ANN 中引入奇怪的偏差,从而导致性能不佳。

  3. 在不存在的输入上传递训练集的平均值同样,不存在的输入量将是一个问题,我担心这会给离散值输入带来奇怪的问题。

所以,我在问这个,有没有人有我能想到的其他解决方案?有没有标准或常用的方法来处理这个问题?

我知道这对 SO 来说是一个相当小众且复杂的问题,但我对“如何修复此代码?”感到厌烦。和“我如何在 PHP/Javascript 中做到这一点?” 问题:P,谢谢大家。

4

2 回答 2

3

听起来您有多个数据集(针对每个玩家数量)彼此并不真正兼容。从 5 人游戏中吸取的教训真的适用于 2 人游戏吗?尝试简化问题,例如 #1,并查看程序的执行情况。在人工智能中,荒谬的简化有时会给你很大的吸引力,比如垃圾邮件过滤器中的词袋。

于 2012-09-24T03:39:56.347 回答
2

尝试考虑以下模型:

假设 xi(例如 x1)是可以存在可变数量的输入之一。您可以拥有其中的 n 个(x1 到 xn)。让 y 成为其余的输入。

在您的第一个隐藏层上,将 x1 和 y 传递给第一个 c 节点,x1,x2 和 y 传递给下一个 c 节点,x1,x2,x3 和 y 传递给下一个 c 节点,依此类推。这假设 x1 和 x3 不能在没有 x2 的情况下都处于活动状态。如果需要,模型必须适当地改变。

网络的其余部分是一个标准的前馈网络,所有节点都连接到下一层的所有节点,或者您可以选择。

每当您有 w 活动输入时,禁用除第 w 组 c 节点之外的所有节点(将它们完全排除在该输入集的训练之外,在计算它们输出到的节点的值时不要包括它们,不要更新权重他们的输入或输出)。这将允许大部分网络进行训练,但对于第一个隐藏层,只有适用于该数量输入的部分。

我建议选择 c 以使 c*n(第一个隐藏层中的节点数)大于(或等于)第二个隐藏层中的节点数(并且对于 a,c 至少为 10中等大小的网络(到 100 也可以)),我还建议网络至少有 2 个其他隐藏层(所以总共 3 个不包括输入和输出)。这不是来自经验,而是我的直觉告诉我的。

这种工作依赖于不同数量的输入之间的某种(可能无法定义)相似性,如果这种相似性不存在,则可能无法正常工作。对于每个输入数量,这也可能需要相当多的训练数据。

如果您尝试,请让我/我们知道它是否有效。

如果你对人工智能讨论感兴趣,我建议加入一些专门讨论它的 Linked-In 小组,其中一些非常活跃并且有有趣的讨论。在谈到人工智能时,stackoverflow 似乎并没有发生太多事情,或者我们应该努力改变这一点,或者两者兼而有之。

更新:

以下是一些不错的人工智能 LinkedIn 群组的名称列表(除非他们最近更改了政策,否则应该很容易加入):

  • '人工智能研究人员,教师 + 专业人员'

  • “人工智能应用”

  • '人工神经网络'

  • “AGI——通用人工智能”

  • “应用人工智能”(目前没有太多进展,仍在处理一些垃圾邮件,但正在变得更好)

  • “文本分析”(如果您对此感兴趣)

于 2012-10-02T20:30:38.180 回答