# 附录 C、SVM 对偶问题
> 译者:[@rickllyxu](https://github.com/rickllyxu)
为了理解对偶性,你首先得理解拉格朗日乘子法。它基本思想是将一个有约束优化问题转化为一个无约束优化问题,其方法是将约束条件移动到目标函数中去。让我们看一个简单的例子,例如要找到合适的 ![x](https://img.kancloud.cn/77/90/7790dd0efb4a03a4c876741804d9b559_10x8.gif) 和 ![y](https://img.kancloud.cn/6c/70/6c704047d3148fd7a8b563aaf79dd7f4_9x12.gif) 使得函数 ![f(x, y) = x^2 + 2y](https://img.kancloud.cn/3c/7f/3c7f5c9ae8ae08f50d6ff64034354eb4_134x20.gif) 最小化,且其约束条件是一个等式约束:![3x + 2y + 1 = 0](https://img.kancloud.cn/e2/03/e203de64e4e551e2bbcc2e5717bb9807_124x16.gif)。使用拉格朗日乘子法,我们首先定义一个函数,称为**拉格朗日函数**:![g(x, y, \alpha) = f(x, y) - \alpha(3x + 2y + 1)](https://img.kancloud.cn/20/34/2034d84df0a3f7ba4600ab569934b81f_284x18.gif)。每个约束条件(在这个例子中只有一个)与新的变量(称为拉格朗日乘数)相乘,作为原目标函数的减数。
Joseph-Louis Lagrange 大牛证明了如果 ![(\bar{x}, \bar{y})](https://img.kancloud.cn/e7/a6/e7a66985e34ae04897a42b9695d21cde_40x18.gif) 是原约束优化问题的解,那么一定存在一个 ![\bar{\alpha}](https://img.kancloud.cn/ef/83/ef83e87342ad439a21593a9b1570c119_11x11.gif),使得 ![(\bar{x}, \bar{y}, \bar{\alpha})](https://img.kancloud.cn/11/5d/115d664fbd0f61baf26eb6cd46a4afb9_59x18.gif) 是拉格朗日函数的驻点(驻点指的是,在该点处,该函数所有的偏导数均为 0)。换句话说,我们可以计算拉格朗日函数 ![g(x, y, \alpha) ](https://img.kancloud.cn/15/00/1500afe2a33857d85aaecdcab3d32c2e_69x18.gif) 关于 ![x, y](https://img.kancloud.cn/61/41/6141ff672360e1d599330a2b6f77b1a5_27x12.gif) 以及 ![\alpha](https://img.kancloud.cn/38/9a/389a9983ea24ad0b3af0559c2aca381b_11x8.gif) 的偏导数;然后我们可以找到那些偏导数均为 0 的驻点;最后原约束优化问题的解(如果存在)一定在这些驻点里面。
在上述例子里,偏导数为
![\begin{align}\frac{\partial}{\partial x}g(x, y, \alpha) = 2x - 3\alpha \\ \frac{\partial}{\partial y}g(x, y, \alpha) = 2 - 2\alpha \\ \frac{\partial}{\partial \alpha}g(x, y, \alpha) = -3x - 2y - 1 \end{align}](https://img.kancloud.cn/6b/49/6b49556b3f88ede5e8fc2b5ab1f09534_247x200.gif)
当这些偏导数均为 0 时,即 ![2x − 3\alpha = 2 − 2\alpha = − 3x − 2y − 1 = 0](https://img.kancloud.cn/44/47/4447c73a0b26f7996a676038f330c2ff_197x16.gif),即可得 ![x = \frac{3}{2}, y=-\frac{11}{4}, \alpha=1](https://img.kancloud.cn/51/2a/512a3499c6ac1c00b6a91a468d31f0ca_176x38.gif)。这是唯一一个驻点,那它一定是原约束优化问题的解。然而,上述方法仅应用于等式约束,幸运的是,在某些正则性条件下,这种方法也可被一般化应用于不等式约束条件(例如不等式约束,![3x + 2y + 1 \geq 0](https://img.kancloud.cn/f3/da/f3da39cf74608e7f3984014c9ed56ada_124x16.gif))。如下公式 C-1 ,给了 SVM 硬间隔问题时的一般化拉格朗日函数。在该公式中,![\alpha^{(i)}](https://img.kancloud.cn/5b/d7/5bd767b3392f5b4376cf0fc17575fe0f_25x18.gif) 是 KKT 乘子,它必须大于或等于 0。
> 译者注
>
> ![\alpha^{(i)}](https://img.kancloud.cn/5b/d7/5bd767b3392f5b4376cf0fc17575fe0f_25x18.gif) 是 ![\geq0](https://img.kancloud.cn/a5/52/a5521492a6f44bdcba54cbf06f5689cd_27x15.gif) 抑或 ![\leq0](https://img.kancloud.cn/91/f8/91f8d5839548683a52358e93c5688c4c_27x15.gif),取决于拉格朗日函数的写法,以及原目标函数函数最大化抑或最小化。
![公式C-1](https://img.kancloud.cn/18/2d/182d84113191b29989779a0936a0af9b_729x179.png)
就像拉格朗日乘子法,我们可以计算上述式子的偏导数、定位驻点。如果该原问题存在一个解,那它一定在驻点 ![(\bar{w}, \bar{b}, \bar{\alpha})](https://img.kancloud.cn/de/5f/de5f70670f77e1721c1b3dc717b9f796_61x19.gif) 之中,且遵循 KKT 条件:
- 遵循原问题的约束:![t^{(i)}((\bar{w})^T x^{(i)} +\bar{b}) \geq 1](https://img.kancloud.cn/7e/f7/7ef7ec9a895f9ba5e3b32eea09462b1c_160x22.gif), 对于 ![i = 1, 2, ..., m](https://img.kancloud.cn/8c/8b/8c8b5008cceea1cba7a38c480dd24e2c_103x17.gif)
- 遵循现问题里的约束,即 ![\bar{\alpha}^{(i)} \geq 0](https://img.kancloud.cn/c3/66/c366b6959a844f562171b124bbc5c704_60x21.gif)
- ![\bar{\alpha}^{(i)} = 0](https://img.kancloud.cn/75/77/7577339ce347fc005e853a2b8d92f4fc_60x18.gif) 或者第`i`个约束条件是积极约束,意味着该等式成立:![t^{(i)}((\bar{w})^T x^{(i)} +\bar{b}) = 1](https://img.kancloud.cn/8a/e7/8ae76eb7cdc0e8a5b3ace1ead9951194_160x22.gif)。这个条件叫做 互补松弛条件。它暗示了 ![\bar{\alpha}^{(i)} = 0](https://img.kancloud.cn/75/77/7577339ce347fc005e853a2b8d92f4fc_60x18.gif) 和第`i`个样本位于 SVM 间隔的边界上(该样本是支持向量)。
注意 KKT 条件是确定驻点是否为原问题解的必要条件。在某些条件下,KKT 条件也是充分条件。幸运的是,SVM 优化问题碰巧满足这些条件,所以任何满足 KKT 条件的驻点保证是原问题的解。
我们可以计算上述一般化拉格朗日函数关于`w`和`b`的偏导数,如公式 C-2。
![公式C-2](https://img.kancloud.cn/68/e3/68e3cf5b51f5b9218f6faef97b93caea_687x216.png)
令上述偏导数为 0,可得到公式 C-3。
![公式C-3](https://img.kancloud.cn/2a/80/2a80e213c811baf8e687a62a8fe6bb3d_535x212.png)
如果我们把上述式子代入到一般化拉格朗日函数(公式 C-1)中,某些项会消失,从而得到公式 C-4,并称之为原问题的对偶形式。
![公式C-4](https://img.kancloud.cn/24/d0/24d0a0a6c0670320974cecf884eae027_657x180.png)
现在该对偶形式的目标是找到合适的向量 ![\bar{\alpha}](https://img.kancloud.cn/ef/83/ef83e87342ad439a21593a9b1570c119_11x11.gif),使得该函数 ![L(w, b, \alpha)](https://img.kancloud.cn/8d/46/8d46b0736e93a8f84fcdbaaa4d946e4e_74x18.gif) 最小化,且 ![\bar{\alpha}^{(i)} \geq 0](https://img.kancloud.cn/c3/66/c366b6959a844f562171b124bbc5c704_60x21.gif)。现在这个有约束优化问题正是我们苦苦追寻的对偶问题。
一旦你找到了最优的 ![\bar{\alpha}](https://img.kancloud.cn/ef/83/ef83e87342ad439a21593a9b1570c119_11x11.gif),你可以利用公式 C-3 第一行计算 ![\bar{w}](https://img.kancloud.cn/78/6c/786c33b10eb2b55b840a288147e46d8f_13x11.gif)。为了计算 ![\bar{b}](https://img.kancloud.cn/41/06/41060a4f264f10e231efb82cc471550d_8x15.gif),你可以使用支持向量的已知条件 ![t^{(i)}((\bar{w})^T x^{(i)} +\bar{b}) = 1](https://img.kancloud.cn/8a/e7/8ae76eb7cdc0e8a5b3ace1ead9951194_160x22.gif),当第 k 个样本是支持向量时(即它对应的 ![\alpha_k > 0](https://img.kancloud.cn/3e/66/3e66f0b3bd44b1b5b04aff8159b65f99_52x15.gif)),此时使用它计算 ![\bar{b} =1-t^{(k)}((\bar{w})^T . x^{(k)}) ](https://img.kancloud.cn/28/cf/28cf37b0cccf5ddba7e61e1c99230563_171x22.gif)。对了,我们更喜欢利用所有支持向量计算一个平均值,以获得更稳定和更准确的结果,如公式 C-5。
![公式C-5](https://img.kancloud.cn/72/cc/72ccd7195dd427b3b2d58e71581b249c_629x171.png)