# 修改目標
從 Pocket 最初的目標:
$$
\min_{b,\mathbf{w}} \sum_{n=1}^{N}[[y_{n}\ne sign(\mathbf{w}^{T}\mathbf{z}_{n}+b)]]
$$
我們領悟了他的精隨,得到了新的 SVM 目標:
$$
\begin{align}
\text{Objective: }&\min_{b,\mathbf{w}} \frac{1}{2}\mathbf{w}^{T}\mathbf{w} + C\sum_{n=1}^{N}[[y_{n}\ne sign(\mathbf{w}^{T}\mathbf{z}_{n}+b)]]\\
\text{s.t.: }&y_{n}(\mathbf{w}^{T}\mathbf{z}_{n}+b)\ge1\text{ for correct n}\\
&y_{n}(\mathbf{w}^{T}\mathbf{z}_{n}+b)\ge -\infty \text{ for incorrect n}\\
\end{align}
$$
>$y_{n}(\mathbf{w}^{T}\mathbf{z}_{n}+b)\ge -\infty$ 代表預測錯誤,是個負數
或者可以把 subject 改一下,更精簡:
$$
\begin{align}
\text{Objective: }&\min_{b,\mathbf{w}} \frac{1}{2}\mathbf{w}^{T}\mathbf{w} + C\sum_{n=1}^{N}[[y_{n}\ne sign(\mathbf{w}^{T}\mathbf{z}_{n}+b)]]\\
\text{s.t.: }&y_{n}(\mathbf{w}^{T}\mathbf{z}_{n}+b)\ge 1-\infty[[y_{n}\ne sign(\mathbf{w}^{T}\mathbf{z}_{n}+b)]]\\
\end{align}
$$
但是跟布林式子打了這麼多次交道,非常清楚這個非線性的東西很難處理,必須做一些轉換,否則之前建立的各種 SVM 都用不了。
並且上面的 subject 其實只能要求「犯錯的數量」,而不能要求「犯錯的程度」;也就是我們無法知道犯大錯或犯小錯。
# 違規量 $\xi_{n}$
$\xi_{n}$ 是各個點「違規的量」。如果是分對的點,包含邊上,其違規量是 0;如果是分錯的點,或者是在邊界內的點,就算違規。
也就是說:
$$
\xi_{n}\ge 0
$$
所以我們有了以下新的 Objective 跟 Constraints:
$$
\begin{align}
\text{Objective: }&\min_{b,\mathbf{w},\boldsymbol{\xi}} \frac{1}{2}\mathbf{w}^{T}\mathbf{w} + C\sum_{n=1}^{N}\xi_{n}\\
\text{s.t.: }&y_{n}(\mathbf{w}^{T}\mathbf{z}_{n}+b)\ge 1-\xi_{n}\\
&\forall\ n\ ,\xi_{n}\ge 0
\end{align}
$$
可以發現我們將 $[[y_{n}\ne sign(\mathbf{w}^{T}\mathbf{z}_{n}+b)]]$ 替換成了 $\xi_{n}$。
而突然冒出的 $y_{n}(\mathbf{w}^{T}\mathbf{z}_{n}+b)\ge 1-\xi_{n}$,是因為當初 $y_{n}(\mathbf{w}^{T}\mathbf{z}_{n}+b)\ge 1$ 可以確保距離最小的點,其長度公式為 $\frac{1}{\left\|\mathbf{w}\right\|}$。
但現在有些違規的點,需要幫他加上違規量:
$$
\xi_{n}+y_{n}(\mathbf{w}^{T}\mathbf{z}_{n}+b)\ge 1
$$
把他們推回邊界以內;如此我們便又可以確保距離最小的點,其長度公式一樣為 $\frac{1}{\left\|\mathbf{w}\right\|}$。
然後最後再多加上 $C\sum_{n=1}^{N}\xi_{n}$ 就可以了。
現在的 QP 有 $\tilde{d}+1+N$ 個變數,因為多了 $\xi_{n}$;限制則變為 $2N$ 個。
# Lagrange function
回想 [dual SVM 時提到過的](https://hackmd.io/@ShawnNTU-CS/HybC95v22#Lagrange-Function),要建立 Lagrange function,就要將限制移項後加到 Objective 裡面:
$$
\color{red}{0\ge 1-\xi_{n}-y_{n}(\mathbf{w}^{T}\mathbf{z}_{n}+b)}\\
\color{blue}{0\ge -\xi_{n}}\\
\mathcal{L}(b,\mathbf{w},\boldsymbol{\xi},\color{red}{\boldsymbol{\alpha}},\color{blue}{\boldsymbol{\beta}})=\min_{b,\mathbf{w},\boldsymbol{\xi}} \frac{1}{2}\mathbf{w}^{T}\mathbf{w} + C\sum_{n=1}^{N}\xi_{n}+\color{red}{\sum_{n=1}^{N}\alpha_{n}(1-\xi_{n}-y_{n}(\mathbf{w}^{T}\mathbf{z}_{n}+b))}+\color{blue}{\sum_{n=1}^{N}\beta_{b}(-\xi_{n})}
$$
# Lagrange Dual
然後就是一樣的推導方式,我們可以得到我們想要的 Lagrange Dual:
$$
\max_{\alpha_{n}\ge0,\beta_{n}\ge0}\left(\min_{b,\mathbf{w},\boldsymbol{\xi}} \frac{1}{2}\mathbf{w}^{T}\mathbf{w} + C\sum_{n=1}^{N}\xi_{n}+\color{red}{\sum_{n=1}^{N}\alpha_{n}(1-\xi_{n}-y_{n}(\mathbf{w}^{T}\mathbf{z}_{n}+b))}+\color{blue}{\sum_{n=1}^{N}\beta_{b}(-\xi_{n})}\right)
$$
然後一樣計算出梯度,並帶入來化簡式子。
$$
\frac{\partial\mathcal{L}}{\partial\xi_{n}}=C-\alpha_{n}-\beta_{n}=0\\
\Rightarrow C-\alpha_{n}=\beta_{n}
$$
可以發現,$\beta_{n}$ 可以用 $C-\alpha_{n}$ 替換掉;並且由於 $\beta_{n}\ge0$,所以可以知道:
$$
C\ge\alpha_{n}\ge0
$$
$$
\max_{\alpha_{n}\ge0,\beta_{n}\ge0}\left(\min_{b,\mathbf{w}} \frac{1}{2}\mathbf{w}^{T}\mathbf{w}+\color{red}{\sum_{n=1}^{N}\alpha_{n}(1-y_{n}(\mathbf{w}^{T}\mathbf{z}_{n}+b))}\right)
$$
在替換掉了 $\beta_{n}$ 之後,就變成是跟之前 dual SVM 中 objective 一模一樣的東西,只是 $\alpha_{n}$ 多了上限。
所以一樣使用傳統藝能,可以得到:
$$
\frac{\partial\mathcal{L}}{\partial b}=0\Rightarrow \sum_{n}^{N}\alpha_{n}y_{n}=0\\
\frac{\partial\mathcal{L}}{\partial w_{i}}=0\Rightarrow \mathbf{w}=\sum_{n}^{N}\alpha_{n}y_{n}\mathbf{z}_{n}\\
$$
所以最終在 QP 當中,只有差在 $0\le\alpha_{n}\le C$ 這部分,也就是要多補一些東西而已。
## KKT Condition
- primal feasible:
- $y_{n}(\mathbf{w}^{T}\mathbf{x}+b)\ge 1-\xi_{n}$
- $\xi_{n}\ge0$
- dual feasible:
- $\alpha_{n} \ge 0$
- $\beta_{n} \ge 0$
- dual-inner optimal
- $\sum_{n=1}^{N}\alpha_{n}y_{n}=0$ 和 $\mathbf{w}=\sum_{n=1}^{N}\alpha_{n}y_{n}\mathbf{z}_{n}$
- $\beta_{n}=C-\alpha_{n}$
- primal-inner optimal
- $\alpha_{n}\left(1-\xi_{n}-y_{n}\left(\mathbf{w}^{T}\mathbf{x}_{n}+b\right)\right)=0$
- $\beta_{n}(-\xi_{n})=0$
- 同樣有「Complementary Slackness」
# $b$ 的值
解出了 $\alpha_{n}$ 之後,$\beta_{n},\mathbf{w}$ 都可以輕鬆算出。
至於 $b$ 跟 $\xi_{n}$,來看看兩者的方程:
$$
\alpha_{n}\left(1-\xi_{n}-y_{n}\left(\mathbf{w}^{T}\mathbf{x}_{n}+b\right)\right)=0\\
\Rightarrow y_{n}-y_{n}\xi_{n}-\mathbf{w}^{T}\mathbf{x}_{n}=b\\
$$
會發現想要知道 $b$,就要先知道 $\xi_{n}$,但如果只單看這個方程,會發現想要知道 $\xi_{n}$ ,就要先知道 $b$;也就是陷入了循環。
為此,我們需要考慮第二條:
$$
\beta_{n}(-\xi_{n})=0\\
\Rightarrow (C-\alpha_{n})\xi_{n}=0
$$
可以發現,只要知道 $\alpha_{n}$ 似乎就好辦事許多,於是開始分段討論:
## $\alpha_{n}>0$ / Support Vector
跟之前的定義一樣,$\alpha_{n}>0$ 的就是支撐向量,但是由於 $\xi$ 的關係,所以有兩種支撐向量:
- $C>\alpha_{n}>0$:此時可以確定 $\xi_{n}=0$,也就是說
- $y_{n}-\mathbf{w}^{T}\mathbf{x}_{n}=b$
- 這時有個特殊的名稱 **「free SVM」**
- $C=\alpha_{n}$
- 只能確定 $\xi_{n}=1-y_{n}\left(\mathbf{w}^{T}\mathbf{x}_{n}+b\right)$
- 所以有可能 $\xi_{n}=0$,但是是極少數情況。
- 這時有個特殊的名稱 **「bounded SVM」**
所以 $b$ 就變成是只要從 free SVM 中隨便選一個就可以算出來。
但是極少數的情況會沒有 free SVM,這時候 $b$ 會由一堆東西限制住,只要滿足這些限制和 KKT 條件的 $b$ 就會是可行的解。
:::danger
待補
:::
## $\alpha_{n}=0$
這時候可以確定 $\xi_{n}=0$,也就是說:
$$
y_{n}(\mathbf{w}^{T}\mathbf{x}+b)\ge 1
$$
也就是那些分對的點;當然極少情況會是在邊界的點。
# Model Selection
算出了 $\alpha$,找到了 $b$,然後搭配之前的 Kernel function,就成了實際中常用的 SVM,通常 SVM 沒有特別說明的話大多是 Soft-margin,然後再看是搭配哪種 Kernel function。
如果是 Gaussian Kernel,那麼一個 model 需要調的參數就是 $(C,\gamma)$,所以一樣會有選擇問題;所以一樣使用 Validation 搭配 grid value 來進行選擇。
:::info
grid value 就像是以 [-1,1]X[-1,1] 的四種組合以網格的方式列出。
:::
# Leave-One-Out
Leave-One-Out 在使用了 dual SVM 方法底下,可以得到有趣的結論:
$$
E_{loocv}\le\frac{\#SV}{N}
$$
因為如果我們對 N 個點做 SVM 得到 $\alpha_{n}$:
- 如果要對第 n 個點做 Validation,所對應的 $\alpha_{n}=0$
- 代表他是分對的點,因此就算把該點扣除去做 SVM,得到的 $\alpha$ 跟原本一樣
- 如果第 n 個點所對應的 $\alpha_{n} \ne 0$
- 代表該點是 SV,如果扣除他的話可能會得到不一樣的結果
- 也就是說 $g^{-}$ 跟 $g$ 在第 n 個點上要嘛一樣要嘛不一樣
> [可以回顧上面](https://hackmd.io/oJS56aBkQZ-fR1dCWRK6Eg#alpha_ngt0--Support-Vector)
所以之前 Validation 在推導 $\underset{\mathcal{D}}{\mathcal{E}} E_{loocv}(g^{-}) \approx \overline{E_{out}(g^{-})}$ 的時候:
- 對於非 SV 的點:
- $e_{non-SV}=err(g^{-},non-SV)=err(g,non-SV)=0\\$
- 對於 SV 的點:
- $e_{SV}= 1\ or\ 0$
所以如果 $g^{-}$ 跟 $g$ 在 SV 的點上預測的都不一樣:
$$
E_{loocv}=\frac{\# SV}{N}
$$
這就是為甚麼 Support Vector 的數量會成為 $E_{loocv}$ 的一個上界的原因。
而 #SV 的好處就是,一旦得到 $\alpha$ 後就可以直接知道,所以可以在第一時間作為「安全檢查」,把危險的模型先去除掉;接著再用 Cross Validation 找出最適合的模型。