查看全课大纲(第 47 / 82 节)
  1. 1.函数与数据泛化
  2. 2.向量:从几何直觉到高维空间
  3. 3.矩阵与张量
  4. 4.特征值与特征向量:矩阵变换的不动方向
  5. 5.凸函数:从向量求导的矩阵记号到好优化的函数形状
  6. 6.概率与统计:机器学习的数学基础
  7. 7.独立性与随机变量:贝叶斯公式与二项分布
  8. 8.期望、方差与协方差:随机变量的数字画像
  9. 9.联合概率:当一条轴不够用的时候
  10. 10.概率分布(一):从伯努利到伽马函数
  11. 11.概率分布(二):贝塔、泊松、正态与两个贝叶斯故事
  12. 12.机器学习的模型:找输入与输出的关系
  13. 13.机器学习的应用
  14. 14.过拟合
  15. 15.机器学习的分类
  16. 16.有监督学习:从房价预测说起
  17. 17.损失函数
  18. 18.梯度下降(上):更新规则与学习速率
  19. 19.梯度下降(2)
  20. 20.牛顿方法
  21. 21.KNN简介
  22. 22.距离测算
  23. 23.朴素贝叶斯
  24. 24.朴素贝叶斯的实际应用
  25. 25.信息熵:决策树构建的度量基础
  26. 26.信息增益与决策树的构建
  27. 27.ID3算法
  28. 28.决策树节点的划分
  29. 29.CART树
  30. 30.Bagging
  31. 31.Boosting:自适应提升算法
  32. 32.Gradient Boosting
  33. 33.线性模型:回归与分类的同一副骨架
  34. 34.最小二乘:把最优参数直接解出来
  35. 35.最小二乘法的几何与概率视角
  36. 36.极大似然:给最小二乘一个概率出身
  37. 37.逻辑回归(1):把线性模型接到分类上
  38. 38.逻辑回归(2):损失函数与多分类
  39. 39.---- 手造数据: 5 个样本, 2 个特征; x2 几乎 = 2*x1 (偏差手工指定, 无随机) ----
  40. 40.讲师例: 向量 "23014" -- 三把范数尺子量同一个向量
  41. 41.优化方法(1):坐标下降与前向选择
  42. 42.优化方法(2):前向策略与最小角回归
  43. 43.拉格朗日乘子法(1):从无约束到等式约束
  44. 44.拉格朗日乘子法(2):等式约束下的平行条件与拉格朗日函数
  45. 45.拉格朗日乘子法(3):不等式约束与 KKT 条件
  46. 46.最大间隔:把分类问题变成优化问题
  47. 47.拉格朗日对偶问题:把 w 和 b 全部换成 α
  48. 48.支持向量:边界上的少数派
  49. 49.SVM 计算过程:一笔到底算完,再走进核方法
  50. 50.贝叶斯公式:概率即信念
  51. 51.隐含变量和概率模型:给看不见的原因建模
  52. 52.EM 算法:期望与最大化的迭代
  53. 53.琴生不等式:EM 的数学钥匙
  54. 54.三个硬币问题:EM 的复盘与衔接
  55. 55.高斯混合模型:用隐变量解释双峰数据
  56. 56.隐马尔可夫模型
  57. 57.隐马尔可夫模型(2):前向算法与动态混合模型
  58. 58.隐马尔可夫模型在 NLP 中的运用
  59. 59.EM 算法:把「为什么收敛」推到底
  60. 60.HMM 在 NLP 中的运用:从分词到机器翻译
  61. 61.HMM 参数估计:Baum-Welch 的三块拉格朗日
  62. 62.高维下的高斯模型
  63. 63.主题模型:从词袋到隐含主题
  64. 64.Dirichlet 分布(1)
  65. 65.Dirichlet 分布(2)
  66. 66.统计学习内容回顾
  67. 67.K-means 算法
  68. 68.PCA 降维
  69. 69.SVD 降维
  70. 70.从聚类到流形
  71. 71.局部线性嵌入
  72. 72.随机邻域嵌入:SNE 与 t-SNE
  73. 73.无参模型:让数据自己说话
  74. 74.高斯过程:函数空间里的正态分布
  75. 75.高斯过程(2):噪声、正则化与核的线性组合
  76. 76.神经网络简介:从感知器到自编码器
  77. 77.反向传播:把误差一层层传回去
  78. 78.卷积神经网络(CNN):让特征自己学出来
  79. 79.循环神经网络(RNN):给网络装上记忆
  80. 80.深度学习回顾:静态一类,动态一类
  81. 81.增强学习(1):蒙特卡洛、树搜索与 Q-learning
  82. 82.强化学习(2):从乌鸦吃核桃到井字棋的 value 回传

