上下文:

我正在尝试使用前馈人工神经网络为视频游戏创建AI,但是我遇到了一些输入功能取决于其他输入功能的存在或价值的问题。

我能想到的最基本,简化的示例是:

功能1是玩家人数(范围2 ... 5)
功能2到?是每个玩家的分数(范围> = 0)

通知ANN分数所需的功能数量取决于玩家数量。

问题:如何将动态知识输入到ANN中?

我已经考虑过的事情:


根本不使用此类功能,也不将其整合为静态输入。
即使用球员成绩的总和来代替。我严重怀疑这是否适用于我的问题,否则将导致丢失太多信息,并且人工神经网络将无法正常运行。
为不存在的输入传递错误值(例如-1)或默认值(例如0)
我不确定这样做的效果如何,理论上ANN可以轻松地从此输入中学习并适当地对功能进行建模。在实践中,我担心不存在的大量输入会导致ANN出现问题。例如,如果参与者的范围是2-10,如果只有2个参与者,则80%的输入数据将不存在,并且会在ANN中引入怪异的偏见,从而导致性能不佳。
将平均值传递给不存在的输入所设置的训练
再次,不存在的输入量将是一个问题,我担心这会为离散值输入带来奇怪的问题。


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

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

最佳答案

尝试考虑如下模型:

假设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小组,其中一些小组非常活跃,并且有有趣的讨论。当涉及到人工智能时,堆栈溢出似乎没有发生太多事情,或者也许我们应该努力改变它,或者两者都改变​​。

更新:

以下是一些不错的人工智能LinkedIn团体的名单(除非他们最近改变了政策,加入起来应该很容易):


“人工智能研究人员,教职员工与专业人员”
“人工智能应用”
'人工神经网络'
“ AGI-人工智能”
“应用人工智能”(目前还没有太多进展,并且仍在处理一些垃圾邮件,但情况正在逐渐好转)
“文本分析”(如果您对此感兴趣)

08-20 00:17