一、SVM的建模
模型一:从logistic到SVM
Logistic损失函数如下:
J
(
θ
)
=
C
∗
[
1
n
∑
i
=
1
n
(
y
(
i
)
log
(
p
(
i
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
p
(
i
)
)
)
]
+
∥
θ
∥
2
J(\theta)=\mathrm{C}*\left[\frac{1}{n} \sum_{i=1}^{n}\left(y^{(i)} \log \left(p^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-p^{(i)}\right)\right)\right]+\|\theta\|_{2}
J(θ)=C∗[n1i=1∑n(y(i)log(p(i))+(1−y(i))log(1−p(i)))]+∥θ∥2
logistic表达式
p
(
i
)
=
1
1
+
e
−
x
(
i
)
θ
p^{(i)}=\frac{1}{1+e^{-x^{(i)}\theta}}
p(i)=1+e−x(i)θ1
Logistic回归的标签一般是{1, 0},但是我们这里可以将其改为{-1, 1}。将
J
(
θ
)
J(\theta)
J(θ)做变换如下:
J
(
θ
)
=
C
∗
1
n
∑
i
=
1
n
log
(
1
+
e
−
y
(
i
)
θ
T
x
(
i
)
)
+
∥
θ
∥
2
y
(
i
)
∈
{
1
,
−
1
}
J(\theta)=\mathrm{C} * \frac{1}{n} \sum_{i=1}^{n} \log \left(1+e^{-y^{(i)} \theta^{T} x^{(i)}}\right)+\|\theta\|_{2} \quad y^{(i)} \in\{1,-1\}
J(θ)=C∗n1i=1∑nlog(1+e−y(i)θTx(i))+∥θ∥2y(i)∈{1,−1}
我们令
z
=
y
(
i
)
θ
T
x
(
i
)
,
E
(
z
)
=
J
(
θ
)
z=y^{(i)} \theta^{T} x^{(i)}, \quad E(z)=J(\theta)
z=y(i)θTx(i),E(z)=J(θ)
然后我们可以做替换
log
(
1
+
e
−
y
(
i
)
θ
T
x
(
i
)
)
→
{
1
−
y
(
i
)
θ
T
x
(
i
)
,
1
−
y
(
i
)
θ
T
x
(
i
)
≥
0
0
,
1
−
y
(
i
)
θ
T
x
(
i
)
<
0
\log \left(1+e^{-y^{(i)} \theta^{T} x^{(i)}}\right)\rightarrow \left\{\begin{array}{cc} 1-y^{(i)} \theta^{T} x^{(i)} &, 1-y^{(i)} \theta^{T} x^{(i)} \geq 0 \\ 0 &, 1-y^{(i)} \theta^{T} x^{(i)}<0 \end{array}\right.
log(1+e−y(i)θTx(i))→{1−y(i)θTx(i)0,1−y(i)θTx(i)≥0,1−y(i)θTx(i)<0
这里之所以可以做替换,是因为两者的函数图像十分类似,如下图所示
在李航统计学习书中,近似函数写成如下形式
[
z
]
+
=
{
z
,
z
>
0
0
,
z
⩽
0
[z]_{+}= \begin{cases}z, & z>0 \\ 0, & z \leqslant 0\end{cases}
[z]+={z,0,z>0z⩽0
将被替换的log函数部分代回到损失函数,我们有
J
(
θ
)
=
C
∑
i
=
1
n
[
1
−
y
(
i
)
θ
T
x
(
i
)
]
+
+
∥
θ
∥
2
J(\theta)=C \sum_{i=1}^{n}\left[1-y^{(i)} \theta^{T} x^{(i)}\right]_{+}+\|\theta\|_{2}
J(θ)=Ci=1∑n[1−y(i)θTx(i)]++∥θ∥2
这其实就是SVM的损失函数【
1
−
y
(
i
)
(
w
⋅
x
(
i
)
+
b
)
<
0
1-y^{(i)}\left(w \cdot x^{(i)}+b\right)<0
1−y(i)(w⋅x(i)+b)<0是样本正确分类情况】
min
w
,
b
∑
i
=
1
N
[
1
−
y
(
i
)
(
w
⋅
x
(
i
)
+
b
)
]
+
+
λ
∥
w
∥
2
\min _{w, b} \sum_{i=1}^{N}\left[1-y^{(i)}\left(w \cdot x^{(i)}+b\right)\right]_{+}+\lambda\|w\|^{2}
w,bmini=1∑N[1−y(i)(w⋅x(i)+b)]++λ∥w∥2
这里(w, b)就是
θ
\theta
θ,所以我们可以看出,logistic回归和SVM之间存在很大的关联性。
模型二:无约束问题到有约束问题
上式是针对 ( w , b ) (w,b) (w,b)的无约束优化问题。我们可以进一步转化为有约束问题
令 [ 1 − y i ( w ⋅ x i + b ) ] + = ξ i , ξ i ≥ 0 \left[1-y_{i}\left(w \cdot x_{i}+b\right)\right]_{+}=\xi_{i}, \xi_{i} \geq 0 [1−yi(w⋅xi+b)]+=ξi,ξi≥0,以及 z i = y i ( w ⋅ x i + b ) z_{i}=y_{i}\left(w \cdot x_{i}+b\right) zi=yi(w⋅xi+b)
如果 1 − z i ≥ 0 1-z_{i} \geq 0 1−zi≥0,则 1 − z i = ξ i ≥ 0 1-z_{i}=\xi_{i} \geq 0 1−zi=ξi≥0
如果 1 − z i < 0 1-z_{i}<0 1−zi<0,则 ξ i = 0 \xi_{i}=0 ξi=0,所以 1 − z i < ξ i 1-z_{i}<\xi_{i} 1−zi<ξi
总之无论哪种情况,都有 1 − z i ≤ ξ i 1-z_{i} \leq \xi_{i} 1−zi≤ξi,即 z i ≥ 1 − ξ i z_{i} \geq 1-\xi_{i} zi≥1−ξi。这里的 ξ i \xi_{i} ξi就是约束。
于是我们就把无约束问题转化为有约束问题:
min
w
,
b
,
ξ
1
2
∥
w
∥
2
+
C
∑
i
=
1
N
ξ
i
s.t.
y
i
(
w
⋅
x
i
+
b
)
⩾
1
−
ξ
i
,
i
=
1
,
2
,
⋯
,
N
ξ
i
⩾
0
,
i
=
1
,
2
,
⋯
,
N
\begin{array}{ll} \min _{w, b, \xi} & \frac{1}{2}\|w\|^{2}+C \sum_{i=1}^{N} \xi_{i} \\ \text { s.t. } & y_{i}\left(w \cdot x_{i}+b\right) \geqslant 1-\xi_{i}, \quad i=1,2, \cdots, N \\ & \xi_{i} \geqslant 0, \quad i=1,2, \cdots, N \end{array}
minw,b,ξ s.t. 21∥w∥2+C∑i=1Nξiyi(w⋅xi+b)⩾1−ξi,i=1,2,⋯,Nξi⩾0,i=1,2,⋯,N
N是样本数量。
【本系列西瓜书笔记4中的式41是 ξ i = 0 \xi_{i}=0 ξi=0的情况,也就是最原始的SVM线性可分的形式】
反过来,我们还要再来说明上面有约束优化问题等价于前面的无约束优化问题:
这里的约束条件是
ξ
i
≥
1
−
z
i
ξ
i
≥
0
\begin{gathered} \xi_{i} \geq 1-z_{i} \\ \xi_{i} \geq 0 \end{gathered}
ξi≥1−ziξi≥0
如果
1
−
z
i
≥
0
1-z_{i} \geq 0
1−zi≥0, 则
ξ
i
=
1
−
z
i
\xi_{i}=1-z_{i}
ξi=1−zi
如果 1 − z i < 0 1-z_{i}<0 1−zi<0,则 ξ i = 0 \xi_{i}=0 ξi=0
所以上面有约束问题可转化问下面无约束优化问题
min
w
,
b
∑
i
=
1
N
[
1
−
y
i
(
w
⋅
x
i
+
b
)
]
+
+
λ
∥
w
∥
2
\min _{w, b} \sum_{i=1}^{N}\left[1-y_{i}\left(w \cdot x_{i}+b\right)\right]_{+}+\lambda\|w\|^{2}
w,bmini=1∑N[1−yi(w⋅xi+b)]++λ∥w∥2
模型三:有约束问题到对偶问题
有了约束条件,我们通过广义拉格朗日乘子,将有约束优化问题转换为
min
w
,
b
max
a
L
(
w
,
b
,
a
)
max
a
min
w
,
b
L
(
w
,
b
,
a
)
≤
min
w
,
b
max
a
L
(
w
,
b
,
a
)
\begin{gathered} \min _{w, b} \max _{a} L(w, b, a) \\ \max _{a} \min _{w, b} L(w, b, a) \leq \min _{w, b} \max _{a} L(w, b, a) \end{gathered}
w,bminamaxL(w,b,a)amaxw,bminL(w,b,a)≤w,bminamaxL(w,b,a)
【这里的
max
a
\max _{a}
maxa对应本系列西瓜书笔记4中的
Γ
(
μ
,
λ
)
\Gamma(\boldsymbol{\mu}, \boldsymbol{\lambda})
Γ(μ,λ),也就是求
d
∗
d^{*}
d∗,而
min
w
,
b
\min_{w, b}
minw,b则对应
f
(
x
)
f(x)
f(x),也就是求
p
∗
p^{*}
p∗】
在SVM条件下
max
a
min
w
,
b
L
(
w
,
b
,
a
)
=
min
w
,
b
max
a
L
(
w
,
b
,
a
)
\max _{a} \min _{w, b} L(w, b, a)=\min _{w, b} \max _{a} L(w, b, a)
amaxw,bminL(w,b,a)=w,bminamaxL(w,b,a)
【也就是笔记4中所说的“强对偶性”】
通过对
max
a
min
w
,
b
L
(
w
,
b
,
a
)
\max _{a} \min _{w, b} L(w, b, a)
maxaminw,bL(w,b,a)求解和变换得到对应的对偶形式。(注意在这里是要有KKT条件的,所以得到的仍然是一个有约束优化的问题)
min
α
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
N
α
i
s.t.
∑
i
=
1
N
α
i
y
i
=
0
0
⩽
α
i
⩽
C
,
i
=
1
,
2
,
⋯
,
N
\begin{array}{ll} \min _{\alpha} & \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)-\sum_{i=1}^{N} \alpha_{i} \\ \text { s.t. } & \sum_{i=1}^{N} \alpha_{i} y_{i}=0 \\ & 0 \leqslant \alpha_{i} \leqslant C, \quad i=1,2, \cdots, N \end{array}
minα s.t. 21∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)−∑i=1Nαi∑i=1Nαiyi=00⩽αi⩽C,i=1,2,⋯,N
这里与上面模型二长得不一样。
总结一下:SVM有三种等价模型
- 从logistic得到无约束模型
- 从无约束变为有约束
- 从有约束变为对偶形式
二、SVM三种模型表达的含义
模型一:损失函数
如前所述,令
z
=
y
i
(
w
⋅
x
i
+
b
)
z=y_{i}\left(w \cdot x_{i}+b\right)
z=yi(w⋅xi+b), SVM和Logistic的损失函数分别为
E
(
z
)
=
[
1
−
z
]
+
E
(
z
)
=
log
(
1
+
e
−
z
)
\begin{aligned} &E(z)=[1-z]_{+} \\ &E(z)=\log \left(1+e^{-z}\right) \end{aligned}
E(z)=[1−z]+E(z)=log(1+e−z)
两者近似相等,所以模型一是logistic模型的一种近似,从logistic模型快速推导出SVM模型。
模型二:最大间隔
我们在回过头看损失函数
min
w
,
b
,
ξ
1
2
∥
w
∥
2
+
C
∑
i
=
1
N
ξ
i
s.t.
y
i
(
w
⋅
x
i
+
b
)
⩾
1
−
ξ
i
,
i
=
1
,
2
,
⋯
,
N
ξ
i
⩾
0
,
i
=
1
,
2
,
⋯
,
N
\begin{array}{ll} \min _{w, b, \xi} & \frac{1}{2}\|w\|^{2}+C \sum_{i=1}^{N} \xi_{i} \\ \text { s.t. } & y_{i}\left(w \cdot x_{i}+b\right) \geqslant 1-\xi_{i}, \quad i=1,2, \cdots, N \\ & \xi_{i} \geqslant 0, \quad i=1,2, \cdots, N \end{array}
minw,b,ξ s.t. 21∥w∥2+C∑i=1Nξiyi(w⋅xi+b)⩾1−ξi,i=1,2,⋯,Nξi⩾0,i=1,2,⋯,N
我们考虑最极端的情况
C
→
∞
C\rightarrow \infty
C→∞,此时就逼迫
ξ
i
=
0
\xi_{i}=0
ξi=0, 于是我们有
min
w
,
b
1
2
∥
w
∥
2
s.t.
y
i
(
w
⋅
x
i
+
b
)
−
1
⩾
0
,
i
=
1
,
2
,
⋯
,
N
\begin{array}{ll} \min _{w, b} & \frac{1}{2}\|w\|^{2} \\ \text { s.t. } & y_{i}\left(w \cdot x_{i}+b\right)-1 \geqslant 0, \quad i=1,2, \cdots, N \\ \end{array}
minw,b s.t. 21∥w∥2yi(w⋅xi+b)−1⩾0,i=1,2,⋯,N
这就是我们在笔记4中的形式,也就是最原始的SVM线性可分的形式。
y
i
∈
{
−
1
,
1
}
y_{i} \in\{-1,1\}
yi∈{−1,1}, 所以
w
⋅
x
i
+
b
≥
1
,
y
i
=
1
w
⋅
x
i
+
b
≤
−
1
,
y
i
=
−
1
\begin{gathered} w \cdot x_{i}+b \geq 1, y_{i}=1 \\ w \cdot x_{i}+b \leq-1, y_{i}=-1 \end{gathered}
w⋅xi+b≥1,yi=1w⋅xi+b≤−1,yi=−1
即能找到超平面
(
w
,
b
)
(w, b)
(w,b)将正负样本划分开。【这里不等式右边的1和-1是认为设定的,因为如果1改为其他值比如0.2,放大$(w, b)$5倍同样能得到1。这里的含义就是找到一个超平面把正负样本完美分开】
能划分正负样本的超平面很多,选择哪一个呢?选择出最好的超平面,就是优化式(17)过程,也就是找到满足
1
2
∥
w
∥
2
\dfrac{1}{2}\|w\|^{2}
21∥w∥2尽可能小的超平面。
∣
w
⋅
x
i
+
b
∣
∥
w
∥
≥
1
∥
w
∥
\frac{\left|w \cdot x_{i}+b\right|}{\|w\|} \geq \frac{1}{\|w\|}
∥w∥∣w⋅xi+b∣≥∥w∥1
公式的左边代表的是点到超平面的距离,所以所有的点到超平面的距离都要大于
1
∥
w
∥
\dfrac{1}{\|w\|}
∥w∥1, 且
∥
w
∥
\|w\|
∥w∥越小越好,也就是所有点超平面距离越大越好,离超平面最近的那个点的距离越大越好。对应上图,就是选择直线A作为划分直线,因为A的容错率最大。
模型三:从参数模型到非参数模型
这一步含义更重要:因为这个思路统一了所有的线性模型,视角更为宏观。
我们回过头来看SVM的对偶问题的具体形式
min
α
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
N
α
i
s.t.
∑
i
=
1
N
α
i
y
i
=
0
0
⩽
α
i
⩽
C
,
i
=
1
,
2
,
⋯
,
N
\begin{array}{ll} \min _{\alpha} & \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)-\sum_{i=1}^{N} \alpha_{i} \\ \text { s.t. } & \sum_{i=1}^{N} \alpha_{i} y_{i}=0 \\ & 0 \leqslant \alpha_{i} \leqslant C, \quad i=1,2, \cdots, N \end{array}
minα s.t. 21∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)−∑i=1Nαi∑i=1Nαiyi=00⩽αi⩽C,i=1,2,⋯,N
这里N是数据集样本数量,所以
α
i
\alpha_{i}
αi数量决定于样本数量。
最终优化结果是
f
(
x
)
=
sign
(
∑
i
=
1
N
α
i
∗
y
i
(
x
⋅
x
i
)
+
b
∗
)
b
∗
=
y
j
−
∑
i
=
1
N
y
i
α
i
∗
(
x
i
⋅
x
j
)
f(x)=\operatorname{sign}\left(\sum_{i=1}^{N} \alpha_{i}^{*} y_{i}\left(x \cdot x_{i}\right)+b^{*}\right)\\ b^{*}=y_{j}-\sum_{i=1}^{N} y_{i} \alpha_{i}^{*}\left(x_{i} \cdot x_{j}\right)
f(x)=sign(i=1∑Nαi∗yi(x⋅xi)+b∗)b∗=yj−i=1∑Nyiαi∗(xi⋅xj)
也就是说通过学习我们得到了一个解集
α
i
∗
\alpha_{i}^{*}
αi∗, 也就是满足约束条件中最小的一个
α
\alpha
α。将
α
i
∗
\alpha_{i}^{*}
αi∗。如果
∑
i
=
1
N
α
i
∗
y
i
(
x
⋅
x
i
)
+
b
∗
≥
0
\sum_{i=1}^{N} \alpha_{i}^{*} y_{i}\left(x \cdot x_{i}\right)+b^{*}\geq0
∑i=1Nαi∗yi(x⋅xi)+b∗≥0则
f
=
1
f=1
f=1, 如果
∑
i
=
1
N
α
i
∗
y
i
(
x
⋅
x
i
)
+
b
∗
<
0
\sum_{i=1}^{N} \alpha_{i}^{*} y_{i}\left(x \cdot x_{i}\right)+b^{*}<0
∑i=1Nαi∗yi(x⋅xi)+b∗<0则
f
=
−
1
f=-1
f=−1。
如果来了一个新样本 x x x, 也就是上式(21)中的 x x x, 这个新样本 x x x会与原有样本中的每一个样本 x i x_{i} xi做一个点积。做完点积再分别与标签和权重 α i ∗ \alpha_{i}^{*} αi∗相乘。向量点积操作度量的是两个向量的相似度,所以这里的点积就是新样本与每一个旧样本的相似度计算,然后求了一个加权和。解集 α i ∗ \alpha_{i}^{*} αi∗中的某些 α \alpha α, 假设对样本标签为1的样本权重很大,如果新样本标签为1,那么它与标签为1的旧样本点积结果( x ⋅ x i > 0 x \cdot x_{i}>0 x⋅xi>0)的加权和就会大于0,同时它与标签为-1的旧样本点积结果( x ⋅ x i < 0 x \cdot x_{i}<0 x⋅xi<0)的加权和也会大于0。
我们可以考虑一个只有两个
α
1
∗
,
α
2
∗
\alpha_{1}^{*}, \alpha_{2}^{*}
α1∗,α2∗的简单情况。
f
(
x
)
=
sign
(
α
1
∗
y
1
(
x
⋅
x
1
)
+
α
2
∗
y
2
(
x
⋅
x
2
)
)
y
1
=
1
,
y
2
=
−
1
α
1
∗
y
1
+
α
2
∗
y
2
=
0
⇒
α
1
∗
=
α
2
∗
α
1
∗
,
α
2
∗
≥
0
f(x)=\operatorname{sign}\left(\alpha_{1}^{*}y_{1}\left(x \cdot x_{1}\right)+\alpha_{2}^{*}y_{2}\left(x \cdot x_{2}\right)\right)\\ y_1=1, y_2=-1\\ \alpha_{1}^{*}y_1+ \alpha_{2}^{*}y_2=0\Rightarrow \alpha_{1}^{*}=\alpha_{2}^{*}\\ \alpha_{1}^{*}, \alpha_{2}^{*} \geq 0
f(x)=sign(α1∗y1(x⋅x1)+α2∗y2(x⋅x2))y1=1,y2=−1α1∗y1+α2∗y2=0⇒α1∗=α2∗α1∗,α2∗≥0
所以当新样本
x
x
x与
x
1
x_1
x1相似时,
x
⋅
x
1
>
0
,
x
⋅
x
2
<
0
x \cdot x_{1}>0, x \cdot x_{2}<0
x⋅x1>0,x⋅x2<0,那么
α
1
∗
y
1
(
x
⋅
x
1
)
+
α
2
∗
y
2
(
x
⋅
x
2
)
>
0
,
f
=
1
\alpha_{1}^{*}y_{1}\left(x \cdot x_{1}\right)+\alpha_{2}^{*}y_{2}\left(x \cdot x_{2}\right) > 0, f=1
α1∗y1(x⋅x1)+α2∗y2(x⋅x2)>0,f=1。反之,当新样本
x
x
x与
x
2
x_2
x2相似时,
x
⋅
x
1
<
0
,
x
⋅
x
2
>
0
x \cdot x_{1}<0, x \cdot x_{2}>0
x⋅x1<0,x⋅x2>0,那么
α
1
∗
y
1
(
x
⋅
x
1
)
+
α
2
∗
y
2
(
x
⋅
x
2
)
<
0
,
f
=
−
1
\alpha_{1}^{*}y_{1}\left(x \cdot x_{1}\right)+\alpha_{2}^{*}y_{2}\left(x \cdot x_{2}\right) < 0, f= -1
α1∗y1(x⋅x1)+α2∗y2(x⋅x2)<0,f=−1。
所以上述分类方法其实本质上就是KNN算法。 KNN是计算新样本周围的旧样本哪个类别最多,而SVM这里是通过权重来进行比较分类。所以SVM、logistic回归其实是进阶版的KNN算法,都是能转化成相同的对偶形式。
在转化为对偶形式之前,我们要学习 ( w , b ) (w,b) (w,b),参数的维度与特征维度有关(比如100维,1亿维)。而转化为对偶形式之后,有了对偶优化解 α i ∗ \alpha_{i}^{*} αi∗,它的数量只跟样本数量有关(1亿个特征 vs 100万个样本)。也就是说对偶转化的本质是从特征维度到样本维度。
三、SVM的优化方法
模型一:梯度下降法
无约束优化问题
min
w
,
b
∑
i
=
1
N
[
1
−
y
i
(
w
⋅
x
i
+
b
)
]
+
+
λ
∥
w
∥
2
\min _{w, b} \sum_{i=1}^{N}\left[1-y_{i}\left(w \cdot x_{i}+b\right)\right]_{+}+\lambda\|w\|^{2}
w,bmini=1∑N[1−yi(w⋅xi+b)]++λ∥w∥2
Logistic损失函数可导,但是合页函数不可导。需要使用次梯度下降法。比如说对函数
y
=
∣
x
∣
y=|x|
y=∣x∣, 这个函数在
(
0
,
0
)
(0,0)
(0,0)点处不可导,无法计算梯度。我们可以采取分段考虑思想,即
x
>
0
x>0
x>0时,梯度为1,
x
<
0
x<0
x<0时,梯度为-1,而
x
=
0
x=0
x=0时,梯度为
[
−
1
,
1
]
[-1, 1]
[−1,1],这种梯度就叫次梯度。
梯度下降可以推广到次梯度下降的情况,只需要把梯度改为次梯度即可。但是次梯度下降有两个问题:
- 一是负次梯度下降不一定是下降方向。
- 而是次梯度下降法收敛速度更慢。
比如说函数 f ( x , y ) = ∣ x ∣ + ∣ y ∣ f(x, y)=|x|+|y| f(x,y)=∣x∣+∣y∣,则在 ( − 2 , 0 ) (-2,0) (−2,0)点处有次梯度。函数等高线如下
当我们选择负次梯度方向为 ( 1 , 1 ) (1,1) (1,1)或者 ( 1 , − 1 ) (1,-1) (1,−1)时,红色的点实际上是沿着函数f的等高线在移动,并没有使得函数值下降。
模型二:凸二次规划问题
二次规划问题的一般形式:
min
{
f
(
x
)
=
1
2
x
T
G
x
+
r
T
x
}
,
x
∈
R
n
s. t.
c
i
(
x
)
=
α
i
T
x
−
b
i
=
0
,
i
∈
E
=
{
1
,
2
,
…
,
l
}
c
i
(
x
)
=
α
i
T
x
−
b
i
≤
0
,
i
∈
I
=
{
l
+
1
,
l
+
2
,
…
,
l
+
m
}
\begin{aligned} &\min \left\{f(x)=\frac{1}{2} x^{T} G x+r^{T} x\right\}, x \in \mathbb{R}^{n}\\ \text{s. t.}\quad &c_{i}(x)=\alpha_{i}^{T} x-b_{i}=0, i \in E=\{1,2, \ldots, l\}\\ &c_{i}(x)=\alpha_{i}^{T} x-b_{i} \leq 0, i \in I=\{l+1, l+2, \ldots, l+m\} \end{aligned}
s. t.min{f(x)=21xTGx+rTx},x∈Rnci(x)=αiTx−bi=0,i∈E={1,2,…,l}ci(x)=αiTx−bi≤0,i∈I={l+1,l+2,…,l+m}
SVM的约束优化形式(转换成对偶形式也一样满足二次规划问题):
min
w
,
b
,
ξ
1
2
∥
w
∥
2
+
C
∑
i
=
1
N
ξ
i
s.t.
y
i
(
w
⋅
x
i
+
b
)
⩾
1
−
ξ
i
,
i
=
1
,
2
,
⋯
,
N
ξ
i
⩾
0
,
i
=
1
,
2
,
⋯
,
N
\begin{array}{ll} \min _{w, b, \xi} & \frac{1}{2}\|w\|^{2}+C \sum_{i=1}^{N} \xi_{i} \\ \text { s.t. } & y_{i}\left(w \cdot x_{i}+b\right) \geqslant 1-\xi_{i}, \quad i=1,2, \cdots, N \\ & \xi_{i} \geqslant 0, \quad i=1,2, \cdots, N \end{array}
minw,b,ξ s.t. 21∥w∥2+C∑i=1Nξiyi(w⋅xi+b)⩾1−ξi,i=1,2,⋯,Nξi⩾0,i=1,2,⋯,N
因此对模型二使用凸二次规划问题的相关思路解决
模型三:SMO算法
模型一使用次梯度下降,模型二使用凸二次规划问题,模型三使用SMO算法,专门针对SVM形式开发的算法。它们的适用范围依次降低,越来越特殊化。
所以要注意:优化算法适用的范围越广,效率会越低。
SVM的对偶形式:
min
α
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
N
α
i
s.t.
∑
i
=
1
N
α
i
y
i
=
0
0
⩽
α
i
⩽
C
,
i
=
1
,
2
,
⋯
,
N
\begin{array}{ll} \min _{\alpha} & \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)-\sum_{i=1}^{N} \alpha_{i} \\ \text { s.t. } & \sum_{i=1}^{N} \alpha_{i} y_{i}=0 \\ & 0 \leqslant \alpha_{i} \leqslant C, \quad i=1,2, \cdots, N \end{array}
minα s.t. 21∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)−∑i=1Nαi∑i=1Nαiyi=00⩽αi⩽C,i=1,2,⋯,N
- SVM问题解的点一定满足KKT条件(必要条件),满足KKT条件的点是SVM问题解的点(充分条件)。所以尽量找满足KKT条件的点。
- 选择其中某些n个参数,将其他的N-n个参数看作是常数,该情况下的最优解可解析得出。比如说在 α i \alpha_{i} αi解集中,将N-2个看作是常数,将剩下的 α 1 , α 2 \alpha_1, \alpha_2 α1,α2作为待求的参数。然后将 α 1 , α 2 \alpha_1, \alpha_2 α1,α2代回到KKT条件中,其实求解的就是个二次问题,可通过解析得到其他 α i \alpha_{i} αi为常数的情况下最优的 α 1 , α 2 \alpha_1, \alpha_2 α1,α2。
这个SMO算法的思想类似与坐标下降法。
min
f
(
a
1
,
a
2
,
⋯
,
a
n
)
\min f\left(a_{1}, a_{2}, \cdots, a_{n}\right)
minf(a1,a2,⋯,an)
比如
f
(
x
,
y
)
=
5
x
2
−
6
x
y
+
5
y
2
f(x, y)=5 x^{2}-6 x y+5 y^{2}
f(x,y)=5x2−6xy+5y2,依次轮流设定
x
,
y
x, y
x,y,不断求最优解.
四、非线性可分和核函数
我们如何处理一个非线性可分的问题?将低维非线性可分的问题映射到高维上,即可解决。比如下图中,将左边的样本从一维 x 1 x_{1} x1映射到 ( x 1 , x 2 = x 1 2 ) (x_{1}, x_{2}=x_{1}^2) (x1,x2=x12)。
但是存在两个问题:
- 映射方式该如何找,计算映射的方法可能很耗时(维度可能很高)。
- 该映射到多少维,如果映射的维度很大甚至无穷,能否进行计算。
所以我们需要从另一个角度思考SVM。也就是从特征的角度转化为样本角度的模型。我们先回到模型三也就是对偶形式,我们说过 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) − ∑ i = 1 N α i \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)-\sum_{i=1}^{N} \alpha_{i} 21∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)−∑i=1Nαi中的 x i ⋅ x j x_{i} \cdot x_{j} xi⋅xj是两个样本做相似度内积。我们可以把 x i , x j x_i, x_{j} xi,xj先进行升维 ( x i ′ , x j ′ ) (x^{\prime}_i, x^{\prime}_{j}) (xi′,xj′)再做内积 x i ′ ⋅ x j ′ x^{\prime}_i\cdot x^{\prime}_{j} xi′⋅xj′。这个内积可以等于 x i ′ ⋅ x j ′ = k ( x i , x j ) x_{i}^{\prime} \cdot x_{j}^{\prime}=k\left(x_{i}, x_{j}\right) xi′⋅xj′=k(xi,xj)。也就是说我们可以忽略将两个样本升维的过程,而直接去关注讨论升维后两个样本的内积结果。这就是核函数的本质思想。
常见核函数:
- Linear: ( x , x ′ ) \left(x, x^{\prime}\right) (x,x′)
- Poly: ( γ ( x , x ′ ) + r ) d \left(\gamma\left(x, x^{\prime}\right)+r\right)^{d} (γ(x,x′)+r)dd越大,升的“维度”越多。r控制了模型对“高阶”特征的依赖程度。
- Rbf: e − γ ∥ x − x ′ ∥ 2 e^{-\gamma\left\|x-x^{\prime}\right\|^{2}} e−γ∥x−x′∥2。这是一个很复杂很重要的核函数。
- Sigmoid: tanh ( γ ( x , x ′ ) + r ) \tanh \left(\gamma\left(x, x^{\prime}\right)+r\right) tanh(γ(x,x′)+r),这个核比较“垃圾”,尽量少用。
我们考虑简单的情形,也就是只有一维特征,来研究一下RBF核心,向量情形同理,只是更加复杂一些。
e
−
γ
(
x
−
x
′
)
2
=
e
−
γ
x
2
e
−
γ
x
′
2
e
2
γ
x
x
′
=
ϕ
(
x
)
ϕ
(
x
′
)
\begin{aligned} e^{-\gamma\left(x-x^{\prime}\right)^{2}} &=e^{-\gamma x^{2}} e^{-\gamma x^{\prime2}} e^{2 \gamma x x^{\prime}} \\ &=\phi\left(x\right) \phi\left(x^{\prime}\right) \end{aligned}
e−γ(x−x′)2=e−γx2e−γx′2e2γxx′=ϕ(x)ϕ(x′)
我们希望做高维映射
x
→
ϕ
x
g
,
x
′
→
ϕ
x
g
′
x \stackrel{\phi}{\rightarrow} x_{g}, x^{\prime} \stackrel{\phi}{\rightarrow} x_{g}^{\prime}
x→ϕxg,x′→ϕxg′,而这里rbf函数表达的意思是
x
g
⋅
x
g
′
=
ϕ
(
x
)
ϕ
(
x
′
)
=
e
−
γ
(
x
−
x
′
)
2
x_{g}\cdot x_{g}^{\prime}=\phi\left(x\right) \phi\left(x^{\prime}\right)=e^{-\gamma\left(x-x^{\prime}\right)^{2}}
xg⋅xg′=ϕ(x)ϕ(x′)=e−γ(x−x′)2。所以要通过函数表达式反向的找到
ϕ
(
x
)
\phi(x)
ϕ(x)的表达式肯能是啥。于是我们有
ϕ
(
x
)
=
e
−
γ
x
2
(
1
,
2
γ
1
!
x
,
(
2
γ
)
2
2
!
x
2
,
⋯
)
\phi(x)=e^{-\gamma x^{2}}\left(1, \sqrt{\frac{2 \gamma}{1 !}} x, \sqrt{\frac{(2 \gamma)^{2}}{2 !}} x^{2}, \cdots\right)
ϕ(x)=e−γx2(1,1!2γx,2!(2γ)2x2,⋯)
也就是
ϕ
\phi
ϕ把
x
x
x映射到无限维(其实是个泰勒展开),也就是解决了前面说的第二个问题。如果不看
e
−
γ
x
2
e^{-\gamma x^{2}}
e−γx2, 只看后半部分不同维度的相对大小,随着
γ
\gamma
γ的增大,高维度特征的比重会越来越大,更容易映射到更高的维度。
五、注意事项
SVM输出概率问题
SVM输出的不是概率而是个决策函数
f
i
=
w
x
i
+
b
f_{i}=w x_{i}+b
fi=wxi+b。但是有时我们需要SVM输出概率,比如多分类问题使用ovr策略。我们针对一个样本,可以在得到决策函数后在外面套一层sigmoid函数得到输出概率
P
i
=
1
1
+
e
A
f
i
+
B
P_{i}=\frac{1}{1+e^{A f_{i}+B}}
Pi=1+eAfi+B1
SVM不具有算法伸缩性
logistic回归有算法伸缩性,也就是输出值对输入值的量纲不敏感。而SVM算法不具有算法伸缩性,对输入的量纲敏感,所以要对数据输入做数值归一化。
SVM与logistics对比
logistics回归与SVM有很大关联性,结果性能表达理论上相同,都可以做对偶转换和核技巧。但是SVM有support vector的更好性质,logistic回归性质不适合做对偶问题转化。什么意思呢?我们知道对偶的优化结果是
f
(
x
)
=
sign
(
∑
i
=
1
N
α
i
∗
y
i
(
x
⋅
x
i
)
+
b
∗
)
f(x)=\operatorname{sign}\left(\sum_{i=1}^{N} \alpha_{i}^{*} y_{i}\left(x \cdot x_{i}\right)+b^{*}\right)
f(x)=sign(i=1∑Nαi∗yi(x⋅xi)+b∗)
它与样本数量N有关,假设有100万样本,我们可能最后发现其中大多数样本向量的权重
α
i
∗
\alpha_{i}^{*}
αi∗其实是0,只有一小部分不为0,比如只有1万个样本的权重不为0,这些权重不为0的向量就是“support vector”,“支持向量”。因此在做kernel trick
x
⋅
x
i
x\cdot x_{i}
x⋅xi计算的时候就可以节省大量计算,只需要对1万个支持向量求kernel。但logistics回归就没有这样的性质,它做kernel trick计算的时候就计算量很大。这就是为何只有SVM才有核技巧的说法,样本非常大的时候SVM比logistic更好。当然样本上10万后,SVM也很难算、不会用了,所以LR也还是很好的模型、业界首选。
什么时候用SVM呢?预测样本量不大,几万,但是需要在推理阶段做个加速和使用kernel trick,因为非支持向量都被约掉了,所以做推理就很快。在传统计算机视觉用的比较多,但是现在也是被深度学习逐渐替代了。