IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【机器学习算法】支持向量机入门教程及相关数学推导 -> 正文阅读

[人工智能]【机器学习算法】支持向量机入门教程及相关数学推导

经典线性二分类算法:支持向量机(SVM)

可以毫不夸张的说,在深度学习算法尚未崛起之前,SVM一度是最受欢迎的机器学习算法之一。由于其优异的泛化性能以及鲁棒的应用场景,使其在学术界甚至工业界都有着十分广泛的应用。如果你翻看大约十年前的相关论文,就会发现SVM以及一些SVM的变体都是实验数据中不可缺少的Baseline和benchmark。以至于在CNN崛起之后,SVM算法推理过程的相对高效以及可解释性使得一些基于CNN的深度学习模型仍然使用SVM分类器执行流程中的特定任务,其中比较有名的要数目标检测算法RCNN(2014),使用SVM对CNN输出的ROI features进行分类:

请添加图片描述

当然,SVM在发展的过程中也衍生出了许许多多的改进以及变体,比如用于回归的SVR,用于文本分类的NBSVM,基于最小二乘的LSSVM,以及扩展到非线性分类的基于核函数的SVM等等。其中的原理和分类方法同经典的SVM大同小异。然而,SVM背后的分类原理以及涉及的数学优化方法仍然会使得一些刚接触SVM算法的新手(包括我)望而却步。因此在本篇博客中,我将会基于最原始的SVM分类器,加上自己的一些理解,对算法原理进行一个详细的介绍。

1. SVM进行二分类的基本思想

想到线性二分类算法,相信大家脑海中不自觉的就会产生这样一个画面,画面上是两堆属于不同类别的点,有一条直线恰好能把这两堆点分开来。在直线之上的这些点大于0,直线之下的点堆小于0。现在新来一个点,算法通过判断这个点代入直线方程即判断其属于直线的上方还是下方,进而预测这个点所属类别。

从感知机的缺陷引出SVM

一个经典的机器学习算法:感知机(perceptron),就是基于上述的分类原理,其中的直线就是算法通过最优化方法学习出的决策边界。我们今天的主角SVM也不例外,不过我们仍然可以横向对比一下,SVM和感知机算法的差异。

考虑以下三种决策边界:

请添加图片描述

如上图所示,如果说哪条直线对于图中点的分类效果最好,其实是无法进行比较的,因为三条线都能100%将图中不同类别的点完美的区分开来。在感知机看来,上面三种决策边界都是算法的最优解。(因此感知机算法的往往有无穷多解)

感知机的损失函数期望分类错误的所有样本到决策边界的距离之和最小,只和分类错误的样本有关(如果一条样本分类正确,那么它的损失函数为0)。如果z代表分类错误的样本,决策边界是wx+b=0,最小化感知机损失函数就是(基于点到超平面的距离公式):
a r g m i n ( W , b ) ∑ i = 1 m ( ∣ W t z i + b ∣ ∥ W ∥ 2 ) 等 价 于 : a r g m i n ( W , b ) ( ∣ W T Z + b ∣ ) argmin_{(W,b)}\sum_{i=1}^m (\frac{\left|W^{t} z_i+b\right|}{\|W\|_2})\\ 等价于:\\ argmin_{(W,b)} (\left|W^{T} Z+b\right|)\\ argmin(W,b)?i=1m?(W2?Wtzi?+b?):argmin(W,b)?(?WTZ+b?)
但如果此时新来了几个测试数据,三种决策边界的好坏便能很明显的体现出来:

请添加图片描述

很明显,如果依据前两条决策边界分类新来的样本点,就会产生错误(这实则就是过拟合),而第三条决策边界对于新来的样本点是鲁棒的。所以我们就可以下结论说第三条直线的分类效果最好,因为它对于测试数据的泛化能力强。但是,如何量化的衡量决策边界的泛化性能呢?光凭后知后觉的直观感受可不行,我们需要算法仅在训练数据上就能尽量学到第三种决策边界。

最大化分类间隔:SVM提高泛化性的insight

SVM算法在基于感知机决策方法的基础上,敏锐的察觉到了这一点。**如何度量一条决策边界的泛化能力,一个简洁且可行的方法是:对于训练数据中距离决策边界最近的那些点,我们希望它们离决策边界越远越好。**因此在损失函数中应该包含支持向量距离最大化的优化项。如下图所示:

请添加图片描述

那些离决策边界最近的样本点,我们也称作支持向量(Support Vector),这便是SVM名字的由来。

相应的,优化函数就是:
a r g m a x ( W , b ) [ ( m a r g i n ( W , b ) ) ] 其 中 : margin ? ( W , b ) = min ? i = 1 , 2 … . N 1 ∥ W ∥ 2 ? ∣ W T ? X i + b ∣ \begin{aligned} &argmax_{(W,b)}[(margin(W,b))] \\ 其中:\\ &\operatorname{margin}(W, b)=\min _{i=1,2 \ldots . N} \frac{1}{\|W\|_{2}} \cdot\left|W^{T} \cdot X_i+b\right| \end{aligned} :?argmax(W,b)?[(margin(W,b))]margin(W,b)=i=1,2.Nmin?W2?1???WT?Xi?+b??
其中的xi就表示离分类超平面(决策边界)最近的那些点(支持向量)。

SVM的数学本质:带不等式约束的最优化问题

