Lecture5 - SVM (上)
前面幾講,給大家介紹了統計機器學習中非常典型的regression和classification問題。這講開始,講給大家繼續介紹一個數學理論非常漂亮的新model,支撐向量機(support vector machine),為什麼叫支撐向量機呢?其實這個演算法叫支撐向量就夠了,machine是強行加上去的,就好比xxx演算法一樣。大家應該明白,這個演算法所關注的重點就是支撐向量了,到底什麼是支撐向量,該演算法有什麼作用?下文將會慢慢講解。
其實有的時候,SVM也被叫做最優間隔分類器,其實,不論SVM被叫做什麼,只要我們能夠從本質上理解SVM所要表達的思想,以及SVM到底需要我們去做什麼,我們該怎麼樣使用SVM,能否將其做出新的推廣和延伸,那麼這樣的話,目的就達到了。
Support Vector Machine
有關SVM的歷史,在這裡就不多說了,可以說他的開創養活了在深度學習出現之前的大多數phd,那麼,儘管現在SVM出現的場合不多了, 但是這麼重要和完美的演算法,我們還是要必須掌握的。
SVM可以說是最棒的「off-the-shelf」監督學習演算法了,要學習SVM,我們首先必須要學會margins的概念。以及在分類數據的時候,所使用到的「gap」。知道了這兩個點後,我們就要去談論一下最優間隔分類器,拉格朗日的對偶性。這兩個點知道後,我們在來學習有關kernels的概念,藉助kernel的概念來幫我們解決在高維空間的分類問題。最後,我們需要掌握的就是SMO演算法,通過SMO演算法完美的實現SVM演算法。
Margins:
通過辣雞郵件分類的例子,我們想要找到一個分類面,使得該分類面能夠將ham郵件和spam郵件區別開來。從圖中,可以看出,這兩類數據一定是可以線性可分的。那麼,我們首先畫出一個決策面。
沒毛病,這條決策邊界將兩類數據完美的分開了。
老鐵,沒毛病,這條決策邊界也將兩類數據完美的分開了。
同樣沒毛病,,,這三條決策邊界都可以當成我們最終需要的solution。
那麼, 問題就來了,既然這個問題有這麼多的solution,我需要找一個optim的solution,我們該怎麼做呢?該用什麼量來衡量各個solution之間的好壞呢?
還是繼續回到我們先前學到的東西,logistics regression。為什麼要再次拿出來logistics regression呢,因為logistics regression在我們進行supervised learning的學習過程中,可以說是非常重要的一個演算法,不論是deep learning還是各種有關AI的領域都能看到他的影子。
回顧下,logistics regression是如何做二分類的。
- 我們首先將 通過 進行建模。
- 如果 ,我們就將input的x判定為Class1,該式子的等價形式就是
- 關於將Input的x判定為Class2,同理分析。
那在logistics regression中,我們是如何評價分類性能的好壞的呢?
- 越大,也就是說 越接近1,我們就有很高的confidence去說,該input的x很大可能性被分配到Class2
- 將上述要說明的進行定性分析就是,
- 當 的時候,我們有很大的confidence確定
- 當 的時候,我們有很大的confidence確定
那麼,在求解logistics regression問題的過程中,我們需要通過給定的training set來找到一個這樣的 ,使得該 滿足這樣的性質:
- 無論何時 ,都能得到
- 無論何時 ,都能得到
那這個時候,問題又來了,我們該怎麼在沒有概率表示的情況下,來定義一個classifier的confidence呢?
繼續回到辣雞郵件分類的例子
我們觀察到圖中的三個點,分別為A,B,C。圖中的黑色實線,為該問題的一個決策面。發現點A距離決策面非常的近,然後是點B。點C距離決策面非常的遠。
那麼,我如果現在問你這樣的問題,你覺得點C屬於哪個類別?你肯定會毫不猶豫的說點C一定屬於Spam類。但是,我如果問你點A呢,你可能並不會像判斷點C那麼有自信,因為點A距離決策面實在是太近了,如果我稍微的改變下這個決策面,點A也許就有可能被分類到Ham類別去了。對於點B的回答,你的confidence肯定是處在點A和點C之間。
通過這個問題,我們知道了,對於一個分類器,如果,我們能夠將training set中的所有正確的分類的sample都以非常大的confidence分對,那麼,這個classifier的就是一個非常nice的classifier了。(想一想,是不是這個意思?)
Notation
還是回顧下,我們前面是怎麼做二分類的。
- 定義一個決策面
- 如果 ,那麼,我們就能得到
- 如果 ,那麼,我們就能得到
接下里,我們就要引入SVM問題的兩個基本概念。
- 函數間隔(function margin)
- 幾何間隔(geometric margin)
先來說說函數間隔
- 當給定一個training set ,函數間隔這樣定義
- 如果 ,那麼 就應該是一個非常大的正數。
- 如果 ,那麼 就應該是一個絕對值非常大的負數。
- 如果 ,我們就說,這個classifier對於第i個sample的判斷是正確的。
- 函數間隔的取值越大,就越說明這個classifier所做的正確分類的confidence就越大。
關於上面這4點,請務必搞清楚,其實說的清楚了,只要這些概念理解了,那麼函數間隔就沒什麼問題了。最後,由於training set有n個sample,那麼就會算出來n個函數間隔,我們只要選取其中最小的一個函數間隔作為整個classifier的函數間隔就行了
OK. 函數間隔的內容介紹完了,接下來,就講講什麼是幾何間隔(geometirc margin)
咦?剛剛不是已經定義了一個叫做函數間隔的變數了么?並且函數間隔已經可以很清楚的表達我們一開始所需要解決的confidence問題了,那為什麼還要多此一舉的在定義一個叫做幾何間隔的東西?
繼續回到剛剛上面的式子 ,假如現在 ,那麼只要求 是一個正數,並且越大越好,不就能滿足我們所謂的最大confidence了嗎?
但是,如果我們將最初的 替換成了 ,那麼函數間隔自然而然也被擴大了2倍。這也就是說,在我們探索 對於classifier分類性能的影響的時候,任意改變 的值後,會使得我們先前所要表述的東西缺少了實際的含義。
那麼解決方法就是最常見的規則化了。
考慮上面這個圖, 來表示線段AB的長度,且對於A點的描述是這樣的:
- input為
- label為
- 點A到決策邊界的距離是
那麼,通過上面的信息,我們就能得出點的B的信息:
- input為
- 由於B點在決策面上,所以
通過將input帶入到決策面方程,得到
解出來:
接下來,後面的定義,就和函數間隔是一樣的了。
注意到,當 的時候,函數間隔和幾何間隔就相等了。
在回到剛剛那個問題,如果此時的 變成了 ,那麼幾何間隔的值是不會發生變化的。
同樣,求取一個classifier的幾何間隔
Optimal Margin Classifier
通過上面的函數間隔和幾何間隔的學習,我們接下來看看如何通過這兩個間隔來得到一個最優的間隔分類器。通過將我們的目標公式化:
通過上面的分析,我們知道如何任意增加 的倍數將不會改變幾何間隔對於整個model所帶來的影響。那麼我們令 ,則就把原問題轉化為了一個更加nice的問題
看到這個問題,很多人就很開心了,因為這是一個凸的二次規劃問題,並且這個問題的約束也是線性的,那麼通過現成的QP程序就可以求解了。
有了上面這三個知識點:
- 函數間隔
- 幾何間隔
- 最優間隔分類器
如果你沒搞懂,請不要往下看了,繼續回啃上面的內容,因為上面這些內容是下面更近一步介紹SVM的基礎,請務必搞清楚每個公式和概念之間的關係。
Linearly Separable SVM
- Input:一個線性可分的training set
- Output:一個決策函數和一個可以分開兩類數據的超平面
- Solution: , 通過解決上面這個優化問題,從而得到最optim的解
- 我們就得到了分類超平面: ,決策函數:
好了,有了線性可分的SVM了,那麼下來,就說說什麼是support vector?support vector其實就是分離超平面上的點,
- 那麼對於所有的support vector,滿足
- 函數間隔:
- 幾何間隔:
- Margin:
Lagrange duality
關於優化問題,我們在學高數的時候就學過,使用拉格朗日數乘法來做,當時講的約束都是等式約束,即下面的形式:
- 那麼使用拉格朗日數乘法得到:
- 我們只需要分別對 和 求偏導,令其等於0就可以得optim solution
當我們把優化問題的約束改成不等式約束的時候,就會得到下面的形式:
- 這裡比上面的式子,多一步,把這個優化問題叫做primal optim problem.
- 那麼使用拉格朗日數乘法得到:
考慮下面的等式:
其中的以P為下標表示的是該問題的primal問題,也就是說,上述等式在 和 的情況下是成立的,也即 。
如果上面兩個條件不成立的話,那麼
- 比如拿 來說,由於所有的 ,那麼 中的第二項將趨向無窮大
- 同理,當 的時候,上式的第三項也將區域無窮大
通過上面的分析,我們就知道了,我們的優化問題就是為了求
為了在下面的式子中方便推導,我們令
類比原問題的定義,我們在定義一個該問題的對偶問題,
那麼接下來,我們就能定義一個對偶問題的優化問題:
為了方便今後再次使用,我們令
有了上面一系列的描述後,我們來看看 和 有什麼關係。
因為 實質上是求取max,而 實質上是求取min,所以說,本質上的話
但是在某些條件下, 是成立的。而我們需要的就是這樣的等式,使得原問題不好解的問題,我們通過解決他的對偶問題就可以得到解決。
通過查閱相關資料,知道了等號成立的條件是:
- f和g分別是凸的函數
- 是仿射的
- 是有意義的
這個時候,我們就一定能找到 使得他們成為原始問題的解,同樣也是對偶問題的解。
這裡就要介紹一個非常重要的概念,KKT條件
KKT條件
- KKT的對偶互補條件,相當的重要
因為KKT條件後,我們就知道,如果找到能夠滿足KKT條件的 ,那麼它就一定是是原問題也是對偶問題的解。
關於上面的KKT對偶互補條件,是非常重要的,現在對其做一個簡要的分析
- 由 知
- 當 ,則
- 當 ,則
這兩點有什麼作用呢?在後面,我們會看到,其實SVM中真正起作用的只有少量的support vector。
好了,該講的基礎都講完了,現在,我們再次回到最優間隔分類器的講解,其對應的優化問題為:
我們通過重新改寫s.t.裡面的內容,得到:
那麼結合上面的分析,當 的時候, ,說明此時的input為支撐平面上的點,這些點就叫做support vector。而當 的時候, ,說明此時的點都是分類正確的點,他們要麼在Class1的一側,要麼在Class2的一側。
對於 的理解,可以把它當做是一個權重。為什麼呢?當其大於0的時候,說明它在整個優化問題中起到了作用,那麼大於0的時候,對應的向量就是support vector。當其等於0的時候,說明此時它所對應的input不起作用,對應的都是那些分類正確的點。我們知道,在整個training set中,support vector的數量是遠遠小於整個training set的。
圖中,處於虛線上的點就是support vector
這個時候,我們就能通過拉格朗日數乘法來求解我們的優化問題了
上面這個等式中,只有 ,而沒有 ,因為我們僅僅只有不等式的約束,而沒有等式的約束,所以不需要
下面,我們就來找找這個問題對應的對偶問題。通過固定 ,來尋找 使得 達到最小,也即
那麼,還是用最常規的套路來求解,分別求目標函數對於 和 的偏導數,然後令其為0
我們得到下面的兩個等式:
把它們分別帶入 中,我們得到
則,對偶形式的優化問題就為:
- s.t.
關於 怎麼求,後面會講一個通過SMO演算法來求解。
好了,有了上面的一步一步的推導,我們現在的目標是求出optim的
通過上面求導後得到的式子知
下面來求 ,我們知道了在支撐面上的點滿足
對等號兩邊同時乘以 ,則我們得到
通過前面對於 的分析,我們知道,如果input對應為support vector,那麼其值大於0,
如果對應於那些分類正確的點, 的值為0,如果其值為0,則求出來的 ,關於分離超平面方程 ,則得到 ,所以,這並不是我們想要的。故,我們所討論的 都應該是大於0的,也就是那些對應support vector。
則我們得到
有了 和 ,
- 那麼分離超平面方程為:
- 決策函數為:
好了, 有關線性可分的SVM就講完了,我們來做一個conclusion
- 一定要記住, 對應的是support vector,且support vector僅僅是整個training set中的一小部分數據
- 在計算 的時候,我們僅僅需要做的就是計算training set中的每個x與support vector的x的對應內積,就能夠求出optim的
其實上面所講的這些,又有一個新的名字,叫做 hard-margin SVM。那麼有hard-margin,自然而然就會對應 soft-margin,我們下面就來講講什麼是soft-margin。
Soft-Margin SVM
如果在平面上,對應的兩類數據不能夠線性可分了,這個時候,我們該怎麼使用SVM來求解呢?(那就說明,hard-margin對應的都是在平面上可以線性可分的數據)
我們可以通過引入鬆弛變數 來允許這種誤分類和雜訊數據,通過這樣的方法來進行SVM就叫做soft-margin。
那麼,新的約束條件就是:
在增加一個懲罰項:
那麼,此時的優化問題就變成了
繼續將該問題轉化為拉格朗日數乘法來做,以及還是先尋求原問題的對偶問題,操作和hard-margin是一模一樣的,過程我就不寫了,畢竟手碼公式,我就寫出最終的結果。
對偶形式的優化問題為:
相比於hard-margin來說,此時的約束條件多了一個C的限制,也就是說,以前的C是沒有限制條件的,現在的C要比以前更加嚴格了。
其他條件都沒有發生變化,那麼此時的分離超平面方程還有決策函數與hard-margin時的SVM保持一致。
那麼,最後,我們就對 做一個總結:
- 當 的時候,對應的就是 所有分類正確的點的集合
- 當 的時候,對應的就是 所有在支撐邊界上的support vector
- 的時候,對應都是那些分類錯誤的點的集合,
OK,現在,我們來討論討論SVM的loss,因為,我們知道,SVM是在做一個二分類的問題,二分類問題的loss就是一般意義上的0-1損失,即
我們知道,如果對應正確分類的樣本,則滿足 ,則在計算損失的時候,這部分提供的Loss應該為0,而 部分提供的Loss應該為1。
所以,我們構造如下優化目標:
觀察上述優化目標
- 當C趨向無窮大的時候,如果要求上述目標的最小值,那麼求和項對應的應該是0,那也就是說,0-1損失為0,也即所有樣本點均分類正確。不允許出現分類錯誤的點。
- 當C取有限值的時候,就能夠滿足我們需要的目標了,允許一些數據點出錯
然而,通過0-1損失的曲線,我們知道, 它非凸,非連續,數學性質不好,使得上述優化目標並不容易求解,於是,我們就要去尋求一些能夠做替代的替代損失函數來替換0-1損失,他們通常是凸的連續的函數,並且是0-1損失的上界。
- hinge損失:
- 指數損失:
- 對率損失:
三種損失函數對應的曲線圖如圖所示
如果我們選用hinge損失,則優化的目標函數變成
這講的內容就講完了,SVM還有(下)這一部分,關於下的部分,主要講解有關kernel在SVM上面的應用,以及SMO演算法求解optim的
推薦閱讀:
※語音識別領域的最新進展目前是什麼樣的水準?
※對於一個可以窮舉的問題,比如五子棋,深度學習得到的模型和窮舉的演算法有啥異同?
※GPU對CNN計算的加速原理到底是怎樣的?
※關於這些用於深度學習的機器配置,合理嗎,哪個好?
※如何評價谷歌的xception網路?
TAG:机器学习 | 深度学习DeepLearning | 人工智能 |