第 1 章 凸優化基礎
無論做任何事情,人們總是希望以最小的代價獲得最大的利益,力求最好! 為此,人們發明各式各樣的數學工具:導數,積分等。 現代優化理論大都來源於處理多元問題的理論,它有三個重要的基礎:
- 矩陣理論:矩陣是描述多元問題的最基本的工具,為多元問題分析和求解提供了基本的數據結構,同時為並行運算提供了理論支持。
- 數值分析:導數和微分為多元問題分析和求解提供了基本的數學方法和理論支持。
- 計算機與編程語言:為多元問題分析和求解提供了基本的實踐工具。
由此,一個最優化問題需要我們同時具備三種基本的能力:數學建模、公式推導、算法設計。
本章主要涉及到的知識點有:
- 最優化是數學描述:令我們從理論角度看待優化問題。
- 凸優化理論:列舉一些簡單的但又十分重要的理論。
- 計算復雜性:簡單的介紹了計算復雜度。
1.1 最優化的數學描述
一般的最優化問題都可以使用如下形式進行描述:
- \(x\) 被稱為決策變量或問題的解
- \(\text{s.t.}\) 為英文 subject to 的縮寫,表示受制於,即約束條件
- \(f(x)\) 稱為目標函數、損失函數或代價函數 (Cost Function)
- \(h(x)\) 為等式約束,\(g(x)\) 為不等式約束
除此之外,最優化問題中的無約束問題也可以描述為
其中 \(\arg\max\) 符號是指求解當函數 \(f(x)\) 達到最小值 (或最大值) 時 \(x\) 的取值。
根據目標函數與約束函數的不同形式,可以把最優化問題分為不同的類型:
- 若 \(f(x)\), \(h(x)\), \(g(x)\) 均為線性函數,就稱為線性規划
- 若任意其中一個是非線性函數,則就稱為非線性規划
- 若 \(f(x)\), \(h(x)\), \(g(x)\) 均為凸函數,就稱為凸優化
- 若目標函數為二次函數 (如二次型),約束全為線性函數,就稱為二次規划
- 若目標函數為向量函數,則稱為多目標規划
- 其他。
下面我們正式進行凸優化的知識海洋。僅僅是羅列一些數學課本中的重要理論,為理解機器學習算法提供了理論視角。
1.2 凸集與分離定理
設 \(A\) 是線性空間 \(X\) 中的子集,\(x, y \in X\),集合 \(\{\lambda x + (1- \lambda y: 0 \leq \lambda \leq 1\}\) 稱為聯結 \(x,y\) 兩點的線段,記作 \([x,y]\)。若對 \(\forall x,y \in A, [x,y] \in A\),則稱 \(A\) 為 \(X\) 中的凸集,而集 \(\{x = \displaystyle\sum_{k=1}^n \lambda_kx_k: \lambda_k \geq 0, \displaystyle\sum_{k=1}^n \lambda_k = 1\}\) 稱為 \(x_1,x_2,\cdots, x_n\) 的凸組合。(易推知,\(X\) 的線性子空間是凸集。)
設 \(A_{\alpha} (\alpha \in I)\) 為凸集,則 \(\underset{\alpha \in I}\cap A_{\alpha}\) 仍為凸集,設 \(A_{\alpha}\) 是包含 \(A\) 的所有凸集,則 \(\underset{\alpha \in I}\cap A_{\alpha}\) 稱為由 \(A\) 生成的凸集,或集 \(A\) 的凸包,記作 \(\text{co} (A)\),它是包含 \(A\) 的最小凸集。
集 \(A\) 的核定義為
若 \(A\) 是凸集,且 \(A^{\circ} \neq ∅ ,\) 則稱 \(A\) 為凸體。在賦范線性空間 \((X, ||\cdot ||)\) 中,凸體 \(A\) 可定義為
若 \(∀ x,y \in A, x \neq y, ||x|| = ||y||,\) 則 \(||x+y|| < ||x|| + ||y||.\)
1.2.1 凸集的幾何意義
若 \(x,y \in S(0, r)\),即 \(||x||=||y||=r\), 則聯結 \(x,y\) 線段的中點 \((x+y)/2 \in B(0,r)\)(球體)。即若 \(x,y\) 在同一球面上,則線段 \([x,y]\) 的中點就位於該球體的內部。
1.2.2 超平面
設 \(X\) 為實數域 \(\mathbb{R}\) 上的線性空間,\(f\) 是 \(X\) 上的實值泛函,則
稱為 \(X\) 中的超平面。
1.2.3 支撐超平面
設 \(S\) 是拓撲向量空間[1] \(X=\mathbb{R}^n\) 上的一個凸集,且 \(x_0\) 是 \(S\) 的邊界上的一個點,則存在一個包含點 \(x_0\) 的支撐超平面。若 \(x^* \in X^* \backslash \{0\}\),其中 \(X^*\) 是 \(X\) 的對偶空間(dual space),\(x^*\) 是非零線性泛函。這樣,對於所有的 \(x\in S\), 有 \(x^*\left(x_0\right) \geq x^*(x)\),則有
被定義為支撐超平面[2] (Supporting hyperplane)。
1.2.4 凸集分離定理
[凸集分離定理[3](Hyperplane separation theorem)](https://en.wikipedia.org/wiki/Hyperplane_separation_theorem):有 \(\mathbb{R}^n\) 中兩個非空的 凸集 \(A\) 和 \(B\)。存在非零向量 \(v\) 和實數 \(c\),使得
且 \(∀ x \in A, y \in B\),則稱超平面 \(\langle x, \cdot \rangle = c\) 分離(disjoint) \(A\) 和 \(B\)。
凸集分離定理的意義在於:它為分類問題提供了理論上的支持。在機器學習的分類問題中,我們可以把帶有類別標簽的訓練集看作不同的凸集,而分隔它們的超平面就是分類器。我們的目標是根據這些訓練集的特性,找到一個分類算法,通過學習或訓練並計算出這些凸集的超平面從而達到了分類的目的。
1.3 凸函數
凸函數是凸集中元素的數學特征表示,體現了凸集中元素所呈現的規律性。它被定義為某個向量空間的凸子集 \(C\) 上的實值函數 \(f\)。若在其定義域 \(C\) 上的任意兩點 \(x_1,x_2\),及 \(\alpha \in [0,1]\),均有
1.3.1 凸函數的判定
-
設 \(f_1,f_2,\cdots, f_k\) 是凸集 \(S\) 上的凸函數,令 \(\phi(x)= \displaystyle\sum_{i=1}^k λ_if_i(x)\),其中 $∀ λ_i \geq 0 $,則 \(\psi(x)=\displaystyle\max_{1\leq i \leq k} f_i(x)\) 與 \(\phi(x)\) 都是 \(S\) 上的凸函數。
-
設在凸集 $D \subset \mathbb{R}^n $ 上 \(f(x)\) 可微, 則 \(f(x)\) 在 \(D\) 上的為凸函數的充要條件是對於任意的 $x,y\in D $, 都有
- 設在開凸集 $D \subset \mathbb{R}^n $ 上 \(f(x)\) 二階可微,則 \(f(x)\) 在 \(D\) 上的為凸函數的充要條件是對於任意的 \(x\in D\),\(f(x)\) 的 Hesse 矩陣半正定。
1.3.2 常用的凸函數
- 線性函數和仿射函數都是凸函數
- 最大值函數
- 冪函數: 當 \(\alpha\in [0,1]\) 時, \(x^{\alpha}\) 是一個凸函數; 絕對值冪函數也是凸函數。
- 對數函數 \(\log(x)\) 在 \(\mathbb{R}_{++}\) 上是凸函數
- \(f(x) = \log(\displaystyle\sum_{i=1}^n \exp(x_i))\) 是 \(\mathbb{R}^n\) 上的凸函數
- 幾何平均: $ f(x) = (\displaystyle∏_{i=1}^n x_i)^{\frac{1}{n}} $ 是定義在 \(\mathbb{R}_{++}^n\) 上的凸函數
- 范數
1.3.3 凸函數的性質
- 任一局部極小 (大) 點也是全局極小 (大) 點,且全局極小 (大) 點的集合為凸集。
- 任一局部最優解都是它的整體最優解。
在最優化理論中,局部最優解被稱為滿意解,全局最優解被稱為最優解。大多數傳統的最優化理論和算法都只能保證找到滿意解,因而人們盡可能的使用凸函數作為優化問題的目標函數。對於那些無法轉換為凸函數的優化問題,只有通過窮舉法來計算函數的所有值 (如果可能) 來找到全局最優解。當然針對一些特定的問題可以通過,諸如模擬退火法、隱馬爾科夫鏈算法等隨機優化方法來尋找最優解。但這不是我們討論的要點,我們主要列舉一些我認為比較重要的凸函數的相關知識點。
1.4 計算復雜性與 NP 問題
衡量算法的兩個重要指:時間復雜度與空間復雜度。
如果不考慮算法的優劣,對於同一個算法執行過程所占用的資源越多,則說明該算法要解決的問題的復雜性越高。在各類算法理論中,通常將在多項式時間內即可解決的問題看作易解問題,需要指數時間才可解決的問題看作是難解問題。因而,當前算法研究領域的一個重要任務是如何將指數時間算法變換為多項式算法?
除了問題規模和運算時間的比較之外,衡量一個算法還需要考慮確定性和非確定性的概念。下面先引入自動機模型,或簡稱為自動機 (Automata Machine) 或機 (Machine),實際上常指一種基於狀態變化進行迭代的算法 (如玻耳茲曼機 (Boltzman) 和支持向量機)。在算法領域常把這類算法看作是一個機器。
所謂確定性是指針對各種自動機模型, 根據當時的狀態和輸入, 若自動機的狀態轉移是唯一確定的,則稱確定性;在每一時刻,若自動機有多個狀態可供選擇,並嘗試執行每個可選擇的狀態時,則稱為非確定性. 通俗地說,確定性就是程序在每個運行時 (自動機狀態轉移時) 產生下一步的結果是唯一的, 因此返回的結果也是唯一的。而非確定性就是在每個運行時執行路徑是並行的 (隨機的):所有路徑都有可能返回結果,也可能只有部分返回結果,也可能不返回結果,但只要有一個路徑能夠返回結果,那么算法就會結束。
在求解優化問題時,非確定性算法可能會陷入局部最優,因為所有並行的路徑中某個執行路徑運行達到最優,算法就會結束,但此時返回的不一定是全局最優解。
下面我們便可以定義問題的計算復雜度了。
- \(P\) 類問題就是指能夠以多項式時間的確定性算法來對問題進行判定或求解,實現它的算法在每個運行時的狀態都是唯一的,最終一定能夠確定唯一的結果——最優解的。
- \(NP\) 類問題就是指可以用多項式時間的非確定性算法來對問題進行判定或求解。
- \(NP\) 完全問題是 NP 類問題中最難的問題,其中任何一個問題至今都沒有找到多項式時間的算法。
更多參考:P versus NP problem
