2012-09-24 19 views
3

背景:如何处理Artifical Neural Network中的不确定性/缺失数据?

我正在尝试使用前馈人工神经网络为视频游戏创建AI,并且遇到了一些输入要素依赖于存在的问题其他输入功能的值。

最基本的,简化的例子,我能想到的是这样的:

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

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

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

事情我已经考虑:

  1. 根本就没有使用这种功能,或者将它们合并为静态输入。 I.E使用球员得分的总和代替。我严重怀疑这适用于我的问题,这会导致失去太多的信息,并且ANN不能很好地运行。

  2. 一个错误值传递(如-1)或默认值(例如0)为不存在的输入 我不知道如何这会工作,在理论上,ANN可以很容易地从该输入学习适当地建模功能。在实践中,我很担心导致ANN出现问题的非常规输入的数量。例如,如果参与者的范围是2-10,如果只有2个参与者,则80%的输入数据将不存在,并且会在人工神经网络中引入奇怪的偏差,导致表现不佳。

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

所以,我问这个,有没有人有任何其他解决方案,我可以考虑?有没有一种标准或常用的方法来处理这个问题?

我知道这是一个相当小生和复杂的问题,但我对“我该如何修复此代码感到厌倦?”和“我如何在PHP/Javascript中执行此操作?”问题:P,谢谢你们。

+0

我仍然在寻找对这个问题进行了一些投入,我有兴趣听听别人对此有何评论! –

+0

为了在#1上构建一个分数,总和可能不是最好的主意,但也许是几个操作的组合可能起作用,请考虑其中的一个是否合理 - 平均值,分数更高的玩家数量这名球员,得分差异,与排名最高的球员的得分差距等。 – Dukeling

回答

1

尝试考虑像下面一些模型:

说XI(例如X1)是该可变数量可以存在一个输入。你可以有n个(x1到xn)。让y成为其余的输入。

在您的第一个隐藏层上,将x1和y传递给第一个c节点,x1,x2和y到下一个c节点,x1,x2,x3和y到下一个c节点,依此类推。这假设x1和x3不能在没有x2的情况下激活。如果需要这样做,模型将不得不适当地改变。

网络的其余部分是一个标准的前馈网络与连接到下一层,或然而你选择的所有节点的所有节点。

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

我建议选择c以使得c * n(第一个隐藏层中的节点数)大于(或等于)第二个隐藏层中的节点数(并且具有c对于中等大小的网络,至少10个(进入100年也很好)),并且我还建议网络至少有2个其他隐藏层(因此除输入和输出外总共3个)。这不是来自经验,而是我的直觉告诉我的。

这工作是依赖于不同的数字输入之间有一定的(可能是不可捉摸)相似,并且可能无法正常工作,如果在所有,如果这种相似性并不存在。这也可能需要相当多的输入数量的训练数据。

如果你试试吧,让我/我们知道,如果它的工作原理。

如果你有兴趣在人工智能的讨论,我建议加入专门给它一些链接,在组中,有一些是相当活跃,并有有趣的讨论。在涉及到人工智能时,似乎没有太多关于计算器的信息,或者我们应该努力改变这一点,或者两者兼而有之。

UPDATE:

这里有几个像样的人工智能LinkedIn组的名称列表(除非他们最近改变他们的政策,应该是很容易的加入):

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

  • '人工智能应用'

  • '的人工神经网络

  • “AGI - 强人工智能”

  • “应用人工智能”(没有太多的事情在此刻,并且还在处理一些垃圾邮件,但它是渐入佳境)

  • “文本分析”(如果你感兴趣的是)

+0

谢谢,这是一个很好的潜在解决方案!我永远不会想到这一点。有没有可能将我指向Linked-In上的一个或一些更活跃的AI组? –

+0

用某些AI LinkedIn群组的名称编辑。 – Dukeling

3

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

+0

我投了票,因为这是一件有趣的事情要考虑。鉴于理想的情况,我希望为不同的网络训练不同的网络,但问题在于收集训练数据。对于2-5名球员来说,4个不同的数据组并不是那么糟糕,但是说有30-40名球员的潜力,并且突然间你只有2-3%的数据用于训练每个网络,这就是假设没有边界情况下很难收集数据(可能有40名玩家非常难得) –

+0

这很公平。然后我会建议去#2。这基本上是为每个数据集提供相同数量的维度。 IE,比较(x,y)和(a,b,c)变成(x,y,0)和(a,b,c)。你的程序可能仍然会找到一些有用的关联。 – ckb

+0

嗯,有趣。它仍然不会尽管扩展,因为与大多数的特点是0 这只是发生在我身上,我可以用一个降维算法从多个玩家的数据折叠成一个球员的问题。我不知道这是否会工作... –