然而,光优化支持向量的距离而不考虑样本是否分类正确也是不行的,因此,我们还需添加决策边界能够保证所有样本点分类正确的约束条件
{ W T X i + b > 0 , y i = 类 别 1 W T X i + b < 0 , y i = 类 别 2 \begin{cases}\boldsymbol{W}^{\mathrm{T}} \boldsymbol{X}_{i}+b >0, & y_{i}=类别1 \\ \boldsymbol{W}^{\mathrm{T}} \boldsymbol{X}_{i}+b <0, & y_{i}=类别2\end{cases} {WTXi?+b>0,WTXi?+b<0,?yi?=1yi?=2?
一个小trick是,我们将在决策边界上方的数据的标签人为的设置为1,将决策边界下方的标签设置为-1,这样一来,约束条件就可以合并为:
y i ( W T X i + b ) > 0 y_i(W^TX_i+b)>0 yi?(WTXi?+b)>0
这样一来,完整的带约束条件的优化函数就是
argmax ? ( W , b ) ( min ? i = 1 , 2 … . N 1 ∥ W ∥ 2 ? ∣ W T ? X i + b ∣ ) s . t . y T ( W T X + b ) > 0 \begin{aligned} &\operatorname{argmax}_{(W, b)}(\min _{i=1,2 \ldots . N} \frac{1}{\|W\|_{2}} \cdot\left|W^{T} \cdot X_i+b\right|)\\ &s.t.\\ &y^T(W^TX+b)>0 \end{aligned} ?argmax(W,b)?(i=1,2.Nmin?W2?1???WT?Xi?+b?)s.t.yT(WTX+b)>0?
用图示来直观理解:

请添加图片描述

化繁为简:化简优化函数的一些tricks

事实上,上面给出的优化问题仍然十分复杂,难以处理。就比如计算支持向量的最大间隔,每优化一步,算法还需要重新寻找支持向量,十分的不方便。

因此我们仍然需要对原始的优化函数做一个简化操作,这里又会用到一些小技巧:

对于支持向量而言,它们到决策边界的距离一定是一致的且是所有数据中最小的。并且我们知道,对于参数(W,b)的放缩并不会影响最终决策边界的位置,因此我们假设支持向量代入分类超平面得到的值(函数距离)为ξ:
min ? i = 1 , 2 … . N ∣ W T ? X i + b ∣ = ξ s . t . y i T ( W T X i + b ) ? ξ ; i = 1 , 2 , 3 , . . . , m \begin{aligned} &\min _{i=1,2 \ldots . N}\left|W^{T} \cdot X_i+b\right|=ξ\\ s.t.\\ &y_i^T(W^TX_i+b)\geqslantξ;i=1,2,3,...,m \end{aligned} s.t.?i=1,2.Nmin??WT?Xi?+b?=ξyiT?(WTXi?+b)?ξ;i=1,2,3,...,m?
两边同时除以ξ,就是:
min ? i = 1 , 2 … . N ∣ W T ξ ? X i + b ξ ∣ = 1 s . t . y i ( W T ξ X i + b ξ ) ? 1 由 于 W 和 b 都 是 优 化 问 题 的 变 量 , 相 当 于 将 原 始 W 和 b 替 换 为 W ξ , b ξ , 对 于 原 优 化 函 数 不 会 造 成 任 何 影 响 。 \begin{aligned} &\min _{i=1,2 \ldots . N}\left|\frac{W^{T}}{ξ} \cdot X_i+\frac{b}{ξ}\right|=1\\ &s.t.\\ &y_i(\frac{W^{T}}{ξ}X_i+\frac{b}{ξ})\geqslant1\\ &由于W和b都是优化问题的变量,相当于将原始W和b替换为\frac{W}{ξ},\frac{b}{ξ},对于原优化函数不会造成任何影响。 \end{aligned} ?i=1,2.Nmin??ξWT??Xi?+ξb??=1s.t.yi?(ξWT?Xi?+ξb?)?1WbWbξW?ξb??
因此对于支持向量距离最大化的优化问题就转化为这一简洁的形式:
argmax ? ( W ) ( 1 ∥ W ∥ 2 ) \operatorname{argmax}_{(W)}( \frac{1}{\|W\|_{2}} ) argmax(W)?(W2?1?)

此时取倒数可以将最大化转为最小化:
argmin ? ( W ) ( ∥ W ∥ 2 ) \operatorname{argmin}_{(W)}( \|W\|_{2}) argmin(W)?(W2?)
在对优化问题作了适当变形后,优化问题就转化成
min ? ( ∥ W ∥ 2 ) s . t . y i T ( W T X i + b ) ? 1 ; i = 1 , 2 , 3 , . . . , m \begin{aligned} &\operatorname{min}( \|W\|_{2})\\ &s.t.\\ &y_i^T(W^TX_i+b)\geqslant1;i=1,2,3,...,m \end{aligned} ?min(W2?)s.t.yiT?(WTXi?+b)?1;i=1,2,3,...,m?
(来自博主的虾bb:事实上,我曾想过把最大化支持向量到超平面的距离转化为最大化所有数据到超平面的距离(两者是等价的),这虽然也可以解决每迭代一次就寻找一次支持向量的繁琐,但由于每个点到超平面的距离都是不一样的(不能一股脑的全规定函数距离为1),因此这个问题反而也不好简化,反而是简化后的公式只计算支持向量能大大减小计算量。这大概也是为什么SVM只关注支持向量的缘由吧(只能说那些机器学习大佬们在这些问题上的数学认知的确比一般人来的深刻)

练手

好了,既然我们已经初步懂得了SVM算法的分类原理以及它的优化函数,我们就来举个超级无敌简单的例子练练手😂😴😴:

给定数据和标签,计算决策边界:

请添加图片描述

求解过程直接写纸上了:

请添加图片描述

然而,在普遍情况下,求解这个优化问题远不止上面这个例子这么简单。这是因为现实中数据量以及数据的维度往往都很大。在高维空间中我们无法通过画图辅助求解(图上的圆和约束空间的交点是一眼看出来的)。并且一般的带约束优化问题无法直接通过梯度下降等迭代方法求解

一种方法是,我们可以通过调用现有的凸二次规划软件包来求解上式所描述的优化问题。但是这无可避免的计算效率较低。这时候就需要一个强大的数学工具:**拉格朗日函数,对原始的带约束的优化问题转化为无约束的函数优化问题。**这样一来,求解原函数极值的问题就转化为求拉格朗日函数的极值问题。可以说,构造拉格朗日函数是求解带约束优化问题的重要方法。

温馨提示,接下来要开始硬核了🧠🧠

2. 将SVM优化函数进行转化

2.1 转化为拉格朗日函数

带约束条件的优化问题,如果满足以下形式,我们就可以使用拉格朗日函数进行转化:
min ? x ∈ R n f ( x ) ?s.t.? c i ( x ) ? 0 , i = 1 , 2 , ? ? , k h j ( x ) = 0 , j = 1 , 2 , ? ? , l \begin{aligned} &\min _{x \in \mathbb{R}^{n}} f(x) \\ &\text { s.t. } \\ &\quad c_{i}(x) \leqslant 0, \quad i=1,2, \cdots, k \\ &\quad h_{j}(x)=0, \quad j=1,2, \cdots, l \end{aligned} ?xRnmin?f(x)?s.t.?ci?(x)?0,i=1,2,?,khj?(x)=0,j=1,2,?,l?
转化为拉格朗日函数就是:
L ( x , α , β ) = f ( x ) + ∑ i = 1 k α i c i ( x ) + ∑ j = 1 l β j h j ( x ) L(x, \alpha, \beta)=f(x)+\sum_{i=1}^{k} \alpha_{i} c_{i}(x)+\sum_{j=1}^{l} \beta_{j} h_{j}(x) L(x,α,β)=f(x)+i=1k?αi?ci?(x)+j=1l?βj?hj?(x)
其中的α和β属于引入的拉格朗日乘数。

那么拉格朗日函数是如何求得原问题的最小值呢,我们可以通过几个例子来直观的理解下(为了方便可视化,以下的例子均使用二元函数,特此说明):

2.1.1假设优化问题的约束条件只有一个等式约束:

【我们都可以将等式约束转化为g()=0的形式讨论】
min ? ∈ R n f ( x , y ) ?s.t.? g ( x , y ) ? c = 0 \begin{aligned} &\min _{ \in \mathbb{R}^{n}} f(x,y) \\ &\text { s.t. } \quad g(x,y)-c=0 \end{aligned} ?Rnmin?f(x,y)?s.t.?g(x,y)?c=0?
请添加图片描述

构建拉格朗日函数求解就是:
L ( x , y , λ ) = f ( x , y ) + λ ( g ( x , y ) ) ↓ ? L ( x , y , λ ) = 0 ? ? f ( x , y ) = ? λ ( ? g ( x , y ) ) ? { ? f ( x , y ) ? x + λ ? ( g ( x , y ) ) ? x = 0 ① ? f ( x , y ) ? y + λ ? ( g ( x , y ) ) ? y = 0 ② ? L ( x , y , λ ) ? λ = g ( x , y ) = 0 ③ \begin{gathered} L(x, y, \lambda)=f(x, y)+\lambda(g(x,y)) \\ \downarrow \\ \nabla L(x, y,\lambda)=0 \\ \Downarrow \\ \nabla f(x,y)=-λ(\nabla g(x,y))\\ \Downarrow \\ \left\{\begin{array}{l} \frac{\partial f(x, y)}{\partial x}+\lambda \frac{\partial(g(x,y))}{\partial x}=0 ①\\ \frac{\partial f(x, y)}{\partial y}+\lambda \frac{\partial(g(x,y))}{\partial y}=0 ②\\ \frac{\partial L(x, y,λ)}{\partial λ}=g(x,y)=0 ③\\ \end{array}\right. \end{gathered} L(x,y,λ)=f(x,y)+λ(g(x,y))?L(x,y,λ)=0??f(x,y)=?λ(?g(x,y))????????x?f(x,y)?+λ?x?(g(x,y))?=0?y?f(x,y)?+λ?y?(g(x,y))?=0?λ?L(x,y,λ)?=g(x,y)=0??

图中,蓝色一圈一圈的圆圈表示f(x,y)的等高线,绿色的曲线表示约束条件g(x,y)=c,那么图中约束条件下取得的f(x,y)的最小值必然是f(x,y)的等高线与g(x,y)的等高线相切的位置 (即联立①和②求解,可以约去λ得到一个关于x,y的方程(忽略g()=c时的最优解是一个点集))。然后通过③,我们可以得到方程的约束(和c有关,确定点集中的一个点),联立①②③就可以得到最优解。

红字的描述仅在优化问题是凸优化的前提下成立,对于SVM而言它的优化问题就是凸函数,因此这里我们不考虑非凸优化的情况】(下面展示一种非凸优化的情况,此时求解拉格朗日函数梯度为0不一定是最值)

请添加图片描述

换句话说,就是寻找(x0,y0)使得λg(x0,y0)的梯度与f(x0,y0)的梯度反向。因此,求解拉格朗日函数的梯度就是相当于寻找它们相切的地方(梯度在一条直线上),然后用拉格朗日乘数λ作为g(x0,y0)的梯度的系数保证与f(x0,y0)的梯度等大反向,因此它们相加才会等于0(因此对于等式约束而言这里的λ必须不等于0):

2.1.2 假设优化问题的约束条件是不等式约束:

【我们都可以将不等式约束转化为g()<=0的形式讨论】
min ? ∈ R n f ( x , y ) ?s.t.? g ( x , y ) ? 0 \begin{aligned} &\min _{ \in \mathbb{R}^{n}} f(x,y) \\ &\text { s.t. } \quad g(x,y)\leqslant0 \end{aligned} ?Rnmin?f(x,y)?s.t.?g(x,y)?0?
当约束条件是不等式的时候,存在不等式约束时的位置只有两种情况,一种是最优解在不等式约束的边界上,另一种就是在不等式约束的区域内,需要分为两种情况讨论。

1.当最优解在g(x)<0的区域内时,约束条件不起作用,直接按常规方法求min(f(x))即可,即求解f(x)梯度为0的点。这等价于将拉格朗日乘子λ置为0,再对拉格朗日函数L(x,λ)求极值。

请添加图片描述

2.最优解在g(x)=0这个边界上,问题和等式约束等价,此时最优解在两条曲线的相切处。不过这里需要注意的是,最优解在g(x)=0边界上说明切线处的f()与g()的梯度必然是反向的,此时为了保证【λ作为g()的梯度的系数使其与f()的梯度等大反向】,此时的λ就必然大于0

请添加图片描述

综上,不等式约束就满足λ>=0。或者说λg()=0

2.1.3 假设优化问题的约束条件是若干不等式约束:

m i n f ( x , y ) s . t . g i ( x , y ) ? 0 , 其 中 i = 1 , 2 , 3 , . . . , m L ( x , y , λ ) = f ( x , y ) + ∑ λ i g i ( x , y ) ? ? L ( x , y , λ ) = 0 ? ? ? f ( x , y ) = ∑ λ i ? ? g i ( x , y ) \begin{gathered} min f(x,y)\\ s.t.g_i(x,y)\leqslant0,其中i=1,2,3,...,m\\\\ L(\boldsymbol{x,y}, \lambda)=f(\boldsymbol{x,y})+\sum \lambda_{i} g_{i}(\boldsymbol{x,y}) \\ \nabla \\ \nabla L(\boldsymbol{x,y}, \lambda)=0 \\ \Downarrow \\ -\nabla f(\boldsymbol{x,y})=\sum \lambda_{i} \cdot \nabla g_{i}(\boldsymbol{x,y}) \end{gathered} minf(x,y)s.t.gi?(x,y)?0,i=123...mL(x,y,λ)=f(x,y)+λi?gi?(x,y)??L(x,y,λ)=0???f(x,y)=λi???gi?(x,y)?

此时我们可以用下面这张图直观的理解:

请添加图片描述

同样的,图中的圈圈表示原优化函数f(x)的等高线,橙色的区域表示若干约束条件构成的区域。此时对于边界在红线上的g(x,y)而言,它们小于0的区域囊括了f(x,y)的极值点,因此不构成约束,此时通过拉格朗日函数求解得它们的λ必然是等于0的。而对于边界在蓝线上的g(x,y)而言,它们小于0的区域不包括f(x,y)的极值点,因此对f(x,y)构成约束,此时它们的λ必然是>0的。此时在极值点处将两条蓝线的梯度通过它们各自的λ进行一个合成,就必然能够和极值点处f(x,y)的梯度等大反向,即仍然体现求解拉格朗日函数的梯度为0。

现在,我们在来重新审视一下SVM的优化函数,可能就会有更深的理解。

将SVM的优化问题写成拉格朗日函数的形式,其实就是一个带若干不等式约束的优化问题:
min ? ( ∥ W ∥ 2 ) ?s.t.? 1 ? Y ( i ) ( W T ? X ( i ) + b ) ≤ 0 i = 1 , 2 , 3 … , m L ( W , b , λ ) = W T W + ∑ i = 1 N λ i ( 1 ? Y ( i ) ( W T ? X ( i ) + b ) ) \begin{aligned} &\min ( \|W\|_{2})\\ &\text { s.t. } \quad 1-Y^{(i)}\left(W^{T} \cdot X^{(i)}+b\right) \leq 0 \quad i=1,2,3 \ldots, m \\ &L(W, b, \lambda)= W^{T} W+\sum_{i=1}^{N} \lambda_{i}\left(1-Y^{(i)}\left(W^{T} \cdot X^{(i)}+b\right)\right) \end{aligned} ?min(W2?)?s.t.?1?Y(i)(WT?X(i)+b)0i=1,2,3,mL(W,b,λ)=WTW+i=1N?λi?(1?Y(i)(WT?X(i)+b))?
对于那些不是支持向量的点构成的约束,它们的(1-yi(wTxi+b))一定是<0的,由于λg()=0,说明这些点不构成约束,它们的λ=0.

而对于那些支持向量而言,它们的(1-yi(wTxi+b))一定是=0的,因此它们的λ一定>0,这些点对最小化||W||2构成约束。

这也便说明了,SVM的决策边界只会受到支持向量的约束,而与非支持向量无关

请添加图片描述

2.2 将原问题转化为对偶问题

L ( x , α , β ) = f ( x ) + ∑ i = 1 k α i c i ( x ) + ∑ j = 1 l β j h j ( x ) L(x, \alpha, \beta)=f(x)+\sum_{i=1}^{k} \alpha_{i} c_{i}(x)+\sum_{j=1}^{l} \beta_{j} h_{j}(x) L(x,α,β)=f(x)+i=1k?αi?ci?(x)+j=1l?βj?hj?(x)

对于上面的拉格朗日函数,它有一个性质,我们先将变量x视为常数,然后令:
θ p ( x ) = m a x L ( x , α , β ) \theta_p(x) = maxL(x,\alpha, \beta) θp?(x)=maxL(x,α,β)
这时候,求解拉格朗日函数的极小值和求解θ函数的极小值是等价的:
m i n θ p ( x ) = min ? x max ? α , β L ( x , α , β ) min\theta_p(x) = \min _{\boldsymbol{x}} \max _{\boldsymbol{\alpha}, \boldsymbol{\beta}} L(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta}) minθp?(x)=xmin?α,βmax?L(x,α,β)
即,将求解拉格朗日函数转化为极大极小求解问题:
min ? x max ? α , β L ( x , α , β ) s . t . α ≥ 0 \min _{\boldsymbol{x}} \max _{\boldsymbol{\alpha}, \boldsymbol{\beta}} L(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta}) s.t. \alpha \geq \mathbf{0} xmin?α,βmax?L(x,α,β)s.t.α0

我们把求解这个形式叫做原问题,转化为极大极小形式的原问题和求解拉格朗日函数的优化问题是等价的,证明如下:
min ? x max ? α , β L ( x , α , β ) = min ? x ( f ( x ) + max ? α , β ( ∑ i = 1 m α i g i ( x ) + ∑ j = 1 n β j h j ( x ) ) ) = min ? x ( f ( x ) + { 0 ?若? u ?满足约束? ; ) ∞ ?否则? ) = min ? x f ( x ) , ?且? x ?满足约束,? \begin{aligned} & \min _{x} \max _{\alpha, \beta} \mathcal{L}(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta}) \\ =& \min _{\boldsymbol{x}}\left(f(\boldsymbol{x})+\max _{\alpha, \boldsymbol{\beta}}\left(\sum_{i=1}^{m} \alpha_{i} g_{i}(\boldsymbol{x})+\sum_{j=1}^{n} \beta_{j} h_{j}(\boldsymbol{x})\right)\right) \\ =& \min _{\boldsymbol{x}}\left(f(\boldsymbol{x})+\left\{\begin{array}{ll} 0 & \text { 若 } \boldsymbol{u} \text { 满足约束 } ;) \\ \infty & \text { 否则 } \end{array}\right)\right.\\ =& \min _{\boldsymbol{x}} f(\boldsymbol{x}), \text { 且 } \boldsymbol{x} \text { 满足约束, } \end{aligned} ===?xmin?α,βmax?L(x,α,β)xmin?(f(x)+α,βmax?(i=1m?αi?gi?(x)+j=1n?βj?hj?(x)))xmin?(f(x)+{0???u?满足约束?;)?否则??)xmin?f(x),??x?满足约束,??
可见,求解极大极小问题最终可以转化为求解原始带约束最优化问题。而之所以要这么做(motivation),是为了方便接下来引入对偶问题。

对于原问题的对偶问题:
max ? λ , v min ? x L ( x , α , β ) s . t . α ≥ 0 \max _{\lambda, \boldsymbol{v}} \min _{\boldsymbol{x}} L(\boldsymbol{x}, \boldsymbol{\alpha}, \boldsymbol{\beta}) s.t. \alpha \geq \mathbf{0} λ,vmax?xmin?L(x,α,β)s.t.α0
对于为什么要转换成对偶问题求解,由于博主本人对问题的理解不够深刻,也无法自己立刻总结出一个令自己信服的理由。所以我直接总结网上的结论,大致是,求解对偶问题能够简化计算量,降低求解原问题的复杂度

当然,原问题的解和对偶问题的解并不是完全等价的,因为对偶问题是原问题的一个下界。一般情况下,原问题的解要大于等于对偶问题的解(弱对偶关系)。凸优化理论中,一个原问题的解如果要等于对偶问题的解(强对偶关系),需要满足KKT条件

(KKT条件是原问题与对偶问题等价的必要条件,当原问题是凸优化问题时,变为充要条件)

当然,SVM的优化问题的原问题与对偶问题是是一个强对偶关系,能这么说,是因为它的优化问题既是一个凸优化问题,也满足KKT条件。

SVM的优化函数是凸优化问题:
min ? ( ∥ W ∥ 2 ) ?s.t.? 1 ? Y ( i ) ( W T ? X ( i ) + b ) ≤ 0 i = 1 , 2 , 3 … , m \begin{aligned} &\min ( \|W\|_{2})\\ &\text { s.t. } \quad 1-Y^{(i)}\left(W^{T} \cdot X^{(i)}+b\right) \leq 0 \quad i=1,2,3 \ldots, m \\ \end{aligned} ?min(W2?)?s.t.?1?Y(i)(WT?X(i)+b)0i=1,2,3,m?
SVM的优化目标函数是一个二次项,限制条件是一次项,这在优化理论中是一个二次规划问题,数学上已经证明,二次规划问题是一个凸优化问题。

SVM的优化函数满足KKT条件:

对于优化函数:
L ( x , α , β ) = f ( x ) + ∑ i = 1 k α i c i ( x ) + ∑ j = 1 l β j h j ( x ) L(x, \alpha, \beta)=f(x)+\sum_{i=1}^{k} \alpha_{i} c_{i}(x)+\sum_{j=1}^{l} \beta_{j} h_{j}(x) L(x,α,β)=f(x)+i=1k?αi?ci?(x)+j=1l?βj?hj?(x)
满足:
c i ( x ) ≤ 0 h j ( x ) = 0 ? x L ( x , α , β ) = 0 λ ≥ 0 α i c i ( x ) = 0 \begin{aligned} &c_{i}(x) \leq 0 \\ &h_{j}(x)=0 \\ &\nabla_{x} L(x, \alpha, \beta)=0 \\ &\lambda \geq 0 \\ &\alpha_{i} c_{i}(x)=0 \end{aligned} ?ci?(x)0hj?(x)=0?x?L(x,α,β)=0λ0αi?ci?(x)=0?
对于SVM的优化函数,它是一个只带不等式约束的拉格朗日函数:
L ( W , b , λ ) = W T W + ∑ i = 1 N λ i ( 1 ? Y ( i ) ( W T ? X ( i ) + b ) ) , i = 1 , 2 , 3 , . . . , m \begin{aligned} &L(W, b, \lambda)= W^{T} W+\sum_{i=1}^{N} \lambda_{i}\left(1-Y^{(i)}\left(W^{T} \cdot X^{(i)}+b\right)\right),i=1,2,3,...,m \end{aligned} ?L(W,b,λ)=WTW+i=1N?λi?(1?Y(i)(WT?X(i)+b)),i=1,2,3,...,m?
因此我们无需考虑KKT条件中的h(x)=0的条件,对于条件L()的梯度为0,这正是最优解所在的地方。而剩下的三个条件,我们其实已经在2.1.2中通过图示进行了一个直观上的理解,只要能够满足拉格朗日函数的条件转化为拉格朗日函数,就必然会满足这三个条件。

这样一来,我们就在理论上证明了SVM优化问题的对偶问题的解等价于原问题的解,进而将原问题转化为了求解对偶问题。

2.3 推出SVM优化函数的对偶问题

好的😴😴,既然说将原问题转化为对偶问题进行求解是更为高效的做法,我们将SVM原问题转化为它的对偶问题,就是:
max ? α min ? w , b L ( W , b , α ) , s . t . α ≥ 0 = max ? α min ? w , b [ W T W + ∑ i = 1 N α i ( 1 ? Y ( i ) ( W T ? X ( i ) + b ) ) ] , i = 1 , 2 , 3 , . . . , m s . t . α ≥ 0 \begin{aligned} &\max _{\alpha} \min _{\boldsymbol{w,b}}L(W, b, \alpha),s.t. \alpha \geq \mathbf{0}\\ &=\max _{\alpha} \min _{\boldsymbol{w,b}}[ W^{T} W+\sum_{i=1}^{N} \alpha_{i}\left(1-Y^{(i)}\left(W^{T} \cdot X^{(i)}+b\right)\right)],i=1,2,3,...,m\\ &s.t. \alpha \geq \mathbf{0} \end{aligned} ?αmax?w,bmin?L(W,b,α),s.t.α0=αmax?w,bmin?[WTW+i=1N?αi?(1?Y(i)(WT?X(i)+b))],i=1,2,3,...,ms.t.α0?
求解过程:

第一步,在内层,我们将α视为常数,求解w,b作为函数自变量下的极小值(求极小的常规方法,即令L(w,b,α)对w和b的偏导为0(凸函数一阶导就够了)),解得:
w = ∑ i = 1 m α i y i x i , ∑ i = 1 m α i y i = 0 \boldsymbol{w}=\sum_{i=1}^{m} \alpha_{i} y_{i} \boldsymbol{x}_{i}, \quad \sum_{i=1}^{m} \alpha_{i} y_{i}=0 w=i=1m?αi?yi?xi?,i=1m?αi?yi?=0
第二步,求解外层α的极大(由于第一步求解的极小值下的w和b的解的形式只包含了α这一个变量,因此可以将第一步求解的w和b回代回原式进行第二步的求解)(乘上一个系数1/2,不影响解的值)

哈哈,化简过程略!(放心,一定是正确的🤣),最终形式就是(约束条件就是b的偏导数=0(在化简的时候约去了),以及KKT条件):
max ? α ( ? 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j ( x i ? x j ) + ∑ i = 1 m α i ) ?s.t.? ∑ i = 1 m α i y i = 0 α i ≥ 0 i = 1 , 2 , … m \begin{gathered} \max_{\alpha}(-\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)+\sum_{i=1}^{m} \alpha_{i} )\\ \text { s.t. } \sum_{i=1}^{m} \alpha_{i} y_{i}=0 \\ \alpha_{i} \geq 0 i=1,2, \ldots m \end{gathered} αmax?(?21?i=1m?j=1m?αi?αj?yi?yj?(xi??xj?)+i=1m?αi?)?s.t.?i=1m?αi?yi?=0αi?0i=1,2,m?
然而,我们还是更习惯看到求极小的形式,这不简单,加个负号求极小不就行了:
min ? α ( 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j ( x i ? x j ) ? ∑ i = 1 m α i ) ?s.t.? ∑ i = 1 m α i y i = 0 α i ≥ 0 i = 1 , 2 , … m \begin{gathered} \min_{\alpha}(\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)-\sum_{i=1}^{m} \alpha_{i} )\\ \text { s.t. } \sum_{i=1}^{m} \alpha_{i} y_{i}=0 \\ \alpha_{i} \geq 0 i=1,2, \ldots m \end{gathered} αmin?(21?i=1m?j=1m?αi?αj?yi?yj?(xi??xj?)?i=1m?αi?)?s.t.?i=1m?αi?yi?=0αi?0i=1,2,m?
👆这就是我们需要求解的SVM支持向量机优化函数的最终形式?!!

