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

机器算法验证 机器学习 支持向量机 优化
2022-01-26 16:31:16

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

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

在此处输入图像描述

一切看起来都很好,但就是这样argminx在里面zk+1更新....那么解决问题的算法是什么argmin? 我们不知道,它也没有说。如此神奇的是,我们要解决另一个优化问题,即找到最小化向量,使内积最小——这怎么做?

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

在此处输入图像描述

一切看起来都很好,直到你在算法中间找到那个最接近的算子,那个算子的定义是什么?

繁荣:在此处输入图像描述

现在祈祷告诉我们如何解决这个问题argminx在近端算子?它没有说。无论如何,该优化问题看起来很难(NP HARD),具体取决于f是。

有人可以告诉我:

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

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

  1. 您如何解决嵌入在这些算法中的这些优化问题?例如,xk+1=argminxreally complicated loss function,如何找到右侧的最小化器?

  2. 最终,我对如何在数值上实现这些算法感到困惑。我认识到在 python 中添加和相乘向量是简单的操作,但是呢?argminx,是否有一些函数(脚本)可以神奇地为您提供函数的最小化?

(赏金:任何人都可以参考一篇论文,其中作者明确了高级优化算法中嵌入的子问题的算法吗?)

4个回答

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

一般的想法是优化算法可能需要解决一系列通常更容易的优化问题。在顶级算法中拥有 3 级甚至 4 级优化算法的情况并不少见,尽管其中一些是标准优化器内部的。

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

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

这是一个例子。顺序二次规划 (SQP)。通过迭代求解 Karush-Kuhn-Tucker 最优性条件来处理初始优化问题,从初始点开始,目标是问题的拉格朗日的二次近似和约束的线性化。求解得到的二次规划 (QP)。求解的 QP 要么具有信任域约束,要么从当前迭代到 QP 的解进行线搜索,这本身就是一个优化问题,以便找到下一个迭代。如果使用拟牛顿法,则必须解决优化问题以确定拉格朗日的 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 子问题。

我喜欢马克的回答,但我会提到“模拟退火”,它基本上可以在任何优化算法之上运行。在高层次上它是这样工作的:

它有一个“温度”参数,开始很热。虽然很热,但它经常远离并且(并且更远离)从属优化算法指向的位置。当它冷却时,它会更密切地遵循从属算法的建议,并且在零时它会遵循它,直到它最终达到的任何局部最优值。

直觉是,它会在开始时广泛搜索空间,寻找“更好的地方”来寻找最佳位置。

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

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

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

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

例如,现在我只讨论第二种算法,每当你看到一个近端算子(正如你所指出的,它是另一个确实很难解决的优化问题)通常暗示它有一个封闭形式的解决方案以使算法有效。对于机器学习中的许多感兴趣的函数,例如 l1 范数、组范数等,情况都是如此。在这些情况下,您将替换近端算子的显式公式的子问题,并且不需要算法来解决该问题。

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

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

这种划分不仅使算法具有通用性,而且更易于分析:只要存在具有这种性质的子问题的算法,那么所提出的算法就会具有这种收敛速度或其他什么。