线性SVM的拉格朗日对偶函数和决策函数
有了损失函数,就需要对损失函数进行求解。这个求解过程异常复杂,涉及到的数学的难度不是推导损失函数的部分可比。并且,在sklearn当中,我们作为使用者完全无法干涉这个求解的过程。因此作为使用sklearn的人,这部分属于进阶内容。
之前得到了线性SVM损失函数的最初形态:
m
i
n
ω
,
b
∣
∣
ω
∣
∣
2
2
min_{ω,b}\frac {{||ω||}^2}2
minω,b2∣∣ω∣∣2
服从
y
i
(
ω
⋅
x
i
+
b
)
⩾
1
,
i
=
1
,
2
,
.
.
.
N
y_i(ω\cdot x_i+b)\geqslant 1, \quad i=1,2,...N
yi(ω⋅xi+b)⩾1,i=1,2,...N
这个损失函数分为两部分:需要最小化的函数,以及参数求解后必须满足的约束条件。这是一个最优化问题。
将损失函数从最初形态转换为拉格朗日乘数形态
Why need
我们的目标是求解让损失函数最小化的ω,但其实很容易看得出来,如果||ω||为0,f(ω)必然最小。但是,||ω||=0其实是一个无效值,因为:首先,决策边界是 ω ⋅ x + b = 0 \boldsymbol{ω\cdot x}+b=0 ω⋅x+b=0,如果ω为0,则这个向量里包含的所有元素都为0,那就有b = 0这个唯一值。然而,如果b和ω都为0,决策边界就不再是一条直线了,函数间隔 y i ( ω ⋅ x i + b ) y_i(\boldsymbol{ω\cdot x_i}+b) yi(ω⋅xi+b)就会为0,条件中的 y i ( ω ⋅ x i + b ) ⩾ 1 y_i(\boldsymbol{ω\cdot x_i}+b)\geqslant1 yi(ω⋅xi+b)⩾1就不可能实现,所以ω不可以是一个0向量。可见,单纯让 f ( ω ) = ∣ ∣ ω ∣ ∣ 2 2 f(ω)=\frac {{||ω||}^2}2 f(ω)=2∣∣ω∣∣2为0,是不能求解出合理的ω的,我们希望能够找出一种方式,能够让条件 y i ( ω ⋅ x i + b ) ⩾ 1 y_i(\boldsymbol{ω\cdot x_i}+b)\geqslant1 yi(ω⋅xi+b)⩾1在计算中也被纳入考虑,一种业界认可的方法是使用拉格朗日乘数法(standard Lagrange multiplier method)。
Why can
损失函数是二次的(quadratic),并且损失函数中的约束条件在参数ω和b下是线性的,求解这样的损失函数被称为“凸优化问题”(convex optimization problem)。拉格朗日乘数法正好可以用来解决凸优化问题,这种方法也是业界常用的,用来解决带约束条件,尤其是带有不等式的约束条件的函数的数学方法。首先第一步,使用拉格朗日乘数来将损失函数改写为考虑了约束条件的形式:
L
(
ω
,
b
,
α
)
=
∣
∣
ω
∣
∣
2
2
−
∑
i
=
1
N
α
i
(
y
i
(
ω
⋅
x
i
+
b
)
−
1
)
(
α
i
⩾
0
)
L(ω,b,α)=\frac {{||ω||}^2}2-\sum_{i=1}^Nα_i(y_i(\boldsymbol{ω\cdot x_i}+b)-1)\quad (α_i\geqslant0)
L(ω,b,α)=2∣∣ω∣∣2−i=1∑Nαi(yi(ω⋅xi+b)−1)(αi⩾0)
这是一个非常聪明而且巧妙的表达式,它被称为拉格朗日函数,其中αi就叫做拉格朗日乘数。此时,要求解的就不只有参数向量ω和截距b了,也要求解拉格朗日乘数α,而xi和yi都是已知的特征矩阵和标签。
How
拉格朗日函数也分为两部分。第一部分和原始的损失函数一样,第二部分呈现了带不等式的约束条件。我们希望,L(ω,b,α)不仅能够代表原有的损失函数f(ω)和约束条件
y
i
(
ω
⋅
x
i
+
b
)
⩾
1
,
i
=
1
,
2
,
.
.
.
N
y_i(\boldsymbol{ω\cdot x_i}+b)\geqslant 1, \quad i=1,2,...N
yi(ω⋅xi+b)⩾1,i=1,2,...N,还能够表示想要最小化损失函数来求解ω和b的意图,所以要先以α为参数,求解L(ω,b,α)的最大值,再以ω和b为参数,求解L(ω,b,α)的最小值。因此,目标可以写作:
m
i
n
ω
,
b
m
a
x
α
i
⩾
0
L
(
ω
,
b
,
α
)
(
α
i
⩾
0
)
min_{ω,b}max_{α_i\geqslant0}L(ω,b,α)\quad (α_i\geqslant0)
minω,bmaxαi⩾0L(ω,b,α)(αi⩾0)
怎么理解这个式子呢?首先,我们第一步先执行max,即L(ω,b,α)最大化,那就有两种情况:
当
y
i
(
ω
⋅
x
i
+
b
)
>
1
y_i(\boldsymbol{ω\cdot x_i}+b)>1
yi(ω⋅xi+b)>1,函数的第二部分
∑
i
=
1
N
α
i
(
y
i
(
ω
⋅
x
i
+
b
)
−
1
)
\sum_{i=1}^Nα_i(y_i(\boldsymbol{ω\cdot x_i}+b)-1)
∑i=1Nαi(yi(ω⋅xi+b)−1)就一定为正,式子
∣
∣
ω
∣
∣
2
2
\frac {{||ω||}^2}2
2∣∣ω∣∣2就要减去一个正数,此时若要L(ω,b,α)最大化,则α必须取0。
当
y
i
(
ω
⋅
x
i
+
b
)
<
1
y_i(\boldsymbol{ω\cdot x_i}+b)<1
yi(ω⋅xi+b)<1,函数的第二部分
∑
i
=
1
N
α
i
(
y
i
(
ω
⋅
x
i
+
b
)
−
1
)
\sum_{i=1}^Nα_i(y_i(\boldsymbol{ω\cdot x_i}+b)-1)
∑i=1Nαi(yi(ω⋅xi+b)−1)就一定为负,式子
∣
∣
ω
∣
∣
2
2
\frac {{||ω||}^2}2
2∣∣ω∣∣2就要减去一个负数,相当于加上一个正数,此时若要L(ω,b,α)最大化,则α必须取正无穷。
若把函数第二部分当作一个惩罚项来看待,则
y
i
(
ω
⋅
x
i
+
b
)
y_i(\boldsymbol{ω\cdot x_i}+b)
yi(ω⋅xi+b)大于1时函数没有受到惩罚,而
y
i
(
ω
⋅
x
i
+
b
)
y_i(\boldsymbol{ω\cdot x_i}+b)
yi(ω⋅xi+b)小于1时函数受到了极致的惩罚,即加上了一个正无穷项,函数整体永远不可能取到最小值。所以第二步,执行min的命令,求解函数整体的最小值,永远不能让α必须取到正无穷的状况出现,即是说永远不让
y
i
(
ω
⋅
x
i
+
b
)
<
1
y_i(\boldsymbol{ω\cdot x_i}+b)<1
yi(ω⋅xi+b)<1的状况出现,从而实现了求解最小值的同时让约束条件被满足。
现在, L(ω,b,α)就是新的损失函数了,我们的目标是要通过先最大化,再最小化它来求解参数向量ω和截距b的值。