感谢您的文章!
昨天和今天,我就 Hilly 函数和 alglib 方法坐了一会儿。以下是我的想法。
为了找到这个函数的最大值,尤其是当参数数为 10 或更多时,使用梯度方法是毫无意义的,这是组合优化方法的任务。梯度法会立即陷入局部极值。不管从参数空间的新点重新开始多少次,随着参数数量的增加,梯度法立即找到正确解的空间区域的机会趋于零。
例如,对于任意数量的参数,lbfgs 或 CG 2(2)次迭代找到最大值的空间点是 {x = -1,2 , y = 0.5}。
但正如我所说,进入这一区域的机会为零。随机数的产生需要一百年的时间。
因此,有必要以某种方式将文章中介绍的遗传算法与梯度方法结合起来(这样它们就能进行侦查并缩小搜索空间),以便从一个更有利的点快速找到极值。
感谢您的反馈。
为了找到给定函数的最大值,尤其是当参数数为 10 或更多时,使用梯度法是毫无意义的。
是的,没错。
这就是组合优化方法的任务。
组合方法,如经典的 "蚂蚁",是为 "旅行推销员问题 "和 "knapsack 问题 "等问题而设计的,即它们是为具有固定步长(图边)的离散问题而设计的。而对于多维 "连续 "问题,这些算法根本不是为训练神经网络等任务而设计的。是的,组合特性对随机启发式方法非常有用,但它们并不是成功解决这类近乎真实测试问题的唯一和充分特性。算法中的搜索策略本身也很重要。
基于梯度的搜索策略会立即陷入局部极值。不管从参数空间的一个新点重新开始多少次,随着参数数量的增加,梯度法立即找到正确解的空间区域的机会趋于零。
是的,确实如此。
但正如我已经说过的,到达这个区域的几率根本就是零。生成随机数需要一百年的时间。
是的,没错。在低维空间(1-2)中,进入全局附近是非常容易的,简单的随机发生器甚至可以做到这一点。但是,当问题的维度增加时,一切都会完全改变,此时,算法的搜索特性开始发挥重要作用,而不是 "幸运女神"。
因此,我们需要以某种方式将文章中介绍的遗传算法(它们会进行探索,缩小搜索空间)与梯度法结合起来,这样就能从一个更有利的点快速找到极值。
"遗传"--你可能是指 "启发式"。为什么 "鱼需要一把伞","为什么我们需要铁匠? 我们不需要铁匠。"))))。有一些有效的方法可以解决连续空间中的复杂多维问题,这些方法在有关群体方法的文章中都有描述。而对于经典梯度问题,则有它们自己的任务--一维可分析确定问题(在这一点上,它们不分伯仲,会有快速而精确的收敛)。
还有一个问题,你对启发式方法的速度有何印象?
SZY:
哦,多少奇妙的发现
为启蒙精神做准备
经验,错误之子、
天才,悖论之友、
还有机遇,上帝的发明家。
ZZZY,稍等。在一个未知的探索空间里,我们永远不可能在任何时刻、任何步骤的迭代中,知道它实际上是一个真正有希望通向全球的方向。因此,不可能先侦查后完善。只有整体搜索策略才能发挥作用,它们要么效果好,要么效果差。每个人都会自己选择 "好 "的程度和 "适合任务 "的程度,为此,我们会保留一个评级表,以便根据任务的具体情况选择算法。
是的,没错。在低维空间(1-2 维)中,进入全局邻域非常容易,简单的随机发生器甚至可以派上用场。但是,当问题的维度增加时,一切都完全不同了。在这里,算法的搜索特性,而不是幸运女神,开始发挥重要作用。
所以它们失败了
还有一个问题,你对启发式算法的速度有何印象?
尽管启发式运算速度很快。1000个参数的结果约为0.4。
这就是为什么我凭直觉认为,将遗传算法和梯度法结合起来以达到最大值是有意义的。否则,单独使用这两种方法将无法求解你的函数。我还没有实际测试过。
附注:我仍然认为这个函数太粗了,在实际任务中(比如神经网络的训练)不存在这样的问题,尽管误差面也都是局部最小值。
1. 他们做得不好
2. 尽管它们工作得很快。1000 个参数的结果约为 0.4。
3.这就是为什么我凭直觉认为将 GA 和梯度法结合起来求最大值是有意义的。否则,单独使用这两种方法无法求解你的函数。我还没有实际测试过。
4.附注:我仍然认为这个函数太粗了,在实际任务中(比如神经网络训练)不存在这样的问题,尽管在那里误差面也都是局部最小值。
1.你说 "它们应付不了 "是什么意思?对目标函数的访问次数是有限制的,谁的结果更好,谁就是 "应付不了"))。我们应该增加允许的访问次数吗?那么,无论如何,更敏捷、更能适应复杂函数的人都会到达终点。尝试增加引用次数,情况不会改变。
2.是的,有些人是 0.3,有些人是 0.2,有些人是 0.001。
3.这没有用,直观地说,已经有数百种组合和变化被尝试和重新尝试过了。在给定的迭代次数(epochs)下,能显示出更好结果的就是更好的。增加对目标的引用次数,看看哪种方法最先到达终点。
4.如果在困难任务中存在领先者,那么您认为在简单任务中领先者的结果会比局外人差吗?毫不夸张地说,事实并非如此。我正在进行一项更 "简单 "但更现实的网格培训任务。我会一如既往地与大家分享结果。这将会很有趣。
只要做实验,尝试不同的算法、不同的任务,不要拘泥于一件事。我已经尽力提供了这方面的所有工具。
1.什么叫 "失败"?对目标函数的访问次数是有限制的,谁的结果最好,谁就是失败者))。我们应该增加允许的访问次数吗?那么,无论如何,更敏捷、更能适应复杂函数的人都会到达终点。试着增加引用次数吧,情况不会改变。
2.是的,有些人是 0.3,有些人是 0.2,有些人是 0.001。
3.这没有用,直观地说,已经有数百种组合和变化被尝试和重新尝试过了。在给定的迭代次数(epochs)下,能显示出更好结果的就是更好的。增加对目标的引用次数,看看哪种方法最先到达终点。
4.如果在困难任务中存在领先者,那么您认为在简单任务中领先者的结果会比局外人差吗?毫不夸张地说,事实并非如此。我正在进行一项更 "简单 "但更现实的网格培训任务。我会一如既往地与大家分享结果。这将会很有趣。
只要做实验,尝试不同的算法、不同的任务,不要专注于一件事。我已尝试提供所有相关工具。
我正在做实验、
关于现实任务,在接近实战的任务中测试算法是正确的。
看看遗传网络是如何训练的,会让人倍感兴趣。
新文章 原子轨道搜索(AOS)算法:改进与拓展已发布:
在本文的第二部分,我们将专注于改进AOS算法,因为面对这样一个先进的理念,我们不得不尝试对其进行改进。我们将分析改进该算法的概念,特别关注该方法所特有的特定算子,这些算子可以提高其效率和适应性。
对AOS算法的研究让我对其搜索解空间的方法产生了许多有趣的思考。在研究过程中,我也想出了许多关于如何改进这个有趣算法的理念。特别是,我专注于改进现有的方法,这些方法可以通过提高其探索复杂解空间的能力来提升算法的性能。我们将探讨如何将这些改进整合到AOS算法的现有结构中,使其成为解决优化问题的更强大的工具。因此,我们的目标不仅是分析现有机制,还要提出其他能够显著扩展AOS算法能力的方法。
作者:Andrey Dik