为什么要根据其他优化问题来定义优化算法?


23

我正在对机器学习的优化技术进行一些研究,但是很惊讶地发现,根据其他优化问题定义了大量的优化算法。我在下面说明一些示例。

例如https://arxiv.org/pdf/1511.05133v1.pdf

在此处输入图片说明

一切看起来不错,不错,但接下来有一个在更新....所以什么是算法,为求解?我们不知道,也没有说。因此,神奇的是,我们要解决另一个优化问题,即找到最小化向量,以使内积最小化-如何做到这一点?z k + 1 argmin精氨酸Xzk+1argmin

再举一个例子:https : //arxiv.org/pdf/1609.05713v1.pdf

在此处输入图片说明

一切都很好,直到您在算法中间点击了最接近的运算符为止,该运算符的定义是什么?

繁荣:在此处输入图片说明

现在,请告诉我们,我们如何解决近端运算符中的问题?没有说 无论如何,取决于是什么,该优化问题看起来很难(NP HARD)。 fargminXF

有人可以启发我:

  1. 为什么要根据其他优化问题定义这么多优化算法?

(这不是鸡和蛋的问题吗?要解决问题1,您需要解决问题2,请使用解决问题3的方法,这依赖于解决问题....)

  1. 您如何解决这些算法中嵌入的优化问题?例如,,如何在右侧找到最小化器?Xķ+1个=精氨酸X真正复杂的损失函数

  2. 最终,我对如何以数字方式实现这些算法感到困惑。我认识到加和乘向量是python中的简单操作,但是,是否有一些函数(脚本)神奇地为您提供了函数的最小化器?精氨酸X

(赏金:有人能参考作者明确阐明高级优化算法中嵌入的子问题的算法的论文吗?)


可能是相关的。
GeoMatt22年

1
我觉得如果您强调子问题可能是NP硬度而不是仅仅强调现有的子问题,您的问题会更好。
Mehrdad'1

糟糕...“ NP硬度”应该在我的最后一条评论中说“ NP-hard”。
Mehrdad

请参阅赏金要求中对我的答案提供参考的“编辑2”。
马克·L·斯通

Answers:


27

您正在查看顶级算法流程图。流程图中的某些单独步骤可能需要使用自己的详细流程图。然而,在强调简洁的公开论文中,许多细节经常被省略。可能根本不提供被认为是“旧帽子”的标准内部优化问题的详细信息。

总体思路是,优化算法可能需要解决一系列通常更简单的优化问题。在顶级算法中包含3甚至4级优化算法的情况并不少见,尽管其中一些是标准优化器的内部功能。

即使决定何时终止算法(在层次结构级别之一),也可能需要解决边优化问题。例如,可以解决一个非负约束线性最小二乘问题,以确定用于评估KKT最优评分的拉格朗日乘数,该KKT最优评分用于决定何时宣布最优。

如果优化问题是随机的或动态的,则可能还有其他层次的优化级别。

这是一个例子。顺序二次规划(SQP)。通过迭代求解Karush-Kuhn-Tucker最优性条件来处理初始优化问题,该优化条件从初始点开始,目标是问题的拉格朗日方程的二次逼近以及约束的线性化。解决了生成的二次程序(QP)。解决的QP具有信任区域约束,或者从当前迭代到QP的解决方案进行行搜索,而QP本身就是一个优化问题,以便找到下一个迭代。如果使用的是拟牛顿法,则必须解决优化问题才能确定对Lagrangian的Hessian的拟牛顿更新-通常这是使用诸如BFGS或SR1等封闭形式公式的封闭形式优化,但这可能是数值优化。然后解决新的QP,等等。如果QP不可行(包括开始),则解决优化问题以找到可行的点。同时,在QP求解器内部可能会调用一两个级别的内部优化问题。在每次迭代结束时,可以解决一个非负线性最小二乘问题,以确定最优分数。等等。

如果这是一个混合整数问题,那么作为高级算法的一部分,可以在每个分支节点上执行整个shebang。类似地,对于全局优化器-局部优化问题用于在全局最优解上产生一个上限,然后放松一些约束以产生一个下界优化问题。为了解决一个混合整数或全局优化问题,可能会解决成千上万甚至来自分支和边界的“简单”优化问题。

这应该开始给您一个想法。

