欢迎光临
我们一直在努力

【机器学习教程】第07章:支持向量机 (SVM)

第07章:支持向量机 (SVM)

“Nothing is more practical than a good theory.” —— Vladimir Vapnik

重要提示:如果说感知机是神经网络的始祖,那么支持向量机 (SVM) 就是统计学习理论的皇冠。

在深度学习爆发之前的二十年里,SVM 统治着机器学习的世界。它的强大不仅仅在于分类效果,更在于其背后坚如磐石的数学理论——VC 维理论和结构风险最小化。

本章我们将见证一个算法如何将几何直觉(最大间隔)转化为一个凸优化问题,并通过对偶性(Duality)巧妙地通过"支持向量"来稀疏化模型。这不仅是一个算法,这是数学美学的典范。


目录

  • 一、引言:感知机的遗憾
  • 二、几何间隔 (Margin):最宽的分界线
    • 2.1 函数间隔 vs 几何间隔
    • 2.2 最大化间隔的数学表达
    • 2.3 为什么最大化间隔等价于最小化

      1

      2

      w

      2

      \\frac{1}{2}\\|\\mathbf{w}\\|^2

      21w2

  • 三、对偶问题 (Duality):优雅的转换
    • 3.1 为何要对偶?
    • 3.2 Lagrange 函数构建
    • 3.3 对偶问题推导
    • 3.4 KKT 条件与支持向量
    • 3.5 对偶问题的物理意义
  • 四、软间隔 (Soft Margin):拥抱不完美
    • 4.1 现实世界并不完美
    • 4.2 引入松弛变量

      ξ

      \\xi

      ξ

    • 4.3 软间隔的对偶问题
    • 4.4 Hinge Loss:打通优化视角
    • 4.5 SVM = Hinge Loss + L2 正则化
  • 五、SMO 算法:高效求解对偶问题
  • 六、本章小结
  • 七、推荐阅读

一、引言:感知机的遗憾

在第6章中,我们学习了感知机算法。Novikoff 定理保证了只要数据线性可分,感知机就一定能找到一个分离超平面。但这个定理也暴露了一个致命的问题:

感知机的解不唯一!

对于同一个数据集,根据样本访问顺序和初始化的不同,感知机可能收敛到完全不同的超平面。这些超平面虽然都能正确分类训练数据,但它们的泛化能力可能天差地别。

在这里插入图片描述

核心洞见:我们不仅要找一个"能分开"的超平面,更要找"分得最宽"的那个!

这就是 最大间隔 (Maximum Margin) 的思想——SVM 的灵魂。


二、几何间隔 (Margin):最宽的分界线

2.1 函数间隔 vs 几何间隔

给定训练样本

(

x

i

,

y

i

)

(\\mathbf{x}_i, y_i)

(xi,yi) 和超平面

(

w

,

b

)

(\\mathbf{w}, b)

(w,b),我们定义:

函数间隔 (Functional Margin):

γ

^

i

=

y

i

(

w

T

x

i

+

b

)

\\hat{\\gamma}_i = y_i (\\mathbf{w}^T \\mathbf{x}_i + b)

γ^i=yi(wTxi+b)

物理意义:

  • 如果

    y

    i

    =

    +

    1

    y_i = +1

    yi=+1

    w

    T

    x

    i

    +

    b

    >

    0

    \\mathbf{w}^T \\mathbf{x}_i + b > 0

    wTxi+b>0,则

    γ

    ^

    i

    >

    0

    \\hat{\\gamma}_i > 0

    γ^i>0(分类正确)

  • 如果

    y

    i

    =

    1

    y_i = -1

    yi=1

    w

    T

    x

    i

    +

    b

    <

    0

    \\mathbf{w}^T \\mathbf{x}_i + b < 0

    wTxi+b<0,则

    γ

    ^

    i

    >

    0

    \\hat{\\gamma}_i > 0

    γ^i>0(分类正确)

  • γ

    ^

    i

    \\hat{\\gamma}_i

    γ^i 越大,分类越"自信"

但函数间隔有个致命问题:它不具有尺度不变性。如果我们把

(

w

,

b

)

(\\mathbf{w}, b)

(w,b) 同时放大 2 倍,超平面没有变化,但函数间隔翻倍了!

几何间隔 (Geometric Margin):

γ

i

=

y

i

(

w

T

x

i

+

b

)

w

=

γ

^

i

w

\\gamma_i = \\frac{y_i (\\mathbf{w}^T \\mathbf{x}_i + b)}{\\|\\mathbf{w}\\|} = \\frac{\\hat{\\gamma}_i}{\\|\\mathbf{w}\\|}

γi=wyi(wTxi+b)=wγ^i

这正是样本点

x

i

\\mathbf{x}_i

xi 到超平面的带符号距离 (Signed Distance)。

关键:几何间隔具有尺度不变性——

(

w

,

b

)

(\\mathbf{w}, b)

(w,b) 放大

k

k

k 倍,

γ

i

\\gamma_i

γi 不变。

对于整个数据集,定义间隔 (Margin) 为所有样本中的最小几何间隔:

γ

=

min

i

=

1

,

,

N

γ

i

=

min

i

=

1

,

,

N

y

i

(

w

T

x

i

+

b

)

w

\\gamma = \\min_{i=1,\\dots,N} \\gamma_i = \\min_{i=1,\\dots,N} \\frac{y_i (\\mathbf{w}^T \\mathbf{x}_i + b)}{\\|\\mathbf{w}\\|}

γ=i=1,,Nminγi=i=1,,Nminwyi(wTxi+b)


2.2 最大化间隔的数学表达

SVM 的核心思想是:找到使间隔最大的超平面。

max

w

,

b

γ

s.t.

y

i

(

w

T

x

i

+

b

)

w

γ

,

i

=

1

,

,

N

\\begin{aligned} \\max_{\\mathbf{w}, b} \\quad & \\gamma \\\\ \\text{s.t.} \\quad & \\frac{y_i (\\mathbf{w}^T \\mathbf{x}_i + b)}{\\|\\mathbf{w}\\|} \\geq \\gamma, \\quad i = 1, \\dots, N \\end{aligned}

w,bmaxs.t.γwyi(wTxi+b)γ,i=1,,N

等价于:

max

w

,

b

γ

w

s.t.

y

i

(

w

T

x

i

+

b

)

γ

^

,

i

=

1

,

,

N

\\begin{aligned} \\max_{\\mathbf{w}, b} \\quad & \\frac{\\gamma}{\\|\\mathbf{w}\\|} \\\\ \\text{s.t.} \\quad & y_i (\\mathbf{w}^T \\mathbf{x}_i + b) \\geq \\hat{\\gamma}, \\quad i = 1, \\dots, N \\end{aligned}

w,bmaxs.t.wγyi(wTxi+b)γ^,i=1,,N

这里

γ

^

=

γ

w

\\hat{\\gamma} = \\gamma \\|\\mathbf{w}\\|

γ^=γw 是函数间隔。


2.3 为什么最大化间隔等价于最小化

1

2

w

2

\\frac{1}{2}\\|\\mathbf{w}\\|^2

21w2

核心问题:如何把上面的优化问题转化为标准形式?

Step 1:利用尺度不变性

由于

(

w

,

b

)

(\\mathbf{w}, b)

(w,b) 放大

k

k

k 倍不改变超平面,我们可以固定函数间隔

γ

^

=

1

\\hat{\\gamma} = 1

γ^=1。这是一个技巧性的约定,但不失一般性。

关键洞见:此时几何间隔变为

γ

=

γ

^

w

=

1

w

\\gamma = \\frac{\\hat{\\gamma}}{\\|\\mathbf{w}\\|} = \\frac{1}{\\|\\mathbf{w}\\|}

γ=wγ^=w1 因此,最大化间隔

γ

\\gamma

γ 就等价于最大化

1

w

\\frac{1}{\\|\\mathbf{w}\\|}

w1,也就是最小化

w

\\|\\mathbf{w}\\|

w

此时问题变为:

max

w

,

b

1

w

s.t.

y

i

(

w

T

x

i

+

b

)

1

,

i

=

1

,

,

N

\\begin{aligned} \\max_{\\mathbf{w}, b} \\quad & \\frac{1}{\\|\\mathbf{w}\\|} \\\\ \\text{s.t.} \\quad & y_i (\\mathbf{w}^T \\mathbf{x}_i + b) \\geq 1, \\quad i = 1, \\dots, N \\end{aligned}

w,bmaxs.t.w1yi(wTxi+b)1,i=1,,N

Step 2:转化为最小化问题

最大化

1

w

\\frac{1}{\\|\\mathbf{w}\\|}

w1 等价于最小化

w

\\|\\mathbf{w}\\|

w,进一步等价于最小化

w

2

\\|\\mathbf{w}\\|^2

w2(平方不改变单调性,但使问题可微):

min

w

,

b

1

2

w

2

s.t.

y

i

(

w

T

x

i

+

b

)