拉格朗日对偶问题:把 w 和 b 全部换成 α

约 31 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

小象实战讲义 · 机器学习算法精讲

上一节把”找最大间隔”变成了优化问题 min⁡12∥w∥2\min \frac{1}{2}\Vert w\Vert^2 s.t. yi(wTxi+b)≥1y_i(w^Tx_i+b)\ge 1,并且顺手把拉格朗日函数也构造好了。但这个函数里同时住着三类参数——α\alpha、ww、bb,而且一边要求最大值、一边要求最小值——讲师直言:很难做,不太好解。这一节他做的全部事情其实就一件:把 ww 和 bb 从问题里彻底消掉,只剩下 α\alpha。消完之后问题变成什么样、约束条件还剩下哪两条、这样做为什么不是”为了显示数学的技巧”,就是本节的主线。讲师开讲时还预告了一个问题——“为什么最大间距是比较好的?(已经有同学问了)“——这个直觉要到《SVM 计算过程》一节用一个完整例子来回答,本节先把推导走通。

💡 核心导读

  • 大框架:非等式优化天然是”最大 × 最小”的问题 min⁡xmax⁡λ≥0L\min_x\max_{\lambda\ge 0} L;把 max⁡\max 和 min⁡\min 调换次序,先求内层最小、再求外层最大——这就是对偶式。
  • 第一步:LL 对 ww 求导置零 ⟹ w=∑iαiyixiw = \sum_i \alpha_i y_i x_i——最优的 ww 是训练样本的线性组合。
  • 第二步:LL 对 bb 求导置零 ⟹ ∑iαiyi=0\sum_i \alpha_i y_i = 0——bb 从问题里消失。
  • 代回:两处二次型恰好相等、bb 项被等式约束整块清零 ⟹ L(α)=∑iαi−12∑i∑jαiαjyiyj(xiTxj)L(\alpha) = \sum_i \alpha_i - \frac{1}{2}\sum_i\sum_j \alpha_i\alpha_j y_i y_j (x_i^T x_j)。
  • 收获:变量只剩 α\alpha,约束只剩两条(αi≥0\alpha_i \ge 0、∑iαiyi=0\sum_i \alpha_i y_i = 0)——SVM 的对偶形式(dual form)。

回顾:非等式优化是”最大 × 最小”的问题

先用两分钟把上次的东西接上(KKT 条件的完整版在《拉格朗日乘子法(3)》一节,这里只取结论)。一维例子:优化 f(x)=x2f(x) = x^2,约束 x≥bx \ge b(标准形 g(x)=b−x≤0g(x) = b - x \le 0)。拉格朗日函数:

L(x,λ)=x2+λ(b−x),λ≥0L(x, \lambda) = x^2 + \lambda(b - x), \qquad \lambda \ge 0

对 xx 求导置零得 2x−λ=02x - \lambda = 0,即 x∗=λ/2x^* = \lambda/2;约束激活时 x=bx = b,代回去 λ∗=2b\lambda^* = 2b。两种情况(最优解在约束范围内/外)被同一组条件统一成 λ∗=max⁡(0,2b)\lambda^* = \max(0, 2b)、x∗=max⁡(0,b)x^* = \max(0, b)。