编辑:响应我在回答后添加到问题中的鸡肉和鸡蛋问题:如果存在鸡肉和鸡蛋问题,那么它不是一个定义明确的实用算法。在我给出的示例中,没有鸡肉和鸡蛋。更高级别的算法步骤将调用已定义或已经存在的优化求解器。SQP迭代地调用QP解算器来解决子问题,但是QP解算器比原始问题解决了更简单的问题QP。如果存在更高级别的全局优化算法,则可以调用SQP求解器来求解局部非线性优化子问题,然后SQP求解器又调用QP求解器来求解QP子问题。没有小鸡和鸡蛋。

注意:优化机会“无处不在”。与普通的Joe或Jane相比,优化专家(例如开发优化算法的专家)更有可能看到这些优化机会,并将其视为此类机会。由于对算法的偏爱,他们很自然地会发现在较低级别的优化算法之外构建优化算法的机会。优化问题的制定和解决方案可作为其他(高级)优化算法的基础。

编辑2:响应OP刚刚添加的赏金请求。描述SQP非线性优化器SNOPT的论文https://web.stanford.edu/group/SOL/reports/snopt.pdf特别提到了QP求解器SQOPT,该文件已单独记录,用于解决SNOPT中的QP子问题。


2

我喜欢Mark的答案,但尽管我会提到“模拟退火”,它基本上可以在任何优化算法的基础上运行。在较高的层次上,它的工作方式如下:

它具有一个开始变热的“温度”参数。在热的时候,它经常远离下级优化算法所指向的位置(并进一步远离)。冷却时,它会更严格地遵循从属算法的建议,而在零时,它将遵循其最终达到的任何局部最优值。

直觉是,它将在一开始就广泛搜索该空间,寻找“更好的地方”以寻找最佳位置。

我们知道,对于局部/全局最优问题还没有真正的通用解决方案。每种算法都有其盲点,但是在许多情况下,这种混合似乎可以提供更好的结果。


这类“元算法”有时被称为元启发法
GeoMatt22年

@ GeoMatt22这是我作为本科生提出的启发式证明或启发式论证的定义:“任何论点或缺乏论点,都不会严格反驳要证明的论点”。类似地,启发式算法是任何算法或缺乏算法,不能保证不能正确解决要解决的问题。
马克·L·斯通

像“ 停下来的时钟 ”启发式?这里描述的Neumaier(2004)分类法似乎是合理的。
GeoMatt22

+1,用于提及混合优化器或元启发式方法。与基于导数的优化器相比,它们在现实世界中表现良好,它们在理论和论文上都非常出色,但不擅长解决您在工程优化中经常遇到的现实世界中的多峰复杂目标函数。
预报者

@forecaster有多种方法,具体取决于问题。我会谨慎地过分低估“基于导数的优化器” ,因为在许多实际应用中,例如深度学习和基于PDE的优化,它们可能会非常成功。(在此进行一些讨论,包括无导数的选择。)
GeoMatt22年

2

我认为我在这里满足您的愿望。转到第4节-现代贝叶斯计算中的优化。

TL; DR-他们讨论了近端方法。这种方法的优点之一是拆分-您可以通过优化更简单的子问题来找到解决方案。在很多时候(或者至少有时是),您可能会在文献中发现一种专门的算法来评估特定的近端功能。在他们的示例中,他们进行图像去噪。其中一个步骤是Chambolle非常成功且被广泛引用的算法。


2

这在许多优化论文中非常普遍,并且与普遍性有关。作者通常以这种方式编写算法,以表明它们在技术上适用于任何函数f。但是,实际上,它们仅对可以有效解决这些子问题的非常特定的功能有用。

例如,现在我只在谈论第二种算法,每当您看到近端运算符(正如您所指出的,它是另一个确实很难解决的优化问题)时,通常都隐含着它在为了使算法高效。对于机器学习中感兴趣的许多功能(例如,l1-范数,组范数等),情况就是如此。在这些情况下,您可以将子问题替换为近端算子的显式公式,并且不需要算法来解决该问题。

至于为什么以这种方式编写它们,只需注意,如果您要提出另一个函数并想应用该算法,则首先要检查近端是否具有封闭形式的解或可以有效地计算。在这种情况下,您只需将公式插入算法中就可以了。如前所述,这保证了算法足够通用,可以应用于算法首次发布后可能出现的未来函数,以及它们的有效算法的近端表达式。

最后,以经典的FISTA算法原始论文为例。他们为两个非常特定的函数推导算法,即平方损失和l1范数。但是,他们指出,只要满足某些先决条件,就不能应用任何功能,其中之一是可以有效地计算正则化的近端。这不是理论要求,而是实际要求。

这种对等化不仅使该算法具有通用性,而且易于分析:只要存在具有该属性的子问题的算法,那么所提出的算法将具有该收敛速度或类似的收敛速度。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.