凸优化,或叫做凸最优化,凸最小化,是数学最优化的一个子领域,研究定义于凸集中的凸函数最小化的问题。凸优化在某种意义上说较一般情形的数学最优化问题要简单,譬如在凸优化中局部最优值必定是全局最优值。凸函数的凸性使得凸分析中的有力工具在最优化问题中得以应用,如次导数等。凸优化应用于很多学科领域,诸如自动控制系统,信号处理,通讯和网络,电子电路设计,数据分析和建模,统计学(最优化设计),以及金融。在近来运算能力提高和最优化理论发展的背景下,一般的凸优化已经接近简单的线性规划一样直捷易行。许多最优化问题都可以转化成凸优化(凸最小化)问题,例如求凹函数 最大值的问题就等同于求凸函数 最小值的问题。[1]下面的这些理论证明等主要来自于NESTEROV的书[2]。
凸优化和机器学习
假设我们有两个空间,样本空间 ,标签空间 ,还有一个参数空间 包括了从样本到标签的映射,引入它们之间的Loss Function ,如果已经知道这些样本和标签 的分布 ,
经验风险最小
学习的目标就是求解一个最优化问题:
常规的做法就是使得经验风险最小,也就是把训练样本全部跑一遍,然后使得通过我们的误差函数累计计算出来的值最小。
当标签是离散值的时候看作是分类任务,当标签是连续值的时候看作是回归任务。
一般情况下,求解这种任务是 NP 难的问题,所以引入另一种替代的办法,用Hinge Loss表示误差,这样也就使得其有了梯度,而且这种代价函数和原来的代价函数是等价的。引入松弛变量构造一个带约束的最优化函数。
最后一项 是用于约束回归参数的复杂度,用于防止过拟合。一般用拉格朗日乘子法可以对原来约束条件下的方程进行改写得到:
还有几种常用的损失函数:
- Square loss:
- Logistic loss:
- Cross entropy loss: 其中
极大似然视角下
极大似然估计法下,一个似然函数的估计可以通过下面的公式得到。
极大后验视角下
如果将其中的极大似然估计替换成极大后验估计,可以改写成下面这样的形式。
问题泛化
令 是一个 维实向量:
是 一个子集,且 是 的一些实值函数,一般的约束问题都写成下面的形式:
以上的 是我们的目标(objective)函数,而考虑最小化问题只是一种分析习惯,其他形式的优化也可以改写成这种形式,向量函数
称为函数约束(functional constraints)向量,集合 称为基本可行集(basic feasible set),并且集合
称为问题的可行集(basic set)。如果 则说明这是一个可行的问题,如果存在,对于所有不等式约束都满足 则称为严格可行的(strictly feasible)。
问题的自然分类
- 有约束问题(constrained problems):。
- 无约束问题(unconstrained problems):。
- 光滑问题(smooth problems):所有的 是可微的。
- 非光滑问题(nonsmooth problems):存在不可微的分量。
对于线性约束问题(linearly constrained problems):所有泛函数约束都是线性的。线性约束问题可以继续分为:
- 线性优化问题:如果 也是线性的,那么这个最小化问题就是一个线性优化问题。
- 二次优化问题:如果 是二次的,那么这就是一个二次优化问题
- 二次约束的二次问题:如果所有的 是二次的,那么这就是一个二次约束的二次问题(quadratically constrained quadratic problem)。
解的定义
这种最优化问题中一般会存在多种解:
-
是全局解(global solution),如果对于所有的 , 有
在这种情况下, 称为问题的(全局)最优值(optimal value)。 -
如果只是在一个局部,有
则称之为局部解。
非线性优化式非常重要和有前途的应用理论。它覆盖了几乎所有的运筹学和数值分析的需求(包括现在大量的机器学习内容)虽然总体上看,优化问题是无解的。
数值方法的性能
特定的问题因为它本身可能存在个各种特别的性质,某些方法可以有非常独特的求解性能。所以要对一类问题()来讨论某些方法的性能,在这类问题中都存在相似的特点,而某种数值方法会对这些方法都有一定的性能。
因此,一个方法 在整个类 上的性能(performance)是它的效率的一个自然特性。
符号约定
- 模型:问题 的一个已知(known)的“部分”,称为问题的模型 (model)。我们用 来表示模型。通常,模型包含了问题形式,泛函分量的类型描述,等等。
- Oracle:为了识别问题 (并且求解它),方法应该能够搜集关于 的特定的信息。为了方便,搜集数据的过程被描述为一个 oracle。一个 oracle 就是一个单位,它回答方法连续的询问。方法 试图通过搜集和处理回答,来求解问题 。
- 求解一个问题所需要的努力程度(computational efforts)的总量是一个方法 的性能。
- 逼近解:求解一个问题要找到一个准确度为 的逼近解。
常规求解流程
给定初始点 和准确度 和初始化:,初始的信息。
- 在 调用oracle 。
- 更新信息集:。
- 对 运用方法 的规则,形成点
- 检查停止条件 。如果满足条件,则形成输出 。否则设置 循环步骤。
真正对于求解问题起作用的是步骤1和环步骤3,这两个步骤也是计算代价集中的地方,我们对这些步骤进行更加具体的分析,有
- 解析复杂性(analytical complexity):求解问题 ,达到准确率 所需要调用的orcal的数量。
- 算术复杂性(arithmetical complexity):求解问题 ,达到准确率 ,所需要的算术操作的总数量(包括Oracle方法的工作)。
Oracle
一般用局部黑盒概念(local black box concept)假设oracle能让我们得到优化问题解析复杂度的大部分结果,而距离测试点 (或者叫当前的采样点)很远的小问题变化不会影响在 的回答。
继续沿用上面最小化问题的问题表述形式,针对这样一种泛化模型(functional model)假定根据函数的光滑性程度,可以使用不同类型的oracle:
- 零阶oracle(zero-order oracle):
返回 的值。 - 一阶oracle(first-order oracle):
返回 和梯度 的值。 - 二阶oracle(second-order oracle):
返回 ,梯度 ,和Hessian 的值。
全局优化中复杂度的界
Lipschitz连续
- Lipschitz continuous: 函数被一次函数上下夹逼
- Lipschitz continuous gradient :函数被二次函数上下夹逼
- Lipschitz continuous Hessian :函数被三次函数上下夹逼
其中, 是某个Lipschitz常量(Lipschitz constant)
范数 测量 中的距离:
上界分析
根据Lipschitz连续我们可以构造一种零阶的求解方法(它的另一个名字应该是暴力枚举在一定精度下的全部可行解)。在每个维度上都把坐标平均间隔成 个点,然后在所有点中找到 ,使得目标函数具有最小的值。如果令 是问题的全局最优值。其中点构造为
那么
证明:给定一个多维索引 ,定义这个点步长以内的领域范围
很明显这些坐标的全部集合就是函数的可行域:,如果这个函数存在一个全局最优解,则在网格离散的点上一定有一个索引值 索引的网格点 的连续邻域内存在最优解(就是这个最优解在它的框框内) 满足,因此有,
把这个问题推广到一系列的问题就有:
也就有如果要得到精度在 以内的解,这个方法的复杂度就在
所以令 也就有 也就需要调用 次oracle,这是这个方法的复杂度上界。
实际上这还不够,也许在这种问题形式下还有更好的方法,或者实际上方法 的性能更好,所以再进一步分析求解这种问题的下界,下面的分析基于一些特点:
- 它们基于黑盒(black box)的概念。
- 这些界对于所有合理的迭代方案都有效,因此,它们给我们提供的是对于这个问题类的解析复杂度的下估计(lower estimate)。
- 这些界都用了抵抗 oracle(resisting oracle)的思想。
- 对于每个特定方法(for example,,一个抵抗oracle试图创建一个最坏(worst)问题:
- 它从一个“空”的函数开始,并且试图用最坏可能的方式回答这个方法的每一个调用。
- 这个回答必须和前面的回答以及问题类的描述兼容(compatible)
- 对于每个特定方法(for example,,一个抵抗oracle试图创建一个最坏(worst)问题:
下界分析
首先定义下面这样的问题,有模型 且 在 上是 连续的。用于收集信息的 Oracle是一个零阶黑盒。目标是为了寻找一个逼近解 。根据我们的分析要取得 的精度,问题 的解析复杂度至少为 。
我们假设有一种方法可以使得 以内把问题 解决掉,然后再弄一个Oracle,它在任意测试点都返回 ,然而因为有 所以还会存在一个多维索引 使得在箱子 内不存在测试点。写成数学形式如下
构造出来的这个函数是满足常数 的 -Lipschitz 连续。它的全局最有解为 这样,如果搜索的量小于 那结果肯定不可能超过 这是根据比较一般的形式构造出的满足条件的最好的情况了,如果连这个都不能达到,那在最普遍情况下也就达不到更好的结果了。
所以我们可以确定在使用暴力的网格法求解的下界:
可以看到这种问题几乎是时间上不可解的,而且推导出的下界也未必比上界更好一些。把这结果和那种NP-难问题的上界进行比较,是组合优化中经典的困难问题,真是让人失望。而像这种网格法在数值计算中还是满常见的,比如数值积分[3]。
松弛和逼近
非线性优化中,简单的目标是找到可微函数的局部最小值。但是很多情况下这些函数的全局结构不会比 Lipschitz 连续函数更简单。所以目前大部分的一般非线性优化的方法基于松弛(relaxation)思想:
- 一个序列 如果 它是一个松弛序列(relaxation sequence)
- 逼近意味着一个简化的目标函数替换初始的目标函数,在属性上简化函数和原函数的距离非常接近
在非线性优化中常用非线性函数的导数来使用局部(local)逼近。这些就是一阶和二阶逼近(或者也叫线性和平方逼近)。
一阶逼近
如果 在 是可微的,那么对于 ,我们有
线性函数 称为 在 的线性逼近(linear approximation),其中 表示内积。
将函数 的次层集(sublevel set)记作 (也可以看作是等高线以下内容):
考虑在 上和 相切方向集合:
如果 ,我们有
因为 所以等号两边同时除以 然后让 我们就得到:
其实就是表示 中的方向,。
最后得到
通过 Cauchy-Schwarz 不等式,
推出 继续再让
带入原来的方程中得到
所以,反梯度方向 是最快的下降方向。
一阶优化条件
令 是一个可微函数 的局部最小点。那么 ,而且它周围点 上的函数值都应该比最优点上面的函数值大 ,而且 可微
因此对于所有的 ,我们有 如果取 则有 当且仅当
但是这仅仅是一个最小值的必要条件,满足这个条件的可能只是个 的静点,所以还需要二阶的信息。
二阶逼近
令函数 在 上是二次可微的,那么
定义函数 在 的 Hessian(对称矩阵)
对于对称矩阵 表示 是正半定的(positive semidefine):
如果这个点是一个局部最小点,那么它的二阶导应该至少有大于0的分量
对于所有的 ,,有 。
如果满足以上的条件,则必要性得以满足,那么 是 的一个严格的局部最小点,有时候也用隔离(isolated)这个词来代替严格(strict)。
为最优值点的充分性证明:在点 的一个很小邻域内,函数 可以表达成
因为 当 ,存在一个值 使得所有的 有
根据我们的假设,这个特征值是正的,所以,对于任意 , 我们有
根据变分不等式,对于对称矩阵 有
所以有
可微函数的类
Lipschitz 条件
令 是一个 的子集,我们记 为具有下面属性的函数类:
- 任意 在 上是 k 次连续可微的。
- 它的第 次导数在 上是 Lipschitz 连续的,有常量 对于所有的
显然,我们总是会有
- 显然成立
- 如果 那么
- 同时,如果 , 且 对于
有
Lipschitz Continuous Gradient
考虑具有 Lipschitz 连续梯度的函数类,根据定义这个 有对于所有的
一个函数 属于 当且仅当对于所有的 下面条件满足
证明:实际上对于任何的 有
如果条件 成立的话有
另外,如果 ,那么对于任意的 和 有
证明:
我们令 ,不等式两边同时除以 ,取 有
因为 ,有 ,所以得证。
几何解释
如果 那么对于任意的 有
和其一阶逼近的距离的上界,因为确定了这个上界之后可以将优化复杂的函数 等价成为优化它的上界[4],转化为二次规划问题[5]。
证明如下
所以
如果 ,是一个二阶可微符合 Lipschitz 连续 Hessian 的函数类型,我们有
则对于任意 ,做一次积分,再做一次积分
证明
因此
令 并且 with 可以有
证明
我们令 是一个矩阵,因为 ,所以它肯定会被限制在这个界限内 这意味着矩阵中每个特征值都在这个界限内。
所以我们有
-
NESTEROV J E. Lectures on convex optimization[M]. 2018. ↩
网友评论