这次回顾要往上再抬一层。讲师的总结:等式优化已经学过(求导置零);非等式优化,要同时考虑最优解所在的范围——正因为要”兼顾”最优解在约束之内、之外两种情况,整个问题才长成了”最大值 × 最小值”的形状:

min⁡x max⁡λ≥0 L(x,λ)\min_{x}\ \max_{\lambda \ge 0}\ L(x, \lambda)

里层先对付 λ\lambda:找一个”最好的、最大的”λ\lambda,大到让限制条件被满足为止;外层再对 xx 求最小。

接着是本节的第一个关键动作——把 max⁡\max 和 min⁡\min 调换次序(讲师:“我们可以把这个 max 和 min 调换一下,也是可以的”):

max⁡λ≥0 min⁡x L(x,λ)\max_{\lambda \ge 0}\ \min_{x}\ L(x, \lambda)

顺序变了,做事的顺序也变了:先求内层关于原始变量的最小值,再求外层关于拉格朗日乘子的最大值。讲师明说做这个替换”是为了以后我们一会讲今天课程的方便”——今天 SVM 的推导,用的正是这个次序。(轻注:交换 min⁡\min 和 max⁡\max 的次序在数学上需要条件——例如凸问题等情形下两边才相等——本课视频没有展开这一层,这里按讲师的处理直接采用。)

上次的优化问题和它的拉格朗日函数

接着回顾上次课的成果(详见《最大间隔》一节):两组数据要分开,能分开的线有无数条,要找间距最大的那条。间距 =2/∥w∥= 2/\Vert w\Vert,所以使间距最大,相当于使 ∥w∥\Vert w\Vert 最小;而为了数学上的方便,我们求的是模的平方最小——讲师在这里补了理由:取平方之后求导容易,L2L_2 范数的导数好求、能得出有益的结果(乘常数、取平方都不改变最优解的位置)。整个优化问题:

min⁡w, b  12∥w∥2s.t.yi(wTxi+b)≥1,  i=1,…,N\min_{w,\ b}\ \ \frac{1}{2}\Vert w\Vert^2 \qquad \text{s.t.} \quad y_i(w^Tx_i + b) \ge 1,\ \ i = 1, \dots, N

(NN 是样本个数——上一节记作 mm,同一个数;讲师板书习惯说”大 N”。)约束挪成标准形 gi(w,b)=1−yi(wTxi+b)≤0g_i(w, b) = 1 - y_i(w^Tx_i + b) \le 0 之后,按上次的办法构造拉格朗日函数(上一节已经写好,乘子不用 λ\lambda、换成 SVM 惯例的 α\alpha):

L(w,b,α)=12∥w∥2+∑i=1Nαi[1−yi(wTxi+b)]L(w, b, \alpha) = \frac{1}{2}\Vert w\Vert^2 + \sum_{i=1}^{N}\alpha_i\left[1 - y_i(w^Tx_i + b)\right]

每一个样本一条约束,所以乘子也有 NN 个:α1,α2,…,αN\alpha_1, \alpha_2, \dots, \alpha_N。按本节开头的大框架,它对应:

min⁡w, b max⁡αi≥0 L(w,b,α)\min_{w,\ b}\ \max_{\alpha_i \ge 0}\ L(w, b, \alpha)

为什么要变成对偶式:三个参数,一边最大一边最小

先停一下,看看眼前这个优化问题的”长相”。讲师的观察:它关于三个参数——αi\alpha_i、ww、bb——而且一边在求最大值、一边在求最小值。这样的优化问题很难做,不太好解。

那变成对偶形式,图什么?讲师把话说得很直白:不是为了显示数学的技巧。要做的事情是——把 ww 和 bb 的问题,全部用 α\alpha 去代替。这样一来,优化就只关于 α\alpha 这一类参数,减少了需要优化的数量。这就是对偶化的全部动机。

第一步:对 w 求导置零

