2

我正在发展一群神经网络,我一直在努力将适应度分数标准化(到 0 到 1 范围内的值),因此这个数字本身是最有意义的。问题是代理在不同的条件下进行测试——他们参与不同的游戏,并且对于每个游戏使用不同的适应度函数。健身功能看起来或多或少是这样的:

agentsFitness[indiv][0] += Util.mean(speed) * (games[0].getConstant(0) - Math.sqrt((Math.abs((speed[LEFT] - speed[RIGHT]))) * (games[0].getConstant(1) - Util.normalize(0, 4000, maxIRActivation))));

但每个人都会接受不同的投入。因为我可以估计输入的最大值和最小值,所以我可以轻松地分别对它们中的每一个进行归一化。其中一些将在 (-30,000, 360,000) 和一些 (0, 900) 范围内。

我发现困难的部分是代理可能同时在两个、三个或更多游戏上进行测试,因此他们的适应度得分将是所有游戏得分的总和。此外,可以引入/发展新游戏。硬编码归一化的最小值和最大值在这里不适合。

如果我尝试使用非常大的最大值和最小值,那么对于具有较小输入值的游戏,我最终会得到一个范围(0.40、0.45)的分数,这隐藏了分数的潜在多样性。

任何关于如何标准化这些健身分数的建议将不胜感激。

4

2 回答 2

1

所以你正在尝试使用遗传算法优化神经网络,对吗?凉爽的!

通常建议对 ANN 使用归一化输入,但这在使用 sigmoid 激活时特别适用。您确定需要标准化数据吗?在不知道输入范围的情况下,很难让 ANN 完成其工作。

  1. 如果您很难对输入进行规范化,请跟踪数据中的当前最大值和最小值。
  2. 更好的是,尝试对数据进行一次迭代以收集关于最大值和最小值的先验信息(前提是它不会显着增加时间复杂度)。
  3. 或者,尝试研究一种逻辑来猜测最大值和最小值。也许......另一个神经网络来做猜测工作:)。这将取决于环境。

你想做什么对我来说不是很清楚......但据我了解,这些是我能提出的唯一建议。

检查这两个链接。可能有帮助:

归一化具有未知界限的值

规范化语言模型中的组件

于 2013-04-01T05:43:58.007 回答
0

您可以使用标准归一化分数:对于每个总体(在本例中为每个输入集合),您可以通过从中减去总体平均值,然后将其除以标准差来计算个体的分数。

这不会给您留下 0 和 1 之间的数字,但确实允许您比较两个总体

于 2013-03-31T15:26:41.823 回答