1

,

i

=

1

,

,

N

\\begin{aligned} \\min_{\\mathbf{w}, b} \\quad & \\frac{1}{2} \\|\\mathbf{w}\\|^2 \\\\ \\text{s.t.} \\quad & y_i (\\mathbf{w}^T \\mathbf{x}_i + b) \\geq 1, \\quad i = 1, \\dots, N \\end{aligned}

w,bmins.t.21w2yi(wTxi+b)1,i=1,,N

为什么加系数

1

2

\\frac{1}{2}

21

纯粹是为了求导方便:

d

d

w

1

2

w

2

=

w

\\frac{d}{dw} \\frac{1}{2}\\|\\mathbf{w}\\|^2 = \\mathbf{w}

dwd21w2=w,不需要系数 2。


推导小结:

最大化间隔

max

1

w

min

w

min

1

2

w

2

\\boxed{ \\begin{aligned} \\text{最大化间隔} \\quad & \\Leftrightarrow \\quad \\max \\frac{1}{\\|\\mathbf{w}\\|} \\\\ & \\Leftrightarrow \\quad \\min \\|\\mathbf{w}\\| \\\\ & \\Leftrightarrow \\quad \\min \\frac{1}{2} \\|\\mathbf{w}\\|^2 \\end{aligned} }

最大化间隔maxw1minwmin21w2

这个优化问题称为 硬间隔 SVM (Hard-Margin SVM) 的原始问题 (Primal Problem)。

在这里插入图片描述

几何直觉:

  • 约束条件

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    1

    y_i (\\mathbf{w}^T \\mathbf{x}_i + b) \\geq 1

    yi(wTxi+b)1 确保所有点都被正确分类,且至少有距离

    1

    w

    \\frac{1}{\\|\\mathbf{w}\\|}

    w1

  • 最小化

    w

    2

    \\|\\mathbf{w}\\|^2

    w2 就是最大化间隔

    1

    w

    \\frac{1}{\\|\\mathbf{w}\\|}

    w1

  • 图中绿色圆圈标记的点是支持向量,它们恰好落在间隔边界上

三、对偶问题 (Duality):优雅的转换

3.1 为何要对偶?

原始问题已经是一个凸二次规划 (Convex QP),可以直接求解。那为什么还要转换到对偶问题呢?

