本节所述的内容为与支持向量机(SVM)相关的数学基础知识。总的来说,我先介绍了凸优化问题求最优解的思路,介绍了拉格朗日乘子法和KKT条件,随后根据KKT条件给出了求解有不等式约束的凸优化问题的一种解法,即拉格朗日对偶。
我的学习体会是,如果不理解上面说的这些数学基础知识,学习SVM会寸步难行。所以我把基础知识部分当做学习SVM的第一站。当然,如果你已经了解这些,也可以直接跳到我的下一篇博客 SVM解释:三、线性可分的情况 去,或者你打算先看问题,再求数学解答,也可以先看后面的,不明白了再回过头看数学基础。
1. 凸优化问题
通常,我们要求解的函数优化问题,大致可分为以下3类:
- 无约束条件的优化问题: m i n f ( X ) min~~f(X) min f(X);
- 只有等式约束的优化问题:
m i n f ( X ) min~~f(X) min f(X)
s . t . h j ( X ) = 0 , j ∈ { 1 , 2 , … , n } ~~~~~~s.t. h_j(X) = 0, j \in \{1, 2, \dots, n\} s.t.hj(X)=0,j∈{ 1,2,…,n}; - 含不等式约束的优化问题:
m i n f ( X ) min~~f(X) min f(X)
s . t . h j ( X ) = 0 , j ∈ { 1 , 2 , … , n } ~~~~~~s.t. h_j(X) = 0, j \in \{1, 2, \dots, n\} s.t.hj(X)=0,j∈{ 1,2,…,n}
g i ( X ) ≤ 0 , i ∈ { 1 , 2 , … , m } ~~~~~~~~~~~~g_i(X)\leq 0, i \in \{1, 2, \dots, m\} gi(X)≤0,i∈{ 1,2,…,m}
其中大写的 X X X表示所有自变量的集合, h j ( X ) h_j(X) hj(X)表示等式约束条件, g i ( X ) g_i(X) gi(X)表示不等式约束条件。我这里用 m i n f ( X ) min ~f(X) min f(X)表示求取最优值的目标函数,其实不一定是求取最小值,求最大值也是可以的,我只是用这种方式表示而已。
为了讲述方便,本节中,默认所要解决的最优问题都是凸优化问题(即求取凸函数的最优解)。凸函数的解释如下:凸函数指的是那些开口朝一个方向(向上或向下)的函数。我们可以通过令其导数等于0的方法求取该函数的全局最优解(极值)。显而易见,对于非凸函数来讲,导数为0这种方法只是可以求得局部最优解(极值),而不一定是全局最优解。
上面只是我给出的一个方便理解的说明,关于凸函数的准确定义还请参考专业的数学教材。需要强调的是,后面要说的拉格朗日乘子法一定是适用于凸优化问题的,而不一定适用于其他非凸问题。
回到最上面的3类优化问题,解决方法是明确的,参考如下(注意,我默认都是针对凸优化问题):
- 对于无约束条件的优化问题,直接对其各个自变量求导,令导数为0,得全局最优解。这是我们高中就会的东西,不多说了;
- 对于只有等式约束的优化问题,利用拉格朗日乘子法,得全局最优解。具体步骤下面详细说;
- 对于含不等式约束的优化问题,利用KKT条件,得全局最优解。具体步骤下面详细说;
后两类问题(尤其是对含不等式约束的优化问题),是本节(也是SVM)所重点关注的问题。我们先从拉格朗日乘子法说起。
2. 拉格朗日乘子法
2.1 基本思路
举个例子来描述拉格朗日乘子法的基本思路:
注1:本文中的例子取自博客:解密SVM系列(一):关于拉格朗日乘子法和KKT条件,这篇博客的博主讲解这个问题非常细致,推荐大家阅读。
m i n f ( X ) = 2 x 1 2 + 3 x 2 2 + 7 x 3 2 s . t . 2 x 1 + x 2 = 1 2 x 2 + 3 x 3 = 2 \begin{aligned} min~f(X) &= 2{x_1}^2 + 3{x_2}^2 + 7{x_3}^2\\ &s.t. 2x_1 + x_2 = 1\\ &~~~~~~2x_2 + 3x_3 = 2 \end{aligned} min f(X)=2x12+3x22+7x32s.t.2x1+x2=1 2x2+3x3=2
这个例子正是我在上面说的3类情况的第二种,只有等式约束条件的优化问题。求解思路如下:
首先想到直接对3个自变量分别求偏导,令其偏导数都为0,则此时 x 1 , x 2 , x 3 x_1, x_2, x_3 x1,x2,x3都是0,看函数也是这样,当3个自变量都是0时,函数取得最小值0。但是这显然是不符合约束条件的。怎么把约束条件考虑进去呢?用拉格朗日乘子法,把改写后的约束条件乘以一个系数,然后以加的形式带入目标函数,该函数我称之为拉格朗日函数。先看看改写后的约束条件:
s . t . 2 x 1 + x 2 − 1 = 0 2 x 2 + 3 x 3 − 2 = 0 \begin{aligned} s.t. ~&2x_1 + x_2 - 1 = 0\\ &2x_2 + 3x_3 - 2 = 0 \end{aligned} s.t. 2x1+x2−1=02x2+3x3−2=0
左右移项,实际上没发生任何变化。其后,将改写后的约束条件带入目标函数,构造拉格朗日函数:
L ( X , β ) = 2 x 1 2 + 3 x 2 2 + 7 x 3 2 + β 1 ( 2 x 1 + x 2 − 1 ) + β 2 ( 2 x 2 + 3 x 3 − 2 ) L(X, \beta) = 2{x_1}^2 + 3{x_2}^2 + 7{x_3}^2 + \beta_1(2x_1 + x_2 - 1) + \beta_2(2x_2 + 3x_3 - 2) L(X,β)=2x12+3x22+7x32+β1(2x1+x2−1)+β2(2x2+3x3−2)
可见,当求得的最优解满足约束条件时, L ( X , β ) L(X, \beta) L(X,β)与原始的目标函数并没有差别(后面都是0)。这样,我们再对这个拉格朗日函数求关于各个自变量的偏导,并令这些偏导数为0。
{ ∂ f ( X ) ∂ x 1 = 4 x 1 + 2 β 1 = 0 ⇒ x 1 = − 1 2 β 1 ∂ f ( X ) ∂ x 2 = 6 x 2 + β 1 + 2 β 2 = 0 ⇒ x 2 = − 1 6 β 1 − 1 3 β 2 ∂ f ( X ) ∂ x 3 = 14 x 3 + 3 β 2 = 0 ⇒ x 3 = − 3 14 β 2 \left\{ \begin{aligned} &\frac{\partial f(X)}{\partial x_1} = 4x_1 + 2\beta_1 = 0 \Rightarrow x_1 = -\frac{1}{2}\beta_1\\ &\frac{\partial f(X)}{\partial x_2} = 6x_2 + \beta_1 + 2\beta_2 = 0 \Rightarrow x_2 = -\frac{1}{6}\beta_1 - \frac{1}{3}\beta_2\\ &\frac{\partial f(X)}{\partial x_3} = 14x_3 + 3\beta_2 = 0 \Rightarrow x_3 = -\frac{3}{14}\beta_2 \end{aligned} \right. ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