现在动手。对 LL 的第一项,12∥w∥2\frac{1}{2}\Vert w\Vert^2 是 ww 的模平方——对 ww 求导,模平方直接吐出 ww 本身。第二项里与 ww 相乘的是 xix_i,前面还挂着 yiy_i 和 αi\alpha_i,要对 ii 连加。求导置零:

∂L∂w=w−∑i=1Nαiyixi=0\frac{\partial L}{\partial w} = w - \sum_{i=1}^{N}\alpha_i y_i x_i = 0

于是得到本节第一条关键关系式:

w=∑i=1Nαiyixiw = \sum_{i=1}^{N}\alpha_i y_i x_i

最优的 ww,是全部训练样本的线性组合,组合系数是 αiyi\alpha_i y_i。看一眼量纲就放心:xx 是向量,yy 和 α\alpha 都是标量(常量),标量乘向量再连加,出来还是向量——ww 本来就应该是向量。

(记号插曲:讲师板书时把每个样本的乘子写成上角标 α(i)\alpha^{(i)}——他的原话是”大部分的公式、大部分的书里边都是用下角标,但是我这里边一直上角标,大家统一一下”。本讲义沿用全课统一的下标记号 αi\alpha_i,与上一节一致,意思相同。)

第二步:对 b 求导置零

线性函数是 wTxi+bw^Tx_i + b 的形式。LL 里跟 bb 有关的项:yiy_i 要乘上 bb、αi\alpha_i 也要乘上 bb,然后对 ii 连加。求导置零的结果干脆利落:

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

注意这一步的副作用——bb 从问题里消失了(讲师:“那 b 已经消失了”)。bb 一消失,ww 就可以完全用刚才的形式替代:整个 LL 里,将不再有独立的 ww 和 bb。

第三步:代回展开(初学者可以跟着走一遍)

这一步公式繁琐。讲师特意放慢了节奏:“因为很多还是有初学的同学……我还是希望给大家从头再写一遍;已经推导过、知道很清晰的同学,可以把这段跳过,这是没什么问题的。”

先把记号备齐。模平方就是转置自乘:∥w∥2=wTw\Vert w\Vert^2 = w^Tw。把 w=∑iαiyixiw = \sum_i \alpha_i y_i x_i 代进去,一列乘一行:

12∥w∥2=12(∑i=1Nαiyixi)T(∑j=1Nαjyjxj)=12∑i=1N∑j=1Nαiαjyiyj(xiTxj)\frac{1}{2}\Vert w\Vert^2 = \frac{1}{2}\left(\sum_{i=1}^{N}\alpha_i y_i x_i\right)^{T}\left(\sum_{j=1}^{N}\alpha_j y_j x_j\right) = \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_j y_i y_j (x_i^Tx_j)

(两个连加相乘,左边用 ii、右边就得换个字母用 jj,把它们区分开——最后每个 ii 都要跟每个 jj 配一遍。)

这里有个点乘记号的约定,讲师专门停下来讲:乘出来的东西里,α\alpha 和 yy 全是标量,只有 xx 是向量——所以 xix_i 乘 xjx_j,实际上是 xiTxjx_i^T x_j(转置点乘),乘完是一个实数。“我们可以写成 xiTxjx_i^T x_j 的形式,但为了简洁就不写这样的形式了——写成 xixjx_i x_j 的时候,大家心里知道是两个向量的点乘就可以。”

第二块,把求和项 ∑iαi[1−yi(wTxi+b)]\sum_i \alpha_i[1 - y_i(w^Tx_i + b)] 拆开:

∑i=1Nαi−∑i=1Nαiyi(wTxi)−b∑i=1Nαiyi\sum_{i=1}^{N}\alpha_i - \sum_{i=1}^{N}\alpha_i y_i (w^Tx_i) - b\sum_{i=1}^{N}\alpha_i y_i

