ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

线性可分SVM推导详解:从拉格朗日乘子法到KKT条件与手算实例

线性可分SVM推导详解:从拉格朗日乘子法到KKT条件与手算实例 如果你看过几篇讲支持向量机的教程大概率会和我有同样的体验前面的“最大间隔”部分看得信心满满一到拉格朗日乘子法就开始犯困——新符号一个一个冒出来KKT条件像天书偏导一算就是满页纸最后“咣”地甩出一个对偶问题也不知道怎么就变过去的。我当年学线性可分SVM推导的时候就是卡在这一段反复看了好多遍才把整条链路走通。这篇文章就是把你拉过这个坎的。我会从拉格朗日乘子法的直观思想讲起把它用来处理SVM的不等式约束再一步步推导出线性可分SVM的原始问题、对偶问题、KKT条件、支持向量、决策函数最后用一个只有三个数据点的完整例题把所有计算过程手算一遍。整个过程不跳步、不省略每个转换都告诉你“为什么这么做”。这篇文章适合这几类人正在学机器学习理论、被SVM推导折磨的学生想搞清楚支持向量机背后原理、不满足于只会调包的开发者以及准备面试、需要手推SVM算法的朋友。看完之后你会发现拉格朗日乘子法和SVM推导本质上就是一条环环相扣的逻辑链没有哪一步是凭空冒出来的。1. 先搞清楚SVM到底在解什么问题1.1 从一个二维分类问题的直觉说起假设平面上有两类点一类用圆圈表示一类用三角表示我们要找一条直线把两类点分开。这条直线可以有无穷多条稍微平移一点、旋转一点都能把数据分开。那哪一条是“最好”的SVM给出的答案是选那条离两类样本都尽可能远的直线。这里的“远”不是看某一个点而是看离直线最近的那个训练样本有多远。换句话说我们要找一条直线使得所有样本点到它的距离都不小于一个值并且让这个值尽可能大。距离越大说明分类器对数据扰动的容忍度越高泛化能力越好。听起来很直观对吧但要把这个直觉变成数学需要回答三个问题距离怎么定义约束怎么写目标函数怎么优化这三个问题正好对应SVM推导的几个关键步骤。1.2 函数间隔和几何间隔的差别要说清楚“点到超平面的距离”先要区分两个容易混淆的概念函数间隔和几何间隔。对于超平面 (w\cdot x b 0)这里 (w) 是法向量(b) 是偏置一个样本 ((x_i, y_i)) 的函数间隔定义为[ \hat{\gamma}_i y_i (w \cdot x_i b) ]其中 (y_i \in {1, -1})。如果分类正确(y_i(w\cdot x_i b)) 是个正数而且它越大说明这个点在正方向离超平面越远。但函数间隔有个问题如果把 (w) 和 (b) 同时放大成 (2w) 和 (2b)超平面本身完全没变函数间隔却变为原来的两倍。所以函数间隔不能直接用来衡量“真实距离”。几何间隔才是点 (x_i) 到超平面的真实垂直距离[ \gamma_i \frac{\hat{\gamma}_i}{|w|} \frac{y_i (w \cdot x_i b)}{|w|} ]这里 (|w| \sqrt{w_1^2 w_2^2 \cdots w_n^2}) 是法向量的模长。除以模长之后缩放 (w) 和 (b) 就不会影响几何间隔的值了。SVM优化的目标用一句话概括就是在所有能把数据正确分开的超平面中找一个让所有样本的最小几何间隔最大的超平面。最小几何间隔最大的那个间隔就是支持向量到超平面的距离。注意SVM关心的是“最小的那个间隔”不是平均间隔。因为最危险、最容易分类错的点恰恰是离超平面最近的那些点它们决定了分类器的容错能力。1.3 把最大化间隔写成优化问题设所有样本的最小几何间隔为 (\gamma)SVM的思路是最大化 (\gamma)。但“最大化一个包含 (|w|) 分母的量”不太方便直接求导所以先做一步等价变形[ \max_{w,b} \gamma ]因为 (\gamma \min_i \frac{y_i(w\cdot x_i b)}{|w|})可以引入一个新的变量 (\hat{\gamma} \min_i y_i(w\cdot x_i b))于是有[ \gamma \frac{\hat{\gamma}}{|w|} ]这里有一个关键技巧因为同时缩放 (w) 和 (b) 不会改变超平面我们可以人为约定函数间隔的最小值为 (\hat{\gamma} 1)。这个约定不会丢失任何超平面因为任何一组 (w, b) 都可以缩放到满足这个条件。这样最大化 (\gamma) 就等价于最大化 (1 / |w|)也就是最小化 (|w|)。为了后面求导方便导数 ( |w|) 在 (w0) 处不可导进一步把目标改为最小化 (\frac{1}{2}|w|^2)。加上约束条件就得到了线性可分SVM的原始问题[ \min_{w,b} \frac{1}{2}|w|^2 ][ \text{s.t.} \quad y_i(w \cdot x_i b) \ge 1, \quad i 1, 2, \dots, n ]这组约束保证每个样本点的函数间隔至少为1也就是几何间隔至少为 (1/|w|)。这是一个带不等式约束的凸二次规划问题拉格朗日乘子法就是用来解这类问题的。2. 拉格朗日乘子法把约束塞进目标函数2.1 回顾等式约束的拉格朗日乘子法先回忆一下大家都学过的等式约束优化。要求 (f(x, y)) 在条件 (g(x, y) 0) 下的极值可以构造拉格朗日函数[ L(x, y, \lambda) f(x, y) - \lambda g(x, y) ]然后让 (L) 对 (x)、(y)、(\lambda) 的偏导数都等于0联立方程求解。这个方法的本质是在约束曲面上目标函数的等高线和约束曲面相切时两者的梯度方向平行所以可以用一个 (\lambda) 把它们的梯度线性组合成零向量。拉格朗日乘子法真正厉害的地方在于它把“带约束的优化问题”转化成了“不带约束的优化问题”——把约束条件通过乘子吸收进目标函数。SVM的不等式约束虽然比等式约束复杂但核心思路一脉相承先构造广义拉格朗日函数再通过KKT条件来处理不等式的边界关系。2.2 从等式约束到不等式约束广义拉格朗日函数与KKT条件对于原始问题[ \min_w f(w) \quad \text{s.t.} \quad g_i(w) \le 0 ]先把它改写成SVM的形式让 (g_i(w) 1 - y_i(w\cdot x_i b) \le 0)。然后构造广义拉格朗日函数[ L(w, b, \alpha) \frac{1}{2}|w|^2 - \sum_{i1}^{n} \alpha_i \left[y_i(w \cdot x_i b) - 1\right] ]注意这里所有乘子 (\alpha_i \ge 0)。很多初学者会问为什么这里是减号而且要求 (\alpha_i) 非负我提供一个直观理解原始问题是“正着找最小值”广义拉格朗日函数把约束当成“惩罚项”塞了进来。当某个样本违反约束时即 (y_i(w\cdot x_i b) - 1 0)为了让拉格朗日函数的值接近原目标我们希望惩罚项对目标有正向贡献而 (- \alpha_i \times \text{负值}) 只有在 (\alpha_i \ge 0) 时才是正向的。所以减号和非负约束缺一不可。接下来需要用到KKT条件。KKT条件是不等式约束优化解的充要条件在满足Slater条件的凸问题中它包含四部分KKT条件数学表达直观含义原始可行性( y_i(w\cdot x_i b) \ge 1 )所有样本都正确分类且间隔不小于1对偶可行性( \alpha_i \ge 0 )拉格朗日乘子非负互补松弛( \alpha_i [y_i(w\cdot x_i b) - 1] 0 )非支持向量的乘子必须为0梯度为零( \nabla_w L 0, \ \nabla_b L 0 )拉格朗日函数取极值的必要条件其中最关键的是互补松弛条件。它告诉我们如果一个样本的函数间隔大于1即它离超平面比较远那么它对应的 (\alpha_i) 只能是0反过来如果 (\alpha_i 0)那么这个样本的函数间隔必须恰好等于1也就是刚好落在间隔边界上。这些“恰好卡在边界上”的样本就是支持向量。注意KKT条件是后面求解 (w) 和 (b) 的钥匙。没有互补松弛我们即使解出了 (\alpha)也不知道哪些样本对超平面有贡献。2.3 为什么非得转成对偶问题很多教程在这一步直接说“下面我们推导对偶问题”但很少解释为什么要这么做。我总结下来有三点第一对偶问题的约束更简单。原始问题的变量是 (w) 和 (b)约束是 (n) 个不等式对偶问题的变量是 (\alpha_1, \dots, \alpha_n)约束只有两个(\alpha_i \ge 0) 和 (\sum \alpha_i y_i 0)。显然后者在数学处理上容易得多。第二对偶问题天然适配核技巧。原始问题中样本以 (w \cdot x_i) 的形式出现而对偶问题中样本以内积 (x_i \cdot x_j) 的形式出现。这个细微差别在扩展到非线性SVM时至关重要——可以用核函数替换内积直接把线性SVM推广成核SVM。第三对偶问题的解 (\alpha) 有稀疏性。由于互补松弛条件绝大多数 (\alpha_i) 都是0只有支持向量对应的乘子非零。这意味着训练完成后只需要保留支持向量模型非常“轻量”。所以“转对偶”不是数学上的炫技而是为了后续求解和扩展的方便。理解了这一点KKT条件和拉格朗日对偶就不再是一堆莫名其妙的公式了。3. 手把手推导从原始问题到对偶问题3.1 构造拉格朗日函数并求偏导现在正式开始推导。线性可分SVM的原始问题是[ \min_{w,b} \frac{1}{2}|w|^2 ][ \text{s.t.} \quad 1 - y_i(w \cdot x_i b) \le 0, \quad i 1, \dots, n ]构造广义拉格朗日函数[ L(w, b, \alpha) \frac{1}{2}|w|^2 - \sum_{i1}^{n} \alpha_i \left[y_i(w \cdot x_i b) - 1\right] ]这里 (\alpha (\alpha_1, \dots, \alpha_n)^T)且每个 (\alpha_i \ge 0)。拉格朗日对偶问题的标准套路分两步先对原始变量这里是 (w) 和 (b)求极小再对偶变量这里是 (\alpha)求极大。第一步固定 (\alpha)让 (L) 对 (w) 和 (b) 求偏导并令其等于0[ \frac{\partial L}{\partial w} w - \sum_{i1}^{n} \alpha_i y_i x_i 0 ][ \frac{\partial L}{\partial b} -\sum_{i1}^{n} \alpha_i y_i 0 ]由第一个式子得到[ w \sum_{i1}^{n} \alpha_i y_i x_i ]这个式子说明最优超平面的法向量 (w) 是所有训练样本的线性组合组合系数是 (\alpha_i y_i)。结合互补松弛条件只有支持向量(\alpha_i 0)才对 (w) 有贡献。由第二个式子得到[ \sum_{i1}^{n} \alpha_i y_i 0 ]这是对偶问题的一个重要线性约束后面会反复用到。3.2 代入消元得到对偶问题的目标函数把求偏导得到的两个结果代回拉格朗日函数消去 (w) 和 (b)。先看第一项 (\frac{1}{2}|w|^2)[ \frac{1}{2}|w|^2 \frac{1}{2}\left(\sum_{i1}^{n} \alpha_i y_i x_i\right) \cdot \left(\sum_{j1}^{n} \alpha_j y_j x_j\right) \frac{1}{2}\sum_{i1}^{n}\sum_{j1}^{n} \alpha_i \alpha_j y_i y_j (x_i \cdot x_j) ]再看求和项 (\sum_{i1}^{n} \alpha_i y_i(w \cdot x_i b))拆成两部分[ \sum_{i1}^{n} \alpha_i y_i (w \cdot x_i) b \sum_{i1}^{n} \alpha_i y_i ]第二部分根据 (\sum \alpha_i y_i 0) 直接消失。第一部分把 (w \sum \alpha_j y_j x_j) 代进去得到[ \sum_{i1}^{n} \sum_{j1}^{n} \alpha_i \alpha_j y_i y_j (x_i \cdot x_j) ]整体来看[ L \frac{1}{2}\sum_{i1}^{n}\sum_{j1}^{n} \alpha_i \alpha_j y_i y_j (x_i \cdot x_j) - \sum_{i1}^{n}\sum_{j1}^{n} \alpha_i \alpha_j y_i y_j (x_i \cdot x_j) \sum_{i1}^{n} \alpha_i ]合并同类项得到[ L \sum_{i1}^{n} \alpha_i - \frac{1}{2}\sum_{i1}^{n}\sum_{j1}^{n} \alpha_i \alpha_j y_i y_j (x_i \cdot x_j) ]所以对偶问题为[ \max_{\alpha} \quad W(\alpha) \sum_{i1}^{n} \alpha_i - \frac{1}{2}\sum_{i1}^{n}\sum_{j1}^{n} \alpha_i \alpha_j y_i y_j (x_i \cdot x_j) ][ \text{s.t.} \quad \alpha_i \ge 0, \quad \sum_{i1}^{n} \alpha_i y_i 0 ]这个 (W(\alpha)) 只含 (\alpha) 和样本内积 ((x_i \cdot x_j))不再含 (w) 和 (b)。这就是为什么说“对偶问题可以通过内积计算”——为核函数铺好了路。3.3 解出 (\alpha) 之后如何恢复 (w) 和 (b)在实际求解中我们通过 SMO序列最小最优化等算法求出最优的 (\alpha^*)然后按下面的步骤恢复超平面参数。第一步求 (w^*)。直接用之前的偏导结果[ w^* \sum_{i1}^{n} \alpha_i^* y_i x_i ]第二步求 (b^)。这一步要用到KKT互补松弛条件。对任意一个支持向量 (x_k)它满足 (\alpha_k 0)所以 (y_k(w^\cdot x_k b^*) 1)。两边乘 (y_k)因为 (y_k^2 1)得到[ b^* y_k - w^* \cdot x_k ]有的教材会写成 (b^* y_k - \sum_{i1}^{n} \alpha_i^* y_i (x_i \cdot x_k))其实是一个意思。实操中一个细节为了数值稳定性一般不用单个支持向量算 (b)而是对所有支持向量或 (\alpha_i) 大于某个阈值的样本分别计算 (b) 后取平均。因为浮点运算有误差用平均值更稳。第三步得到决策函数[ f(x) \text{sign}\left(w^* \cdot x b^\right) \text{sign}\left(\sum_{i1}^{n} \alpha_i^y_i (x_i \cdot x) b^*\right) ]这个形式再次只出现内积 ((x_i \cdot x))所以测试一个新样本时也只需要计算它和支持向量的内积与原始问题中的“先显式计算 (w) 再做内积”本质上等价。3.4 支持向量的本质与间隔宽度回到KKT互补松弛条件[ \alpha_i [y_i(w \cdot x_i b) - 1] 0 ]它把样本分成两类若 (\alpha_i 0)该样本不会出现在 (w^*) 的求和式里对决策边界完全没影响。这类样本是“边缘之外”的样本删掉它们结果不变。若 (\alpha_i 0)则必有 (y_i(w \cdot x_i b) 1)这个样本恰好落在间隔边界上。它才是真正“撑住”超平面的点也就是支持向量。间隔宽度 ( \frac{2}{|w^|}) 是由支持向量决定的。可以理解为一堆物体放在桌子上真正决定桌子平衡的是接触桌面的那几个支点而不是所有物体。支点就是支持向量桌子倾斜的方向就是法向量 (w^)。4. 完整例题手算三个数据点的SVM从零推导4.1 题目与数据准备理论推完了我们来手算一个最小规模的例子保证每个数字你都能自己验算。训练数据有三个二维样本样本编号特征 ( (x_1, x_2) )标签 (y)1(3, 3)12(4, 3)13(1, 1)-1目标是求出线性可分SVM的最优超平面 (w \cdot x b 0)、间隔宽度并用它判断新增样本的类别。先算所有样本之间的内积[ x_1 \cdot x_1 3 \times 3 3 \times 3 18 ][ x_2 \cdot x_2 4 \times 4 3 \times 3 25 ][ x_3 \cdot x_3 1 \times 1 1 \times 1 2 ][ x_1 \cdot x_2 3 \times 4 3 \times 3 21 ][ x_1 \cdot x_3 3 \times 1 3 \times 1 6 ][ x_2 \cdot x_3 4 \times 1 3 \times 1 7 ]这些内积会直接进入对偶问题的目标函数所以先列出来后面就不会乱了。4.2 代入对偶目标函数并求解对偶问题的目标函数是[ W(\alpha) \sum_{i1}^{3} \alpha_i - \frac{1}{2}\sum_{i1}^{3}\sum_{j1}^{3} \alpha_i \alpha_j y_i y_j (x_i \cdot x_j) ]把三个样本的标签和内积代进去展开第二项[ \sum_{i}\sum_{j} \alpha_i \alpha_j y_i y_j (x_i \cdot x_j) 18\alpha_1^2 25\alpha_2^2 2\alpha_3^22 \cdot 21 \alpha_1\alpha_2 y_1y_22 \cdot 6 \alpha_1\alpha_3 y_1y_32 \cdot 7 \alpha_2\alpha_3 y_2y_3 ]因为 (y_1y_2 1)(y_1y_3 -1)(y_2y_3 -1)所以[ 18\alpha_1^2 25\alpha_2^2 2\alpha_3^2 42\alpha_1\alpha_2 - 12\alpha_1\alpha_3 - 14\alpha_2\alpha_3 ]对偶约束为[ \alpha_1 \alpha_2 - \alpha_3 0 \quad \Rightarrow \quad \alpha_3 \alpha_1 \alpha_2 ]以及 (\alpha_1, \alpha_2, \alpha_3 \ge 0)。把 (\alpha_3 \alpha_1 \alpha_2) 代入目标函数逐步化简先展开平方项[ 18\alpha_1^2 25\alpha_2^2 2(\alpha_1\alpha_2)^2 18\alpha_1^2 25\alpha_2^2 2\alpha_1^2 4\alpha_1\alpha_2 2\alpha_2^2 20\alpha_1^2 4\alpha_1\alpha_2 27\alpha_2^2 ]再展开交叉项[ 42\alpha_1\alpha_2 - 12\alpha_1(\alpha_1\alpha_2) - 14\alpha_2(\alpha_1\alpha_2) 42\alpha_1\alpha_2 - 12\alpha_1^2 - 12\alpha_1\alpha_2 - 14\alpha_1\alpha_2 - 14\alpha_2^2 -12\alpha_1^2 16\alpha_1\alpha_2 - 14\alpha_2^2 ]合并所有项[ 20\alpha_1^2 4\alpha_1\alpha_2 27\alpha_2^2 - 12\alpha_1^2 16\alpha_1\alpha_2 - 14\alpha_2^2 8\alpha_1^2 20\alpha_1\alpha_2 13\alpha_2^2 ]所以对偶问题变成[ W(\alpha_1, \alpha_2) 2\alpha_1 2\alpha_2 - \frac{1}{2}(8\alpha_1^2 20\alpha_1\alpha_2 13\alpha_2^2) ][ 2\alpha_1 2\alpha_2 - 4\alpha_1^2 - 10\alpha_1\alpha_2 - 6.5\alpha_2^2 ]现在对 (\alpha_1) 和 (\alpha_2) 求偏导找无约束极值[ \frac{\partial W}{\partial \alpha_1} 2 - 8\alpha_1 - 10\alpha_2 0 ][ \frac{\partial W}{\partial \alpha_2} 2 - 10\alpha_1 - 13\alpha_2 0 ]整理成方程组[ 4\alpha_1 5\alpha_2 1 ][ 10\alpha_1 13\alpha_2 2 ]由第一个方程得 (\alpha_1 \frac{1 - 5\alpha_2}{4})代入第二个方程[ 10 \cdot \frac{1 - 5\alpha_2}{4} 13\alpha_2 2 ][ \frac{10 - 50\alpha_2}{4} 13\alpha_2 2 ][ 2.5 - 12.5\alpha_2 13\alpha_2 2 ][ 0.5\alpha_2 -0.5 ][ \alpha_2 -1 ](\alpha_2) 是负的不满足约束 (\alpha_2 \ge 0)。这说明无约束极值点不在可行域内真正的极大值出现在可行域边界上。边界有两种情况。第一种令 (\alpha_2 0)[ W 2\alpha_1 - 4\alpha_1^2 ][ \frac{dW}{d\alpha_1} 2 - 8\alpha_1 0 \quad \Rightarrow \quad \alpha_1 0.25 ]此时 (\alpha_3 \alpha_1 0.25)都是非负的可行。目标值为[ W 2 \times 0.25 - 4 \times 0.25^2 0.5 - 0.25 0.25 ]第二种令 (\alpha_1 0)[ W 2\alpha_2 - 6.5\alpha_2^2 ][ \frac{dW}{d\alpha_2} 2 - 13\alpha_2 0 \quad \Rightarrow \quad \alpha_2 \frac{2}{13} \approx 0.1538 ]目标值为[ W 2 \times \frac{2}{13} - 6.5 \times \left(\frac{2}{13}\right)^2 \frac{4}{13} - \frac{26}{169} \frac{26}{169} \approx 0.1538 ]比较两个边界候选值第一种情况的目标值更大。而且从二次函数的开口方向可以确认这是最大值。所以最优解为[ \alpha_1^* 0.25, \quad \alpha_2^* 0, \quad \alpha_3^* 0.25 ]4.3 恢复超平面参数并验证有了 (\alpha^)用之前推导的公式恢复 (w^)[ w^* \sum_{i1}^{3} \alpha_i^* y_i x_i 0.25 \times (1) \times (3, 3) 0 \times (1) \times (4, 3) 0.25 \times (-1) \times (1, 1) ][ (0.75, 0.75) - (0.25, 0.25) (0.5, 0.5) ]所以最优法向量是 (w^* (0.5, 0.5))。接下来求 (b^*)。取支持向量 (x_1 (3,3))对应的 (\alpha_1 0.25 0)[ b^* y_1 - w^* \cdot x_1 1 - (0.5 \times 3 0.5 \times 3) 1 - 3 -2 ]再取另一个支持向量 (x_3 (1,1)) 验证[ b^* y_3 - w^* \cdot x_3 -1 - (0.5 \times 1 0.5 \times 1) -1 - 1 -2 ]两次结果一致说明 (b^* -2) 是可靠的。最优超平面是[ 0.5x_1 0.5x_2 - 2 0 ]化简得[ x_1 x_2 - 4 0 ]这个结果很漂亮两个支持向量 ((3,3)) 和 ((1,1)) 的中点 ((2,2)) 正好落在超平面上因为 (2 2 - 4 0)。两个支持向量到超平面的距离都是 (1/|w^*| 1/\sqrt{0.5} \sqrt{2} \approx 1.414)间隔宽度是 (2\sqrt{2})。最后验证非支持向量 (x_2 (4,3))[ w^* \cdot x_2 b^* 0.5 \times 4 0.5 \times 3 - 2 2 1.5 - 2 1.5 ]函数间隔为1.5大于1分类正确且离超平面比支持向量更远。这和KKT条件完全吻合因为它不在间隔边界上所以 (\alpha_2^* 0)。决策函数为[ f(x) \text{sign}(0.5 x_1 0.5 x_2 - 2) ]拿个新点测试一下比如 ((3, 1))[ 0.5 \times 3 0.5 \times 1 - 2 1.5 0.5 - 2 0 ]这个点恰好在超平面上属于边界情况。比如 ((4, 1))[ 0.5 \times 4 0.5 \times 1 - 2 2 0.5 - 2 0.5 0 ]预测为正类直觉上也合理因为 ((4, 3)) 和 ((3, 3)) 都是正类这个方向靠近它们。5. 推导与手算中的常见问题5.1 为什么有些 (\alpha) 会解出来是 0在刚才的例题里(\alpha_2 0)意味着样本 (x_2 (4, 3)) 根本不是支持向量。这恰恰印证了互补松弛条件只有落在间隔边界上的点才需要“用力”撑住超平面离超平面远的点不管它离得有多远对超平面位置不产生任何影响。这个特性在真实场景中很有价值。训练完成后大量 (\alpha_i) 是0模型只需要保存少量支持向量。这既降低了存储开销也让预测阶段的计算只与支持向量内积而不是与全部训练数据内积。5.2 解出来的 (\alpha) 为负怎么办如果直接对目标函数求偏导解出的 (\alpha) 为负说明无约束极值点在可行域之外这时候不能直接用这个结果。正确做法是检查边界比如令某个变量为0或者利用等式约束消元然后比较所有边界候选值。我见过不少初学者在这一步硬着头皮把负 (\alpha) 代进 (w) 的公式里结果算出一个不合理的超平面然后怀疑公式推错了。其实问题出在求解思路对偶问题带不等式约束 (\alpha_i \ge 0)必须用约束优化方法或者老老实实分边界讨论。5.3 怎么检查自己求出的参数对不对一个简单有效的检查方法是看KKT条件尤其是互补松弛。每求出一组 (w) 和 (b)把样本代进去检查两类条件对所有样本是否都有 (y_i(w \cdot x_i b) \ge 1)这是原始可行性。对每个 (\alpha_i 0) 的样本是否满足 (y_i(w \cdot x_i b) 1)这是互补松弛。如果这两个条件满足基本可以确定结果是对的。我在手算例题时专门用 (x_2) 验证了第一条用两个支持向量验证了第二条两个方向都对齐这才放心。5.4 线性可分SVM的适用边界与扩展方向线性可分SVM要求数据完全线性可分这在很多真实场景下太苛刻。但把线性可分SVM的推导彻底搞清楚是理解后续一切扩展的基石。往后的路径一般是软间隔SVM允许少量样本违反间隔约束引入松弛变量 (\xi_i) 和惩罚参数 (C)能处理线性不可分程度较低的数据。核函数把对偶问题中的内积 (x_i \cdot x_j) 替换成核函数 (K(x_i, x_j))就能隐式地把数据映射到高维空间在低维线性不可分的数据上也能分离。SMO算法对偶问题变量多、约束简单SMO每次优化两个变量把大规模二次规划问题拆成多个小问题是实践中求解SVM的标准方法。这些内容后面可以逐个展开写但前提都是把本文这套“原始问题-拉格朗日函数-对偶问题-KKT条件-手算验证”的逻辑走通。我个人在讲解和面试里反复推过很多次这个推导最大的体会是不要死记公式。把“最大化间隔”这个几何目标先焊在脑子里然后所有数学工具——拉格朗日乘子法、KKT条件、对偶问题——都是围绕这个目标层层展开的。每推一步就问自己“这一步在干什么”推导就会变得非常自然。另一个小技巧是像本文这样准备一个极小规模的数据集拿笔从头算到尾很多抽象符号一下子就落到实地上。希望这篇推导能帮你把线性可分SVM这条链路彻底走通。
返回列表