然后如果我们仔细观察,就不难发现,将原始问题转化为对偶问题之后,我们待求解的参数就从n维(n是样本的特征数量)的W转化为求取m个α。这对于小样本学习而言是一个优势,那就是当样本的维度远大于样本的数量(n>>m)时,求解原问题的对偶问题能够大大降低训练模型的代价。

3. 软间隔SVM

基于之前我们介绍的SVM仍然有一个很大的局限性,先不说是啥,我们先再来回顾下SVM优化函数最初的形式:
argmax ? ( W , b ) ( min ? i = 1 , 2 … . N 1 ∥ W ∥ 2 ? ∣ W T ? X i + b ∣ ) s . t . y T ( W T X + b ) > 0 \begin{aligned} &\operatorname{argmax}_{(W, b)}(\min _{i=1,2 \ldots . N} \frac{1}{\|W\|_{2}} \cdot\left|W^{T} \cdot X_i+b\right|)\\ &s.t.\\ &y^T(W^TX+b)>0 \end{aligned} ?argmax(W,b)?(i=1,2.Nmin?W2?1???WT?Xi?+b?)s.t.yT(WTX+b)>0?
其中的约束条件y(wx+b)>0即对所有点都分类正确进行一个约束,然而在很多情况下,如果数据集线性不可分,就意味着我们永远无法从中找到一个满足条件的分类超平面,对于优化问题而言,就是任何的参数w和b都无法满足约束条件。这样就会出现找不到解的情况。

