凸优化
凸集
对于点集C,如果∀x,y∈C满足以x,y为端点的线段都落在C内,就称C为凸集。以x,y为端点的线段写成方程的形式是u=x+θ(y−x),θ∈[0,1]。因此“线段落在C内”这一条件可以写作“θx+(1−θ)y∈C,θ∈(0,1)”。通常把1−θ记作ˉθ,把θx+ˉθy称为x,y的凸组合。于是验证凸集只要验证两两点的凸组合都落在凸集内。
一般地,n个点的凸组合定义为θ1x1+⋯+θnxn,其中θi≥0,n∑i=1θi=1。如果x1,⋯,xn都在凸集C内,那么它们的凸组合也在C内(对n归纳,证明很容易)。
常见的凸集有:空集,Rn,超平面, 多面体,1-范数球,半正定矩阵集合等。证明它们是凸集只需验证它们两两的凸组合落在集合内。
保凸运算
凸集的交集依然是凸集:C=⋂i∈ICi,因为显然交集内任意两点的凸组合依然在凸集中,可见“交”是保凸运算。
对于向量x,x→Ax的变换称为线性变换,x→Ax+b的变换称为仿射变换。仿射变换是保凸运算。设仿射映射Ax+b为f(x),凸集C的像f(C)依然是凸集。反过来,如果某个仿射变换的像是凸集,其原像也是凸集:C′是凸集⇒f−1(C′)是凸集。
凸包
对于点集S,定义S的凸包conv(S)为包含S的最小凸集(最小指任何conv(S)的真子集都不是包含S的凸集,或任何包含S的凸集都包含conv(S))。下面证明,conv(S)恰好是S中所有任取m个点做凸组合得到的所有点集合,即conv(S)={m∑i=1θixi∣xi∈S,θi≥0,m∑i=1θi=1}。“包含S”与“凸集”是显然的,而任何一个满足“包含S的凸集”的集合C一定包含上式的右式,因此S就是最小的。
我们定义过线性独立是指若干向量的线性组合为0向量时所有的系数都为0。下面定义仿射独立的概念,n+1个点仿射独立当且仅当从中选取一个点并让剩余点与它做差后的n个向量线性独立。对于给定的m+1个仿射独立的点x0,⋯,xm,称它们构成的凸包conv{x0,⋯,xm}为这m+1个点的单纯形。
凸集上的投影
定义点x到点集C的距离为C中的点到x距离的下确界,即dist(C,x)=inf。下面我们证明,如果C是凸集并且是闭集,那么存在一个唯一的\hat{x}使得\|x-\hat{x}\|=\text{dist}(C,x)。这个\hat{x}就称为x在C上的投影,记为P_C(x)。
先证存在性。任取C中某个y,取S=C \cap \bar{B}(x,\|x-y\|),其中\bar{B}是以第一个参数为球心,第二个参数为半径的闭球。由于C \setminus S中的点到x的距离都要大过\|x-y\|,因此不可能小于\text{dist}(C,x),于是我们只需证明S中存在\|x-y\|关于y的最小值存在。因为这个最小值一旦存在就意味着它是C上的最小值,因此也就等于\text{dist}(C,x)。而闭集与闭集的交集依然是闭集,而闭球是有界集,因此S是有界闭集(紧集)。\|x-y\|关于y显然是连续函数。紧集上的连续函数存在最小值。证毕。
再证唯一性。假如有两个点处取到最小值,那么这两个点与x形成等腰三角形。因为C是凸集, 等腰三角形的底边都落在集合内。连接底边的中点与x,得到的线段必然小于腰。与最小值矛盾。(代数证明用向量的极化恒等式)
凸集上的投影有下面的性质:
如果C是凸集并且是闭集,那么\hat{x}=P_C(x)当且仅当\forall z \in C都有\lang x-\hat{x},z-\hat{x}\rang \leq 0。这在直观上是容易想象的,它指出由投影点指向x与凸集上另外一点的两条向量的夹角不可能是锐角,这恰好体现了“凸性”。(证明时为了方便我们可以引入参数t来描述线段这一性质)。
这个性质的一个推论是,对于两个点x,y,它们一定满足\|P_C(x)-P_C(y)\| \leq \|x-y\|。这称为凸集上投影的非扩张性,投影点间的距离相比于两点原来的距离不会变得更长。从几何上看,这四个点形成的类似四边形的形状的两个底角都不是锐角,因此底边的长度会更短。
我们还可以这样描述凸性:任取闭的凸集C外的一点x_0,我们都可以找到一个过x_0的超平面,使得C严格落在该超平面的一侧。这个性质用数学语言描述为,存在单位向量w使得\sup\limits_{x \in C}\lang x,w\rang < \lang x_0,w\rang,其中w就是超平面的法向量。容易发现,这要把w取在P_C(x_0)到x_0的方向上就好了。
现在考虑x_0落在边界上的情况。凸集具有这样的性质,任取它的一个边界点x_0,都存在一个过x_0的超平面使得凸集落在它的一侧(注意,这里我们没有要求C是闭集)。用数学语言描述,\forall x_0 \in \part C,\exists P=\{x \mid \lang w,x\rang=\lang w,x_0\rang\},使得\forall x\in C,\lang w,x\rang \leq \lang w,x_0\rang。这样的超平面称为支撑超平面。注意支撑超平面不一定是唯一的(例如,三角形是凸集,在它的一个角上就存在不只一条直线把它“支撑”起来)。为了证明这一点,我们先假设C是闭集。这样我们就可以用刚才的结论了。我们取一系列点逼近x_0,于是有一列满足不等式的w_i。由于w_i是单位向量,它的每一维都是有界的,于是我们可以找到一个w的收敛子列,这样我们就最终收敛到了一个w,并容易证明这就是我们要找的超平面。对于C不是闭集的情况,我们可以取它的闭包。唯一的问题是,闭包的边界点和原集合的边界点并不能等价。而事实上我们可以证明对于凸集,闭包的边界点就是原集合的边界点,证明略。
现在假设我们有两个不交的凸集C_1,C_2。下面我们要证明存在这样的超平面,使得C_1,C_2分别落在超平面的两侧。这样的超平面称为分离超平面。用数学描述,只要证明存在w使得\forall x_1\in C_1,x_2\in C_2,\lang w,x_1\rang \leq\lang w,x_2\rang恒成立。也即\lang w,x_1-x_2\rang \leq 0。把所有的x_1-x_2看作一个新的集合,容易发现这也是一个凸集。那么由于注意到0向量不落在集合内,我们通过刚才的结论就已经找到了我们要的超平面了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步