SVM理解的视频和文章其实看过好几遍,每次都能看懂,但是过了一个月细节就模糊了,想到如果要掌握一个知识,最好的方式用自己的语言陈述一遍。
1. Loss Function
SVM与其他分类算法最大的不同在于loss function,也就是找到一个margin最大的分割线:
argmaxw,b argminx‖wTx+b‖wTw‾‾‾‾‾√ arg max w , b arg min x ‖ w T x + b ‖ w T w
假设存在直线 wTx+b w T x + b ,能够分割 { (x1,y1),(x2,y2),...,(xn,yn)} { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } 全部 n n 个点,这样的线其实有很多,所以我们想要到一条线使得正负样本之间的间隔越远越好,也就是分的越清楚越好(这里其实与优化auc有异曲同工之妙,其实SVM的loss函数就是hinge loss,后面会论述hinge loss与优化auc有什么具体的联系)。这个时候我们就需要调整 和 b b 的值,使得所有点到这条线距离中最短的两个点的距离最大。有点绕口,其实想表达的意思就是上述loss函数中 是所有点中距离这条线最近的点,这个点一般都是2个或2个以上(一个正样本,一个负样本)。
这里 yi∈(+1,−1) y i ∈ ( + 1 , − 1 ) ,其实这也是与其他二分类问题 yi∈(0,1) y i ∈ ( 0 , 1 ) 不同的地方。如何设置 yi y i 的值与loss函数有密不可分的关系,本质上就是让loss函数写起来毫无违和感,例如这里设计成 { +1,−1} { + 1 , − 1 } 就是为了能够把loss函数分子的取模修改为 y(wTx+b) y ( w T x + b ) ,让表达位于直线上面和下面的点到直线距离变成了一个数学公式。
argmaxw,b ymin(wTxmin+b)wTw‾‾‾‾‾√ arg max w , b y m i n ( w T x m i n + b ) w T w
当然仅仅是这样一个loss函数是无法表达直线 wTx+b w T x + b 能够区分所有正样本和负样本的,所以需要加上一些附加的条件:
s.t. yi(wTxi+b)≥ymin(wTxmin+b) s . t . y i ( w T x i + b ) ≥ y m i n ( w T x m i n + b )
假设一共有 n n 个点,那么上面的条件就有 个,这里的 (xmin,ymin) ( x m i n , y m i n ) 指的就是到直线最短点的距离。我们都知道如果将一条直线 w w 和 都已经确定了,对他们同时乘以一个倍数变为 βw β w 和 βb β b ,表达的还是同一条直线。假设我们让这个 β β 取某一个值正好让 ymin(wTxmin+b) y m i n ( w T x m i n + b ) 变成1,那么上面的 Loss函数和 约束条件都可以得到简化:
argmaxŵ ,b̂ 1ŵ Tŵ ‾‾‾‾‾√ arg max w ^ , b ^ 1 w ^ T w ^
s.t.yi(ŵ Txi+b̂ )≥1 s . t . y i ( w ^ T x i + b ^ ) ≥ 1
这里的 ŵ w ^ 和 b̂ b ^ 已经不是原来的值了,而是 βw β w 和 βb β b ,为了后面偷懒不写 ŵ w ^ 和 b̂ b ^ ,这里只是做了一个简单的替换而已,不影响最优化的结果。
argmaxw,b 1wTw‾‾‾‾‾√ arg max w , b 1 w T w
s.t.yi(wTxi+b)≥1 s . t . y i ( w T x i + b ) ≥ 1
把上述的最大化问题变成最小化问题,把 wTw‾‾‾‾‾√ w T w 变为 12wTw 1 2 w T w 优化问题不变,这其实就是数学上的一种方便,没什么好说的:
argminw,b 12wTw arg min w , b 1 2 w T w
s.t.1−yi(wTxi+b)≤0 s . t . 1 − y i ( w T x i + b ) ≤ 0
2. KKT条件
本质上SVM的求解问题问题就是带条件的二次规划问题,而求解带等式条件的最优化问题通常我们会引入拉格朗日乘子,而对于带不等式的最优化问题就需要祭出KKT条件了,你可以把KKT条件看做拉格朗日乘子的一种推广形式。那么我们该如何理解KKT条件呢?如果一上来就列出一堆公式这个问题也就讲完了,只不过不懂的依然不懂,过一段时间就被彻底的遗忘。所以这一次希望能够从解决问题的角度来理解一下KKT条件,其中借鉴了很多林轩田老师的课程内容。
2.1 拉格朗日方程
在求解二次规划问题时如果掺杂着一堆限制条件,这个最优化问题就会变得不太好解决,优化程序也不容易写出来。那么有没有什么办法把上面的问题中限制条件去掉呢?答案其实呼之欲出-拉格朗日乘子,其实拉格朗日乘子解决的问题是当条件是等式的情况下,目标函数的极值点出现在可行空间与条件函数相切的地方。那么对于有不等式条件的问题,我们是否可以直接使用拉格朗日乘子的方法呢?例如可以把原来的最优化问题变成:
argminw,b,α≥0 12wTw+∑i=1nαi(1−yi(wTxi+b))(1) (1) arg min w , b , α ≥ 0 1 2 w T w + ∑ i = 1 n α i ( 1 − y i ( w T x i + b ) )
显然这么做是不可以的,上面的最优化公式没有把不等式约束条件带进来,违反不等式的 w∗ w ∗ , b∗ b ∗ , α∗ α ∗ 也可以是最优化的解。这里可以思考一下为什么等式条件可以用上述公式 (1) ( 1 ) 进行求解?其实也很简单,如果是等式条件,那么最优解一定出现在这个条件函数与可行空间相切的地方,这个可以用简单的反证法进行证明。如果对公式 (1) ( 1 ) 进行求导,我们可以得到两个函数的梯度是正比关系,这就隐含了极值在两个函数相切的地方。反观不等式条件,极值就不一定出现在函数相切的地方了。那么这个函数:
L(w,b,α)=12wTw+∑i=1nαi(1−yi(wTxi+b))(2) (2) L ( w , b , α ) = 1 2 w T w + ∑ i = 1 n α i ( 1 − y i ( w T x i + b ) )
是不是就毫无用处了呢?聪明的数学家发现如果我们在这个函数前加上一个 argmaxα arg max α 问题好像就解决了,也就是把公式 (2) ( 2 ) 变成了:
L(w,b,α)=argmaxα 12wTw+∑i=1nαi(1−yi(wTxi+b))(3) (3) L ( w , b , α ) = arg max α 1 2 w T w + ∑ i = 1 n α i ( 1 − y i ( w T x i + b ) )
试想一下如果 w∗ w ∗ , b∗ b ∗ 是一组极值点,如果不满足约束条件,意味着 1−yi(w∗Txi+b∗)>0 1 − y i ( w ∗ T x i + b ∗ ) > 0 ,那么这个取极大值就会把 αi α i 调成 ∞ ∞ ,那么 L(w,b,α) L ( w , b , α ) 也会趋近于 ∞ ∞ ,那么原始问题 argminw,bL(w,b,α) arg min w , b L ( w , b , α ) 的结果也会趋近于 ∞ ∞ 。如果你是最优化的程序,一旦发现这样的不满足不等式条件 w w , ,你就会抛弃这样的极值点,这样是不是一下子把不等式条件给囊括进来了。不得不说这样构造函数确实很巧妙,所以原来的最优化问题变成了:
argminw,b argmaxα≥012wTw+∑i=1nαi(1−yi(wTxi+b))(4) (4) arg min w , b arg max α ≥ 0 1 2 w