我们分析下面一张图:

请添加图片描述

对于左图而言,很明显数据集不是线性可分的,一般的硬间隔SVM无法对这类数据分布进行求解。如果我们放宽模型的限制条件,允许某些点分类错误,这一问题就能够得到解决。

对于右图而言,我们假设右上角为噪声点。即便如此,该数据集仍然是线性可分的。但是模型将噪声点当做支持向量可能会影响模型的泛化能力(体现在黄色的margin很窄),假如我们放宽限制条件,使得模型容许一两个点出错,这样一来模型的泛化能力或许就会得到改善(绿色的margin比黄色的宽)

针对上述两个问题,接下来要介绍的软间隔SVM能够很好的解决。

软间隔SVM:松弛变量的引入,允许模型在一些样本上不满足约束

3.1 松弛变量的引入

即,对于原优化函数,我们放宽约束条件为:
y i ( w ? x i + b ) ≥ 1 ? ξ i y_{i}\left(w · x_{i}+b\right) \geq 1-\xi_{i} yi?(w?xi?+b)1?ξi?
其中的ξ就是松弛变量,ξi>=0,可以表示异常点或分类错误的点嵌入间隔面的深度。

然而,参数ξ的选择仍然是一个令人头疼的问题。一个极端的例子是,如果ξi无穷大,这相当于没有了约束条件,相当于所有的w,b都是问题的解。

因此一个基本的思想是:我们要在能选出符合约束条件的最好的 w 和 b 的同时,让
嵌入间隔面的总深度越少越好。将松弛变量ξ也加入最优化的求解当中,就是:
min ? 1 2 ∥ w ∥ 2 2 + C ∑ i = 1 m ξ i ?s.t.? y i ( w T x i + b ) ≥ 1 ? ξ i ( i = 1 , 2 , … m ) ξ i ≥ 0 ( i = 1 , 2 , … m ) \begin{gathered} \quad \min \frac{1}{2}\|w\|_{2}^{2}+C \sum_{i=1}^{m} \xi_{i} \\ \text { s.t. } \quad y_{i}\left(w^{T} x_{i}+b\right) \geq 1-\xi_{i} \quad(i=1,2, \ldots m) \\ \xi_{i} \geq 0 \quad(i=1,2, \ldots m) \end{gathered} min21?w22?+Ci=1m?ξi??s.t.?yi?(wTxi?+b)1?ξi?(i=1,2,m)ξi?0(i=1,2,m)?
其中的C是一个常数,用于把握松弛变量在全局损失中的重要程度。

3.2 如何确定松弛变量的值:损失函数的选择

