1.1 什么是凸集?
簡單來說, 凸集是一個點集, 這個點集有一個性質, 就是在這個集合中任取不同的兩個點x和y, 他們之間的線段(包括端點)上的點都屬於這個點集,那么就說這個點集是一個凸集。
比如下圖中左邊的圖形是凸集,而右邊不是,因為我們可以找到兩個點,使它們之間的線段上的點不在集合中

數學上,凸集的定義如下:
給定集合$C$,$\forall x,y\in C$,$0\leq\theta\leq 1$,如果有
$$ \theta x + (1-\theta y)\in C$$
我們就稱集合C是凸集,我們把點$\theta x + (1-\theta y)$稱為x和y的凸組合。
1.2 什么是凸函數?
假設有一個函數$f:\mathbb{R}^n\to \mathbb{R}$,記其定義域為$\mathcal{D}(f)$,如果$\mathcal{D}(f)$是凸集,且在其中任取兩個點$x,y$,滿足以下性質:
$$ f(\theta x + (1-\theta y))\leq \theta f(x)+(1-\theta)f(y) $$
那么就稱$f$為凸函數。
注意:定義域是凸集這個要求不是必須的,其出發點只是為了使x,y的凸組合有定義
關於凸函數,直觀上可以用下圖來加深理解:

簡單來說,我們在定義域任取兩個點x,y, 連接他們得到一條線段,如果這個線段上的點都位於對應函數值上方,我們就說該函數是一個凸函數。
更進一步,如果$x\neq y$且$0<\theta <1$我們稱$f$是嚴格凸的。如果$-f$是凸函數,那么$f$就是凹函數。如果$-f$是嚴格凸函數,那么$f$就是嚴格凹函數。
1.3 凸函數的等價判別方法
上面我們講了什么是凸函數,然而這個定義在現實中很難用於判斷一個函數是不是凸的,因此介紹幾個等價的定義。
1.3.1 一階近似
假設函數$f:\mathbb{R}^n\to \mathbb{R}$是可導函數(也就是說$f(x)$的梯度$\nabla_x f(x)$在整個定義域上都存在),則$f$是凸函數當且僅當 其定義域是凸集,且對於所有的$x,y\in\mathcal{D}(f)$有下式成立:
$$ f(y)\geq f(x)+\nabla_x f(x)^T(y-x) $$
我們將$f(x)+\nabla_x f(x)^T(y-x)$叫做對f的一階近似,其物理意義實際上是經過點x的切平面,我們用這個切平面上的點來近似$f(y)$。這個公式的含義是:如果f是凸函數,那么它的一階近似值始終位於函數值的下方。