三件事同时发生:

  1. 第一块 ∑iαi\sum_i \alpha_i 原样保留;
  2. 中间块的 ww 再代一次 w=∑jαjyjxjw = \sum_j \alpha_j y_j x_j,得到 ∑i∑jαiαjyiyj(xiTxj)\sum_i\sum_j \alpha_i\alpha_j y_i y_j (x_i^Tx_j)——和模平方展开出来的那一大块,一模一样(讲师:“这一大块和这一大块又是相等的”);
  3. 尾巴上的 b∑iαiyib\sum_i \alpha_i y_i:第二步已经求出 ∑iαiyi=0\sum_i \alpha_i y_i = 0,所以这一项是 b×0b \times 0——整块直接消掉(讲师:“b 乘上 0,这部分都等于 0,直接给它消掉”)。

最后合并:模平方贡献 12\frac{1}{2} 份二次型,中间块减掉 11 份二次型,两处相等所以净剩 −12-\frac{1}{2} 份:

L(α)=∑i=1Nαi−12∑i=1N∑j=1Nαiαjyiyj(xiTxj)L(\alpha) = \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 (x_i^Tx_j)

i 和 j 到底在加什么:写程序最容易看出来

公式里 ∑i∑j\sum_i\sum_j 写起来紧凑,具体在加什么?讲师当场展开了:“就变成了 α1\alpha_1 乘 α1\alpha_1、α1\alpha_1 乘 α2\alpha_2、α1\alpha_1 乘 α3\alpha_3,一直到 α1\alpha_1 乘 αN\alpha_N……如果我们写程序呢,就特别容易看出来”——ii 从 1 到 NN 扫一遍、jj 也从 1 到 NN 扫一遍,每一个 (i,j)(i, j) 组合都乘一次,最后统统累加。拿两个样本的真数据走一遍:

# 双重求和到底在加什么: 两样本逐项展开 (讲师: "写程序特别容易看出来")
X = [1.0, -1.0]    # 两个一维样本
y = [1, -1]        # 标签
alpha = [0.5, 0.5] # 一组乘子

total = 0.0
for i in range(2):
    for j in range(2):
        term = alpha[i] * alpha[j] * y[i] * y[j] * (X[i] * X[j])
        total += term
        print(f"i={i+1}, j={j+1}: 项 = {alpha[i]:.2f}*{alpha[j]:.2f}*{y[i]:+d}*{y[j]:+d}*({X[i]:+g}*{X[j]:+g}) = {term:+.4f}")

print()
print(f"双重求和 = {total:.4f}")
print(f"对偶目标 = sum(alpha) - 1/2 * 双重求和 = {sum(alpha):.2f} - {0.5 * total:.4f} = {sum(alpha) - 0.5 * total:.4f}")
i=1, j=1: 项 = 0.50*0.50*+1*+1*(+1*+1) = +0.2500
i=1, j=2: 项 = 0.50*0.50*+1*-1*(+1*-1) = +0.2500
i=2, j=1: 项 = 0.50*0.50*-1*+1*(-1*+1) = +0.2500
i=2, j=2: 项 = 0.50*0.50*-1*-1*(-1*-1) = +0.2500

双重求和 = 1.0000
对偶目标 = sum(alpha) - 1/2 * 双重求和 = 1.00 - 0.5000 = 0.5000

四个 (i,j)(i,j) 组合各算一遍:两个正标签同类相乘得正、正负标签异类相乘 yiyj=−1y_iy_j = -1 但 xixjx_ix_j 也是 −1-1,负负得正——四项全是 +0.25+0.25,总和 1.01.0。对偶目标 =1−0.5=0.5= 1 - 0.5 = 0.5。公式里的双重 ∑\sum,就是这个双重 for 循环。

最终形式:SVM 的对偶问题

把整个逻辑串起来(讲师的收官叙事):

  1. 原问题是 min⁡w,bmax⁡αi≥0L(w,b,α)\min_{w,b}\max_{\alpha_i \ge 0} L(w, b, \alpha);
  2. 调换次序——先把内层关于 ww、bb 的最小值求出来:求导置零给出两个条件(w=∑iαiyixiw = \sum_i \alpha_i y_i x_i 与 ∑iαiyi=0\sum_i \alpha_i y_i = 0);
  3. 代回:ww 和 bb 全部变成 α\alpha;
  4. 剩下的问题只有一件事——怎么调 α\alpha,使整个 LL 最大:

