一、什么是凸优化
维基百科提到:凸函数最优化,或叫做凸最优化,凸最小化,是数学最优化的一个子领域,研究定义于凸集中的凸函数最小化的问题。凸最佳化在某种意义上说一般情形的数学最佳化问题,比如在凸最佳化中局部最佳值必定是全局最佳值。凸函数的凸性使得凸分析中的有力工具在最佳化问题中得以使用,如次导数等。
注意到:凸优化是研究定义于凸集中凸函数最小化的问题
需要注意的是: 这里讲到的凸函数最小化,凸函数指的是(convex function)国内同济版教材和国外定义是相反的。
1.1 凸函数定义
下图就是一个凸函数:
1.2 凸集定义
在点集拓扑学与欧几里得空间中,凸集(Convex set)是一个点集合,其中每两点之间的线段点都落在该点集合中。
简而言之:集合内任意两点链接的线段还在集合内就是凸集
具体常见的凸集和数学定义参考常见凸集与定义
二、凸优化问题
一般优化问题的形式为:
其中要求目标函数和约束函数
f
0
(
x
)
,
f
1
(
x
)
,
f
2
(
x
)
,
.
.
.
,
f
m
(
x
)
,
f_0(x),f_1(x),f_2(x),...,f_m(x),
f0(x),f1(x),f2(x),...,fm(x),均为凸函数。需要注意这里还要求等式约束均为仿射函数,这是因为我们希望定义域是凸集
仿射函数:由1阶多项式构成的函数
在这里可能会思考一个问题?当我们的目标函数不是凸函数而是凹函数应该怎么办?其实很好解决我们只需在凹函数前添加一个负号,这个问题就又成了凸函数了?求结果的时候取反就行。
另外 m i n f ( x ) , f ( x ) 为 凸 函 数 是 等 价 于 m a x f ( x ) , f ( x ) 为 凹 函 数 的 。 min f(x),f(x)为凸函数是等价于max f(x),f(x)为凹函数的。 minf(x),f(x)为凸函数是等价于maxf(x),f(x)为凹函数的。
这样的问题都是凸优化问题。
三、凸优化问题求解
当一个目标问题被证明成是凸优化问题时,那么这个问题已经基本可以被求解了。
无约束:Gradient Descent、Newton Method
带约束:KKT、内点法
详解:凸优化求解方法
四、KKT条件
Karush-Kuhn-Tucker (KKT)条件是非线性规划(nonlinear programming)最佳解的必要条件。KKT条件将Lagrange乘数法(Lagrange multipliers)所处理涉及等式的约束优化问题推广至不等式。在实际应用上,KKT条件(方程组)一般不存在代数解,许多优化算法可供数值计算选用。
考虑一般形式的优化问题:
注: 需要注意的这里我们并没有假设
f
(
x
)
和
g
j
(
x
)
f(x)和g_j(x)
f(x)和gj(x)是凸函数,对于这样的问题,我们可以将原问题转化为它的对偶问题,因为对偶问题一定是凸问题,如果它满足强对偶性,那么最优解一定满足KKT条件。
那么,如何转化为对偶问题?由应该如何求解?
这里推荐一个up主讲的非常好的视频:如何直观理解KKT条件,Slater条件、凸优化
[图片来源于上述视频,侵删]
另外,当我们的原问题就是一个凸问题的话,一般情况下这样的问题基本是强对偶的。强对偶问题一定满足KKT条件。
有了KKT条件,那么这个问题解起来就很轻松了。
有兴趣的话可以解一个简单的例子:使用KKT条件求解最优化问题示例