1.3.2 二階近似
假設函數$f:\mathbb{R}^n\to \mathbb{R}$二階可導(即海塞矩陣在定義域上都有定義),則f是凸函數當且僅當 其定義域是凸集且其海塞矩陣半正定,即:
$$ \nabla^2_x f(x)\succeq 0$$
可能有些同學忘了海塞矩陣長什么樣了,這里提一下。假設我們的變量來自n維空間,即$x\in\mathbb{R}^n$,我們記$x=(x_1,x_2,...,x_n)=\{x_i\}_{i=1}^n$,即由n個變量組成的向量。那么海塞矩陣(記為H吧)是一個$n\times n$的方塊矩陣,且
$$ H_{ij}=\frac{\partial^2 f(x)}{\partial x_i\partial x_j} $$
也就是說,$H_{ij}$是f(x)分別對$x_i$和$x_j$進行求導兩次得到的。
1.4 凸優化問題
上面已經介紹了凸集和凸函數,是時候到凸優化了吧? 別急,在介紹凸優化概念之前再啰嗦兩句。
1.4.1 水平子集(sublevel sets)
由凸函數的概念出發,我們可以引出水平子集(sublevel set)的概念。假定f(x)是一個凸函數, 給定一個實數$\alpha\in\mathbb{R}$,我們把集合
$$ \{x\in\mathcal{D}(f)| f(x)\leq \alpha\}$$
叫做$\alpha-$水平子集。 也就是說$\alpha$水平子集是所有滿足$f(x)\leq \alpha$的點構成的集合。利用凸函數性質,我們可以證明水平子集也是凸集:
$$ f(\theta x+(1-\theta y))\leq \theta f(x)+(1-\theta)f(y) \leq \theta \alpha + (1-\theta) \alpha=\alpha $$
水平子集告訴我們,給凸函數添加一個上限,定義域內剩下的點構成的點集還是一個凸集。
1.4.2 仿射函數(affine functions)
數學上,我們把形如
$$ h(x)=Ax+b$$
的函數叫做仿射函數。其中,$A_{n\times m}$,一個向量$b\in\mathbb{R}^m$。直觀上理解,仿射函數將一個n維空間的向量通過線性變換A映射到m維空間,並在其基礎上加上向量b,進行了平移。
同理,我們可以證明,點集
$$ \{x\in\mathcal{D}(h)| h(x)= 0\}$$
是一個凸集,證明略。
1.4.3 凸優化(convex optimization)
那么回到凸優化問題上來, 什么是一個凸優化問題?
一個凸優化問題可以定義為:

其中f是一個凸函數,C是一個凸集。根據先前介紹過的水平子集等概念,上面問題又可以等價寫為:

其中,g(x)是凸函數,h(x)是仿射函數。 也就是說,原約束集C被我們表示為一系列凸集的交集(數學上可以證明,凸集的交集還是凸集)。
1.4.4 局部最優(local optima)和全局最優(global optima)
局部最優:周圍小范圍 內沒有比我小的點。
數學定義:
如果存在$R>0$,對於所有的z:$\left\|x-z\right\|_2<R$,有$f(x)\leq f(z)$,那么就稱x是一個局部最優點。
全局最優:我就是整個定義域中的最小的點。
數學定義:
如果對於定義域內的所有z,有$f(x)\leq f(z)$,則稱x是全局最優。
現在回到凸優化問題上, 對於凸優化問題,有一個很重要的結論:
對於凸函數來講, 局部最優就是全局最優。證明如下:
我們用反證法證明。設$x$是一個局部最優,但不是全局最優,於是我們假設全局最優是$z^*$,那么我們有$f(x)>f(z^*)$
由x的局部最優性質,我們有 :
存在$R>0$,對於所有的z:$\left\|x-z\right\|_2<R$,有$f(x)\leq f(z)$
我們考慮$x$和$z^*$的凸組合:$z=\theta x+(1-\theta)z^*$,無論$z^*$在哪里,我們總可以找到一個$\theta$,使得$z$位於$x$的鄰域內,使得$f(x)\leq f(z)$
另一方面,由凸函數性質,我們有:
$$ f(z)=f(\theta x+(1-\theta)z^*)\leq\theta f(x)+(1-\theta)f(z^*)<\theta f(x)+(1-\theta)f(x)=f(x)$$
由此得$f(z)<f(x)$,這與$f(x)\leq f(z)$矛盾, 於是我們證明了如果$x$是局部最優,那么同時它也是全局最優。
1.5 常見凸優化問題
- 線性規划
如果$f$和$g_i$都是仿射函數,則凸優化問題變為了線性規划問題:

- 二次規划
線性規划中,如果$f$變為一個凸二次函數,則凸優化問題變為二次規划:

- 二次約束二次規划
$f$和$g_i$都是凸二次函數

- 半定規划

其中,$X\in\mathbb{S}^n$是一個n維對稱方陣,並且我們將它約束為半正定矩陣。$C,A_i$都是對稱矩陣。這和前面的問題有點不太相同,前面是優化一個向量,而這里是優化一個矩陣。
參考:
http://cs229.stanford.edu/section/cs229-cvxopt.pdf
