接下來準備寫支持向量機,然而支持向量機和其餘算法相比牽涉較多的數學知識,其中首當其衝的就是標題中的拉格朗日乘子法、KKT條件和對偶問題,因此本篇先做個鋪墊。算法
大部分機器學習算法最後均可歸結爲最優化問題。對於無約束優化問題: \(\min\limits_\boldsymbol{x} f(\boldsymbol{x})\) (本篇爲形式統一,只考慮極小化問題),通常可直接求導並用梯度降低或牛頓法迭代求得最優值。
對於含有等式約束的優化問題,即:
\[ \begin{aligned} {\min_{\boldsymbol{x}}} & \;\;{f(\boldsymbol{x})} \\ {\text { s.t. }} & \;\;{h_{i}(\boldsymbol{x}) = 0}, \quad i=1,2, \ldots, m \end{aligned} \]
因爲等式約束 \(h_i(\boldsymbol{x}) = 0\) 的存在,沒法直接求導迭代求解。拉格朗日乘子法是解決此類問題的經常使用方法,其核心思想是將約束優化轉化爲無約束優化問題,即將有 \(d\) 個變量和 \(m\) 個等式約束條件的最優化問題轉換爲一個有 \((d + m)\) 個變量的函數求平穩點的問題。機器學習
下面畫圖來直觀理解拉格朗日乘子法,先看下左圖: 黑色虛線爲函數 \(f(x)\) 的等值線,紅色實線爲約束條件 \(h(x) = 0\) ,這裏的關鍵是 \(f(x)\) 在極小點處必然與 \(h(x) = 0\) 相切,以下左圖相切於黃色點 \(x_1\) 。爲何這麼說?來看下右圖: 若是 \(f(x)\) 與 \(h(x) = 0\) 不相切,則相交於兩個黃色點,而因爲 \(x\) 是連續的,則必然能找到一個新的 \(x_2\) 使得 \(f(x_2)\) 更小,圖中表示爲藍色虛線,使得在 \(x_2\) 處 \(f(x)\) 與 \(h(x) = 0\) 相切。函數
因爲相交的兩個黃色點不是極小點,梯度 \(\nabla f(x_1)\) 仍然會沿着 \(h(x) = 0\) 變化,於是在這兩個點 \(\nabla f(x_1)\) 不與 \(h(x) = 0\) 的切線方向垂直,只有在極小點纔會正交。
由此能夠得出兩個推論 (見下圖):學習
(1). 對於 \(f(\boldsymbol{x})\) 的極小點 \(\boldsymbol{x}^*\) ,\(f(\boldsymbol{x})\) 在 \(\boldsymbol{x}^*\) 處的梯度 \(\nabla f(\boldsymbol{x}^*)\) 與 \(h(\boldsymbol{x}) = 0\) 的切線方向垂直 優化
(2). 對於 \(f(\boldsymbol{x})\) 的極小點 \(\boldsymbol{x}^*\) ,\(h(\boldsymbol{x})\) 在 \(\boldsymbol{x}^*\) 處的梯度 \(\nabla h(\boldsymbol{x}^*)\) 與 \(h(\boldsymbol{x}) = 0\) 的切線方向垂直
對於第 (2) 點,可做以下證實: 設 \(\boldsymbol{x}(t)\) 爲連續可微的函數,則有 \(h(\boldsymbol{x}(t)) = 0\) ,利用鏈式法則:
\[ \frac{\text{d}}{\text{d} t} h(\boldsymbol{x}(t)) = \nabla h(\boldsymbol{x}(t)) \cdot \frac{\text{d}{\boldsymbol{x}(t)}}{\text{d}t} = 0 \]
\(\frac{\text{d}{\boldsymbol{x}(t)}}{\text{d}t}\) 即爲切線方向,因此本質上 \(h(\boldsymbol{x}) = 0\) 上任意一點的梯度 \(\nabla h(\boldsymbol{x})\) 都與其正交,\(\boldsymbol{x}^*\) 天然也不例外。
因而能夠得出在極小點處 \(\nabla h(\boldsymbol{x}^*)\) 與 \(\nabla f(\boldsymbol{x}^*)\) 平行,即存在 \(\lambda \neq 0\) ,使得:
\[ \nabla f(\boldsymbol{x}^*) + \lambda \nabla h(\boldsymbol{x}^*) = 0 \tag{1.1} \]
\(\lambda\) 被稱爲拉格朗日乘子,下面定義拉格朗日函數:
\[ \mathcal{L}(\boldsymbol{x}, \lambda) = f(\boldsymbol{x}) + \lambda \,h(\boldsymbol{x}) \tag{1.2} \]
將上式分別對 \(\boldsymbol{x}\) 和 \(\lambda\) 求導置零,就分別獲得 \((1.1)\) 式和等式約束 \(h(\boldsymbol{x}) = 0\) ,這樣就將原約束優化問題轉化爲對 \(\mathcal{L}(\boldsymbol{x}, \lambda)\) 的無約束優化問題。 然而這個方法找出來的平穩點不必定都是原問題的極值點,以下左圖是一個極值點,而下右圖卻不是極值點。spa
上面拉格朗日乘子法解決的是等式約束優化問題,而對於不等式約束優化問題也可解,只不過要加一些附加條件:
\[ \begin{aligned} {\min_{\boldsymbol{x}}} & \;\;{f(\boldsymbol{x})} \\ {\text { s.t. }} & \;\;{g_{i}(\boldsymbol{x}) \leqslant 0}, \quad i=1,2, \ldots, m \\ & \;\;{h_{j}(\boldsymbol{x}) = 0}, \quad j=1,2, \ldots, n \end{aligned} \]
先下一個定義:blog
對於一個不等式約束 \(g_j(\boldsymbol{x}) \leqslant 0\) ,若在 \(\boldsymbol{x}^*\) 處 \(g_j(\boldsymbol{x}^*) < 0\) ,那麼稱該不等式約束是 \(\boldsymbol{x}^*\) 處的不起做用約束;若在 \(\boldsymbol{x}^*\) 處 \(g_j(\boldsymbol{x}^*) = 0\) ,那麼稱該約束是 \(\boldsymbol{x}^*\) 處的起做用約束。數學
對於該定義的直觀解釋見下圖: 灰色部分爲約束 \(g(\boldsymbol{x}) \leqslant 0\) 的可行域,若最優勢 \(\boldsymbol{x}^*\) 在區域內 (下左圖,\(g(\boldsymbol{x}) < 0\) ) ,則約束並無起到」約束的做用「,這樣可直接經過 \(\nabla f(\boldsymbol{x}) = 0\) 來得到最優勢,這等價於讓 \((1.1)\) 式中 \(\lambda = 0\) 。it
若最優勢 \(\boldsymbol{x}^*\) 在區域邊界上 (下右圖,\(g(\boldsymbol{x}) = 0\) ) ,那麼對於 \(f(\boldsymbol{x})\) 來講,在 \(\boldsymbol{x}^*\) 處是外部較大,內部較小,由於越靠近等值線中心 \(f(\boldsymbol{x})\) 越小; 而對於 \(g(\boldsymbol{x})\) 來講,在 \(\boldsymbol{x}\) 處的變化趨勢是內部較小,外部較大,由於在內部 \(g(\boldsymbol{x}) \leqslant 0\) ,外部 \(g(\boldsymbol{x}) > 0\) 。這樣 \(\nabla f(\boldsymbol{x}^*)\) 和 \(\nabla g(\boldsymbol{x}^*)\) 的方向必相反,此時 \(g(\boldsymbol{x}) = 0\), 那麼套用 \((1.1)\) 式可得 \(\lambda > 0\) 。io
綜合這兩種狀況:
\[ \begin{cases} g(\boldsymbol{x}) < 0, & \lambda = 0 \\[1ex] g(\boldsymbol{x}) = 0, & \lambda > 0 \end{cases} \quad \Longrightarrow \quad \lambda \geqslant 0, \;\;\lambda \,g(\boldsymbol{x}) = 0 \tag{2.1} \]
這被稱爲互補鬆弛條件 (\(\text{complementary slackness}\)) 。
由此推廣到多個約束,定義廣義拉格朗日函數:
\[ \mathcal{L}(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta}) :=f(\boldsymbol{x})+\sum_{i=1}^{m} \alpha_{i} g_{i}(\boldsymbol{x})+\sum_{j=1}^{n} \beta_{j} h_{j}(\boldsymbol{x}) \tag{2.2} \]
\(\boldsymbol{\alpha} \geqslant 0\) 爲 KKT 乘子,\(\boldsymbol{\beta}\) 爲拉格朗日乘子,其最優解知足:
\[ \begin{cases} g_i(\boldsymbol{x}) \leqslant 0, & i=1,2, \ldots, m \qquad\qquad(1) \\[1ex] {h_{j}(\boldsymbol{x}) = 0}, & j=1,2, \ldots, n \,\qquad\qquad(2) \\[1ex] \alpha_i \geqslant 0, & i=1,2, \ldots, m \qquad\qquad(3) \\[1ex] \alpha_i g_i(\boldsymbol{x}) = 0, & i=1,2, \ldots, m \qquad\qquad(4) \end{cases} \]
\((1) \sim (2)\) 式爲原問題的約束條件,\((3) \sim (4)\) 式上文定義中已證實。這就是不等式約束優化問題的 KKT 條件 (\(\text{Karush-Kuhn-Tucker Condition}\)),KKT 條件是拉格朗日乘子法在不等式約束優化問題上的泛化。KKT 條件是極小點的必要條件,即知足 KKT 條件不必定是極小點,但極小點必知足 KKT 條件。
將原始問題轉化爲對偶問題是求解帶約束優化問題的一種方法,固然這不是惟一的方法,只不過轉化爲對偶問題後每每更容易求解,於是被廣爲應用。
設原始優化問題爲:
\[ \begin{aligned} {\min_{\boldsymbol{x}}} & \;\;{f(\boldsymbol{x})} \\ {\text { s.t. }} & \;\;{g_{i}(\boldsymbol{x}) \leqslant 0}, \quad i=1,2, \ldots, m \\ & \;\;{h_{j}(\boldsymbol{x}) = 0}, \quad j=1,2, \ldots, n \end{aligned} \tag{3.1} \]
其拉格朗日函數爲 \(\mathcal{L}(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta}) =f(\boldsymbol{x})+\sum_{i=1}^{m} \alpha_{i} g_{i}(\boldsymbol{x})+\sum_{j=1}^{n} \beta_{j} h_{j}(\boldsymbol{x}), \;\;\alpha \geqslant 0\) 。若 \(\boldsymbol{x}\) 違反了一些約束 (即存在 \(i,j\) 使得 \({g_{i}(\boldsymbol{x}) \geqslant 0}\) 或 \(h_j(\boldsymbol{x}) \neq 0\) ) ,那麼 \(\max\limits_{\boldsymbol{\alpha}, \boldsymbol{\beta}} \mathcal{L}(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta}) = \infty\) ,則:
\[ \begin{aligned} \min _{\boldsymbol{x}} \max _{\boldsymbol{\alpha}, \boldsymbol{\beta}} \mathcal{L}(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta}) = & \min _{\boldsymbol{x}}\left(f(\boldsymbol{x})+\max _{\boldsymbol{\alpha}, \boldsymbol{\beta}}\left(\sum_{i=1}^{m} \alpha_{i} g_{i}(\boldsymbol{x})+\sum_{j=1}^{n} \beta_{j} h_{j}(\boldsymbol{x})\right)\right) \\[1ex] = & \min_{\boldsymbol{x}}\left(f(\boldsymbol{x})+\left\{\begin{array}{l}{0}\,, & 若 \boldsymbol{x} \,知足約束 \\ {\infty}\,, & 若 \boldsymbol{x} \,不知足約束\end{array}\right.\right) \\[1ex] = & \min_{\boldsymbol{x}} f(\boldsymbol{x}), \;\;且 \boldsymbol{x} \, 知足約束 \end{aligned} \]
這樣原始優化問題 \((3.1)\) 就等價於:
\[ \begin{align*} \min _{\boldsymbol{x}} \max _{\boldsymbol{\alpha}, \boldsymbol{\beta}} & \;\; \mathcal{L}(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta}) \\ \text{s.t.} & \;\; \alpha_i \geqslant 0, \quad i=1,2, \ldots, m \end{align*} \]
接下來定義 \((3.1)\) 式的對偶問題 (dual problem) 爲:
\[ \begin{align*} \max _{\boldsymbol{\alpha}, \boldsymbol{\beta}}\min _{\boldsymbol{x}} & \;\; \mathcal{L}(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta}) \\ \text{s.t.} & \;\; \alpha_i \geqslant 0, \quad i=1,2, \ldots, m \end{align*} \]
對偶問題是原始問題的下界,即:
\[ \max _{\boldsymbol{\alpha}, \boldsymbol{\beta}}\min _{\boldsymbol{x}} \mathcal{L}(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta}) \; \leq \; \min _{\boldsymbol{x}} \max _{\boldsymbol{\alpha}, \boldsymbol{\beta}} \mathcal{L}(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta}) \tag{3.2} \]
上式爲何成立?由於任意值小於等於最大值,因此對於任意 \(\boldsymbol{\alpha}, \,\boldsymbol{\beta}\) ,\(\min _{\boldsymbol{x}} \mathcal{L}(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta}) \; \leq \; \min _{\boldsymbol{x}} \max _{\boldsymbol{\alpha}, \boldsymbol{\beta}} \mathcal{L}(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta})\) ,若是上式恆成立,則不等式左邊的 \(\min _{\boldsymbol{x}} \mathcal{L}(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta})\) 的極大值 \(\max _{\boldsymbol{\alpha}, \boldsymbol{\beta}}\min _{\boldsymbol{x}} \mathcal{L}(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta})\) 必定小於等於 不等式右邊的 \(\min _{\boldsymbol{x}} \max _{\boldsymbol{\alpha}, \boldsymbol{\beta}} \mathcal{L}(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta})\) ,這就是所謂的 」極小的極大 \(\leqslant\) 極大的極小「 。
\((3.2)\) 式是不等式,因此該性質被稱爲弱對偶性 (weak duality)。若要等式成立,則爲強對偶性 (strong duality),須要知足 slater 條件:
\(\text{slater}\) 條件: 原始問題爲凸優化問題,即 \(f(\boldsymbol{x})\),\(g(\boldsymbol{x})\) 爲凸函數,\(h(\boldsymbol{x})\) 爲仿射函數,且可行域中至少有一點使不等式約束嚴格成立時,強對偶性成立,對偶問題等價於原始問題。
最後,利用強對偶性求出的 \(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta}\) 同時也是原始問題的最優解,因此依然知足 KKT 條件:
\[ \begin{cases} 原始問題可行: & g_i(\boldsymbol{x}) \leqslant 0, \;{h_{j}(\boldsymbol{x}) = 0} \\[1ex] 對偶問題可行: & \alpha_i \geqslant 0 \\[1ex] 互補鬆弛: & \alpha_i g_i(\boldsymbol{x}) = 0 \\[1ex] 拉格朗日平穩性: & \nabla_{\boldsymbol{x}}\mathcal{L}(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta}) = 0 \end{cases} \]
/