1.问题定义
{
w
T
x
+
b
=
1
w
T
x
+
b
=
?
1
\left \{ \begin{aligned}w^Tx+b &= 1\\w^Tx+b &= -1\end{aligned}\right.
{wTx+bwTx+b?=1=?1? 我们最大化两条直线的距离:
m
a
x
?
2
∣
∣
w
∣
∣
2
<
=
>
m
i
n
?
∣
∣
w
∣
∣
2
s
.
t
.
?
y
i
(
w
T
x
i
+
b
)
?
1
≥
0
\begin{aligned}\rm{max}\ \frac{2}{||w||_2}<=>min\ ||w||_2 \\ s.t.\ y_i(w^Tx_i+b)-1\ge0\end{aligned}
max?∣∣w∣∣2?2?<=>min?∣∣w∣∣2?s.t.?yi?(wTxi?+b)?1≥0?
2.求解
原问题转化为:
m
i
n
?
∣
∣
w
∣
∣
2
s
.
t
.
?
g
i
(
w
,
b
)
=
1
?
y
i
(
w
T
x
i
+
b
)
≤
0
,
w
h
e
r
e
?
i
=
1
,
2
,
.
.
.
,
n
\begin{aligned}&{\rm min}\ ||w||_2 \\ s.t.\ g_i(w,b) = 1-y_i(&w^Tx_i+b)\le0, {\rm where}\ i=1,2,...,n\end{aligned}
s.t.?gi?(w,b)=1?yi?(?min?∣∣w∣∣2?wTxi?+b)≤0,where?i=1,2,...,n? 构造拉格朗日函数:
L
(
w
,
b
,
λ
)
=
∣
∣
w
∣
∣
2
+
∑
i
n
λ
i
?
(
1
?
y
i
(
w
T
x
i
+
b
)
)
s
.
t
.
?
λ
i
≥
0
\begin{aligned}L(w,b,\lambda)=||w||_2+&\sum_i^n\lambda_i*(1-y_i(w^Tx_i+b))\\&s.t.\ \lambda_i\ge0 \end{aligned}
L(w,b,λ)=∣∣w∣∣2?+?i∑n?λi??(1?yi?(wTxi?+b))s.t.?λi?≥0? 强对偶条件:
m
i
n
w
,
b
?
m
a
x
λ
?
L
(
w
,
b
,
λ
)
<
=
>
m
a
x
λ
?
m
i
n
w
,
b
?
L
(
w
,
b
,
λ
)
\begin{aligned}\underset{w,b}{\rm min}\ \underset{\lambda}{\rm max}\ &L(w,b,\lambda)\\<=>\underset{\lambda}{\rm max}\ \underset{w,b}{\rm min}\ &L(w,b,\lambda)\end{aligned}
w,bmin??λmax??<=>λmax??w,bmin???L(w,b,λ)L(w,b,λ)? 现对参数 w 和 b 求偏导数:
?
L
?
w
=
w
?
∑
i
=
1
n
λ
i
y
i
x
i
=
0
?
L
?
b
=
?
λ
i
y
i
=
0
\begin{aligned}\frac{\partial L}{\partial w} &=w-\sum_{i=1}^{n}\lambda_iy_ix_i=0\\\frac{\partial L}{\partial b} &= -\lambda_iy_i=0 \end{aligned}
?w?L??b?L??=w?i=1∑n?λi?yi?xi?=0=?λi?yi?=0? 得到
w
=
∑
i
=
1
n
λ
i
y
i
x
i
∑
i
=
1
n
λ
i
y
i
=
0
\begin{aligned}&w=\sum_{i=1}^{n}\lambda_iy_ix_i\\&\sum_{i=1}^{n}\lambda_iy_i=0 \end{aligned}
?w=i=1∑n?λi?yi?xi?i=1∑n?λi?yi?=0? 代入
L
L
L
L
(
λ
)
=
∑
i
=
1
n
∑
j
=
1
n
λ
i
λ
j
y
i
y
j
(
x
i
?
x
j
)
+
∑
i
n
λ
i
?
(
1
?
y
i
(
∑
j
=
1
n
λ
j
y
j
(
x
i
?
x
j
)
+
b
)
)
=
∑
i
=
1
n
∑
j
=
1
n
λ
i
λ
j
y
i
y
j
(
x
i
?
x
j
)
+
∑
i
n
λ
i
?
∑
i
=
1
n
∑
j
=
1
n
λ
i
λ
j
y
i
y
j
(
x
i
?
x
j
)
+
∑
i
=
1
n
λ
i
y
i
b
=
∑
i
n
λ
i
?
1
2
∑
i
=
1
n
∑
j
=
1
n
λ
i
λ
j
y
i
y
j
(
x
i
?
x
j
)
s
.
t
.
?
λ
i
≥
0
\begin{aligned}L(\lambda) &= \sum_{i=1}^n\sum_{j=1}^n\lambda_i\lambda_jy_iy_j(x_i\cdot x_j)+\sum_i^n\lambda_i*(1-y_i(\sum_{j=1}^n\lambda_jy_j(x_i\cdot x_j)+b))\\&=\sum_{i=1}^n\sum_{j=1}^n\lambda_i\lambda_jy_iy_j(x_i\cdot x_j)+\sum_i^n\lambda_i-\sum_{i=1}^n\sum_{j=1}^n\lambda_i\lambda_jy_iy_j(x_i\cdot x_j)+\sum_{i=1}^n\lambda_iy_ib\\&=\sum_i^n\lambda_i-\frac{1}{2}\sum_{i=1}^n\sum_{j=1}^n\lambda_i\lambda_jy_iy_j(x_i\cdot x_j)\\&s.t.\ \lambda_i\ge0\end{aligned}
L(λ)?=i=1∑n?j=1∑n?λi?λj?yi?yj?(xi??xj?)+i∑n?λi??(1?yi?(j=1∑n?λj?yj?(xi??xj?)+b))=i=1∑n?j=1∑n?λi?λj?yi?yj?(xi??xj?)+i∑n?λi??i=1∑n?j=1∑n?λi?λj?yi?yj?(xi??xj?)+i=1∑n?λi?yi?b=i∑n?λi??21?i=1∑n?j=1∑n?λi?λj?yi?yj?(xi??xj?)s.t.?λi?≥0?
m
a
x
λ
?
L
(
λ
)
=
∑
i
n
λ
i
?
1
2
∑
i
=
1
n
∑
j
=
1
n
λ
i
λ
j
y
i
y
j
(
x
i
?
x
j
)
s
.
t
.
?
λ
i
≥
0
,
∑
i
=
1
n
λ
i
y
i
=
0
\begin{aligned}\underset{\lambda}{\rm max}\ L(\lambda) &= \sum_i^n\lambda_i-\frac{1}{2}\sum_{i=1}^n\sum_{j=1}^n\lambda_i\lambda_jy_iy_j(x_i\cdot x_j)\\ &s.t.\ \lambda_i\ge0, \sum_{i=1}^{n}\lambda_iy_i=0\end{aligned}
λmax??L(λ)?=i∑n?λi??21?i=1∑n?j=1∑n?λi?λj?yi?yj?(xi??xj?)s.t.?λi?≥0,i=1∑n?λi?yi?=0? 我们可以看出来这是一个二次规划问题,问题规模正比于训练样本数,我们常用 SMO(Sequential Minimal Optimization) 算法求解。
SMO(Sequential Minimal Optimization),序列最小优化算法,其核心思想非常简单:每次只优化一个参数,其他参数先固定住,仅求当前这个优化参数的极值。我们来看一下 SMO 算法在 SVM 中的应用。
我们刚说了 SMO 算法每次只优化一个参数,但我们的优化目标有约束条件:
∑
i
=
1
n
λ
i
y
i
=
0
\sum_{i=1}^{n}\lambda_iy_i=0
∑i=1n?λi?yi?=0,没法一次只变动一个参数。所以我们选择了一次选择两个参数。具体步骤为: 1.选择两个需要更新的参数
λ
i
,
λ
j
\lambda_i,\lambda_j
λi?,λj?, 固定其他参数。于是我们有以下约束:
λ
i
y
i
+
λ
j
y
j
=
c
=
?
∑
k
≠
i
,
j
n
λ
k
y
k
,
λ
i
≥
0
,
λ
j
≥
0
\lambda_iy_i+\lambda_jy_j = c= -\sum_{k\neq i,j}^n\lambda_ky_k, \lambda_i\ge0,\lambda_j\ge0
λi?yi?+λj?yj?=c=?k?=i,j∑n?λk?yk?,λi?≥0,λj?≥0 由此可以得出
λ
j
=
c
?
λ
i
y
i
y
j
\lambda_j=\frac{c-\lambda_iy_i}{y_j}
λj?=yj?c?λi?yi??,也就是说我们可以用
λ
i
\lambda_i
λi?的表达式代替
λ
j
\lambda_j
λj?。这样就相当于把目标问题转化成了仅有一个约束条件的最优化问题,仅有的约束是
λ
j
≥
0
\lambda_j\ge0
λj?≥0。 2.对于仅有一个约束条件的最优化问题,我们完全可以在
λ
i
\lambda_i
λi?上对优化目标求偏导,令导数为零,从而求出变量值
λ
i
_
n
e
w
\lambda_{i\_new}
λi_new?,然后根据
λ
i
_
n
e
w
\lambda_{i\_new}
λi_new?求出
λ
j
_
n
e
w
\lambda_{j\_new}
λj_new?。 3.多次迭代直至收敛。 通过 SMO 求得最优解
λ
?
\lambda^*
λ?。
3.参考
https://zhuanlan.zhihu.com/p/77750026
|