max⁡α  ∑i=1Nαi−12∑i=1N∑j=1Nαiαjyiyj(xiTxj)\max_{\alpha}\ \ \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 (x_i^Tx_j)

s.t.∑i=1Nαiyi=0,αi≥0,  i=1,…,N\text{s.t.} \quad \sum_{i=1}^{N}\alpha_i y_i = 0, \qquad \alpha_i \ge 0,\ \ i = 1, \dots, N

约束只剩两条,来历都要记牢:αi≥0\alpha_i \ge 0 是拉格朗日乘子处理不等式约束的本性(不等式的乘子必须非负);∑iαiyi=0\sum_i \alpha_i y_i = 0 是对 bb 求导置零的产物——代回展开全靠它清掉 bb 项。

讲师在这里埋了一个彩蛋:很多条件里,还会给 α\alpha 加一个上限——αi≤C\alpha_i \le C,“希望 α\alpha 不要特别大”。他顺手点破:这”实际上就是我们已经学过的一种 regularization——给它加一个约束项”(第 9 章岭回归/LASSO 的老朋友,下一节还会回响)。如果暂时不想管这个上限,“直接就是 ≥0\ge 0,这也没啥问题”。

这就是把 SVM 的最大间距问题换成拉格朗日的对偶问题——讲师给的英文名:dual form of Lagrange multiplier。求出最优的 α\alpha 之后,ww 由第一步的关系式直接给出(w=∑iαiyixiw = \sum_i \alpha_i y_i x_i,全是已知量)。

对偶式在最优处兑现吗:一个能手算的完整例子

两样本、一维特征,就能把整套对偶式从头到尾走一遍。数据:x1=+1x_1 = +1(y1=+1y_1 = +1)、x2=−1x_2 = -1(y2=−1y_2 = -1)。由对称性设 α1=α2=a\alpha_1 = \alpha_2 = a——等式约束 ∑iαiyi=a−a=0\sum_i \alpha_i y_i = a - a = 0 自动满足。代入对偶目标:

D(a)=2a−2a2D(a) = 2a - 2a^2

一个单变量抛物线,开口向下。扫描看顶点、再在顶点处对账:

# 两样本完整验证: D(a) = 2a - 2a^2, 顶点处对偶目标 = 原问题目标
import math

X = [1.0, -1.0]   # 两个一维样本
y = [1, -1]       # 标签

def dual(a):
    # 内层 min 的解: w = sum(a*y*x) = 2a (对称情形); b 的系数 sum(a*y)=0, b 不再出现
    s = 0.0
    for i in range(2):
        for j in range(2):
            s += a * a * y[i] * y[j] * (X[i] * X[j])
    return 2 * a - 0.5 * s, 2 * a

print("D(a) = 2a - 2a^2  (两样本 x=+1/-1, 对称设 a1=a2=a)")
print(f"{'a':>4} | {'D(a)':>6} | {'w=2a':>5}")
for a in (0.1, 0.3, 0.5, 0.7, 0.9):
    d, w = dual(a)
    print(f"{a:4.1f} | {d:6.4f} | {w:5.1f}")
print("抛物线开口向下, 顶点在 a=0.5: D 最大 = 0.5000")
print()

