此次的課程筆記和上次隔了很久,由於爲了搞懂 SVM 花了很多時間。和以前 神經網絡 課程同樣,Ng 在 Coursera 上講述的內容很是有限,要搞懂 SVM 你只能尋求於其餘方面的資料。通過對網上一些內容的對比後發現斯坦福的 CS229 講義寫得很是清晰。CS229 是 Andrew Ng 在斯坦福大學開設的機器學習課程,Coursera 上的課程能夠說是 CS229 的簡化版本,並且整個課程的內容還在不斷更新,有興趣的同窗能夠把它做爲更進一步的參考資料。( 我已經將講義和 SMO 算法的論文與代碼放在一塊兒了方便你們下載 )html
此次的課程筆記會闡述 SVM 的主要思路,從 最大間距分類器 開始,而後經過 拉格朗日對偶 獲得原問題的 對偶 問題,使得咱們能夠應用 核技巧( kernel trick ),用高效的方式解決高維問題。git
點擊 課程視頻 你就能不間斷地學習 Ng 的課程,關於課程做業的 Python 代碼已經放到了 Github 上,點擊 課程代碼 就能去 Github 查看( 沒法訪問 Github 的話能夠點擊 Coding 查看 ),代碼中的錯誤和改進歡迎你們指出。github
如下是 Ng 機器學習課程第六週的筆記。算法
考慮 邏輯迴歸 的 預測函數 。當 或 時, 接近於 1 和 0,所以咱們能十分確信該樣本的分類。直觀的表達就是樣本越是遠離 決策邊界,它的分類也就越清晰。因此天然想到若是在多個 決策邊界 之間選擇,咱們會選擇離全部樣本都比較遠的那個( 考慮線性的狀況 )。網絡
爲了獲得這樣的決策邊界,咱們首先來看看如何用數學方式表達這個問題。經過一些簡單的 計算幾何 知識能夠計算出每一個樣本到 決策邊界 的距離( geometric margin ), 。爲了方便以後的推導,還須要定義一個 functional margin, 。在接下來的 SVM 討論中,咱們約定 的取值爲 ( 表示在決策邊界的哪一側,並使得距離的計算都是正的 ),當 時取 , 時取 。同時還須要定義 爲全部 中最小的值, 爲全部 中最小的值。因而要求離全部樣本都比較遠的決策邊界問題就成爲了在給定約束條件下求最值的問題。機器學習
然而上面的問題還不是一個直接可解的 優化問題,須要對它進行轉化( 思路是把它轉化爲標準的 凸優化問題 )。首先咱們用 functional margin 來替換 geometric margin,原問題變爲:ide
這個問題的解和原先的相同,不一樣點是在這個問題裏,咱們能夠對 隨意加倍而不用考慮 的大小了。爲了剔除 項的干擾,咱們適當地選取 的倍數使得 ,再加上最大化 至關於最小化 ,因而 優化問題 的最終形式能夠化爲:函數
對於這樣的問題,已經能夠用已知的 優化問題 算法來解決。不過對於 SVM,咱們會考察一個與之相對應的問題。爲了獲得這個問題咱們須要先了解下 拉格朗日對偶。學習
對於 拉格朗日對偶 涉及的問題不少,具體細節我推薦你們看 C299 的講義和 這篇博客。考慮通常的 凸優化問題:優化
設它的 拉格朗日函數 爲:
考慮函數:
在 知足約束條件的時候 ,在不知足時 。因此下式中的 的結果與原問題相同。
有意思的是對於這樣的問題,總有一個與之對應問題( 對偶問題 ),而且在特定條件下的解與原問題相同。要獲得 對偶問題,咱們只須要交換 的順序,考慮函數:
對偶問題 的結果 知足下式。經過觀察能夠發現它能夠做爲原問題的一個下界。
最後再來看看 對偶問題 的解在什麼狀況下與 原問題 相同:若是函數 都是 凸函數, 是 放射函數( 線性的 ),而且存在 使得 ,則優化問題有解 ,並有 。 這時咱們的解知足 KKT 條件,反之知足 KKT 條件的解也是優化問題的解( KKT 條件以下 )。
經過 拉格朗日對偶 咱們瞭解到以前的最大間距問題有一個與它對應的 對偶 問題。接下去咱們就經過 拉格朗日對偶 來獲得這個問題。 對於以前的問題令 ,並設 拉格朗日函數 爲:
根據對偶問題的定義,咱們先對於 求 的最小值,也就是分別對 和 進行求導獲得:
將 帶入 進行化簡獲得:
再加上 與 的約束條件,咱們獲得了最終的 對偶 問題:
紅色正是最重要的部分( 尖括號表示內積 ),它使得咱們能夠運用 核函數 的技巧來下降計算的複雜度,特別是須要將特徵映射到很高維甚至是無限維的狀況。
假設每一個樣本有三個特徵 ,一般須要把它們映射到更高維來擬合更復雜的函數,讓咱們假設 映射函數 爲:
在映射後兩個不一樣樣本間的內積爲:
不難發覺映射後 9 個特徵之間的內積就等於原先 3 個特徵間的內積的平方。其實等式最後的 就是 核函數 中的一種。對於有 個特徵的狀況 核函數 的計算值等於特徵映射爲 個時的內積值。對於本來須要計算 次的內積,經過 核函數 只須要計算 次。更通常的,核函數 至關於把特徵映射到 維。核函數 有不少種,其中有一種很是有意思被稱做 高斯核,它的計算結果至關於把特徵映射到無限維。
因此如今能夠理解 核函數 的意義了。因爲在 對偶問題 中只涉及特徵內積的計算,而 核函數 在低維計算的值等於特徵映射到高維後的內積值,所以咱們可以得到至關高效的方法來求解咱們的問題。( 關於 核函數 更詳細的討論請看 C299 的講義 )
簡單說說 SVM 的正則化,爲了解決數據集線性不可分的狀況,咱們適當調整原問題,使得間距能夠比 1 小,但相應的咱們要在優化目標中加入必定的代價。
對於改變後的問題,一樣可使用 拉格朗日對偶 來找到它的對應問題,這個問題也就是 SMO 算法所要解決的問題:
這裏介紹一下 SMO 的主要想法,算法的具體細節能夠參考論文。對於沒有約束條件的優化問題 ,咱們能夠依次選取 並固定其它變量來取得函數的最值,不斷這樣重複直到函數的值收斂( 以下圖 )。
對於 SVM 中的 對偶 問題,思路差很少,每次選取兩個變量 ,固定其它的變量。因爲要知足必定的約束條件, 能夠由 表示 。從而優化目標能夠化爲一個關於 的二次多項式 求得最值。固然這裏還須要考慮 的約束範圍,對結果進行剪裁。最後不斷重複這個過程直到優化目標收斂。So~,第六週的內容就是這些了,謝謝你們耐心閱讀。
P.S. 這周的內容壓縮的有些嚴重,建議你們好好閱讀下 CSS229 的講義。隨着 Andrew Ng 的課程即將接近尾聲,我準備開始作一些小項目練練手,畢竟可以學以至用纔是真正的學習。對於平時看到啥有意思的東西,有啥有意思的想法都會發在 微博 上,歡迎你們一同窗習 (●—●)~