凸优化问题的说明
文章目录
在说明什么是凸优化问题前,我们先来看下面的曲线图:
左右两条曲线哪一个只有唯一的极小值点?很明显是左图。
那下面的两个二维曲面图呢?
同样也是左图。
为什么要举上面的例子?就是要引出凸优化的本质:只有唯一的极值点。
凸优化的凸一般说的是下凸。
这有什么好处呢?现在的优化算法都是在找极值点,如果极值点唯一,那么这个问题通过梯度下降法就一定能够找到最优点。
接下来要介绍的是,优化问题的定义以及怎么判定一个优化问题是凸优化问题。
优化问题的定义
优化问题的数学表达式如下:
min x f ( x ) s . t . h i ( x ) = 0 , i = 1 , 2 , ⋯ , N g j ( x ) ≤ 0 , j = 1 , 2 , ⋯ , M \begin{aligned} & \min_{\mathbf{x}} f(\mathbf{x}) \\ s.t. \quad h_i(\mathbf{x}) &= 0, \space i=1,2,\cdots,N \\ g_j(\mathbf{x}) &\le 0, \space j=1,2,\cdots,M \\ \end{aligned} s.t.hi(x)gj(x)xminf(x)=0, i=1,2,⋯,N≤0, j=1,2,⋯,M
其中, f ( x ) f(\mathbf{x}) f(x)是目标函数, h i ( x ) , i = 1 , 2 , ⋯ , N h_i(\mathbf{x}), i=1,2,\cdots,N hi(x),i=1,2,⋯,N是等式约束函数, g j ( x ) , j = 1 , 2 , ⋯ , M g_j(\mathbf{x}), j=1, 2, \cdots, M gj(x),j=1,2,⋯,M是不等式约束函数。
在说明凸优化问题的判别方法前,需要先了解一下凸集和凸函数的概念。
基本概念
凸集
几何上的直观解释:在欧式空间中,对于一个集合中的任意两点,它们连线上的任意一点都还在这个集合中,那么这个集合就是凸集。
例子:下面都是二维坐标下的集合,集合的边缘如果有加粗就表示集合包括边界点,没有加粗就是不包括边界点。
根据定义,第一个是凸集,第二个不是凸集,因为集合中的两个点(黑点)连线的一部分不在集合内,第三个也不是凸集,因为边界上的两个点连线的一部分不在集合内。
凸函数
一维情况下,凸函数几何上的一个直观例子就是:
具体的特点是:凸函数的任意两点之间的函数值都在这两点连线之下。
凸优化问题的判别方法
满足凸优化问题需要两个条件:目标函数是凸函数,它的可行域(约束条件规定的定义域)是凸集。
更具体来说,对于优化问题
min x f ( x ) s . t . h i ( x ) = 0 , i = 1 , 2 , ⋯ , N g j ( x ) ≤ 0 , j = 1 , 2 , ⋯ , M \begin{aligned}& \min_{\mathbf{x}} f(\mathbf{x}) \\s.t. \quad h_i(\mathbf{x}) &= 0, \space i=1,2,\cdots,N \\g_j(\mathbf{x}) &\le 0, \space j=1,2,\cdots,M \\\end{aligned} s.t.hi(x)gj(x)xminf(x)=0, i=1,2,⋯,N≤0, j=1,2,⋯,M
如果目标函数 f ( x ) f(\mathbf{x}) f(x)是凸函数,约束条件 { h i ( x ) = 0 g j ( x ) ≤ 0 , i = 1 , 2 , ⋯ , N \left\{ \begin{aligned} h_i(\mathbf{x})=0 \\ g_j(\mathbf{x}) \le 0 \end{aligned}, i=1,2,\cdots,N\right. {
hi(x)=0gj(x)≤0,i=1,2,⋯,N决定的可行集是凸集,则该优化问题就是凸优化问题。
为什么要符合这两个条件呢?我们举一些反例来说明。
情况1:可行域是凸集,函数不是凸函数。
这个比较好理解,一个简单的例子如下图:
上图中可行域是整个实数集,显然是凸集,但目标函数不是凸函数,有两个局部最小值,无法保证极值点唯一。
情况2:可行域不是凸集,函数是凸函数。
上图中目标函数是凸函数,但可行域不是凸集,中间有断裂,从曲线的左边出发和从曲线的右边出发(梯度下降法需要选择初始点),会得到不一样的最小值,因此不能保证最小值的唯一性。
讨论至此,我们面对的问题是:
如何判定目标函数 f ( x ) f(\mathbf{x}) f(x)是凸函数,约束条件 { h i ( x ) = 0 g j ( x ) ≤ 0 , i = 1 , 2 , ⋯ , N \left\{ \begin{aligned} h_i(\mathbf{x})=0 \\ g_j(\mathbf{x}) \le 0 \end{aligned}, i=1,2,\cdots,N\right. { hi(x)=0gj(x)≤0,i=1,2,⋯,N决定的可行集是凸集?
下面先来了解凸集和凸函数的数学判别方法。
凸集的数学判别方法
凸集的数学定义
先来看凸集的数学定义:
对于任意 x 1 , x 2 ∈ C \mathbf{x}_1,\mathbf{x}_2 \in C x1,x2∈C和任意 θ ∈ [ 0 , 1 ] \theta \in [0,1] θ∈[0,1],如果有
θ x 1 + ( 1 − θ ) x 2 ∈ C \theta \mathbf{x}_1 + (1 - \theta) \mathbf{x}_2 \in C θx1+(1−θ)x2∈C
那么,集合 C C C是凸集。
x 1 , x 2 \mathbf{x}_1,\mathbf{x}_2 x1,x2都使用粗体,表示它们是多维向量,文档后面如果出现同样情况也是一样的意思。
对于凸集的判别直接使用上面的定义,下面举例说明。
凸集证明例子
例1:直线是凸集吗?
根据凸集在几何上的直观解释:集合中的任意两点,它们连线上的任意一点都在这个集合中。感觉直线是凸集,但我们需要数学的严谨证明。
w 1 x + w 2 y + b = 0 w_1 x + w_2 y + b = 0 w1x+w2y+b=0是二维坐标系 ( x , y ) (x,y) (x,y)中的一条直线,其中 w 1 , w 2 w_1,w_2 w1,w2是系数, b b b是截距,在 w 1 x + w 2 y + b = 0 w_1 x + w_2 y + b = 0 w1x+w2y+b=0上的点 ( x , y ) (x,y) (x,y)的集合是不是凸集?
是凸集。证明过程如下:
设定集合 C = { ( x , y ) ∣ w 1 x + w 2 y + b = 0 } C = \{ (x,y)|w_1 x + w_2 y + b = 0 \} C={
(x,y)∣w1x+w2y+b=0},对属于 C C C的任意两点 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1,y1),(x2,y2),有
{ w 1 x 1 + w 2 y 1 + b = 0 w 1 x 2 + w 2 y 2 + b = 0 \left\{ \begin{aligned} w_1 x_1 + w_2 y_1 + b = 0 \\ w_1 x_2 + w_2 y_2 + b = 0 \end{aligned} \right. {
w1x1+w2y1+b=0w1x2+w2y2+b=0
对任意 θ ∈ [ 0 , 1 ] \theta \in [0,1] θ∈[0,1],有
{ θ ( w 1 x 1 + w 2 y 1 + b ) = 0 ( 1 − θ ) ( w 1 x 2 + w 2 y 2 + b ) = 0 ⟹ 两 式 相 加 w 1 [ θ x 1 + ( 1 − θ ) x 2 ] + w 2 [ θ y 1 + ( 1 − θ ) y 2 ] + b = 0 \begin{aligned} &\left\{ \begin{aligned} \theta (w_1 x_1 + w_2 y_1 + b) &= 0 \\ (1-\theta) (w_1 x_2 + w_2 y_2 + b) &= 0 \end{aligned} \right. \\ \stackrel{两式相加}{\Longrightarrow}& \space w_1 [ \theta x_1 + (1-\theta) x_2 ] + w_2 [ \theta y_1 + (1-\theta) y_2 ] + b = 0 \end{aligned} ⟹两式相加{
θ(w1x1+w2y1+b)(1−θ)(w1x2+w2y2+b)=0=0 w1[θx1+(1−θ)x2]+w2[θy1+(1−θ)y2]+b=0
所以 ( θ x 1 + ( 1 − θ ) x 2 , θ y 1 + ( 1 − θ ) y 2 ) (\theta x_1 + (1-\theta) x_2, \theta y_1 + (1-\theta) y_2) (θx1+(1−θ)x2,θy1+(1−θ)y2)也在直线 w 1 x + w 2 y + b = 0 w_1 x + w_2 y + b = 0 w1x+w2y+b=0上,属于集合 C C C。
因此,集合 C = { ( x , y ) ∣ w 1 x + w 2 y + b = 0 } C = \{ (x,y)|w_1 x + w_2 y + b = 0 \} C={ (x,y)∣w1x+w2y+b=0}是凸集,即直线是凸集。
超平面是凸集吗?答案是肯定的,具体证明如下。
假定 w , x \mathbf{w},\mathbf{x} w,x是n维向量, b b b是标量,那么 w T x + b = 0 \mathbf{w}^T \mathbf{x} + b = 0 wTx+b=0是n维空间中的超平面,证明在 w T x + b = 0 \mathbf{w}^T \mathbf{x} + b = 0 wTx+b=0上的点 x \mathbf{x} x的集合是凸集。
证明:设定集合 C = { x ∣ w T x + b = 0 } C = \{\mathbf{x}|\mathbf{w}^T \mathbf{x} + b = 0 \} C={ x∣wTx+b=0},对属于 C C C的任意两点 x 1 , x 2 \mathbf{x}_1, \mathbf{x}_2 x1,x2,有
{ w T x 1 + b = 0 w T x 2 + b = 0 \left\{ \begin{aligned} \mathbf{w}^T \mathbf{x}_1 + b = 0 \\ \mathbf{w}^T \mathbf{x}_2 + b = 0 \end{aligned} \right. { wTx1+b=0wTx2+b=0
对任意 θ ∈ [ 0 , 1 ] \theta \in [0,1] θ∈[0,1],有
{ θ ( w T x 1 + b ) = 0 ( 1 − θ ) ( w T x 2 + b ) = 0 ⟹ 两 式 相 加 w T [ θ x 1 + ( 1 − θ ) x 2 ] + b = 0 \begin{aligned} &\left\{ \begin{aligned} \theta (\mathbf{w}^T \mathbf{x}_1 + b) &= 0 \\ (1-\theta) (\mathbf{w}^T \mathbf{x}_2 + b) &= 0 \end{aligned} \right. \\ \stackrel{两式相加}{\Longrightarrow}& \space \mathbf{w}^T [ \theta \mathbf{x}_1 + (1-\theta) \mathbf{x}_2 ] + b = 0 \end{aligned} ⟹两式相加{ θ(wTx1+b)(1−θ)(wTx2<