# ---- 顶点 a=0.5 处: 对偶目标与原问题目标对账 ----
a = 0.5
alpha = [a, a]
w = sum(alpha[i] * y[i] * X[i] for i in range(2))   # 第一步关系式恢复 w
b = 0.0                                          # 数据关于原点对称, 边界取在原点
d, _ = dual(a)
primal = 0.5 * w * w
print(f"最优 a=0.5: w = sum(a*y*x) = {w:.4f}")
print(f"对偶目标 D(0.5) = {d:.4f} ; 原问题目标 0.5*||w||^2 = {primal:.4f}  -> 相等: {math.isclose(d, primal)}")
print(f"约束验证: y1*(w*x1+b) = {y[0]*(w*X[0]+b):.4f} (>=1, 恰取等); y2*(w*x2+b) = {y[1]*(w*X[1]+b):.4f} (恰取等)")
print(f"等式约束 sum(a*y) = {alpha[0]*y[0] + alpha[1]*y[1]:.4f} (=0)")
print(f"间距 margin = 2/||w|| = {2/abs(w):.4f}")
D(a) = 2a - 2a^2  (两样本 x=+1/-1, 对称设 a1=a2=a)
   a |   D(a) |  w=2a
 0.1 | 0.1800 |   0.2
 0.3 | 0.4200 |   0.6
 0.5 | 0.5000 |   1.0
 0.7 | 0.4200 |   1.4
 0.9 | 0.1800 |   1.8
抛物线开口向下, 顶点在 a=0.5: D 最大 = 0.5000

最优 a=0.5: w = sum(a*y*x) = 1.0000
对偶目标 D(0.5) = 0.5000 ; 原问题目标 0.5*||w||^2 = 0.5000  -> 相等: True
约束验证: y1*(w*x1+b) = 1.0000 (>=1, 恰取等); y2*(w*x2+b) = 1.0000 (恰取等)
等式约束 sum(a*y) = 0.0000 (=0)
间距 margin = 2/||w|| = 2.0000

三件事在顶点同时兑现:

  • 对偶 = 原始:D(0.5)=0.5000D(0.5) = 0.5000,原问题目标 12∥w∥2=0.5000\frac{1}{2}\Vert w\Vert^2 = 0.5000,分毫不差。内层 min 已把 ww、bb 消干净,外层 max 在顶点取到的,正是原问题的最优值——对偶化没有丢掉任何东西。
  • ww 直接恢复:w=∑iαiyixi=0.5+0.5=1w = \sum_i \alpha_i y_i x_i = 0.5 + 0.5 = 1,决策边界 wTx+b=0w^Tx + b = 0 就是原点 x=0x = 0,间距 2/∥w∥=22/\Vert w\Vert = 2。
  • 非最优的 α\alpha 都更低:a=0.3a = 0.3 或 0.70.7 时 D=0.42D = 0.42,a=0.1a = 0.1 或 0.90.9 时 D=0.18D = 0.18——对偶目标被 max⁡\max 顶着往顶点走,两边对称下降。

至于”给定一组 α\alpha 怎么系统地把这个最大化问题解出来”,下一节开头会看到一种坐标轴式的迭代解法(SMO 算法)——固定其余的 α\alpha、一次调一个,不断循环逼近最优。

📝 动手练一练

  1. 约束的来历:SVM 对偶问题的两条约束——αi≥0\alpha_i \ge 0 与 ∑iαiyi=0\sum_i \alpha_i y_i = 0——分别从哪里来?
👉 点击查看参考答案

αi≥0\alpha_i \ge 0:来自拉格朗日乘子处理不等式约束的本性——不等式的乘子必须非负(上一章 KKT 条件里的对偶可行性,λ≥0\lambda \ge 0)。

∑iαiyi=0\sum_i \alpha_i y_i = 0:来自对 bb 求导置零。它干了两件事:让 bb 从优化问题里消失;代回展开时把尾巴上的 b∑iαiyib\sum_i \alpha_i y_i 整块清零。

  1. 换组数据再走一遍:数据改成 x1=+2x_1 = +2(y1=+1y_1 = +1)、x2=−2x_2 = -2(y2=−1y_2 = -1),对称设 α1=α2=a\alpha_1 = \alpha_2 = a。(1) 写出对偶目标 D(a)D(a) 并求顶点;(2) 验证顶点处 D(a∗)=12∥w∥2D(a^*) = \frac{1}{2}\Vert w\Vert^2;(3) 算出间距。
👉 点击查看参考答案