两大理由:

  • 约束优化更容易解:

    • 原始问题有

      N

      N

      N 个不等式约束(每个样本一个),优化变量是

      d

      +

      1

      d+1

      d+1 维的

      (

      w

      ,

      b

      )

      (\\mathbf{w}, b)

      (w,b)

    • 对偶问题虽然有

      N

      N

      N 个变量(每个样本一个 Lagrange 乘子

      α

      i

      \\alpha_i

      αi),但约束更简单(箱约束

      α

      i

      0

      \\alpha_i \\geq 0

      αi0

    • 现有的 QP Solver(如 SMO 算法)对对偶问题更高效
  • 自然引入核函数:

    • 对偶问题的解只依赖于样本间的内积

      x

      i

      T

      x

      j

      \\mathbf{x}_i^T \\mathbf{x}_j

      xiTxj

    • 这为核技巧 (Kernel Trick) 打开了大门——我们可以把

      x

      i

      T

      x

      j

      \\mathbf{x}_i^T \\mathbf{x}_j

      xiTxj 替换为

      K

      (

      x

      i

      ,

      x

      j

      )

      K(\\mathbf{x}_i, \\mathbf{x}_j)

      K(xi,xj),从而在高维甚至无限维空间中工作,而无需显式计算特征映射


  • 3.2 Lagrange 函数构建

    对于带不等式约束的优化问题:

    min

    w

    ,

    b

    1

    2

    w

    2

    s.t.

    1

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    0

    ,

    i

    =

    1

    ,

    ,

    N

    \\begin{aligned} \\min_{\\mathbf{w}, b} \\quad & \\frac{1}{2} \\|\\mathbf{w}\\|^2 \\\\ \\text{s.t.} \\quad & 1 – y_i (\\mathbf{w}^T \\mathbf{x}_i + b) \\leq 0, \\quad i = 1, \\dots, N \\end{aligned}

    w,bmins.t.21w21yi(wTxi+b)0,i=1,,N

    引入 Lagrange 乘子

    α

    i

    0

    \\alpha_i \\geq 0

    αi0,构造 Lagrange 函数:

    L

    (

    w

    ,

    b

    ,

    α

    )

    =

    1

    2

    w

    2

    i

    =

    1

    N

    α

    i

    [

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    1

    ]

    L(\\mathbf{w}, b, \\alpha) = \\frac{1}{2} \\|\\mathbf{w}\\|^2 – \\sum_{i=1}^N \\alpha_i \\left[ y_i (\\mathbf{w}^T \\mathbf{x}_i + b) – 1 \\right]

    L(w,b,α)=21w2i=1Nαi[yi(wTxi+b)1]

    物理意义:

    • 1

      2

      w

      2

      \\frac{1}{2}\\|\\mathbf{w}\\|^2

      21w2 是目标函数(要最小化)

    • α

      i

      [

      y

      i

      (

      w

      T

      x

      i

      +

      b

      )

      1

      ]

      -\\alpha_i [y_i(\\mathbf{w}^T \\mathbf{x}_i + b) – 1]

      αi[yi(wTxi+b)1] 是约束的惩罚项

      • 当约束满足时

        y

        i

        (

        w

        T

        x

        i

        +

        b

        )

        1

        y_i(\\mathbf{w}^T \\mathbf{x}_i + b) \\geq 1

        yi(wTxi+b)1,这一项

        0

        \\leq 0

        0

      • 当约束违反时,

        α

        i

        \\alpha_i

        αi 增大,惩罚增大


    3.3 对偶问题推导

    根据 Lagrange 对偶理论,原始问题等价于:

    min

    w

    ,

    b

    max

    α

    i

    0

    L

    (

    w

    ,

    b

    ,

    α

    )

    \\min_{\\mathbf{w}, b} \\max_{\\alpha_i \\geq 0} L(\\mathbf{w}, b, \\alpha)

    w,bminαi0maxL(w,b,α)

    对偶问题是:

    max

    α

    i

    0

    min

    w

    ,

    b

    L

    (

    w

    ,

    b

    ,

    α

    )

    \\max_{\\alpha_i \\geq 0} \\min_{\\mathbf{w}, b} L(\\mathbf{w}, b, \\alpha)

    αi0maxw,bminL(w,b,α)

    强对偶性:对于凸优化问题且满足 Slater 条件(存在严格可行解),强对偶性成立,即两者最优值相等。SVM 满足这些条件。


    Step 1:对

    w

    \\mathbf{w}

    w

    b

    b

    b 求偏导

    L

    w

    =

    w

    i

    =

    1

    N

    α

    i

    y

    i

    x

    i

    =

    0

    L

    b

    =

    i

    =

    1

    N

    α

    i

    y

    i

    =

    0

    \\begin{aligned} \\frac{\\partial L}{\\partial \\mathbf{w}} &= \\mathbf{w} – \\sum_{i=1}^N \\alpha_i y_i \\mathbf{x}_i = 0 \\\\ \\frac{\\partial L}{\\partial b} &= -\\sum_{i=1}^N \\alpha_i y_i = 0 \\end{aligned}

    wLbL=wi=1Nαiyixi=0=i=1Nαiyi=0

    得到:

    w

    =

    i

    =

    1

    N

    α

    i

    y

    i

    x

    i

    i

    =

    1

    N

    α

    i

    y

    i

    =

    0

    \\boxed{ \\begin{aligned} \\mathbf{w} &= \\sum_{i=1}^N \\alpha_i y_i \\mathbf{x}_i \\\\ \\sum_{i=1}^N \\alpha_i y_i &= 0 \\end{aligned} }

    wi=1Nαiyi=i=1Nαiyixi=0

    核心洞见:最优权重

    w

    \\mathbf{w}

    w 是训练样本的线性组合!系数

    α

    i

    \\alpha_i

    αi 衡量样本

    i

    i

    i 的"重要性"。


    Step 2:代入 Lagrange 函数

    w

    =

    i

    =

    1

    N

    α

    i

    y

    i

    x

    i

    \\mathbf{w} = \\sum_{i=1}^N \\alpha_i y_i \\mathbf{x}_i

    w=i=1Nαiyixi 代入

    L

    (

    w

    ,

    b

    ,

    α

    )

    L(\\mathbf{w}, b, \\alpha)

    L(w,b,α)

    L

    =

    1

    2

    i

    =

    1

    N

    α

    i

    y

    i

    x

    i

    2

    i

    =

    1

    N

    α

    i

    y

    i

    (

    j

    =

    1

    N

    α

    j

    y

    j

    x

    j

    T

    x

    i

    +

    b

    )

    +

    i

    =

    1

    N

    α

    i

    \\begin{aligned} L &= \\frac{1}{2} \\left\\| \\sum_{i=1}^N \\alpha_i y_i \\mathbf{x}_i \\right\\|^2 – \\sum_{i=1}^N \\alpha_i y_i \\left( \\sum_{j=1}^N \\alpha_j y_j \\mathbf{x}_j^T \\mathbf{x}_i + b \\right) + \\sum_{i=1}^N \\alpha_i \\end{aligned}

    L=21

    i=1Nαiyixi

    2i=1Nαiyi(j=1NαjyjxjTxi+b)+i=1Nαi

    展开第一项:

    i

    =

    1

    N

    α

    i

    y

    i

    x

    i

    2

    =

    i

    =

    1

    N

    j

    =

    1

    N

    α

    i

    α

    j

    y

    i

    y

    j

    (

    x

    i

    T

    x

    j

    )

    \\left\\| \\sum_{i=1}^N \\alpha_i y_i \\mathbf{x}_i \\right\\|^2 = \\sum_{i=1}^N \\sum_{j=1}^N \\alpha_i \\alpha_j y_i y_j (\\mathbf{x}_i^T \\mathbf{x}_j)

    i=1Nαiyixi

    2=i=1Nj=1Nαiαjyiyj(xiTxj)

    展开第二项:

    i

    =

    1

    N

    α

    i

    y

    i

    j

    =

    1

    N

    α

    j

    y

    j

    x

    j

    T

    x

    i

    =

    i

    =

    1

    N

    j

    =

    1

    N

    α

    i

    α

    j

    y

    i

    y

    j

    (

    x

    i

    T

    x

    j

    )

    \\sum_{i=1}^N \\alpha_i y_i \\sum_{j=1}^N \\alpha_j y_j \\mathbf{x}_j^T \\mathbf{x}_i = \\sum_{i=1}^N \\sum_{j=1}^N \\alpha_i \\alpha_j y_i y_j (\\mathbf{x}_i^T \\mathbf{x}_j)

    i=1Nαiyij=1NαjyjxjTxi=i=1Nj=1Nαiαjyiyj(xiTxj)

    第二项中的

    b

    b

    b 项:

    i

    =

    1

    N

    α

    i

    y

    i

    b

    =

    b

    i

    =

    1

    N

    α

    i

    y

    i

    =

    0

    (由约束 

    i

    α

    i

    y

    i

    =

    0

    )

    \\sum_{i=1}^N \\alpha_i y_i b = b \\sum_{i=1}^N \\alpha_i y_i = 0 \\quad \\text{(由约束 $\\sum_i \\alpha_i y_i = 0$)}

    i=1Nαiyib=bi=1Nαiyi=0(由约束 iαiyi=0)

    因此:

    L

    =

    1

    2

    i

    ,

    j

    α

    i

    α

    j

    y

    i

    y

    j

    (

    x

    i

    T

    x

    j

    )

    i

    ,

    j

    α

    i

    α

    j

    y

    i

    y

    j

    (

    x

    i

    T

    x

    j

    )

    +

    i

    α

    i

    L = \\frac{1}{2} \\sum_{i,j} \\alpha_i \\alpha_j y_i y_j (\\mathbf{x}_i^T \\mathbf{x}_j) – \\sum_{i,j} \\alpha_i \\alpha_j y_i y_j (\\mathbf{x}_i^T \\mathbf{x}_j) + \\sum_i \\alpha_i

    L=21i,jαiαjyiyj(xiTxj)i,jαiαjyiyj(xiTxj)+iαi

    =

    i

    =

    1

    N

    α

    i

    1

    2

    i

    =

    1

    N

    j

    =

    1

    N

    α

    i

    α

    j

    y

    i

    y

    j

    (

    x

    i

    T

    x

    j

    )

    = \\sum_{i=1}^N \\alpha_i – \\frac{1}{2} \\sum_{i=1}^N \\sum_{j=1}^N \\alpha_i \\alpha_j y_i y_j (\\mathbf{x}_i^T \\mathbf{x}_j)

    =i=1Nαi21i=1Nj=1Nαiαjyiyj(xiTxj)


    对偶问题 (Dual Problem):

    max

    α

    i

    =

    1

    N

    α

    i

    1

    2

    i

    =

    1

    N

    j

    =

    1

    N

    α

    i

    α

    j

    y

    i

    y

    j

    (

    x

    i

    T

    x

    j

    )

    s.t.

    i

    =

    1

    N

    α

    i

    y

    i

    =

    0

    α

    i

    0

    ,

    i

    =

    1

    ,

    ,

    N

    \\boxed{ \\begin{aligned} \\max_{\\alpha} \\quad & \\sum_{i=1}^N \\alpha_i – \\frac{1}{2} \\sum_{i=1}^N \\sum_{j=1}^N \\alpha_i \\alpha_j y_i y_j (\\mathbf{x}_i^T \\mathbf{x}_j) \\\\ \\text{s.t.} \\quad & \\sum_{i=1}^N \\alpha_i y_i = 0 \\\\ & \\alpha_i \\geq 0, \\quad i = 1, \\dots, N \\end{aligned} }

    αmaxs.t.i=1Nαi21i=1Nj=1Nαiαjyiyj(xiTxj)i=1Nαiyi=0αi0,i=1,,N

    或者写成最小化形式:

    min

    α

    1

    2

    i

    =

    1

    N

    j

    =

    1

    N

    α

    i

    α

    j

    y

    i

    y

    j

    (

    x

    i

    T

    x

    j

    )

    i

    =

    1

    N

    α

    i

    s.t.

    i

    =

    1

    N

    α

    i

    y

    i

    =

    0

    α

    i

    0

    ,

    i

    =

    1

    ,

    ,

    N

    \\boxed{ \\begin{aligned} \\min_{\\alpha} \\quad & \\frac{1}{2} \\sum_{i=1}^N \\sum_{j=1}^N \\alpha_i \\alpha_j y_i y_j (\\mathbf{x}_i^T \\mathbf{x}_j) – \\sum_{i=1}^N \\alpha_i \\\\ \\text{s.t.} \\quad & \\sum_{i=1}^N \\alpha_i y_i = 0 \\\\ & \\alpha_i \\geq 0, \\quad i = 1, \\dots, N \\end{aligned} }

    αmins.t.21i=1Nj=1Nαiαjyiyj(xiTxj)i=1Nαii=1Nαiyi=0αi0,i=1,,N


    3.4 KKT 条件与支持向量

    对于最优解

    (

    w

    ,

    b

    ,

    α

    )

    (\\mathbf{w}^*, b^*, \\alpha^*)

    (w,b,α),必须满足 KKT (Karush-Kuhn-Tucker) 条件:

  • 梯度条件:

    w

    L

    =

    0

    w

    =

    i

    =

    1

    N

    α

    i

    y

    i

    x

    i

    L

    b

    =

    0

    i

    =

    1

    N

    α

    i

    y

    i

    =

    0

    \\begin{aligned} \\nabla_\\mathbf{w} L &= 0 \\quad \\Rightarrow \\quad \\mathbf{w}^* = \\sum_{i=1}^N \\alpha_i^* y_i \\mathbf{x}_i \\\\ \\frac{\\partial L}{\\partial b} &= 0 \\quad \\Rightarrow \\quad \\sum_{i=1}^N \\alpha_i^* y_i = 0 \\end{aligned}

    wLbL=0w=i=1Nαiyixi=0i=1Nαiyi=0

  • 原始可行性:

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    1

    ,

    i

    y_i (\\mathbf{w}^{*T} \\mathbf{x}_i + b^*) \\geq 1, \\quad \\forall i

    yi(wTxi+b)1,i

  • 对偶可行性:

    α

    i

    0

    ,

    i

    \\alpha_i^* \\geq 0, \\quad \\forall i

    αi0,i

  • 互补松弛性 (Complementary Slackness):

    α

    i

    [

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    1

    ]

    =

    0

    ,

    i

    \\boxed{\\alpha_i^* \\left[ y_i (\\mathbf{w}^{*T} \\mathbf{x}_i + b^*) – 1 \\right] = 0, \\quad \\forall i}

    αi[yi(wTxi+b)1]=0,i

  • 互补松弛性的物理意义:

    在这里插入图片描述

    这个条件将样本分为两类:

    • α

      i

      =

      0

      \\alpha_i^* = 0

      αi=0:样本

      i

      i

      i 的约束不起作用,

      y

      i

      (

      w

      T

      x

      i

      +

      b

      )

      >

      1

      y_i (\\mathbf{w}^{*T} \\mathbf{x}_i + b^*) > 1

      yi(wTxi+b)>1(点在间隔边界外侧)

      • 这些点对模型没有贡献(

        w

        =

        α

        i

        y

        i

        x

        i

        \\mathbf{w}^* = \\sum \\alpha_i y_i \\mathbf{x}_i

        w=αiyixi

        α

        i

        =

        0

        \\alpha_i = 0

        αi=0

      • 可以删除这些样本,模型不变
    • α

      i

      >

      0

      \\alpha_i^* > 0

      αi>0:必须

      y

      i

      (

      w

      T

      x

      i

      +

      b

      )

      =

      1

      y_i (\\mathbf{w}^{*T} \\mathbf{x}_i + b^*) = 1

      yi(wTxi+b)=1(点恰好在间隔边界上)

      • 这些点称为 支持向量 (Support Vectors)
      • 它们"支撑"着分离超平面,决定了间隔的大小
      • 移动支持向量会改变超平面,移动其他点则不会

    支持向量的稀疏性:

    在实践中,通常只有很少一部分样本是支持向量(

    α

    i

    >

    0

    \\alpha_i > 0

    αi>0)。这带来两大好处:

  • 模型稀疏:

    w

    =

    i

    S

    V

    α

    i

    y

    i

    x

    i

    \\mathbf{w} = \\sum_{i \\in SV} \\alpha_i y_i \\mathbf{x}_i

    w=iSVαiyixi,只需要存储支持向量

  • 预测高效:

    f

    (

    x

    )

    =

    i

    S

    V

    α

    i

    y

    i

    (

    x

    i

    T

    x

    )

    +

    b

    f(x) = \\sum_{i \\in SV} \\alpha_i y_i (\\mathbf{x}_i^T \\mathbf{x}) + b

    f(x)=iSVαiyi(xiTx)+b,只需计算与支持向量的内积

  • 比喻:在一群人中选代表投票,只有站在边界上的人(支持向量)有投票权,远离边界的人可以回家睡觉了。


    3.5 对偶问题的物理意义

    让我们重新审视对偶问题的目标函数:

    max

    α

    i

    =

    1

    N

    α

    i

    1

    2

    i

    ,

    j

    α

    i

    α

    j

    y

    i

    y

    j

    (

    x

    i

    T

    x

    j

    )

    \\max_{\\alpha} \\quad \\sum_{i=1}^N \\alpha_i – \\frac{1}{2} \\sum_{i,j} \\alpha_i \\alpha_j y_i y_j (\\mathbf{x}_i^T \\mathbf{x}_j)

    αmaxi=1Nαi21i,jαiαjyiyj(xiTxj) 第一项

    i

    α

    i

    \\sum_i \\alpha_i

    iαi

    • 鼓励

      α

      i

      \\alpha_i

      αi 变大

    • 物理意义:每个样本都"想要"贡献更多权重

    第二项

    1

    2

    i

    ,

    j

    α

    i

    α

    j

    y

    i

    y

    j

    (

    x

    i

    T

    x

    j

    )

    -\\frac{1}{2} \\sum_{i,j} \\alpha_i \\alpha_j y_i y_j (\\mathbf{x}_i^T \\mathbf{x}_j)

    21i,jαiαjyiyj(xiTxj)

    • 惩罚同类样本之间的权重组合(

      y

      i

      =

      y

      j

      y_i = y_j

      yi=yj 时,

      y

      i

      y

      j

      =

      +

      1

      y_i y_j = +1

      yiyj=+1,内积越大惩罚越大)

    • 鼓励异类样本之间的权重组合(

      y

      i

      y

      j

      y_i \\neq y_j

      yi=yj 时,

      y

      i

      y

      j

      =

      1

      y_i y_j = -1

      yiyj=1

    • 物理意义:模型倾向于选择"有代表性"的样本(不重复、分散)

    约束

    i

    α

    i

    y

    i

    =

    0

    \\sum_i \\alpha_i y_i = 0

    iαiyi=0

    • 正负样本的权重必须平衡
    • 防止模型偏向某一类

    计算

    b

    b^*

    b

    对于任意支持向量

    x

    s

    \\mathbf{x}_s

    xs(满足

    α

    s

    >

    0

    \\alpha_s > 0

    αs>0),有:

    y

    s

    (

    w

    T

    x

    s

    +

    b

    )

    =

    1

    y_s (\\mathbf{w}^{*T} \\mathbf{x}_s + b^*) = 1

    ys(wTxs+b)=1

    因此:

    b

    =

    y

    s

    w

    T

    x

    s

    =

    y

    s

    i

    =

    1

    N

    α

    i

    y

    i

    (

    x

    i

    T

    x

    s

    )

    b^* = y_s – \\mathbf{w}^{*T} \\mathbf{x}_s = y_s – \\sum_{i=1}^N \\alpha_i^* y_i (\\mathbf{x}_i^T \\mathbf{x}_s)

    b=yswTxs=ysi=1Nαiyi(xiTxs)

    实践中通常对所有支持向量取平均以提高数值稳定性:

    b

    =

    1

    S

    V

    s

    S

    V

    [

    y

    s

    i

    =

    1

    N

    α

    i

    y

    i

    (

    x

    i

    T

    x

    s

    )

    ]

    b^* = \\frac{1}{|SV|} \\sum_{s \\in SV} \\left[ y_s – \\sum_{i=1}^N \\alpha_i^* y_i (\\mathbf{x}_i^T \\mathbf{x}_s) \\right]

    b=SV1sSV[ysi=1Nαiyi(xiTxs)]


    四、软间隔 (Soft Margin):拥抱不完美

    4.1 现实世界并不完美

    硬间隔 SVM 要求数据完全线性可分,即存在超平面将两类数据完美分开。但现实世界往往存在:

  • 噪声 (Noise):标注错误的样本
  • 离群点 (Outliers):远离主流分布的样本
  • 本质不可分:两类数据分布重叠
  • 如果强行使用硬间隔 SVM:

    • 可能无解(约束不可行)
    • 或者得到间隔极小的超平面(过拟合)

    在这里插入图片描述

    核心思想:我们需要一种机制,允许少数样本违反间隔约束,但要为这种违反付出代价。


    4.2 引入松弛变量

    ξ

    \\xi

    ξ

    对于每个样本

    (

    x

    i

    ,

    y

    i

    )

    (\\mathbf{x}_i, y_i)

    (xi,yi),引入松弛变量 (Slack Variable)

    ξ

    i

    0

    \\xi_i \\geq 0

    ξi0,放宽约束:

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    1

    ξ

    i

    y_i (\\mathbf{w}^T \\mathbf{x}_i + b) \\geq 1 – \\xi_i

    yi(wTxi+b)1ξi 物理意义:

    • ξ

      i

      =

      0

      \\xi_i = 0

      ξi=0:样本正确分类且满足间隔(

      y

      i

      (

      w

      T

      x

      i

      +

      b

      )

      1

      y_i (\\mathbf{w}^T \\mathbf{x}_i + b) \\geq 1

      yi(wTxi+b)1

    • 0

      <

      ξ

      i

      1

      0 < \\xi_i \\leq 1

      0<ξi1:样本正确分类但在间隔内(

      0

      <

      y

      i

      (

      w

      T

      x

      i

      +

      b

      )

      <

      1

      0 < y_i (\\mathbf{w}^T \\mathbf{x}_i + b) < 1

      0<yi(wTxi+b)<1

    • ξ

      i

      >

      1

      \\xi_i > 1

      ξi>1:样本被误分类(

      y

      i

      (

      w

      T

      x

      i

      +

      b

      )

      <

      0

      y_i (\\mathbf{w}^T \\mathbf{x}_i + b) < 0

      yi(wTxi+b)<0

    上图直观展示了松弛变量

    ξ

    \\xi

    ξ 的几何含义:

    • 橙色边框的点:进入间隔但未跨越决策边界(

      0

      <

      ξ

      1

      <

      1

      0 < \\xi_1 < 1

      0<ξ1<1

    • 深红色边框的点:跨越决策边界被误分类(

      ξ

      2

      >

      1

      \\xi_2 > 1

      ξ2>1

    • 红色线段的长度正是松弛变量

      ξ

      \\xi

      ξ 的大小,代表违规的程度

    软间隔 SVM 的原始问题:

    min

    w

    ,

    b

    ,

    ξ

    1

    2

    w

    2

    +

    C

    i

    =

    1

    N

    ξ

    i

    s.t.

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    1

    ξ

    i

    ,

    i

    =

    1

    ,

    ,

    N

    ξ

    i

    0

    ,

    i

    =

    1

    ,

    ,

    N

    \\boxed{ \\begin{aligned} \\min_{\\mathbf{w}, b, \\xi} \\quad & \\frac{1}{2} \\|\\mathbf{w}\\|^2 + C \\sum_{i=1}^N \\xi_i \\\\ \\text{s.t.} \\quad & y_i (\\mathbf{w}^T \\mathbf{x}_i + b) \\geq 1 – \\xi_i, \\quad i = 1, \\dots, N \\\\ & \\xi_i \\geq 0, \\quad i = 1, \\dots, N \\end{aligned} }

    w,b,ξmins.t.21w2+Ci=1Nξiyi(wTxi+b)1ξi,i=1,,Nξi0,i=1,,N

    目标函数解读:

    1

    2

    w

    2

    +

    C

    i

    =

    1

    N

    ξ

    i

    \\frac{1}{2}\\|\\mathbf{w}\\|^2 + C \\sum_{i=1}^N \\xi_i

    21w2+Ci=1Nξi

    • 第一项

      1

      2

      w

      2

      \\frac{1}{2}\\|\\mathbf{w}\\|^2

      21w2:最大化间隔(结构风险)

    • 第二项

      C

      i

      ξ

      i

      C \\sum_i \\xi_i

      Ciξi:最小化违反间隔的总量(经验风险)

    • C

      >

      0

      C > 0

      C>0:权衡参数

      • C

        C

        C 很大:严惩违反,接近硬间隔(容易过拟合)

      • C

        C

        C 很小:容忍违反,间隔更大(容易欠拟合)

    连接到第1章:这正是结构风险最小化 (SRM) 的体现!

    结构风险

    =

    i

    ξ

    i

    经验风险

    +

    1

    2

    C

    w

    2

    正则化项

    \\text{结构风险} = \\underbrace{\\sum_i \\xi_i}_{\\text{经验风险}} + \\underbrace{\\frac{1}{2C} \\|\\mathbf{w}\\|^2}_{\\text{正则化项}}

    结构风险=经验风险

    iξi+正则化项

    2C1w2


    4.3 软间隔的对偶问题

    构造 Lagrange 函数(引入乘子

    α

    i

    0

    \\alpha_i \\geq 0

    αi0

    μ

    i

    0

    \\mu_i \\geq 0

    μi0):

    L

    (

    w

    ,

    b

    ,

    ξ

    ,

    α

    ,

    μ

    )

    =

    1

    2

    w

    2

    +

    C

    i

    ξ

    i

    i

    α

    i

    [

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    1

    +

    ξ

    i

    ]

    i

    μ

    i

    ξ

    i

    L(\\mathbf{w}, b, \\xi, \\alpha, \\mu) = \\frac{1}{2}\\|\\mathbf{w}\\|^2 + C \\sum_i \\xi_i – \\sum_i \\alpha_i [y_i(\\mathbf{w}^T \\mathbf{x}_i + b) – 1 + \\xi_i] – \\sum_i \\mu_i \\xi_i

    L(w,b,ξ,α,μ)=21w2+Ciξiiαi[yi(wTxi+b)1+ξi]iμiξi

    w

    ,

    b

    ,

    ξ

    \\mathbf{w}, b, \\xi

    w,b,ξ 求偏导并令为零:

    L

    w

    =

    w

    i

    α

    i

    y

    i

    x

    i

    =

    0

    w

    =

    i

    α

    i

    y

    i

    x

    i

    L

    b

    =

    i

    α

    i

    y

    i

    =

    0

    i

    α

    i

    y

    i

    =

    0

    L

    ξ

    i

    =

    C

    α

    i

    μ

    i

    =

    0

    α

    i

    +

    μ

    i

    =

    C

    \\begin{aligned} \\frac{\\partial L}{\\partial \\mathbf{w}} &= \\mathbf{w} – \\sum_i \\alpha_i y_i \\mathbf{x}_i = 0 \\quad &\\Rightarrow \\quad \\mathbf{w} = \\sum_i \\alpha_i y_i \\mathbf{x}_i \\\\ \\frac{\\partial L}{\\partial b} &= -\\sum_i \\alpha_i y_i = 0 \\quad &\\Rightarrow \\quad \\sum_i \\alpha_i y_i = 0 \\\\ \\frac{\\partial L}{\\partial \\xi_i} &= C – \\alpha_i – \\mu_i = 0 \\quad &\\Rightarrow \\quad \\alpha_i + \\mu_i = C \\end{aligned}

    wLbLξiL=wiαiyixi=0=iαiyi=0=Cαiμi=0w=iαiyixiiαiyi=0αi+μi=C

    关键推导:第三个等式

    α

    i

    +

    μ

    i

    =

    C

    \\alpha_i + \\mu_i = C

    αi+μi=C 来自对松弛变量

    ξ

    i

    \\xi_i

    ξi 的求导:

    • Lagrange 函数中,

      ξ

      i

      \\xi_i

      ξi 的系数为

      C

      α

      i

      μ

      i

      C – \\alpha_i – \\mu_i

      Cαiμi

    • L

      ξ

      i

      =

      0

      \\frac{\\partial L}{\\partial \\xi_i} = 0

      ξiL=0,得到

      α

      i

      +

      μ

      i

      =

      C

      \\alpha_i + \\mu_i = C

      αi+μi=C

    • 结合约束

      α

      i

      0

      \\alpha_i \\geq 0

      αi0

      μ

      i

      0

      \\mu_i \\geq 0

      μi0,我们得到:

    0

    α

    i

    C

    \\boxed{0 \\leq \\alpha_i \\leq C}

    0αiC

    物理意义:参数

    C

    C

    C 为 Lagrange 乘子

    α

    i

    \\alpha_i

    αi 设定了上界!

    • α

      i

      =

      0

      \\alpha_i = 0

      αi=0

      μ

      i

      =

      C

      \\mu_i = C

      μi=C(非支持向量)

    • 0

      <

      α

      i

      <

      C

      0 < \\alpha_i < C

      0<αi<C

      μ

      i

      >

      0

      \\mu_i > 0

      μi>0,由

      μ

      i

      ξ

      i

      =

      0

      \\mu_i \\xi_i = 0

      μiξi=0

      ξ

      i

      =

      0

      \\xi_i = 0

      ξi=0(边界上的支持向量)

    • α

      i

      =

      C

      \\alpha_i = C

      αi=C

      μ

      i

      =

      0

      \\mu_i = 0

      μi=0

      ξ

      i

      \\xi_i

      ξi 可以

      >

      0

      > 0

      >0(间隔内或误分类的支持向量)

    代入 Lagrange 函数,得到与硬间隔相同的对偶目标函数,只是约束变为箱约束 (Box Constraint):

    max

    α

    i

    =

    1

    N

    α

    i

    1

    2

    i

    ,

    j

    α

    i

    α

    j

    y

    i

    y

    j

    (

    x

    i

    T

    x

    j

    )

    s.t.

    i

    =

    1

    N

    α

    i

    y

    i

    =

    0

    0

    α

    i

    C

    ,

    i

    =

    1

    ,

    ,

    N

    \\boxed{ \\begin{aligned} \\max_{\\alpha} \\quad & \\sum_{i=1}^N \\alpha_i – \\frac{1}{2} \\sum_{i,j} \\alpha_i \\alpha_j y_i y_j (\\mathbf{x}_i^T \\mathbf{x}_j) \\\\ \\text{s.t.} \\quad & \\sum_{i=1}^N \\alpha_i y_i = 0 \\\\ & 0 \\leq \\alpha_i \\leq C, \\quad i = 1, \\dots, N \\end{aligned} }

    αmaxs.t.i=1Nαi21i,jαiαjyiyj(xiTxj)i=1Nαiyi=00αiC,i=1,,N

    KKT 条件:

    α

    i

    [

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    1

    +

    ξ

    i

    ]

    =

    0

    μ

    i

    ξ

    i

    =

    0

    μ

    i

    =

    C

    α

    i

    \\begin{aligned} \\alpha_i [y_i(\\mathbf{w}^T \\mathbf{x}_i + b) – 1 + \\xi_i] &= 0 \\\\ \\mu_i \\xi_i &= 0 \\\\ \\mu_i &= C – \\alpha_i \\end{aligned}

    αi[yi(wTxi+b)1+ξi]μiξiμi=0=0=Cαi

    样本分类(根据

    α

    i

    \\alpha_i

    αi 的值):

  • α

    i

    =

    0

    \\alpha_i = 0

    αi=0

    • y

      i

      (

      w

      T

      x

      i

      +

      b

      )

      >

      1

      y_i(\\mathbf{w}^T \\mathbf{x}_i + b) > 1

      yi(wTxi+b)>1,样本在间隔外侧,正确分类

    • 不是支持向量
  • 0

    <

    α

    i

    <

    C

    0 < \\alpha_i < C

    0<αi<C

    • μ

      i

      =

      C

      α

      i

      >

      0

      \\mu_i = C – \\alpha_i > 0

      μi=Cαi>0,由

      μ

      i

      ξ

      i

      =

      0

      \\mu_i \\xi_i = 0

      μiξi=0

      ξ

      i

      =

      0

      \\xi_i = 0

      ξi=0

    • y

      i

      (

      w

      T

      x

      i

      +

      b

      )

      =

      1

      y_i(\\mathbf{w}^T \\mathbf{x}_i + b) = 1

      yi(wTxi+b)=1,样本在间隔边界上

    • 支持向量(用于计算

      b

      b

      b

  • α

    i

    =

    C

    \\alpha_i = C

    αi=C

    • μ

      i

      =

      0

      \\mu_i = 0

      μi=0

      ξ

      i

      \\xi_i

      ξi 可以大于 0

    • y

      i

      (

      w

      T

      x

      i

      +

      b

      )

      =

      1

      ξ

      i

      <

      1

      y_i(\\mathbf{w}^T \\mathbf{x}_i + b) = 1 – \\xi_i < 1

      yi(wTxi+b)=1ξi<1

    • ξ

      i

      1

      \\xi_i \\leq 1

      ξi1:样本在间隔内但正确分类

    • ξ

      i

      >

      1

      \\xi_i > 1

      ξi>1:样本被误分类

    • 支持向量(但不用于计算

      b

      b

      b


  • 4.4 Hinge Loss:打通优化视角

    现在我们从另一个角度理解 SVM——损失函数 + 正则化的框架。

    Hinge Loss 定义:

    hinge

    (

    y

    ,

    f

    (

    x

    )

    )

    =

    max

    (

    0

    ,

    1

    y

    f

    (

    x

    )

    )

    =

    [

    1

    y

    f

    (

    x

    )

    ]

    +

    \\ell_{\\text{hinge}}(y, f(x)) = \\max(0, 1 – y \\cdot f(x)) = [1 – y \\cdot f(x)]_+

    hinge(y,f(x))=max(0,1yf(x))=[1yf(x)]+

    其中

    f

    (

    x

    )

    =

    w

    T

    x

    +

    b

    f(x) = \\mathbf{w}^T \\mathbf{x} + b

    f(x)=wTx+b 是决策函数(未经 sign)。

    物理意义:

    • 如果

      y

      f

      (

      x

      )

      1

      y \\cdot f(x) \\geq 1

      yf(x)1(正确分类且满足间隔):损失为 0

    • 如果

      y

      f

      (

      x

      )

      <

      1

      y \\cdot f(x) < 1

      yf(x)<1(违反间隔或误分类):损失为

      1

      y

      f

      (

      x

      )

      1 – y \\cdot f(x)

      1yf(x)

    在这里插入图片描述

    Hinge Loss vs Logistic Loss 对比:

    在这里插入图片描述

    关键观察:Hinge Loss 等价于松弛变量!

    对于约束

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    1

    ξ

    i

    y_i(\\mathbf{w}^T \\mathbf{x}_i + b) \\geq 1 – \\xi_i

    yi(wTxi+b)1ξi

    ξ

    i

    0

    \\xi_i \\geq 0

    ξi0,有:

    ξ

    i

    max

    (

    0

    ,

    1

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    )

    =

    [

    1

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    ]

    +

    \\xi_i \\geq \\max(0, 1 – y_i(\\mathbf{w}^T \\mathbf{x}_i + b)) = [1 – y_i(\\mathbf{w}^T \\mathbf{x}_i + b)]_+

    ξimax(0,1yi(wTxi+b))=[1yi(wTxi+b)]+

    当最小化

    i

    ξ

    i

    \\sum_i \\xi_i

    iξi 时,最优解必然是:

    ξ

    i

    =

    [

    1

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    ]

    +

    \\xi_i^* = [1 – y_i(\\mathbf{w}^T \\mathbf{x}_i + b)]_+

    ξi=[1yi(wTxi+b)]+


    4.5 SVM = Hinge Loss + L2 正则化

    ξ

    i

    =

    [

    1

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    ]

    +

    \\xi_i = [1 – y_i(\\mathbf{w}^T \\mathbf{x}_i + b)]_+

    ξi=[1yi(wTxi+b)]+ 代入软间隔 SVM 的目标函数:

    min

    w

    ,

    b

    1

    2

    w

    2

    +

    C

    i

    =

    1

    N

    [

    1

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    ]

    +

    \\min_{\\mathbf{w}, b} \\quad \\frac{1}{2}\\|\\mathbf{w}\\|^2 + C \\sum_{i=1}^N [1 – y_i(\\mathbf{w}^T \\mathbf{x}_i + b)]_+

    w,bmin21w2+Ci=1N[1yi(wTxi+b)]+

    改写为:

    min

    w

    ,

    b

    i

    =

    1

    N

    [

    1

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    ]

    +

    经验风险:Hinge Loss

    +

    λ

    2

    w

    2

    正则化:L2

    \\boxed{ \\min_{\\mathbf{w}, b} \\quad \\underbrace{\\sum_{i=1}^N [1 – y_i(\\mathbf{w}^T \\mathbf{x}_i + b)]_+}_{\\text{经验风险:Hinge Loss}} + \\underbrace{\\frac{\\lambda}{2} \\|\\mathbf{w}\\|^2}_{\\text{正则化:L2}} }

    w,bmin经验风险:Hinge Loss

    i=1N[1yi(wTxi+b)]++正则化:L2

    2λw2

    其中

    λ

    =

    1

    C

    \\lambda = \\frac{1}{C}

    λ=C1

    惊人的结论:

    SVM 的本质就是 Hinge Loss + L2 正则化!

    这完全符合第1章的"统计学习三要素"框架:

    • 模型:线性分类器

      f

      (

      x

      )

      =

      w

      T

      x

      +

      b

      f(x) = \\mathbf{w}^T \\mathbf{x} + b

      f(x)=wTx+b

    • 策略:Hinge Loss + 正则化
    • 算法:通过对偶问题用 SMO 求解

    与逻辑回归对比:

    模型损失函数正则化优化
    逻辑回归 Cross-Entropy Loss L2 (Ridge) 梯度下降
    SVM Hinge Loss L2 对偶 QP (SMO)

    两者都是线性分类器,区别仅在于损失函数的选择!

    在这里插入图片描述


    为什么 SVM 能产生稀疏解(支持向量)?

    关键在于 Hinge Loss 的零区域:

    • y

      i

      (

      w

      T

      x

      i

      +

      b

      )

      1

      y_i(\\mathbf{w}^T \\mathbf{x}_i + b) \\geq 1

      yi(wTxi+b)1 时,

      hinge

      =

      0

      \\ell_{\\text{hinge}} = 0

      hinge=0,该样本对梯度没有贡献

    • 对应地,对偶问题中

      α

      i

      =

      0

      \\alpha_i = 0

      αi=0(非支持向量)

    • 只有在间隔边界或违反间隔的样本(

      y

      i

      (

      w

      T

      x

      i

      +

      b

      )

      1

      y_i(\\mathbf{w}^T \\mathbf{x}_i + b) \\leq 1

      yi(wTxi+b)1)才是支持向量

    相比之下,Cross-Entropy Loss 永远

    >

    0

    > 0

    >0,所有样本都有贡献,无法产生稀疏性。


    五、SMO 算法:高效求解对偶问题

    对偶问题是一个二次规划 (QP),理论上可以用通用 QP Solver 求解。但对于大规模数据,这些方法效率低下。

    SMO (Sequential Minimal Optimization) 算法由 John Platt 于 1998 年提出,是求解 SVM 对偶问题的标准方法。

    5.1 核心思想:在约束直线上跳舞

    想象你要找到一个函数的最小值,但你的手脚被绳子绑住了(约束条件)。SMO 的聪明之处在于:

    每次只松开两只手,在绳子允许的范围内调整位置,然后再绑上。

    更正式地说:

    • 每次只优化两个

      α

      i

      \\alpha_i

      αi

      α

      j

      \\alpha_j

      αj,固定其他所有变量

    • 由于约束

      i

      α

      i

      y

      i

      =

      0

      \\sum_i \\alpha_i y_i = 0

      iαiyi=0,固定其他变量后,这两个变量之间存在线性关系

    • 优化路径被限制在一条直线上(见下图),问题变成了一维搜索,可以解析求解!

    在这里插入图片描述

    几何直观:

    • 紫色椭圆:目标函数的等高线(越靠内侧,目标函数值越优)
    • 红色直线:约束

      α

      1

      y

      1

      +

      α

      2

      y

      2

      =

      ζ

      \\alpha_1 y_1 + \\alpha_2 y_2 = \\zeta

      α1y1+α2y2=ζ(常数)

    • 优化路径:只能沿着红色直线移动(黄色→绿色点)
    • 最优解:直线与最内层等高线的切点(或在边界上)

    5.2 为什么每次选两个?

    约束的限制:

    约束

    i

    =

    1

    N

    α

    i

    y

    i

    =

    0

    \\sum_{i=1}^N \\alpha_i y_i = 0

    i=1Nαiyi=0 是等式约束,这意味着:

    • 如果只改变一个

      α

      i

      \\alpha_i

      αi,会破坏和为零的平衡

    • 改变两个变量是满足约束的最小可行单位

    数学推导:

    固定除

    α

    1

    ,

    α

    2

    \\alpha_1, \\alpha_2

    α1,α2 外的所有变量,约束变为:

    α

    1

    y

    1

    +

    α

    2

    y

    2

    =

    i

    =

    3

    N

    α

    i

    y

    i

    =

    ζ

    (常数)

    \\alpha_1 y_1 + \\alpha_2 y_2 = -\\sum_{i=3}^N \\alpha_i y_i = \\zeta \\quad \\text{(常数)}

    α1y1+α2y2=i=3Nαiyi=ζ(常数)

    这是一条直线!我们可以用

    α

    2

    \\alpha_2

    α2 表示

    α

    1

    \\alpha_1

    α1

    α

    1

    =

    (

    ζ

    α

    2

    y

    2

    )

    y

    1

    \\alpha_1 = (\\zeta – \\alpha_2 y_2) y_1

    α1=(ζα2y2)y1

    (因为

    y

    1

    2

    =

    1

    y_1^2 = 1

    y12=1

    将其代入目标函数,就得到了一个关于

    α

    2

    \\alpha_2

    α2 的一元二次函数,求导即可得到解析解!

    5.3 算法框架(简化版)

    输入: 数据集 D = {(x_1, y_1), …, (x_N, y_N)}, 参数 C, 容忍度 tol
    输出: α, b

    1. 初始化 α = 0, b = 0

    2. repeat:
    (a) 选择两个违反 KKT 条件最严重的 α_i 和 α_j
    – 外循环:遍历所有不满足 KKT 的样本
    – 内循环:选择使目标函数下降最快的配对

    (b) 固定其他 α,解析求解最优的 (α_i, α_j)
    – 计算约束直线的端点(由箱约束 0 ≤ α ≤ C 决定)
    – 求一元二次函数的极值点
    – 截断到可行域内

    (c) 更新 α_i, α_j

    (d) 更新 b(使用支持向量)

    until 所有 α 都满足 KKT 条件 (在容忍度 tol 内)

    5.4 SMO 的优势

    • ✅ 无需矩阵运算:避免存储和操作

      N

      ×

      N

      N \\times N

      N×N 的 Gram 矩阵(内积矩阵)

    • ✅ 解析解:每步子问题有闭式解,无需数值优化
    • ✅ 内存高效:只需存储当前优化的两个变量
    • ✅ 适合大规模数据:复杂度远低于通用 QP Solver 的

      O

      (

      N

      3

      )

      O(N^3)

      O(N3)

    5.5 直观类比

    传统 QP Solver:像是同时调整一个乐队中所有乐器的音量,需要复杂的协调。

    SMO 算法:像是一次只调整两个乐器,听听效果,再调下一对。虽然看起来慢,但每次调整都很快(解析解),而且不需要记住所有乐器的状态。

    关键洞见:

    把一个

    N

    N

    N 维的复杂优化问题,分解成一系列二维平面上的简单问题(约束直线上的一维搜索)。这是"分而治之"思想在优化算法中的精彩应用。

    5.6 SMO vs 梯度下降

    维度SMO梯度下降
    更新方式 每次选两个变量,解析求解 每次沿负梯度方向小步移动
    约束处理 自然满足约束(在约束直线上) 需要投影回可行域
    收敛速度 较快(大步跳跃) 较慢(小步迭代)
    适用场景 中等规模 SVM 大规模深度学习

    历史趣闻:

    John Platt 在微软研究院提出 SMO 时,SVM 的主要瓶颈是求解对偶问题的速度。SMO 的出现让 SVM 在工业界的大规模应用成为可能,是 SVM 从学术走向实用的关键一步。


    延伸阅读:

    完整的 SMO 算法还包括:

    • 启发式选择策略:如何高效选择

      α

      i

      ,

      α

      j

      \\alpha_i, \\alpha_j

      αi,αj(Platt 的论文给出了两层循环策略)

    • 数值稳定性:处理边界情况(

      α

      =

      0

      \\alpha = 0

      α=0

      α

      =

      C

      \\alpha = C

      α=C

    • 缓存优化:避免重复计算核函数值

    这些细节在实现 LIBSVM 等工业级库时至关重要,但核心思想就是上面的坐标下降在约束直线上的优化。


    六、本章小结

    本章我们完成了从感知机到 SVM 的华丽转身。让我们回顾这个数学与几何交织的旅程:

    核心思想的演进:

    #mermaid-svg-fPRf8MQUzjwEJm9f{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-fPRf8MQUzjwEJm9f .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-fPRf8MQUzjwEJm9f .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-fPRf8MQUzjwEJm9f .error-icon{fill:#552222;}#mermaid-svg-fPRf8MQUzjwEJm9f .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-fPRf8MQUzjwEJm9f .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-fPRf8MQUzjwEJm9f .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-fPRf8MQUzjwEJm9f .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-fPRf8MQUzjwEJm9f .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-fPRf8MQUzjwEJm9f .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-fPRf8MQUzjwEJm9f .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-fPRf8MQUzjwEJm9f .marker{fill:#333333;stroke:#333333;}#mermaid-svg-fPRf8MQUzjwEJm9f .marker.cross{stroke:#333333;}#mermaid-svg-fPRf8MQUzjwEJm9f svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-fPRf8MQUzjwEJm9f p{margin:0;}#mermaid-svg-fPRf8MQUzjwEJm9f .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-fPRf8MQUzjwEJm9f .cluster-label text{fill:#333;}#mermaid-svg-fPRf8MQUzjwEJm9f .cluster-label span{color:#333;}#mermaid-svg-fPRf8MQUzjwEJm9f .cluster-label span p{background-color:transparent;}#mermaid-svg-fPRf8MQUzjwEJm9f .label text,#mermaid-svg-fPRf8MQUzjwEJm9f span{fill:#333;color:#333;}#mermaid-svg-fPRf8MQUzjwEJm9f .node rect,#mermaid-svg-fPRf8MQUzjwEJm9f .node circle,#mermaid-svg-fPRf8MQUzjwEJm9f .node ellipse,#mermaid-svg-fPRf8MQUzjwEJm9f .node polygon,#mermaid-svg-fPRf8MQUzjwEJm9f .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-fPRf8MQUzjwEJm9f .rough-node .label text,#mermaid-svg-fPRf8MQUzjwEJm9f .node .label text,#mermaid-svg-fPRf8MQUzjwEJm9f .image-shape .label,#mermaid-svg-fPRf8MQUzjwEJm9f .icon-shape .label{text-anchor:middle;}#mermaid-svg-fPRf8MQUzjwEJm9f .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-fPRf8MQUzjwEJm9f .rough-node .label,#mermaid-svg-fPRf8MQUzjwEJm9f .node .label,#mermaid-svg-fPRf8MQUzjwEJm9f .image-shape .label,#mermaid-svg-fPRf8MQUzjwEJm9f .icon-shape .label{text-align:center;}#mermaid-svg-fPRf8MQUzjwEJm9f .node.clickable{cursor:pointer;}#mermaid-svg-fPRf8MQUzjwEJm9f .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-fPRf8MQUzjwEJm9f .arrowheadPath{fill:#333333;}#mermaid-svg-fPRf8MQUzjwEJm9f .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-fPRf8MQUzjwEJm9f .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-fPRf8MQUzjwEJm9f .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fPRf8MQUzjwEJm9f .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-fPRf8MQUzjwEJm9f .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fPRf8MQUzjwEJm9f .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-fPRf8MQUzjwEJm9f .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-fPRf8MQUzjwEJm9f .cluster text{fill:#333;}#mermaid-svg-fPRf8MQUzjwEJm9f .cluster span{color:#333;}#mermaid-svg-fPRf8MQUzjwEJm9f div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-fPRf8MQUzjwEJm9f .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-fPRf8MQUzjwEJm9f rect.text{fill:none;stroke-width:0;}#mermaid-svg-fPRf8MQUzjwEJm9f .icon-shape,#mermaid-svg-fPRf8MQUzjwEJm9f .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fPRf8MQUzjwEJm9f .icon-shape p,#mermaid-svg-fPRf8MQUzjwEJm9f .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-fPRf8MQUzjwEJm9f .icon-shape rect,#mermaid-svg-fPRf8MQUzjwEJm9f .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fPRf8MQUzjwEJm9f .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-fPRf8MQUzjwEJm9f .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-fPRf8MQUzjwEJm9f :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    感知机的遗憾:解不唯一

    SVM 的洞见:最大间隔

    几何间隔的数学化

    原始问题:min 1/2‖w‖²约束:y_i·w·x_i+b ≥ 1

    为何要对偶?

    理由1:约束优化更高效

    理由2:引入核函数

    Lagrange 对偶

    对偶问题:max Σα_i – 1/2 ΣΣα_i α_j y_i y_j x_i·x_j约束:Σα_i y_i = 0, α_i ≥ 0

    KKT 条件:互补松弛性

    支持向量的稀疏性α_i > 0 ⟺ y_i·w·x_i+b = 1

    现实问题:数据不完美

    软间隔:引入松弛变量 ξ_i

    目标函数:min 1/2‖w‖² + C Σξ_i

    等价形式:Hinge Loss + L2

    SVM = 损失函数 + 正则化统一到统计学习框架

    求解算法:SMO坐标下降的智慧


    从三个视角理解 SVM:

  • 几何视角:

    • SVM 寻找使间隔最大的分离超平面
    • 支持向量是决定间隔的关键样本
    • 间隔 =

      2

      w

      \\frac{2}{\\|\\mathbf{w}\\|}

      w2,最大化间隔 = 最小化

      w

      2

      \\|\\mathbf{w}\\|^2

      w2

  • 优化视角:

    • 原始问题:带约束的凸二次规划
    • 对偶问题:将

      N

      N

      N 个不等式约束转化为

      N

      N

      N 个变量

    • KKT 条件揭示了支持向量的稀疏性
  • 统计学习视角:

    • SVM = Hinge Loss + L2 正则化
    • 目标函数 = 经验风险(

      ξ

      i

      \\sum \\xi_i

      ξi)+ 结构风险(

      1

      2

      w

      2

      \\frac{1}{2}\\|\\mathbf{w}\\|^2

      21w2

    • 参数

      C

      C

      C 控制权衡,连接到第1章的 SRM 框架


  • 关键数学技巧:

  • 尺度不变性:利用

    (

    w

    ,

    b

    )

    (

    k

    w

    ,

    k

    b

    )

    (\\mathbf{w}, b) \\to (kw, kb)

    (w,b)(kw,kb) 不改变超平面,固定函数间隔

    γ

    ^

    =

    1

    \\hat{\\gamma} = 1

    γ^=1

  • Lagrange 对偶:将约束优化转化为无约束优化(在对偶空间)
  • KKT 条件:互补松弛性

    α

    i

    [

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    1

    ]

    =

    0

    \\alpha_i [y_i(\\mathbf{w}^T \\mathbf{x}_i + b) – 1] = 0

    αi[yi(wTxi+b)1]=0 揭示支持向量

  • 松弛变量消元:

    ξ

    i

    =

    [

    1

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    ]

    +

    \\xi_i = [1 – y_i(\\mathbf{w}^T \\mathbf{x}_i + b)]_+

    ξi=[1yi(wTxi+b)]+ 连接到 Hinge Loss


  • SVM 的优势:

    • ✅ 坚实的理论基础(VC 维、结构风险最小化)
    • ✅ 凸优化问题,全局最优解
    • ✅ 稀疏解(只依赖支持向量)
    • ✅ 内积形式,自然支持核技巧(下一章)
    • ✅ 对高维数据表现优异

    SVM 的局限:

    • ❌ 对大规模数据训练慢(

      O

      (

      N

      2

      )

      O(N^2)

      O(N2)

      O

      (

      N

      3

      )

      O(N^3)

      O(N3)

    • ❌ 对参数(

      C

      C

      C、核参数)敏感

    • ❌ 难以处理多分类(需要 OvR 或 OvO)
    • ❌ 输出不是概率(与逻辑回归不同)

    与第1章的连接:

    回顾第1章的结构风险最小化公式:

    min

    f

    F

    1

    N

    i

    =

    1

    N

    L

    (

    y

    i

    ,

    f

    (

    x

    i

    )

    )

    经验风险

    +

    λ

    J

    (

    f

    )

    正则化

    \\min_{f \\in \\mathcal{F}} \\underbrace{\\frac{1}{N} \\sum_{i=1}^N L(y_i, f(\\mathbf{x}_i))}_{\\text{经验风险}} + \\underbrace{\\lambda J(f)}_{\\text{正则化}}

    fFmin经验风险

    N1i=1NL(yi,f(xi))+正则化

    λJ(f)

    SVM 完美实例化了这个框架:

    min

    w

    ,

    b

    i

    =

    1

    N

    [

    1

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    ]

    +

    Hinge Loss(经验风险)

    +

    λ

    2

    w

    2

    L2 正则化(结构风险)

    \\min_{\\mathbf{w}, b} \\underbrace{\\sum_{i=1}^N [1 – y_i(\\mathbf{w}^T \\mathbf{x}_i + b)]_+}_{\\text{Hinge Loss(经验风险)}} + \\underbrace{\\frac{\\lambda}{2} \\|\\mathbf{w}\\|^2}_{\\text{L2 正则化(结构风险)}}

    w,bminHinge Loss(经验风险)

    i=1N[1yi(wTxi+b)]++L2 正则化(结构风险)

    2λw2

    而参数

    C

    =

    1

    λ

    C = \\frac{1}{\\lambda}

    C=λ1 正是权衡这两者的旋钮。


    哲学启示:

    SVM 的成功揭示了机器学习的一个深刻原则:

    简单性优于复杂性(Occam’s Razor)

    在满足数据的前提下,选择最"简单"的模型(最大间隔)。这种简单性不仅体现在几何上(间隔最大),也体现在代数上(

    w

    \\|\\mathbf{w}\\|

    w 最小),更体现在泛化能力上(支持向量的稀疏性)。

    Vapnik 的名言 “Nothing is more practical than a good theory” 在 SVM 中得到了完美体现:从 VC 维理论出发,推导出最大间隔原则,最终落地为高效的算法(SMO)。这是理论指导实践的典范。


    下章预告:

    本章我们推导对偶问题时,发现最优解只依赖于样本间的内积

    x

    i

    T

    x

    j

    \\mathbf{x}_i^T \\mathbf{x}_j

    xiTxj。这个看似不起眼的细节,却打开了一扇通往高维甚至无限维空间的大门。

    下一章 第08章:核方法 (Kernel Methods) 将揭示核技巧 (Kernel Trick) 的魔力:我们将看到如何在不显式计算高维特征的情况下,让 SVM 在无限维空间中工作。这不仅适用于 SVM,更是一套通用的数学工具,将线性算法拓展到非线性世界。

    同时,我们还会探讨经典的核函数(多项式核、RBF 核),理解 Mercer 定理(什么样的函数可以作为核),以及核方法的几何直观(特征空间的隐式映射)。准备好迎接这场"维度的魔法"吧!


    七、推荐阅读

    经典教材:

    • 《统计学习方法》 – 第7章 支持向量机 (李航):清晰的推导,适合初学者
    • 《Pattern Recognition and Machine Learning》 – Chapter 7 (Christopher Bishop):从概率视角理解 SVM
    • 《The Elements of Statistical Learning》 – Chapter 12 (Hastie, Tibshirani, Friedman):SVM 与其他方法的对比

    论文:

    • Cortes & Vapnik (1995). “Support-Vector Networks”:SVM 的开创性论文
    • Platt (1998). “Sequential Minimal Optimization”:SMO 算法原文
    • Vapnik (1999). “The Nature of Statistical Learning Theory”:VC 维理论的系统阐述

    视频:

    • 白板推导系列 – P7~P9 支持向量机 (shuhuai008, B站):详细的板书推导,强烈推荐
    • Stanford CS229 – Lecture 6 (Andrew Ng):SVM 的直观讲解

    实践工具:

    • scikit-learn SVM 文档:sklearn.svm.SVC 的使用与调参技巧
    • LIBSVM:经典的 SVM 库,了解工程实现

    练习题(检验理解):

  • 几何理解:为什么间隔 =

    2

    w

    \\frac{2}{\\|\\mathbf{w}\\|}

    w2?画图推导。

  • 对偶推导:手动推导软间隔 SVM 的对偶问题,特别注意约束

    α

    i

    +

    μ

    i

    =

    C

    \\alpha_i + \\mu_i = C

    αi+μi=C 的来源。

  • KKT 条件:给定一个解

    (

    w

    ,

    b

    ,

    α

    )

    (\\mathbf{w}^*, b^*, \\alpha^*)

    (w,b,α),如何验证它满足 KKT 条件?

  • 支持向量:在软间隔 SVM 中,

    α

    i

    =

    C

    \\alpha_i = C

    αi=C 的样本一定被误分类吗?为什么?

  • 等价性证明:严格证明

    min

    w

    ,

    b

    1

    2

    w

    2

    +

    C

    i

    ξ

    i

    \\min_{\\mathbf{w},b} \\frac{1}{2}\\|\\mathbf{w}\\|^2 + C\\sum_i \\xi_i

    minw,b21w2+Ciξi 等价于

    min

    w

    ,

    b

    i

    [

    1

    y

    i

    (

    w

    T

    x

    i

    +

    b

    )

    ]

    +

    +

    1

    2

    C

    w

    2

    \\min_{\\mathbf{w},b} \\sum_i [1-y_i(\\mathbf{w}^T \\mathbf{x}_i + b)]_+ + \\frac{1}{2C}\\|\\mathbf{w}\\|^2

    minw,bi[1yi(wTxi+b)]++2C1w2

  • 编程实现:从零实现一个简化版的 SMO 算法(只需处理线性核、小规模数据)。


  • “In God we trust, all others bring data.” —— W. Edwards Deming

    SVM 教会我们:当数据说话时,让数学倾听;当理论指引时,让算法践行。这种理论与实践的完美结合,正是机器学习之美。

    赞(0)
    未经允许不得转载:171主机测评 » 【机器学习教程】第07章:支持向量机 (SVM)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址