然而这时候一些了解SVM算法的小伙伴可能就要站出来质疑了,咦? 我看到的松弛变量ξi明明是这样的呀:
ξ i = ? 0 / 1 ( y i ( w T x i + b ) ? 1 ) ξ_i=\ell_{0 / 1}\left(y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right)-1\right) ξi?=?0/1?(yi?(wTxi?+b)?1)
这样总的优化函数就是这样的呀:
min ? w , b 1 2 ∥ w ∥ 2 + C ∑ i = 1 m ? 0 / 1 ( y i ( w T x i + b ) ? 1 ) \min _{\boldsymbol{w}, b} \frac{1}{2}\|\boldsymbol{w}\|^{2}+C \sum_{i=1}^{m} \ell_{0 / 1}\left(y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right)-1\right) w,bmin?21?w2+Ci=1m??0/1?(yi?(wTxi?+b)?1)
并且有:
? 0 / 1 ( z ) = { 1 , ?if? z < 0 0 , ?otherwise? \ell_{0 / 1}(z)= \begin{cases}1, & \text { if } z<0 \\ 0, & \text { otherwise }\end{cases} ?0/1?(z)={1,0,??if?z<0?otherwise??
这样一来, 最小化松弛变量的意义不就是:“使得那些不满足约束条件的样本尽可能的少”吗。

哈哈,的确如此,,不过这个方法有一个致命的缺点,由于0/1函数非凸,不连续,这个劣迹斑斑的数学性质使得优化函数反而不好求解了。因此,历史上机器学习大咖们研究并总结了其他的损失函数作为0/1损失的近似:

请添加图片描述

其中最常用的就是hinge loss(合页损失),现在想想,如果把损失函数替换为合页损失,那么最小化松弛变量不就可以理解为,对于那些分类错误的点离分类边界的函数距离越小越好?因此上述的说法也是成立的。

四种损失函数可视化就是:

请添加图片描述

可以发现,四种损失函数均是0/1损失的一个上界,且具有0/1损失所缺乏的数学性质。

接下来的优化函数转化思想和硬间隔类似,各位读者请握好扶手,系好安全带,我们一步到位🚀:

3.3 软间隔SVM优化问题的转化

首先构造拉格朗日函数:
L ( w , b , ξ , α , μ ) = 1 2 ∥ w ∥ 2 2 + C ∑ i = 1 m ξ i ? ∑ i = 1 m α i [ y i ( w T x i + b ) ? 1 + ξ i ] ? ∑ i = 1 m μ i ξ i L(w, b, \xi, \alpha, \mu)=\frac{1}{2}\|w\|_{2}^{2}+C \sum_{i=1}^{m} \xi_{i}-\sum_{i=1}^{m} \alpha_{i}\left[y_{i}\left(w^{T} x_{i}+b\right)-1+\xi_{i}\right]-\sum_{i=1}^{m} \mu_{i} \xi_{i} L(w,b,ξ,α,μ)=21?w22?+Ci=1m?ξi??i=1m?αi?[yi?(wTxi?+b)?1+ξi?]?i=1m?μi?ξi?
其中ui>=0, αi>=0

然后定义原问题:
min ? ? w , b , ξ max ? ? α i ≥ 0 , μ i ≥ 0 L ( w , b , α , ξ , μ ) \underbrace{\min }_{w, b, \xi} \underbrace{\max }_{\alpha_{i} \geq 0, \mu_{i} \geq 0} L(w, b, \alpha, \xi, \mu) w,b,ξ min??αi?0,μi?0 max??L(w,b,α,ξ,μ)
它的对偶问题就是:
max ? ? α i ≥ 0 , μ i ≥ 0 min ? ? w , b , ξ L ( w , b , α , ξ , μ ) \underbrace{\max }_{\alpha_{i} \geq 0, \mu_{i} \geq 0} \underbrace{\min }_{ w, b, \xi} L(w, b, \alpha, \xi, \mu) αi?0,μi?0 max??w,b,ξ min??L(w,b,α,ξ,μ)
对偶问题求解第一步,求极小。对w,b,ξ求一阶梯度为0
? L ? w = 0 ? w = ∑ i = 1 m α i y i x i ? L ? b = 0 ? ∑ i = 1 m α i y i = 0 ? L ? ξ = 0 ? C ? α i ? μ i = 0 \begin{gathered} \frac{\partial L}{\partial w}=0 \Rightarrow w=\sum_{i=1}^{m} \alpha_{i} y_{i} x_{i} \\ \frac{\partial L}{\partial b}=0 \Rightarrow \sum_{i=1}^{m} \alpha_{i} y_{i}=0 \\ \frac{\partial L}{\partial \xi}=0 \Rightarrow C-\alpha_{i}-\mu_{i}=0 \end{gathered} ?w?L?=0?w=i=1m?αi?yi?xi??b?L?=0?i=1m?αi?yi?=0?ξ?L?=0?C?αi??μi?=0?
对偶问题求解第二步,将第一步的结论带回拉格朗日函数,求极大。化简过程略,最终形式就是:
max ? ? α ∑ i = 1 m α i ? 1 2 ∑ i = 1 , j = 1 m α i α j y i y j x i T x j ?s.t.? ∑ i = 1 m α i y i = 0 C ? α i ? μ i = 0 α i ≥ 0 ( i = 1 , 2 , … , m ) μ i ≥ 0 ( i = 1 , 2 , … , m ) \begin{gathered} \underbrace{\max }_{\alpha} \sum_{i=1}^{m} \alpha_{i}-\frac{1}{2} \sum_{i=1, j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} x_{i}^{T} x_{j} \\ \text { s.t. } \sum_{i=1}^{m} \alpha_{i} y_{i}=0 \\ C-\alpha_{i}-\mu_{i}=0 \\ \alpha_{i} \geq 0(i=1,2, \ldots, m) \\ \mu_{i} \geq 0(i=1,2, \ldots, m) \end{gathered} α max??i=1m?αi??21?i=1,j=1m?αi?αj?yi?yj?xiT?xj??s.t.?i=1m?αi?yi?=0C?αi??μi?=0αi?0(i=1,2,,m)μi?0(i=1,2,,m)?

由于目标函数中并没有出现 ui,可将约束条件的第 2,3,4 项合并,消去 ui,得到最终的待优化函数为:
min ? ? α 1 2 ∑ i = 1 , j = 1 m α i α j y i y j x i T x j ? ∑ i = 1 m α i ?s.t.? ∑ i = 1 m α i y i = 0 0 ≤ α i ≤ C \begin{gathered} \underbrace{\min }_{\alpha} \frac{1}{2} \sum_{i=1, j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} x_{i}^{T} x_{j}-\sum_{i=1}^{m} \alpha_{i} \\ \text { s.t. } \sum_{i=1}^{m} \alpha_{i} y_{i}=0 \\ 0 \leq \alpha_{i} \leq C \end{gathered} α min??21?i=1,j=1m?αi?αj?yi?yj?xiT?xj??i=1m?αi??s.t.?i=1m?αi?yi?=00αi?C?
对比硬间隔的最终形式:
min ? α ( 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j ( x i ? x j ) ? ∑ i = 1 m α i ) ?s.t.? ∑ i = 1 m α i y i = 0 α i ≥ 0 \begin{gathered} \min_{\alpha}(\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)-\sum_{i=1}^{m} \alpha_{i} )\\ \text { s.t. } \sum_{i=1}^{m} \alpha_{i} y_{i}=0 \\ \alpha_{i} \geq 0 \end{gathered} αmin?(21?i=1m?j=1m?αi?αj?yi?yj?(xi??xj?)?i=1m?αi?)?s.t.?i=1m?αi?yi?=0αi?0?
可以发现,最优化函数和硬间隔SVM是完全一致的,只是约束条件稍有不同。

(我这里有一个疑问,既然最终形式的微小差异只体现在约束条件αi<C上,并不包含ξi。并且C还是一个超参,那么对于松弛变量损失函数的选取还有何意义呢,这里先留个疑问。)

4.非线性SVM

对于如何处理数据集线性不可分的情况,一个方法就是利用软间隔SVM,然而,软间隔SVM仍然有它的局限性,那就是放宽约束条件,允许错误样本的出现。但是其分类超平面仍然是线性的,也就是说,软间隔SVM并没有解决数据集线性不可分的本质问题

在数学领域中,这类问题很早就已经有解决方案了(数学永远是走在前面的)。一个常用的方法是,将原始数据集的维度升高,即增加样本某些特征,将样本从原始空间映射到一个更高维的特征空间,使得样本在该特征空间的超平面下线性可分

举一个非常直观且经典的例子,对于二维下线性不可分的问题,我们可以将其映射到三维的某个函数上,使其线性可分:

请添加图片描述

幸运的是,数学上已经证明,若原始空间是有限维,那么一定存在一个高维的特征空间使样本线性可分,因此问题的关键只取决于如何寻找这个特征空间(映射函数)。

现在,我们考虑已经找到了这样一种映射方式φ(.),使得样本φ(x)线性可分,显而易见的是,φ(x)一定比x高维。

我们再考虑最终的优化函数:
min ? ? α 1 2 ∑ i = 1 , j = 1 m α i α j y i y j x i T x j ? ∑ i = 1 m α i \begin{gathered} \underbrace{\min }_{\alpha} \frac{1}{2} \sum_{i=1, j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} x_{i}^{T} x_{j}-\sum_{i=1}^{m} \alpha_{i} \\ \end{gathered} α min??21?i=1,j=1m?αi?αj?yi?yj?xiT?xj??i=1m?αi??
求解过程涉及样本的部分仅有:
x i T x j x_{i}^{T} x_{j} xiT?xj?
因此,对于升维后的样本,这部分就是:
? ( x i ) T ? ( x j ) \phi(x_i)^T\phi(x_j) ?(xi?)T?(xj?)
真实情况下,特征空间的维度远不止从二维升三维,仅升一维就线性可分这么简单,更一般的情况是映射后的特征空间维度往往远大于原始空间,甚至可能是无穷维,这时候维度过大导致计算上式通常是十分困难的,为了避开这个障碍,不显式的构造映射关系,可以设想有这样一个函数:
κ ( x i , x j ) = ? ? ( x i ) , ? ( x j ) ? = ? ( x i ) T ? ( x j ) \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right)=\left\langle\phi\left(\boldsymbol{x}_{i}\right), \phi\left(\boldsymbol{x}_{j}\right)\right\rangle=\phi\left(\boldsymbol{x}_{i}\right)^{\mathrm{T}} \phi\left(\boldsymbol{x}_{j}\right) κ(xi?,xj?)=??(xi?),?(xj?)?=?(xi?)T?(xj?)
xi和xj 在映射之后的特征空间的内积等于它们在原始样本空间中通过函数κ(.)计算的结果.有了这样的函数,我们就不必直接去计算高维甚至无穷维特征空间中的内积了。

很幸运的是,在数学领域中,的确存在这样一种函数κ(··),它就是核函数。在1992年,正是Vapnik等人利用该技术成功地将线性SVM推广到非线性SVM中。

【此时此刻,为什么要把优化问题转化为对偶问题的motivation之一也就显而易见了,正是因为xiTxj的特征映射正好可以用核函数来解决。对于数学见解要有多深刻的大佬才能get到这个思路,在下实在佩服】

贴一张Vapnik与Yann.Lecun的合照,膜拜一下:

请添加图片描述

SVM解决非线性问题的杀手锏:核函数的引入

我们知道核函数满足下面的性质:
κ ( x i , x j ) = ? ( x i ) T ? ( x j ) \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right)=\phi\left(\boldsymbol{x}_{i}\right)^{\mathrm{T}} \phi\left(\boldsymbol{x}_{j}\right) κ(xi?,xj?)=?(xi?)T?(xj?)
这里值得一提的是,引入核函数之后,向量的两两点积仍然是一个数值,因此不会影响优化函数的具体求解方式。

显然,通过上式可知,只要知道φ(x)的具体形式,就可以求解出κ(··),然而,现实任务错综复杂,我们往往是不知道φ(x)的具体形式的,因此,这时候我们就需要解决两个问题:

  1. 什么样的函数能作为核函数?
  2. 如何判断在某个数据分布下应该要用哪种核函数?

对于问题1,可以用Mercer定理(充分非必要)解决:

