Kernel Methods (4) Kernel SVM

(本文假设你已经知道了hard margin SVM的基本知识.)
如果要为Kernel methods找一个最好搭档, 那肯定是SVM. SVM从90年代开始流行, 直至2012年被deep learning打败. 但这个打败也仅仅是在Computer Vision 领域. 可以说对现在的AI研究来说, 第一火的算法当属deep learning. 第二火的仍是SVM. 单纯的SVM是一个线性分类器, 能解决的问题不多. 是kernel methods为SVM插上了一双隐形的翅膀, 让它能翱翔于AI研究的天空, 因为kernel methods可以将线性SVM变成非线性的.

问题描述

  • 给定:
    • 一个training set \(D\), 由\(m\)个二元组\((x_i, y_i)\)组成.
      • \(x_i\)是一个\(d\)维列向量, \(x_i \in R^d\)
      • \(y_i = \pm 1\), 代表\(x_i\)所属类别
      • \(i \in [1, m]\)
    • 一个kernel function \(kappa\)
  • 目标: 用D训练一个kernel svm分类器, 判断测试样本\(x \notin D\)的类别\(y\)

目标函数

假设\(\kappa\)对应的feature mapping function为\(\Phi\), 那么\(\Phi(x)\)\(x\)从原始输入空间\(\chi:R^d\)映射到一个线性可分的特征空间\(H:R^n\). 这时用SVM对新得到的训练数据\((\Phi(x_i), y_i)\)进行线性分类.
SVM的优化目标是maximum margin. 这个margin是指正负两类decision boundaries的距离.
两个decision boundaries的方程为:

\[w^T \Phi(x) + b = \pm 1 \]

它们的距离为:

\[margin = \frac {2}{||w||} \]

最大化\(d\)的值就是最小化\(||w||\)的值, 所以SVM的优化目标又可以写为:

\[minimize : J(w) = \frac 12 w^T w \]

因为需要正确分类所有的training data, 所以需要满足的约束条件为:

\[y_i(w^T \Phi(x_i) + b) \ge 1, \forall i\in[1,m] \]

对偶问题

上述优化问题的Lagrange multipliers function为:

\[J(w, b, \alpha_1, \dots \alpha_m) = \frac 12 w^Tw - \sum_{i = 1}^m \alpha_i[y_i(w^T\Phi(x_i) + b) - 1], \alpha_i \ge 0 \]

它取得最小值的必要条件为

\[\frac {\partial J}{\partial w} = w - \sum_{i = 1}^m \alpha_i y_i \Phi(x_i) = 0 \]

\[\frac {\partial J}{\partial b} = \sum_{i = 1}^m \alpha_i y_i = 0 \]

\[\to w = \sum_{i = 1}^m \alpha_i y_i \Phi(x_i) = Z^T \beta \]

其中

\[Z = \left[ \begin{matrix} \Phi(x_1)^T\\ \Phi(x_2)^T\\ \vdots \\ \Phi(x_m)^T \end{matrix} \right] \qquad \beta = \left[ \begin{matrix} \alpha_1y_1\\ \alpha_2y_2\\ \vdots \\ \alpha_my_m \end{matrix} \right] \]

\(\to\)

\[w^Tw = \beta^T Z Z^T \beta = \beta^TK\beta \]

\[w^T\Phi(x_i) = \beta^T Z \Phi(x_i) = \beta^T k_i^T = k_i\beta \]

其中, \(K\)是kernel matrix, \(k_i\)\(K\)的第\(i\)行.
代入 \(J(w, b, \alpha_1, \dots \alpha_m)\), 就得到了对偶问题:

\[maximumize: W(\alpha) = \sum_{i=1}^m \alpha_i + \frac 12 \beta^T K \beta - \sum_{i=1}^m \alpha_iy_ik_i\beta \]

\[= \sum_{i=1}^m \alpha_i + \frac 12 \beta^T K \beta - \beta^T K \beta \]

\[= \sum_{i=1}^m \alpha_i - \frac 12 \beta^T K \beta \]

\[= \sum_{i=1}^m \alpha_i - \frac 12 \sum_{i=1}^m\sum_{j=1}^m \alpha_i\alpha_j y_i y_j \kappa(x_i, x_j) \]

它需要满足两个约束条件:
\((1)\sum_{i = 1}^m \alpha_i y_i = 0\)
\((2)\alpha_i \ge 0\)
可以解出\(W(\alpha)\)里包含的未知参数\(\alpha = (\alpha_1,\dots, \alpha_m)\).具体解法先略过.

得到\(w\)\(b\)

\(\alpha\)已知后, 可以求得\(w\):

\[w = \sum_{i = 1}^m \alpha_i y_i \Phi(x_i) \]

现在就差\(b\)了. 如何求\(b\)呢? 现在回头想想SVM里的Support Vector的概念. 对于位于decision boudaries上的样本, 它们的\(y_i(w^T\Phi(x_i) + b) = 1\). 所以\(b\)可以根据支持向量, 即\(\alpha_i \neq 0\)对应的\(\Phi(x_i)\)来求得, 用\(\Phi(x_{sv})\)表示.

\[b = y_{sv} - w^T\Phi(x_{sv}) = y_{sv} - \sum_{i = 1}^m \alpha_i y_i \Phi(x_i)^T \Phi(x_{sv}) = y_{sv} - \sum_{i=1}^m \alpha_i y_i \kappa(x_i, x_{sv}) \]

SV会存在多个, 理论上每个SV求出来的\(b\)应该是相等的. 但在现实情况中会存在计算误差, 所以一个更robust的做法是利用所有的SV求出各自的\(b\), 然后取平均值.
这个时候, \(w\)中还有\(\Phi\), 真实值是未知的, 但没关系. \(b\)则完全已知了.

预测新样本的类别

最后得到的SVM模型为

\[y = sgn(w^T\Phi(x) + b) = sgn(\sum_{i = 1}^m \alpha_i y_i \Phi(x_i)\Phi(x) + b) = sgn(\sum_{i = 1}^m \alpha_i y_i \kappa(x_i, x) + b) \]

posted @ 2016-05-24 20:50  宁静是一种习惯  阅读(527)  评论(0编辑  收藏  举报