0 解析幾何知識(shí), 點(diǎn)到平面的距離
如圖, 假設(shè)一個(gè)平面 , 平面外一點(diǎn)
,
在平面上的投影為
, 求點(diǎn)
到平面的距離即求
我們可以知道平面的法向量為
, 則這個(gè)法向量對(duì)應(yīng)的單位向量
假設(shè)平面上任意一點(diǎn) , 則
滿足
點(diǎn) 到點(diǎn)
構(gòu)成的向量
所以即為
在法向量
方向上的投影, 即與單位法向量
的點(diǎn)乘的結(jié)果.(這里取了個(gè)絕對(duì)值, 因?yàn)榫嚯x只能為正, 避免了向量方向問題的干擾)
其中與點(diǎn)相關(guān)的變量
都可以用式
替換
所以合并式可得:
如果用矩陣來表示, 則我們?nèi)?/p>
則式(0.4)可以寫為
即為L2范式(L2 norm), 就是平方和之后開根號(hào)
1 SVM基本問題描述和解決思路
基本問題:
假設(shè)有兩個(gè)類別的數(shù)據(jù),
其中
我們?cè)噲D找到一個(gè)分隔平面(超平面) (這里就是
的一個(gè)變體)
使得
- 離 分隔平面
最近的點(diǎn) 到 分隔平面
的距離最大
- 所有點(diǎn)都能被正確分類
目標(biāo)1: 距離最大
根據(jù)之前的預(yù)備知識(shí), 我們知道任意一點(diǎn)到平面的距離為(李航的書說是"幾何距離")
我們要求分隔平面兩邊的點(diǎn)都滿足條件2: 距離分隔平面的距離最大
所以我們的求解目標(biāo)是
目標(biāo)2: 正確分類
同時(shí)我們希望能滿足條件1, 即所有點(diǎn)能被正確分類
因?yàn)?/p>
- 如果是正確分類的話, 所有類別為+1 的點(diǎn)都會(huì)在平面的上方, 類別為-1 的點(diǎn)都會(huì)在平面的下方.
- 在平面上方的點(diǎn)滿足
, 在平面下方的點(diǎn)滿足
- 所以如果能正確分類就有:
SVM的求解問題的數(shù)學(xué)表達(dá)
翻譯一下:
- 找到距離平面最近的一個(gè)點(diǎn), 其距離:
- 把這個(gè)距離乘以2, 就是間隔了:
- 把分隔平面挪動(dòng)翻轉(zhuǎn)一下, 看看是不是能擴(kuò)大這個(gè)間隔:
求解目標(biāo):
2 如何簡化這個(gè)問題: 轉(zhuǎn)換為凸二次規(guī)劃問題
通過把原問題構(gòu)建成凸二次規(guī)劃問題來進(jìn)行求解, 因?yàn)橥苟我?guī)劃可解
凸二次規(guī)劃問題:
- 目標(biāo)函數(shù)是凸二次函數(shù):
(關(guān)于
的二次函數(shù))
- 約束是線性約束:
現(xiàn)在我們的目標(biāo)就是, 把原問題湊成凸二次規(guī)劃問題
目標(biāo)函數(shù)的變換
原問題的目標(biāo)函數(shù)為:
變換思路
- 因?yàn)榍蠼饽繕?biāo)是
, 所以
這一項(xiàng)(即變量
)要想辦法忽略掉
- 目標(biāo)函數(shù)為一個(gè)二次函數(shù), 原函數(shù)里面其實(shí)隱含了一個(gè)二次函數(shù):
- 所以
這一項(xiàng)有點(diǎn)沒有用, 我們需要想辦法忽略它
工具:
我們發(fā)現(xiàn)一個(gè)事實(shí), 如果把
等比例放大/縮小, 式(1.1)描述的問題不變:
證明
假設(shè)一個(gè)系數(shù), 使得
放大為
,
則式(1.1)變?yōu)?
其中目標(biāo)函數(shù)(分母分子同乘一個(gè)r, 抵消了)
約束目標(biāo)(不等式兩邊同除一個(gè)正數(shù), 不等式仍然成立)
這個(gè)
就是PQ和平面法向量
點(diǎn)乘的結(jié)果蜓氨,這個(gè)結(jié)果要除以法向量的模長才是幾何間隔(我們的問題要求幾何間隔滿足一定條件)。所以如果我們只是變換法向量的長度的話械念,因?yàn)闊o論如何都會(huì)除以法向量長度拌阴,所以對(duì)于原問題并沒有任何影響(式(1.1)描述的問題不變)障癌。
變換過程
目標(biāo)函數(shù)的變換
- 我們假設(shè)所有的
都乘上一個(gè)系數(shù)r拂盯,我們證明了乘上這個(gè)系數(shù)與否不影響問題的描述
- 于是我們總能找到一個(gè)
实束,使得
, 這樣的話原問題的目標(biāo)函數(shù)可以寫為
- 我之前一直迷惑于這個(gè)
怎么處理的幽钢,后來想起來系數(shù)和問題的求解無關(guān)歉备,因?yàn)檫@是個(gè)凸二次函數(shù)嘛,想想拋物線的形狀匪燕,無論系數(shù)怎么改變拋物線最低點(diǎn)的值都會(huì)出現(xiàn)在固定的位置(系數(shù)和開口大小相關(guān))蕾羊,所以可以直接忽略系數(shù): 求解
等價(jià)于求解
- 到這一步, 我們的目標(biāo)函數(shù)變化過程為:
約束條件的變換
- 接下來看約束條件的變化, 原問題的約束條件為:
, 由于之前對(duì)于
的變換引入了一個(gè)新的約束條件:
-
, 我們可以視為
, 在這里,
的作用是對(duì)
施加限制, 所以我們可以換個(gè)思路, 直接對(duì)
施加限制:
, 等價(jià)于
- 所以新的約束條件為:
且
, 因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=y_i(%5Comega%5ET%20x%2Bb)%20%3E%200" alt="y_i(\omega^T x+b) > 0" mathimg="1">的原因, 所以
(分類正確的條件下, 這兩個(gè)式子都能保證>0(分類正確意味著點(diǎn)不能再分隔平面上, 所以絕對(duì)值也不可能等于0)), 所以這兩個(gè)約束條件可以合并為一個(gè):
變換過程的公式推導(dǎo)
原問題為:
找到個(gè)系數(shù)使得
,(注意現(xiàn)在
也是目標(biāo)函數(shù)之一了)
化簡目標(biāo)函數(shù), 湊二次函數(shù):
于是現(xiàn)在的問題為:
轉(zhuǎn)換約束條件, 把關(guān)于的約束條件轉(zhuǎn)變成只與
相關(guān)(目標(biāo)函數(shù)中的
也沒了)
繼續(xù)轉(zhuǎn)換, 并合并兩個(gè)約束條件
(這段變換其實(shí)是我整個(gè)SVM里面一開始最不能理解的地方, 我找到的教材都只是說了一句: 因?yàn)榭s放并不影響原問題, 所以我們就能得出, 之類的解釋(包括<統(tǒng)計(jì)學(xué)習(xí)方法>也是類似的跳躍式證明). 我數(shù)學(xué)太渣真的無法自己就這樣接受這么跳躍的證明, 于是想了好久才想出了一個(gè)可以自己接受的證明方法. 不確保一定正確, 希望有人能指出錯(cuò)誤)
3 通過構(gòu)造一個(gè)新函數(shù), 合成目標(biāo)函數(shù)和約束: 拉格朗日函數(shù)
在利用二次凸優(yōu)化構(gòu)建了一個(gè)新的等價(jià)問題之后, 如何解? 現(xiàn)在的思路是把目標(biāo)函數(shù)和約束合成為一個(gè)式子, 通過求新式子的最值, 便是原問題的最值
這個(gè)方法稱為: 拉格朗日函數(shù)
拉格朗日函數(shù)求解的條件
如果一個(gè)帶約束優(yōu)化問題有諸如一下的形式:
并且
連續(xù)可微
則可以將原問題轉(zhuǎn)換為一下新問題
能進(jìn)行這樣轉(zhuǎn)換的原因
為了能證明新得到的拉格朗日函數(shù)是原問題的變形(即拉格朗日函數(shù)能變回原問題), 我們最好把 和 原問題中的約束條件
放在一起看,
并且時(shí)刻記住: 因?yàn)榍蟮氖?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Cmin_u%20%5Cmax_%7B%5Calpha%2C%20%5Cbeta%7D%20L(u%2C%20%5Calpha%2C%20%5Cbeta%20)" alt="\min_u \max_{\alpha, \beta} L(u, \alpha, \beta )" mathimg="1">, 所以 對(duì)
有最大值, 對(duì)
有最小值
于是我們有如下的假設(shè):
- 如果
不滿足條件, 即
:
中的
這一項(xiàng), 最大值為
, 導(dǎo)致
, 無解.
- 如果
滿足條件, 即
:
中的
這一項(xiàng), 因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Calpha_i%20%5Cgeq%200" alt="\alpha_i \geq 0" mathimg="1">, 所以最大值為
(正數(shù)
乘以負(fù)數(shù)
結(jié)果仍為負(fù)數(shù)), 有可能有解
- 如果
不滿足條件, 即
:
中的
這一項(xiàng), 因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Cbeta_j" alt="\beta_j" mathimg="1">并沒有約束條件約束, 所以可以取任意值, 即
, 導(dǎo)致
, 無解.
- 如果
滿足條件, 即
: 則
,
可能有解
我們可以組合假設(shè)2和假設(shè)4, 即:
如果 滿足
, 且
滿足
, 則
所以此時(shí) , 朗格朗日函數(shù)變換回原問題
把凸二次函數(shù)問題轉(zhuǎn)換成拉格朗日函數(shù)
-
替換為
所以有:
-
替換為
-
替換為
: 把原約束的左邊移到了右邊而已
- 因?yàn)樵苟魏瘮?shù)問題中沒有類似
的約束, 所以直接忽略
這一項(xiàng)
- 原凸二次函數(shù)問題變?yōu)?
4 通過對(duì)偶問題解拉格朗日函數(shù)
為什么要轉(zhuǎn)成對(duì)偶問題:
求解拉格朗日函數(shù)的極值的, 由于求極值的運(yùn)算是從內(nèi)向外的. 每次運(yùn)算需要先算, 而這個(gè)
作為新引入的變量, 只能通過計(jì)算所有值來找到最值.
而每次求得一個(gè)新的, 我們就要求一次
的最值, 所以這樣非常耗時(shí)麻煩
但是如果能先求, 每次找到一個(gè)新的
后就不用再計(jì)算了.
對(duì)偶問題的轉(zhuǎn)換
只要原問題滿足KKT+Slater條件, 我們便可以交換求最大值和最小值的順序:
KKT條件
- 主問題可行:
- 對(duì)偶問題可行:
- 互補(bǔ)松弛:
- (統(tǒng)計(jì)學(xué)習(xí)方法上面的條件)最優(yōu)解處對(duì)
偏導(dǎo)是0:
Slater條件
當(dāng)主問題為凸優(yōu)化問題, 即 和
為凸函數(shù),
為仿射函數(shù), 且可行域中至少有一點(diǎn)使不等式約束嚴(yán)格成立時(shí), 對(duì)偶問題等價(jià)于原問題.
對(duì)偶問題的證明
原問題為, 對(duì)偶問題為
, <統(tǒng)計(jì)學(xué)習(xí)方法>寫的證明終于理解了, 這里我做一下注釋(也把符號(hào)統(tǒng)一為我這里使用的符號(hào)):
先假設(shè),(D=dual problem對(duì)偶問題)
, (P=prime problem原問題)
所以可知對(duì)任意 都有
因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Cmin_%7B%5Comega%2Cb%7D%20L(%5Comega%2C%20b%2C%20%5Calpha)" alt="\min_{\omega,b} L(\omega, b, \alpha)" mathimg="1"> 是對(duì)
求最小值,
是對(duì)
求最大值, 所以最小值一定小于大于最大值
即對(duì)任意 都有
這里的"任意"很重要, 下一步的證明的基礎(chǔ)就是這個(gè)"任意"
因?yàn)樵瓎栴}和對(duì)偶問題都有最優(yōu)解, 所以:
因?yàn)槲覀冇? 對(duì)任意
都有
, 所以就算取
的最大值和
的最小值, 仍然要滿足
, 所以
成立
相當(dāng)于:
求解SVM, 得到最簡單的計(jì)算式
因?yàn)槲覀冎皩⒃瓎栴}簡化又簡化了, 所以求解就變得很簡單.
只要對(duì)分別求偏導(dǎo), 然后找到偏導(dǎo)等于0的時(shí)候, 這時(shí)候的極值就是最優(yōu)解
然后帶入拉格朗日函數(shù)的對(duì)偶形式里面:
就有
SVM的最樸素算法(線性可分支持向量機(jī)算法)
<統(tǒng)計(jì)學(xué)習(xí)方法>
P106 算法7.2