(1) 双重求和四项各为 a2⋅1⋅4=4a2a^2 \cdot 1 \cdot 4 = 4a^2(x1x1=4x_1x_1 = 4、x1x2=−4x_1x_2 = -4 但 y1y2=−1y_1y_2 = -1、负负得正),总和 16a216a^2。D(a)=2a−8a2D(a) = 2a - 8a^2,顶点在 a∗=216=18a^* = \frac{2}{16} = \frac{1}{8},D(a∗)=14−864=0.125D(a^*) = \frac{1}{4} - \frac{8}{64} = 0.125。

(2) w=∑iαiyixi=18⋅2+18⋅2=0.5w = \sum_i \alpha_i y_i x_i = \frac{1}{8}\cdot 2 + \frac{1}{8}\cdot 2 = 0.5;12∥w∥2=0.5×0.25=0.125\frac{1}{2}\Vert w\Vert^2 = 0.5 \times 0.25 = 0.125——与 D(a∗)D(a^*) 相等,对偶 = 原始再次兑现。

(3) 间距 =2/∥w∥=2/0.5=4= 2/\Vert w\Vert = 2/0.5 = 4:数据离得远了(xx 从 ±1\pm 1 摊到 ±2\pm 2),最优的 ww 反而变小、间距变大——与”间距最大 ⟺ ∥w∥\Vert w\Vert 最小”完全一致。

本章小结

  • 大框架:非等式优化 = “最大 × 最小”(min⁡xmax⁡λ≥0L\min_x\max_{\lambda\ge 0} L);调换次序后先求内层最小、再求外层最大——对偶式。动机不是炫技:把 ww、bb 全换成 α\alpha,减少需要优化的数量。
  • 两个置零条件:w=∑iαiyixiw = \sum_i \alpha_i y_i x_i(最优 ww = 训练样本的线性组合,系数 αiyi\alpha_i y_i);∑iαiyi=0\sum_i \alpha_i y_i = 0(bb 从问题里消失)。
  • 代回展开:模平方与求和项展开出的二次型恰好相等,合并剩 −12-\frac{1}{2} 份;bb 项被 ∑iαiyi=0\sum_i \alpha_i y_i = 0 整块清零 ⟹ L(α)=∑iαi−12∑i∑jαiαjyiyj(xiTxj)L(\alpha) = \sum_i \alpha_i - \frac{1}{2}\sum_i\sum_j \alpha_i\alpha_j y_i y_j (x_i^Tx_j)。
  • 点乘记号:xixjx_i x_j 默认是 xiTxjx_i^Tx_j(转置点乘、结果是实数)——α\alpha、yy 全是标量,只有 xx 是向量。
  • 最终形式:max⁡αL(α)\max_\alpha L(\alpha),s.t. αi≥0\alpha_i \ge 0、∑iαiyi=0\sum_i \alpha_i y_i = 0——dual form of Lagrange multiplier;彩蛋:实践中常加上限 αi≤C\alpha_i \le C,本质是 regularization。
  • 数值兑现:两样本例 D(a)=2a−2a2D(a) = 2a - 2a^2,顶点 a=0.5a = 0.5 处对偶目标 0.50.5 = 原问题目标 0.50.5,w=1w = 1、间距 22,两条约束全过。

📋 行动清单

  • 把对偶展开从头手推一遍——重点盯三处:模平方的转置自乘、两处二次型”恰好相等”、bb 项的清零
  • 跑代码块二,看 D(a)D(a) 抛物线怎么在顶点同时兑现”对偶 = 原始”与约束取等
  • 想一想:αi≤C\alpha_i \le C 这个上限,和第 9 章岭回归/LASSO 的 λ\lambda 是不是同一种思想(下一节继续回响)
  • 预习下一节《支持向量》——αi\alpha_i 取零与非零各对应什么样的样本(上一节结尾埋的钩,在那里揭晓);开头还会看到解对偶问题的 SMO 算法
  • 讲师预告的”为什么最大间距比较好”(《SVM 计算过程》一节用一个完整例子回答)可以先自己想一想答案

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 第11章笔记:最大间隔(Max Margin)
    下载