Mercer定理的描述是:只要对称函数值所对应的核矩阵K半正定, 则该函数可作为核函数,K的表示如下:
K = [ κ ( x 1 , x 1 ) ? κ ( x 1 , x j ) ? κ ( x 1 , x m ) ? ? ? ? ? κ ( x i , x 1 ) ? κ ( x i , x j ) ? κ ( x i , x m ) ? ? ? ? ? κ ( x m , x 1 ) ? κ ( x m , x j ) ? κ ( x m , x m ) ] \mathbf{K}=\left[\begin{array}{ccccc} \kappa\left(\boldsymbol{x}_{1}, \boldsymbol{x}_{1}\right) & \cdots & \kappa\left(\boldsymbol{x}_{1}, \boldsymbol{x}_{j}\right) & \cdots & \kappa\left(\boldsymbol{x}_{1}, \boldsymbol{x}_{m}\right) \\ \vdots & \ddots & \vdots & \ddots & \vdots \\ \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{1}\right) & \cdots & \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right) & \cdots & \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{m}\right) \\ \vdots & \ddots & \vdots & \ddots & \vdots \\ \kappa\left(\boldsymbol{x}_{m}, \boldsymbol{x}_{1}\right) & \cdots & \kappa\left(\boldsymbol{x}_{m}, \boldsymbol{x}_{j}\right) & \cdots & \kappa\left(\boldsymbol{x}_{m}, \boldsymbol{x}_{m}\right) \end{array}\right] K=?????????κ(x1?,x1?)?κ(xi?,x1?)?κ(xm?,x1?)???????κ(x1?,xj?)?κ(xi?,xj?)?κ(xm?,xj?)???????κ(x1?,xm?)?κ(xi?,xm?)?κ(xm?,xm?)??????????
为了避免每次都去计算K是否半正定,直接给出一些常用的核函数:
?名称? ?表达式? ?参数? ?线性核? κ ( x i , x j ) = x i T x j ?多项式核? κ ( x i , x j ) = ( x i T x j ) d d ? 1 ?为多项式的次数? ?高斯核? κ ( x i , x j ) = exp ? ( ? ∥ x i ? x j ∥ 2 2 σ 2 ) σ > 0 ?为高斯核的带宽? ( ?width? ) . ?拉普拉斯核? κ ( x i , x j ) = exp ? ( ? ∥ x i ? x j ∥ σ ) σ > 0 ?Sigmoid?核? κ ( x i , x j ) = tanh ? ( β x i T x j + θ ) tanh ? ?为双曲正切函数,? β > 0 , θ < 0 \begin{array}{lll} \hline \text { 名称 } & \text { 表达式 } & \text { 参数 } \\ \hline \text { 线性核 } & \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right)=\boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}_{j} & \\ \text { 多项式核 } & \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right)=\left(\boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}_{j}\right)^{d} & d \geqslant 1 \text { 为多项式的次数 } \\ \text { 高斯核 } & \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right)=\exp \left(-\frac{\left\|\boldsymbol{x}_{i}-\boldsymbol{x}_{j}\right\|^{2}}{2 \sigma^{2}}\right) & \sigma>0 \text { 为高斯核的带宽 }(\text { width }) . \\ \text { 拉普拉斯核 } & \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right)=\exp \left(-\frac{\left\|\boldsymbol{x}_{i}-\boldsymbol{x}_{j}\right\|}{\sigma}\right) & \sigma>0 \\ \text { Sigmoid 核 } & \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right)=\tanh \left(\beta \boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}_{j}+\theta\right) & \tanh \text { 为双曲正切函数, } \beta>0, \theta<0 \\ \hline \end{array} ?名称??线性核??多项式核??高斯核??拉普拉斯核??Sigmoid????表达式?κ(xi?,xj?)=xiT?xj?κ(xi?,xj?)=(xiT?xj?)dκ(xi?,xj?)=exp(?2σ2xi??xj?2?)κ(xi?,xj?)=exp(?σxi??xj??)κ(xi?,xj?)=tanh(βxiT?xj?+θ)??参数?d?1?为多项式的次数?σ>0?为高斯核的带宽?(?width?).σ>0tanh?为双曲正切函数,?β>0,θ<0??
然而,对于问题二,通常没有很好的解决方法,因此,在SVM当中,核函数的选择作为一个超参数就成了SVM的最大变数,如果选择不佳,则意味着将样本映射到了一个不恰当的高维空间,可能仍然是线性不可分的。

5. 如何求解?基于SMO迭代优化算法

首先我们再来回顾下我们要解决的问题👇:
min ? α ˉ Ψ ( α ? ) = min ? α ˉ 1 2 ∑ i = 1 N ∑ j = 1 N y i y j K ( x ? i , x ? j ) α i α j ? ∑ i = 1 N α i 0 ≤ α i ≤ C , ? i , ∑ i = 1 N y i α i = 0. \begin{gathered} \min _{\bar{\alpha}} \Psi(\vec{\alpha})=\min _{\bar{\alpha}} \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} y_{i} y_{j} K\left(\vec{x}_{i}, \vec{x}_{j}\right) \alpha_{i} \alpha_{j}-\sum_{i=1}^{N} \alpha_{i} \\ 0 \leq \alpha_{i} \leq C, \forall i, \\ \sum_{i=1}^{N} y_{i} \alpha_{i}=0 . \end{gathered} αˉmin?Ψ(α )=αˉmin?21?i=1N?j=1N?yi?yj?K(x i?,x j?)αi?αj??i=1N?αi?0αi?C,?i,i=1N?yi?αi?=0.?
假设数据集中共有N个样本,那么我们就需要求出N个α的值。在当时,有多种算法均能够求解上述优化问题,比基于经典的基于数值二次规划方法以及改进的Chunking和Osuna方法。但是复杂度均比较大。

本次博客介绍的算法基于Platt在1998提出的SMO(Sequential Minimal Optimization)序列最小化迭代优化算法:

【论文链接】Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines

序列最小化,顾名思义,就是基于每个序列都最小化的一种优化方法,而这个序列,就是指优化函数N个α变量的子序列。

总的来说,SMO大致包括以下两个求解步骤

  1. 首先启发式的选取一对αi和αj,这里的启发式选择希望选取的αi和αj能使目标函数最大程度的接近其全局最优值。
  2. 将目标函数仅对αi和αj进行优化,其他的α变量视为常数固定不变。

相信大家现在对SMO的优化细节仍抱有许多的疑问,不急,我们一步一步来。

5.1 将问题转化为求解一个二元函数

SMO的序列最小化思想类似于坐标上升的优化思路,即每次只选取一个坐标轴方向(一个变量)进行更新,更新路径类似于下图:

请添加图片描述

然而,由于SVM优化问题中包含有约束条件:
∑ i = 1 N y i α i = 0 \sum_{i=1}^{N} y_{i} \alpha_{i}=0 i=1N?yi?αi?=0
假如这时候我们只选取一个αi进行更新,其他α视为常数固定。由于上述约束条件的限制,因此αi也被固定,因此只选取一个参数的方法不可取。

因此SMO算法每次选取两个参数进行优化固定其他N-2个参数,我们假设某个时刻选取的参数是α1和α2,这时候优化函数就可以改写成如下的形式:
Ψ = 1 2 K 11 α 1 2 + 1 2 K 22 α 2 2 + y 1 y 2 K 12 α 1 α 2 + y 1 α 1 v 1 + y 2 α 2 v 2 ? α 1 ? α 2 + Ψ constant? , 其 中 : K i j = K ( x ? i , x ? j ) , v i = ∑ j = 3 N α j y j K ( x i , x j ) , i = 1 , 2 \begin{gathered} &\Psi=\frac{1}{2} K_{11} \alpha_{1}^{2}+\frac{1}{2} K_{22} \alpha_{2}^{2}+y_1y_2 K_{12} \alpha_{1} \alpha_{2}+y_{1} \alpha_{1} v_{1}+y_{2} \alpha_{2} v_{2}-\alpha_{1}-\alpha_{2}+\Psi_{\text {constant }}, \\ 其中:\\ &K_{i j}=K\left(\vec{x}_{i}, \vec{x}_{j}\right), \\ &v_{i}=\sum_{j=3}^{N} \alpha_{j} y_{j} K\left(x_{i}, x_{j}\right), i=1,2 \end{gathered} ?Ψ=21?K11?α12?+21?K22?α22?+y1?y2?K12?α1?α2?+y1?α1?v1?+y2?α2?v2??α1??α2?+Ψconstant??,Kij?=K(x i?,x j?),vi?=j=3N?αj?yj?K(xi?,xj?),i=1,2?
这里,左半部分的
min ? α ˉ 1 2 ∑ i = 1 N ∑ j = 1 N y i y j K ( x ? i , x ? j ) α i α j \min _{\bar{\alpha}} \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} y_{i} y_{j} K\left(\vec{x}_{i}, \vec{x}_{j}\right) \alpha_{i} \alpha_{j} αˉmin?21?i=1N?j=1N?yi?yj?K(x i?,x j?)αi?αj?
改写成:
1 2 K 11 α 1 2 + 1 2 K 22 α 2 2 + y 1 y 2 K 12 α 1 α 2 + y 1 α 1 v 1 + y 2 α 2 v 2 \frac{1}{2} K_{11} \alpha_{1}^{2}+\frac{1}{2} K_{22} \alpha_{2}^{2}+y_1y_2 K_{12} \alpha_{1} \alpha_{2}+y_{1} \alpha_{1} v_{1}+y_{2} \alpha_{2} v_{2} 21?K11?α12?+21?K22?α22?+y1?y2?K12?α1?α2?+y1?α1?v1?+y2?α2?v2?
注意一个细节,之所以前面两项有1/2后面不乘1/2是因为这些项均是成对出现的。

右半部分的
? ∑ i = 1 N α i -\sum_{i=1}^{N} \alpha_{i} ?i=1N?αi?
改写成:
? α 1 ? α 2 + Ψ constant? -\alpha_{1}-\alpha_{2}+\Psi_{\text {constant }} ?α1??α2?+Ψconstant??

5.2 将二元函数转化为一元函数

针对上式,我们还可以利用约束条件和一些小技巧将其中一个变量转化为另一个变量的函数,进而将优化函数转化为一元函数:

