浅学支持向量机(含具体推导、核函数)

参考了西瓜书,《机器学习》周志华

背景

在超平面(比如三维立体,甚至更高维)上,找到一个分类面

\[\boldsymbol{w}^T \boldsymbol{x} + b = 0 \]

看起来很陌生,其实直线方程和 \(Ax + By + C = 0\) 一个道理,只不过拓展到了高维,另外注意这里的 \(\boldsymbol{x}\) 是指一个高维变量

使得分类面上方都是正例(\(y = +1\)),下方都是反例(\(y = -1\)

支持向量机

如果止步于此,就只是普通的线性模型罢了,而接下来引出支持向量最重要的特性——稀疏性

样本到分类面距离为

\[|r| = \frac{\boldsymbol{w}^T \boldsymbol{x} + b}{||\boldsymbol{w}||} \]

其中,分母的符号是向量二范数,即向量的欧几里得距离,也就是向量取模,另外注意这里的 \(\boldsymbol{x}\) 是指一个样本

同直线方程一样,参数等比例放缩时,方程本质不变,即所代表的分类面不变,那么不妨让距离分类面最近的点 \(\boldsymbol{x}_p\) 的分母部分值最小(类似单位化,只不过我们平常的单位化都是把分母置为 \(1\) ),即 \(\boldsymbol{w}^T \boldsymbol{x}_p + b = \pm 1\),则有

\[y_i \cdot (\boldsymbol{w}^T \boldsymbol{x}_i + b) \geq 1 \]

注意这里 \(\boldsymbol{x}_i\) 是指第 \(i\) 个样本点,\(y_i\) 是正反例的取值

显然,我们要让样本离分类面尽可能远,\(|r|\) 尽可能大,那么分母就要尽可能小

则问题就变成了

\[\begin{aligned} \min_{\boldsymbol{w},b}\ \ &\frac{1}{2} ||\boldsymbol{w}||^2\\ \text{s.t.}\ \ &y_i(\boldsymbol{w}^T \boldsymbol{x}_i + b) \geq 1 \end{aligned} \]

注意,系数 \(\frac{1}{2}\) 是为了之后求导化简方便,选择平方是为了省去二范数的开根并且保证单调性不变(都是非负的)

显然,该问题是凸优化问题,可以用现成的凸二次规划算法解决,但是还有一种性能更优的算法,需要以此引出对偶问题

拉格朗日乘数法

与线性判别分析 LDA 类似,对约束下的凸优化问题,采用拉格朗日乘数法

首先化成目标函数取最小,约束条件小于等于 0 的一般形式,然后左边乘上拉格朗日乘子

\[\begin{aligned} L(\boldsymbol{w},b;\boldsymbol{\mu}) &= \frac{1}{2}||\boldsymbol{w}||^2 + \sum_{i=1}^m\mu_i \cdot g(\boldsymbol{x}_i)\\ &= \frac{1}{2}||\boldsymbol{w}||^2 + \sum_{i=1}^m\mu_i\big(1-y_i(\boldsymbol{w}^T \boldsymbol{x}_i + b)\big) \end{aligned} \]

再次提醒,其中 \(\boldsymbol{x}_i\) 不是变量,是样本数据,是已知量,\(\boldsymbol{w},b\) 是待优化参数,\(\boldsymbol{\mu}\) 是拉格朗日乘子

仅此转化,问题还不等价,因为拉格朗日乘子法针对的是等式约束,而这里是不等式约束,还需要满足 KKT 条件:

\[\left\{ \begin{aligned} &g(\boldsymbol{x}_i) \leq 0\\ &\mu_i \geq 0 \\ &\mu_i \cdot g(\boldsymbol{x}_i) = 0 \end{aligned} \right. \]

最主要的就是第三个条件,要么 \(\mu_i = 0\),要么 \(g(\boldsymbol{x}_i) = 0\),前者即代表最优解不在等式约束上(即在 \(g(\boldsymbol{x}_i) < 0\) 内有最优解),后者表示最优解在等式约束上,即此时不等式约束取等了,此时的 \(\boldsymbol{x}_i\) 即为所谓支持向量

不难看出,这相当于我们找出了 \(\mu_i\) 不等于 0 的项作为约束条件,去空间上找到 \(\boldsymbol{w},b\) 使得原函数取得最小值的解

这便是支持向量机最大的特点——稀疏性

偏导

接下来,将 \(L(\boldsymbol{w},b;\boldsymbol{\mu})\) 分别对 \(\boldsymbol{w}, b\) 求偏导得

\[\begin{aligned} L(\boldsymbol{w},b;\boldsymbol{\mu}) &= \frac{1}{2}\boldsymbol{w}^T I\boldsymbol{w} + \sum_{i=1}^m (\mu_i - \mu_iy_i \boldsymbol{x}_i^T \boldsymbol{w} - \mu_iy_ib) \\ \frac{\partial}{\partial \boldsymbol{w}} L(\boldsymbol{w},b;\boldsymbol{\mu}) &= I\boldsymbol{w} - \sum_{i=1}^m \mu_iy_i\boldsymbol{x}_i \\ &= \boldsymbol{w} - \sum_{i=1}^m \mu_iy_i\boldsymbol{x}_i \end{aligned} \]

注意这里 \(I\) 表示单位阵,这里做了两个转换,一个是向量二范数的等价形式,展开计算一下就能理解,另一个是我自己看的比较舒服的,把变量放到最后的形式,求导利用了两个公式

\[\begin{aligned} \frac{\partial}{\partial \boldsymbol{w}} \boldsymbol{w}^T \boldsymbol{x} = \frac{\partial}{\partial \boldsymbol{w}} \boldsymbol{x}^T \boldsymbol{w} &= \boldsymbol{x} \\ \frac{\partial}{\partial \boldsymbol{w}} (\boldsymbol{Aw}+\boldsymbol{u})^T\boldsymbol{B} (\boldsymbol{Aw}+\boldsymbol{u}) &= 2\boldsymbol{AB}(\boldsymbol{Aw} + \boldsymbol{u}) \end{aligned} \]

同理对 \(b\) 求导(一维变量求导不过多赘述),令二者等于 0,得

\[\begin{aligned} \boldsymbol{w} &= \sum_{i=1}^m \mu_i y_i \boldsymbol{x}_i \\ 0 &= \sum_{i=1}^m \mu_i y_i \end{aligned} \]

回代入原式得

\[\begin{aligned} L(\boldsymbol{w},b;\boldsymbol{\mu}) &= \frac{1}{2}\sum_{i=1}^m \mu_i y_i \boldsymbol{x}_i^T \sum_{j=1}^m \mu_j y_j \boldsymbol{x}_j + \sum_{i=1}^m \mu_i - \sum_{i=1}^m \mu_i y_i \boldsymbol{x}_i^T \sum_{j=1}^m \mu_j y_j \boldsymbol{x}_j \\ &= \sum_{i=1}^m \mu_i - \frac{1}{2}\sum_{i=1}^m \sum_{j=1}^m \mu_i \mu_j y_i y_j \boldsymbol{x}_i^T \boldsymbol{x}_j \end{aligned} \]

对偶问题转化

\[\inf_{\boldsymbol{w}^*,b^*} L(\boldsymbol{w}^*,b^*;\boldsymbol{\mu}) \leq L(\boldsymbol{w}^*,b^*;\boldsymbol{\mu}) \leq \frac{1}{2}||\boldsymbol{w^*}||^2 \]

inf 表示下确界 infimum,\(\boldsymbol{w}^*,b^*\) 表示,最后一个不等式放缩掉了约束项(必定小等于 0)

注意最左边对于 \(\boldsymbol{w},b\) 来说是与其无关的"常量",而与 \(\boldsymbol{\mu}\) 有关的"变量"

可以理解为,对于一个二次函数,找到一条平行于 x-axis 的直线 y=b 不断向上移动,触碰到这个二次函数的最底部时,取得不等式的相等条件,即优化参数 \(\boldsymbol{\mu}\) 使得 \(L(\boldsymbol{\mu};\boldsymbol{w}^*,b^*)\) 最大

\[\begin{aligned} \max _{\boldsymbol{\mu}}\ & L(\boldsymbol{\mu};\boldsymbol{w},b) = \sum_{i=1}^m \mu_i - \frac{1}{2}\sum_{i=1}^m \sum_{j=1}^m \mu_i \mu_j y_i y_j \boldsymbol{x}_i^T \boldsymbol{x}_j \\ \text{s.t.}\ & \sum_{i=1}^m y_i \mu_i = 0 \\ & \mu_i \geq 0 \end{aligned} \]

解出 \(\boldsymbol{\mu}\) 后即可求出 \(\boldsymbol{w},b\),此时可以舍去 \(\mu_i = 0\) 的样本,很好地体现了 SVM 的稀疏性

注意 \(b\) 的求解方法是,将 \(\boldsymbol{w}\) 代入方程 \(y_i = \boldsymbol{w}^T + b\)

但是解参数的过程中 \(\boldsymbol{\mu}\) 是正比于样本数的,直接用二次优化反而使得问题更加复杂,实际过程中一般使用 SMO 迭代优化

SMO

类似线性方程组求解,超越方程求解的迭代法,求取一个近似解

首先确定一个初值 \(\boldsymbol{\mu}\),然后取出一对待更新变量 \(\mu_i, \mu_j\) ,原先的优化目标函数就具有如下形式

\[\begin{aligned} f(\mu_i, \mu_j) = P\mu_i + Q\mu_j + R\mu_i\mu_j + S \end{aligned} \]

\(0 = \sum_{i=1}^m \mu_i y_i\)

\[y_i \mu_i + y_j \mu_j = - \sum_{k \neq i, k \neq j} y_k \mu_k \]

则原优化目标变成一个只与 \(\mu_i\) 有关的二次优化问题,但是要注意 \(\mu_i, \mu_j \geq 0\) 的约束,或者说定义域

直观来看,KKT条件违背的程度越大,则变量更新后可能导致的目标函数值减幅越大。于是,SMO 先选取违背 KKT 条件程度最大的变量,第二个变量应选择一个使目标函数值减小最快的变量,但由于比较各变量所对应的目标函数值减幅的复杂度过高,因此 SMO 采用了一个启发式:使选取的两变量所对应样本之间的间隔最大

此时,可解得 \(\boldsymbol{w}\),为了增强模型鲁棒性,\(b\) 的一般取对每个支持向量解出的值的平均

核函数

为了将问题拓展到非线性空间,总是可以通过增加维数(当然可以不增加,甚至减少,比如 LDA)来将非线性分类问题映射到更高维的空间,使得问题在这个更高维度的空间线性可分,比如对异或问题 \(x_1 \oplus x_2\) 增加第三维度 \(x_1 x_2\)

最终,其实就是把样本 \(x_i\) 的 m 维数据拓展为 \(\phi(x_i)\) 的 n 维数据,分类面变为

\[\boldsymbol{w} \phi(\boldsymbol{x}_i) + b = 0 \]

注意到,此时大部分公式基本无差,只是 \(\boldsymbol{x}_i\) 变为 \(\phi(\boldsymbol{x}_i)\),但是有个关键地方

\[\begin{aligned} L(\boldsymbol{w},b;\boldsymbol{\mu}) = \sum_{i=1}^m \mu_i - \frac{1}{2}\sum_{i=1}^m \sum_{j=1}^m \mu_i \mu_j y_i y_j \phi(\boldsymbol{x}_i)^T \phi(\boldsymbol{x}_j) \end{aligned} \]

这里,我们记

\[\kappa(\boldsymbol{x}_i,\boldsymbol{x}_j) = \phi(\boldsymbol{x}_i)^T \phi(\boldsymbol{x}_j) \]

并称之为核函数,而对于每一对 \(i,j\),都有一个运算结果(标量),把这些标量按下标放入矩阵,即得到核矩阵

显然,从物理意义上出发,两个参数是对称的,或者说可交换位置的,故核矩阵是对称的。以及,本身向量内积某种程度上反映了两个向量的相似程度,主对角线上元素显然是较大的。此外,核矩阵运算结果是半正定的。

事实上,对于一个半正定核矩阵,总能找到一个与之对应的 \(\phi\),换言之,任何一个核函数都隐式地定义了一个称为 Reproducing Kernel Hilbert Space 的特征空间

那么如何构造核函数?答案是比较困难,一般有几个现成的核函数,其中线性核(其实就是普通 SVM,没做任何变换)、高斯核最常用

那原来的 \(\phi(\boldsymbol{x})\) 呢?注意我们这里只需要用到 \(\phi(\boldsymbol{x})^T\phi(\boldsymbol{y}) = \kappa(\boldsymbol{x},\boldsymbol{y})\) 所以无所谓,只要 \(\phi(\boldsymbol{x})\) 这个函数存在就行

软间隔

分类问题中,也有可能出现无法分类的情况(本身就存在一定的交叉地带),此时我们则需要引入软间隔概念

软间隔的核心思想就是:让不满足分类条件的(即分类错误的、在分隔带上的)样本所带来的代价尽可能小

对每个样本带来的代价,引入损失函数 \(\ell(x)\) 松弛变量 \(\xi_i\),其中 \(C\) 是正则化系数

\[\begin{aligned} \min_{\boldsymbol{w},b}\ \ &\frac{1}{2} ||\boldsymbol{w}||^2 + C \sum_{i=1}^m \ell \Big(y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b - 1)\Big) \\ \text{s.t.}\ \ &y_i(\boldsymbol{w}^T \boldsymbol{x}_i + b) \geq 1 - \xi_i, i = 1, 2 ,3, \dots, m \end{aligned} \]

其中损失函数 \(\ell\) 常用 0/1 损失函数 与 hinge 损失函数

\[\ell _{0/1} (z) = \left\{ \begin{aligned} &1, &z < 0 \\ &0, &z \geq 0 \end{aligned} \right. ,\ \ell _{hinge} (z) = \max(0, -z) \]

注:这里的 hinge 函数与周志华老师书的 hinge 函数 \(\ell _{hinge} (z) = \max(0, 1-z)\) 略有不同,如果直接代入,则会导致 \(y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b - 1)\) 小于 1 的情况也被考虑入损失,而事实上只能考虑到小于 0 的情况,这里应该是周志华老师书的记号没有表示清楚,原书的图大概也有点问题

那么接下来我们考虑 hinge 损失函数,则整个式子变为

\[\begin{aligned} \min_{\boldsymbol{w},b}\ \ &\frac{1}{2} ||\boldsymbol{w}||^2 + C \sum_{i=1}^m \xi_i \\ \text{s.t.}\ \ &y_i(\boldsymbol{w}^T \boldsymbol{x}_i + b) \geq 1 - \xi_i\\ & \xi \geq 0, i = 1, 2 ,3, \dots, m \end{aligned} \]

同样地,使用拉格朗日乘子法

\[\begin{aligned} L(\boldsymbol{w},b,\boldsymbol{\xi};\boldsymbol{\mu},\boldsymbol{\gamma}) &= \frac{1}{2}||\boldsymbol{w}||^2 + C \sum_{i=1}^m \xi_i + \sum_{i=1}^m\mu_i \cdot \big(1-\xi_i-y_i(\boldsymbol{w}^T \boldsymbol{x}_i + b)\big) - \sum_{i=1}^m \gamma_i \cdot \xi_i \end{aligned} \]

上式中,前三者为原函数变量,后二者为拉格朗日乘子,在研究对偶问题时请注意区别

KKT 条件

\[\left\{ \begin{aligned} &1-\xi_i-y_i(\boldsymbol{w}^T \boldsymbol{x}_i + b) \leq 0\\ &\mu_i \cdot \Big(1-\xi_i-y_i(\boldsymbol{w}^T \boldsymbol{x}_i + b)\Big) = 0 \\ &\mu_i \geq 0, \gamma_i \geq 0, \xi_i \geq 0 \\ &\gamma_i \cdot \xi_i = 0 \end{aligned} \right. \]

置偏导为 0 后

\[\left\{ \begin{aligned} & \boldsymbol{w} = \sum_{i=1}^m\mu_i y_i \boldsymbol{x}_i \\ & \sum_{i=1}^m\mu_i y_i = 0 \\ & C = \mu_i + \gamma_i \end{aligned} \right. \]

带入并化简对偶问题,得

\[\begin{aligned} \max_{\boldsymbol{\mu}} & \sum_{i=1}^m \mu_i - \frac{1}{2}\sum_{i=1}^m \sum_{j=1}^m \mu_i \mu_j y_i y_j \boldsymbol{x}_i^T \boldsymbol{x}_j \\ \text{s.t.} & \sum_{i=1}^m \mu_i y_i = 0, \\ & 0 \leq \mu_i \leq C,\ i = 1, 2, 3, \dots, m \end{aligned} \]

posted @ 2023-06-01 15:33  LacLic  阅读(33)  评论(0编辑  收藏  举报