【问题标题】:Random element in fitness function genetic algorithm适应度函数遗传算法中的随机元素
【发布时间】:2018-04-10 12:11:26
【问题描述】:

所以我正在使用遗传算法来训练前馈神经网络,其任务是识别赋予遗传算法的函数。即 x = x**2 或更复杂的东西。

我意识到我在我的适应度函数中使用了随机输入,这导致适应度对于人群中的某个成员来说有些随机,但是,显然它仍然与给定函数的接近程度一致。一位同事评论说,奇怪的是,同一个人口中的成员并不总是获得相同的健康状况,我同意这有点不合常规。然而,这让我开始思考,这有什么理由不利于遗传算法?我实际上认为它可能非常好,因为它使我能够拥有一个相当小的测试集,加快代数,同时仍然避免过度拟合任何给定的测试。

有人有这方面的经验吗?

(适应度函数是与给定函数相比的 MSE,对于随机生成的 10 次迭代的测试集)

【问题讨论】:

    标签: python neural-network artificial-intelligence genetic-algorithm


    【解决方案1】:

    通常您会为遗传算法使用种子,这应该是固定的。它总是会依次生成相同的“随机”子代,这使您的方法具有可重复性。所以遗传算法是一种伪随机的。这是执行遗传算法的最先进技术。

    【讨论】:

    • 非常感谢,但这并不是我要问的。我特别询问了随机化测试集的适应度函数的理论效果。这比理解理论更重要
    • 有关更多理论,互联网上有很多相关内容。更详细的问题,需要了解你的具体设置/环境等才能了解。
    【解决方案2】:

    一致的适应度值对于有效推进进化算法是必要的。想象一下极端情况:如果对候选人的适应度评估始终是 100% 随机的,那么您的算法将执行随机搜索(效率不高)。

    如果你的适应度评估不一致,通常意味着你没有成功抽象出问题中“价值”的含义(这有时很难!)或者它可能是随机因素的结果(更类似于什么我从你的描述中理解)。这些通常通过平均来抵消。

    如果在您的情况下,这些随机输入确实具有优势,请考虑进行一些平均,这可能会使适应度评估更加一致,即使速度较慢。

    但是,简而言之,缓慢的评估是不好的(你是对的),不一致的适应度值也不是。最后,请随意找到自己的平衡点。

    编辑基于 cmets:

    想象一下人工神经网络 (ANN) 必须重现一个函数的任务,例如 f(x) = x(其中 ANN 只有一个输入 x 和一个输出 f(x),但也许更复杂的情况需要许多隐藏单元)。

    我们可以想象总是使用一组点来测试适应度,例如,对于 x = {0.2, 0.4, 0.6, 0.8} 测试 f(x)。在每种情况下,f(x) 越接近预期的 f(x) = x,适应度就越高。这将是一致的,但可能会导致过度拟合,如图所示:

    解决方案在测试点附近非常好,但在其他地方无法预测。由于一致的评估,搜索算法可能会很有效,但结果可能并不好。

    另一种方法是在每次迭代时使用一组随机测试点,例如 x = {0.13, 0.19, 0.56, 0.99}。因为每次的测试点都不一样,所以结果肯定到处都是好的。缺点是评价不一致,如图:

    相同的候选解在测试集 A 上似乎很好,而在测试集 B 上则相当糟糕。在这种情况下,搜索算法可能效率更低,但在我们想要的值范围内,解会更好。

    根据我们的具体情况,我们可以通过更多的迭代、更大的测试集(更好的平均值)或尝试中间解决方案来改进事情。例如,可以考虑始终测试三个随机点,其中第一个始终介于 0 和 1/3 之间,第二个始终介于 1/3 和 2/3 之间,第三个介于 2/3 和 1 之间。可能性真的很大没完没了,更好的选择取决于每个问题。

    注意很多任务根本不会有这个问题。例如,在经典的 XOR 中,我们只需要测试 {X1 = 0, X2 = 0; X1 = 1,X2 = 0; X1 = 0,X2 = 1; X1 = 1,X2 = 1}。当然,测试所有四种情况会很快!

    【讨论】:

    • 非常感谢,这实际上很有帮助。但是让我们看一个非常简单的场景。我想让我的 ann 做 x = x。从 x 的 10 个随机值到 x 的石示例中的 10 个设置有什么优势吗?即(i to 10 random.random() vs i to 10 i/10)
    • 我会说这取决于问题:如果您需要区分是 y = x 还是 y = x^2,那么两个固定输入就可以了。如果您需要使函数尽可能接近 y = x(非常不同的问题),那么测试随机输入将具有防止过度拟合的优势(即,对于您的测试点而言,函数与 y = x 非常相似,但非常其他地方不同!)。
    猜你喜欢
    • 2020-05-12
    • 2023-02-20
    • 2011-04-07
    • 2011-10-07
    • 1970-01-01
    • 2011-12-21
    • 2017-09-26
    • 2023-03-15
    • 2014-09-11
    相关资源
    最近更新 更多