首先有等式约束有:
α 1 y 1 + α 2 y 2 = ? ∑ i = 3 N α i y i , 令 其 为 一 常 数 ζ ∴ α 1 y 1 + α 2 y 2 = ζ \begin{aligned} &\alpha_{1} y_{1}+\alpha_{2} y_{2}=-\sum_{i=3}^{N} \alpha_{i} y_{i},令其为一常数\zeta\\ &\therefore \alpha_{1} y_{1}+\alpha_{2} y_{2}=\zeta \end{aligned} ?α1?y1?+α2?y2?=?i=3N?αi?yi?ζα1?y1?+α2?y2?=ζ?
用一个trick,两边同乘y1,由于y1^2 = 1,因此有:
α 1 = ( ζ ? y 2 α 2 ) y 1 \alpha_{1}=\left(\zeta-y_{2} \alpha_{2}\right) y_{1} α1?=(ζ?y2?α2?)y1?
回代到二元目标函数中,得到(常数项不影响解,因此省略):
min ? Ψ ( α 2 ) = 1 2 K 11 ( ζ ? α 2 y 2 ) 2 + 1 2 K 22 α 2 2 + y 2 K 12 ( ζ ? α 2 y 2 ) α 2 ? ( ζ ? α 2 y 2 ) y 1 ? α 2 + v 1 ( ζ ? α 2 y 2 ) + y 2 v 2 α 2 \begin{gathered} \min \Psi\left(\alpha_{2}\right)=\frac{1}{2} K_{11}\left(\zeta-\alpha_{2} y_{2}\right)^{2}+\frac{1}{2} K_{22} \alpha_{2}^{2}+y_{2} K_{12}\left(\zeta-\alpha_{2} y_{2}\right) \alpha_{2}-\left(\zeta-\alpha_{2} y_{2}\right) y_{1}-\alpha_{2} \\ +v_{1}\left(\zeta-\alpha_{2} y_{2}\right)+y_{2} v_{2} \alpha_{2} \end{gathered} minΨ(α2?)=21?K11?(ζ?α2?y2?)2+21?K22?α22?+y2?K12?(ζ?α2?y2?)α2??(ζ?α2?y2?)y1??α2?+v1?(ζ?α2?y2?)+y2?v2?α2??
现在上式就是一个只包含α2的一元二次函数了。

5.3 求解一元函数的极值,求得α1,α2

上式的一元函数是一个凸函数,求极小值只需对α2求偏导得0:
? Ψ ( α 2 ) ? α 2 = ( K 11 + K 22 ? 2 K 12 ) α 2 ? K 11 ζ y 2 + K 12 ζ y 2 + y 1 y 2 ? 1 ? v 1 y 2 + v 2 y 2 = 0 \frac{\partial \Psi\left(\alpha_{2}\right)}{\partial \alpha_{2}}=\left(K_{11}+K_{22}-2 K_{12}\right) \alpha_{2}-K_{11} \zeta y_{2}+K_{12} \zeta y_{2}+y_{1} y_{2}-1-v_{1} y_{2}+v_{2} y_{2}=0 ?α2??Ψ(α2?)?=(K11?+K22??2K12?)α2??K11?ζy2?+K12?ζy2?+y1?y2??1?v1?y2?+v2?y2?=0
然后我们就可以求得更新后的α2的解,由于α1可以表示成α2的函数,因此α1的解也可以求得。

这样一来,我们每一步迭代的目的就达到了,不就是更新α1和α2,这不就做完了嘛,具体的求解交给计算机解决就行了!

Platt:我认为这个形式不太直观,求解还是太繁琐,能不能再简化一下?

我:🤡

在论文中对上式进行了进一步的转化,使得更新后的α2能用更新前的α2表示,而不是不够直观的ζ

首先,我们先定义SVM对i个样本最终的预测值与标签之间的差值为:
E i = f ( x i ) ? y i E_i = f(x_i)-y_i Ei?=f(xi?)?yi?
这里的函数f()就表示SVM基于的分类超平面模型:
f ( x ) = w T x + b f(x) = w^Tx+b f(x)=wTx+b
将w表示成α参数的形式带入,就是:
f ( x ) = ∑ i = 1 N α i y i K ( x i , x ) + b f(x)=\sum_{i=1}^{N} \alpha_{i} y_{i} K\left(x_{i}, x\right)+b f(x)=i=1N?αi?yi?K(xi?,x)+b
我们发现vi中也有与f(x)相似的形式,因此,可以用函数f表示v1,v2:
由 于 v i = ∑ j = 3 N α j y j K ( x i , x j ) , i = 1 , 2 ,?因此? v 1 = f ( x 1 ) ? ∑ j = 1 2 y j α j K 1 j ? b v 2 = f ( x 2 ) ? ∑ j = 1 2 y j α j K 2 j ? b \begin{aligned} & { 由于 } v_{i}=\sum_{j=3}^{N} \alpha_{j} y_{j} K\left(x_{i}, x_{j}\right), i=1,2 \text {, 因此 }\\ &v_{1}=f\left(x_{1}\right)-\sum_{j=1}^{2} y_{j} \alpha_{j} K_{1 j}-b\\ &v_{2}=f\left(x_{2}\right)-\sum_{j=1}^{2} y_{j} \alpha_{j} K_{2 j}-b \end{aligned} ?vi?=j=3N?αj?yj?K(xi?,xj?),i=1,2,?因此?v1?=f(x1?)?j=12?yj?αj?K1j??bv2?=f(x2?)?j=12?yj?αj?K2j??b?

将 ζ = α 1 old? y 1 + α 2 old? y 2 以 及 v 1 , v 2 转 换 后 的 形 式 带 入 梯 度 = 0 那 个 式 子 , 就 可 以 得 到 : 将\zeta=\alpha_{1}^{\text {old }} y_{1}+\alpha_{2}^{\text {old }} y_{2}以及v1,v2转换后的形式带入梯度=0那个式子,就可以得到: ζ=α1old??y1?+α2old??y2?v1v2=0

( K 11 + K 22 ? 2 K 12 ) α 2 new,?unclipped? = ( K 11 + K 22 ? 2 K 12 ) α 2 old? + y 2 [ y 2 ? y 1 + f ( x 1 ) ? f ( x 2 ) ] \begin{aligned} &\left(K_{11}+K_{22}-2 K_{12}\right) \alpha_{2}^{\text {new, unclipped }}=\left(K_{11}+K_{22}-2 K_{12}\right) \alpha_{2}^{\text {old }} \\ &+y_{2}\left[y_{2}-y_{1}+f\left(x_{1}\right)-f\left(x_{2}\right)\right] \end{aligned} ?(K11?+K22??2K12?)α2new,?unclipped??=(K11?+K22??2K12?)α2old??+y2?[y2??y1?+f(x1?)?f(x2?)]?
这里的unclipped表示尚未考虑α2是否满足约束0<=αi<=C。

将Ei代入上式,即可得到:
α 2 new? , ?unclipped? = α 2 old? + y 2 ( E 1 ? E 2 ) K 11 + K 22 ? 2 K 12 \alpha_{2}^{\text {new }, \text { unclipped }}=\alpha_{2}^{\text {old }}+\frac{y_{2}\left(E_{1}-E_{2}\right)}{K_{11}+K_{22}-2 K_{12}} α2new?,?unclipped??=α2old??+K11?+K22??2K12?y2?(E1??E2?)?
令η=K11+K22-2K12,就得到如下十分美观的形式(这个形式有点像梯度下降里的更新步)
α 2 new? , ?unclipped? = α 2 old? + y 2 ( E 1 ? E 2 ) η \alpha_{2}^{\text {new }, \text { unclipped }}=\alpha_{2}^{\text {old }}+\frac{y_{2}\left(E_{1}-E_{2}\right)}{\eta} α2new?,?unclipped??=α2old??+ηy2?(E1??E2?)?

5.4 对原始的解添加约束

值得注意的是,我们求解出α2的解的形式此时还未考虑约束条件:

α 1 y 1 + α 2 y 2 = ? ∑ i = 3 N α i y i = ζ ( 1 ) 0 ≤ α i ≤ C , i = 1 , 2 ( 2 ) \begin{aligned} & \alpha_{1} y_{1}+\alpha_{2} y_{2}=-\sum_{i=3}^{N} \alpha_{i} y_{i}=\zeta \quad(1)\\ & 0 \leq \alpha_{i} \leq C, \quad i=1,2\quad\quad\quad\quad(2) \end{aligned} ?α1?y1?+α2?y2?=?i=3N?αi?yi?=ζ(1)0αi?C,i=1,2(2)?

首先考虑约束条件(2),(2)的约束在参数α1,α2构成的解空间里是一个矩形区域;

然后考虑约束(1),约束(1)可以分为两种情况,一种是y1与y2同号,另一种是y1与y2异号,此时有:
α 1 + α 2 = k , y 1 = y 2 α 1 ? α 2 = k , y 1 ≠ y 2 其 中 k 是 常 数 , 可 正 可 负 \begin{aligned} α_1+α_2 = k,\quad y1=y2\\ α_1-α_2 = k,\quad y1≠y2\\ 其中k是常数,可正可负 \end{aligned} α1?+α2?=k,y1=y2α1??α2?=k,y1?=y2k?
(1)的约束在参数α1,α2构成的解空间里是一条直线。

两个约束合并可以用下图进行可视化:

请添加图片描述

