【问题标题】:How to normalize fitness scores? [closed]如何标准化健身分数? [关闭]
【发布时间】:2013-03-31 15:15:47
【问题描述】:

我正在发展一组神经网络,并且一直在努力将适应度分数标准化(到 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)的分数,因为这些游戏具有较小的输入值,从而隐藏了分数的潜在多样性。

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

【问题讨论】:

    标签: java neural-network genetic-algorithm robotics


    【解决方案1】:

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

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

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

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

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

    Normalizing values with unknown bounds

    Normalize components in a language model

    【讨论】:

    • 神经元传递函数是双曲正切。我不需要为此标准化输入。但是在绘制智能体的适应度和游戏的适应度(游戏是适应度函数)时,当它们的值范围如此之广时,很难分析它们。因此,我想将它们归一化为 (0, 1)。我跟踪了最大值和最小值,它起作用了。这并不理想(因为输入有时会超过估计值)所以我会尝试进行额外的迭代。感谢您的建议!
    • 只是一个建议...您可以尝试将缩小因子与 tanh 传递函数相乘...例如:a*tanh... 其中 a
    【解决方案2】:

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

    这不会给您留下 0 到 1 之间的数字,但可以让您比较两个总体

    【讨论】:

      猜你喜欢
      • 2020-09-27
      • 2010-09-19
      • 2016-08-01
      • 2011-07-19
      • 2018-08-29
      • 2022-01-21
      • 2011-04-28
      相关资源
      最近更新 更多