通过观察,可以总结出下面的规律:
令 L ≤ α 2 new? ≤ H i ?当? y 1 ≠ y 2 ?时,? L = max ? ( 0 , α 2 old? ? α 1 old? ) ; H = min ? ( C , C + α 2 old? ? α 1 old? ) ?当? y 1 = y 2 ?时,? L = max ? ( 0 , α 1 old? + α 2 old? ? C ) ; H = min ? ( C , α 2 old? + α 1 old? ) \begin{aligned} &令L \leq \alpha_{2}^{\text {new }} \leq H_{i} \\ &\text { 当 } y_{1} \neq y_{2} \text { 时, } L=\max \left(0, \alpha_{2}^{\text {old }}-\alpha_{1}^{\text {old }}\right) ; H=\min \left(C, C+\alpha_{2}^{\text {old }}-\alpha_{1}^{\text {old }}\right) \\ &\text { 当 } y_{1}=y_{2} \text { 时, } L=\max \left(0, \alpha_{1}^{\text {old }}+\alpha_{2}^{\text {old }}-C\right) ; H=\min \left(C, \alpha_{2}^{\text {old }}+\alpha_{1}^{\text {old }}\right) \end{aligned} ?Lα2new??Hi???y1??=y2??时,?L=max(0,α2old???α1old??);H=min(C,C+α2old???α1old??)??y1?=y2??时,?L=max(0,α1old??+α2old???C);H=min(C,α2old??+α1old??)?
合并一下,就是:
α 2 new? = { H , α 2 new? , ?unclipped? > H α 2 new? , ?unclipped? , L ? α 2 new,unclipped? ? H ? L , α 2 new? , ?unclipped? < L \alpha_{2}^{\text {new }}=\left\{\begin{array}{c} \mathrm{H}, \alpha_{2}^{\text {new }, \text { unclipped }}>H \\ \alpha_{2}^{\text {new }, \text { unclipped }}, L \leqslant \alpha_{2}^{\text {new,unclipped }} \leqslant H \\ \mathrm{~L}, \alpha_{2}^{\text {new }, \text { unclipped }}<L \end{array}\right. α2new??=????H,α2new?,?unclipped??>Hα2new?,?unclipped??,L?α2new,unclipped???H?L,α2new?,?unclipped??<L?
现在,我们解出的结果就是真正的α2的解了。

同时约束(1)又有如下性质,即无论更不更新,常数ζ是始终固定不变的:
α 1 old? y 1 + α 2 old? y 2 = ? ∑ i = 3 N α i y i = α 1 new? y 1 + α 2 new? y 2 = ζ \alpha_{1}^{\text {old }} y_{1}+\alpha_{2}^{\text {old }} y_{2}=-\sum_{i=3}^{N} \alpha_{i} y_{i}=\alpha_{1}^{\text {new }} y_{1}+\alpha_{2}^{\text {new }} y_{2}=\zeta α1old??y1?+α2old??y2?=?i=3N?αi?yi?=α1new??y1?+α2new??y2?=ζ
因此可求得更新后的α1:
α 1 new? = α 1 old? + y 1 y 2 ( α 2 old? ? α 2 new? ) \alpha_{1}^{\text {new }}=\alpha_{1}^{\text {old }}+y_{1} y_{2}\left(\alpha_{2}^{\text {old }}-\alpha_{2}^{\text {new }}\right) α1new??=α1old??+y1?y2?(α2old???α2new??)
这样一来我们就解决了SMO如何优化αi和αj的问题。

5.5 每个迭代轮如何高效的选取i和j?,SMO的启发式选择

接下来我们回答最初的第一个问题,即SMO算法如何启发式的选取一对αi和αj。

首先,遍历外层的循环(寻找第一个变量i),选择那些分类错误的点作为当前待优化的变量,怎么判断哪一些点是SVM分类错误的呢?一个思想是违背KKT条件最多的点。对于软间隔SVM,样本点满足KKT条件即约束就是:
α i = 0 ? y ( i ) ( w T x ( i ) + b ) ≥ 1 α i = C ? y ( i ) ( w T x ( i ) + b ) ≤ 1 0 < α i < C ? y ( i ) ( w T x ( i ) + b ) = 1 \begin{aligned} \alpha_{i}=0 & \Rightarrow y^{(i)}\left(w^{T} x^{(i)}+b\right) \geq 1 \\ \alpha_{i}=C & \Rightarrow y^{(i)}\left(w^{T} x^{(i)}+b\right) \leq 1 \\ 0<\alpha_{i}<C & \Rightarrow y^{(i)}\left(w^{T} x^{(i)}+b\right)=1 \end{aligned} αi?=0αi?=C0<αi?<C??y(i)(wTx(i)+b)1?y(i)(wTx(i)+b)1?y(i)(wTx(i)+b)=1?
当拉格朗日乘子αi=0时,说明对应的样本不是支持向量,此时的yi(wxi+b)就>=1;

当αi=C时,说明该样本是模型所能够容忍的最大限度错误的样本,此时的yi(wxi+b)<=1;

当0<αi<C时,说明该样本是支持向量,此时yi(wxi+b)=1;

紧接着,确定了αi后,我们需要确定αj,SMO启发式选择的标准是:确定的αi能够使更新后的αj相较于更新前的αj的变化最大化。一个思想是,我们可以根据预测值与标签的差值Ei进行选取:
E i = f ( x i ) ? y i E_i = f(x_i)-y_i Ei?=f(xi?)?yi?
根据最终的参数更新公式可知,αj是依赖于Ei-Ej的:
α 2 new? , ?unclipped? = α 2 old? + y 2 ( E 1 ? E 2 ) η \alpha_{2}^{\text {new }, \text { unclipped }}=\alpha_{2}^{\text {old }}+\frac{y_{2}\left(E_{1}-E_{2}\right)}{\eta} α2new?,?unclipped??=α2old??+ηy2?(E1??E2?)?
因此我们只需要选择最大的|Ei?Ej|来近似最大化步长。

5.6 参数b的计算

由于b 的值关系到 f(x)的计算,f(x)关系到下次优化时 Ei 的计算。因此每次更新一堆参数之后都要对b进行更新。

由于我们在求对偶问题的极小的过程中,对α求导时将参数b约去了,因此我们需要通过进一步的推导求得b关于α的函数关系。

我们可以根据软间隔SVM的KKT条件求解出α与b之间的关系:

第一种情况:
若 α 1 n e w 满 足 0 < α 1 n e w < C , 说 明 α 1 对 应 的 样 本 是 支 持 向 量 将 K K T 条 件 y 1 ( w T x 1 + b ) = 1 中 的 w 转 化 为 α 的 函 数 , 就 是 ∑ i = 1 N α i y i K i 1 + b = y 1 因 此 有 : b 1 new? = y 1 ? ∑ i = 3 N α i y i K i 1 ? α 1 new? y 1 K 11 ? α 2 new? y 2 K 21 可 以 将 前 两 项 替 换 为 E 1 与 α o l d 的 表 示 形 式 : y 1 ? ∑ i = 3 N α i y i K i 1 = ? E 1 + α 1 old? y 1 K 11 + α 2 old? y 2 K 11 + b old? 最 终 形 式 就 是 : b 1 new? = ? E 1 ? y 1 K 11 ( α 1 new? ? α 1 old? ) ? y 2 K 21 ( α 2 new? ? α 2 old? ) + b old? \begin{aligned} &若\alpha_1^{new}满足0<\alpha_1^{new}<C,说明α_1对应的样本是支持向量\\ &将KKT条件y_1(w^Tx_1+b)=1中的w转化为\alpha的函数,就是\\ &\sum_{i=1}^{N} \alpha_{i} y_{i} K_{i 1}+b=y_{1}\\ &因此有:\\ &b_{1}^{\text {new }}=y_{1}-\sum_{i=3}^{N} \alpha_{i} y_{i} K_{i 1}-\alpha_{1}^{\text {new }} y_{1} K_{11}-\alpha_{2}^{\text {new }} y_{2} K_{21}\\ &可以将前两项替换为E1与α^{old}的表示形式:\\ &y_{1}-\sum_{i=3}^{N} \alpha_{i} y_{i} K_{i 1}=-E_{1}+\alpha_{1}^{\text {old }} y_{1} K_{11}+\alpha_{2}^{\text {old }} y_{2} K_{11}+b^{\text {old }}\\ &最终形式就是:\\ & b_{1}^{\text {new }}=-E_{1}-y_{1} K_{11}\left(\alpha_{1}^{\text {new }}-\alpha_{1}^{\text {old }}\right)-y_{2} K_{21}\left(\alpha_{2}^{\text {new }}-\alpha_{2}^{\text {old }}\right)+b^{\text {old }}\\ \end{aligned} ?α1new?0<α1new?<Cα1?KKTy1?(wTx1?+b)=1wαi=1N?αi?yi?Ki1?+b=y1?b1new??=y1??i=3N?αi?yi?Ki1??α1new??y1?K11??α2new??y2?K21?E1αold:y1??i=3N?αi?yi?Ki1?=?E1?+α1old??y1?K11?+α2old??y2?K11?+bold?:b1new??=?E1??y1?K11?(α1new???α1old??)?y2?K21?(α2new???α2old??)+bold??
第二种情况:
若 α 2 n e w 满 足 0 < α 2 n e w < C , 说 明 α 2 对 应 的 样 本 是 支 持 向 量 同 第 一 种 情 况 可 得 : b 2 new? = ? E 2 ? y 1 K 12 ( α 1 new? ? α 1 old? ) ? y 2 K 22 ( α 2 new? ? α 2 old? ) + b old? \begin{aligned} &若\alpha_2^{new}满足0<\alpha_2^{new}<C,说明α_2对应的样本是支持向量\\ & 同第一种情况可得:\\ & b_{2}^{\text {new }}=-E_{2}-y_{1} K_{12}\left(\alpha_{1}^{\text {new }}-\alpha_{1}^{\text {old }}\right)-y_{2} K_{22}\left(\alpha_{2}^{\text {new }}-\alpha_{2}^{\text {old }}\right)+b^{\text {old }} \end{aligned} ?α2new?0<α2new?<C,α2?b2new??=?E2??y1?K12?(α1new???α1old??)?y2?K22?(α2new???α2old??)+bold??
第三种情况:
若 同 时 满 足 0 < α i n e w < C , 两 者 均 为 支 持 向 量 : 则 b 1 n e w = b 2 n e w = 上 式 \begin{aligned} &若同时满足0<\alpha^{new}_i<C,两者均为支持向量:\\ &则b_1^{new} = b_2^{new}=上式 \end{aligned} ?0<αinew?<C:b1new?=b2new?=?
第四种情况:
若 同 时 不 满 足 0 < α i n e w < C : 说 明 α i 与 α j 对 应 的 样 本 均 不 是 支 持 向 量 则 b 1 n e w 与 b 2 n e w 以 及 他 们 之 间 的 数 都 满 足 K K T 条 件 , 一 个 好 的 权 衡 是 选 择 它 们 的 中 点 \begin{aligned} &若同时不满足0<\alpha^{new}_i<C:说明α_i与α_j对应的样本均不是支持向量\\ &则b_1^{new}与 b_2^{new}以及他们之间的数都满足KKT条件,一个好的权衡是选择它们的中点 \end{aligned} ?0<αinew?<C:αi?αj?b1new?b2new?KKT?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:09:34  更:2021-12-26 22:10:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 5:58:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码