从感知机到 SVM,再到深度学习(二)

    在第一篇中已经得到了最优间隔分类器的目标函数:
KaTeX parse error: No such environment: align* at position 7: \begin{̲a̲l̲i̲g̲n̲*̲}̲ max_{\gamma,w,…
    接下来的任务就是要求解这个目标函数了。为了求解这个,很多优化知识是避不开的,所以先跑跑题,写一下相关的数学知识吧~

    首先从无约束的优化问题讲起,一般就是要使一个表达式取到最小值:
m i n f ( x ) min \quad f(x)
    如果问题是 m a x f ( x ) max \quad f(x) 也可以通过取反转化为求最小值 m i n f ( x ) min \quad-f(x) ,这个是一个习惯。对于这类问题最简单的就是直接对它的每一个变量求导,然后让导数为零就可以了。

二维线性可分示例图
极值点示意图
    所以在极值点处一定满足 $\frac {df(x)}{dx}=0$(只是必要条件,比如 $f(x)=x^3$ 在 $x=0$ 处就不是极值点),然后对它进行求解,再代入验证是否真的是极值点就行了。对于有些问题可以直接通过这种方法求出解析解(如最小二乘法)。     但是也有很多问题解不出来或者很难解,所以就需要梯度下降法、牛顿法、坐标下降法之类的数值迭代算法了(感知机 、logistic 回归中用到)。     对于这些迭代算法就像下面这张图一样,我们希望找到其中的最小值。一个比较直观的想法是先找一个起点,然后不断向最低点靠近。就先把一个小球放到一个碗里一样。
迭代算法
迭代算法
    一开始要找一个起始点,然后确定走的方向和距离,最后还要知道什么时候停止。这三步中最难的应该是确定走的方向。走的慢点还可以接受,要是方向错了就找不到最小值了~。所以走的距离可以简单的设为一个比较小的值。起始点可以随机选一个 $(x_0,y_0)$。关键是方向,可以选择 $(x_0,y_0)$ 处的梯度的反方向,这是函数在这个点下降最快的方向(原因可以看[知乎](https://www.zhihu.com/question/36301367)中忆臻的回答)。它是一个向量,然后它的大小就是走的距离,为了防止太大而走过头,导致不断在最小值附近震荡,需要乘上一个比较小的值(称为学习率),最终的停止条件就是梯度的大小很接近于 0(在极值点处的梯度大小就是 0)就行了。这种方法依靠梯度确定下降方向的方法叫做梯度下降法。 对 $f(x)$ 求极小值的流程就是: 1. 随机选定 $x_0$ 2. 得到函数在 $x_0$ 的梯度,然后从 $x_0$ 向前走一步。计算式是:$x_0^{new}=x_0^{old} - \alpha\nabla f(x)$ 3. 重复第 2 步,直到梯度接近于 0(小于一个事先设定的很小的数),或者到达指定的迭代上限。
梯度下降法
梯度下降法
    除了这种方法之外,其中第 2 步还可以这样做,固定 $x$, 把它作为常数。就变成只有一个变量的优化问题了,直接求导为 0 就可以得到最优点,向前走到 $(x_0, y_1)$ 处,然后固定 $y_1$, 对 $x$ 进行相同的操作。这种每次只优化一个变量的方法叫做坐标下降法。
坐标下降法
坐标下降法
    然后就是进一步的,我们可能要在满足一定约束条件的情况下最小化目标函数,比如有一个等式约束: $$\begin{align*} min \quad f(x)\\ & s.t. \quad h(x) = 0 \end{align*}$$     解决这个的时候问题不能先用上面的方法求出 $f(x)$ 的极值点,然后留下满足方程 $h(x)=0$ 的。因为这个问题的解可能根本不是 $min \quad f(x)$ 的解,它们是没有关系的。那么还是要从问题本身去找线索:
带约束的极值
带约束的极值
    如图,其中的圆圈是指目标函数 $f(x,y)$ 投影在平面上的等值线,表示在同一个圆圈上,黑线是约束条件 $h(x)=0$ 的函数图像。所以等值线与函数图像重合的点其实就是所有满足约束的点。那么极值点只有可能在等值线与函数图像相切的地方取到,因为如果在相交的地方取到,那么沿着 $h(x)$ 的图像往前走或者往后走,一定还有其它的等值线与它相交,也就是 $f(x,y)$ 的值还能变大和变小,所以交点不是极值点,只有相切的时候才有可能是极值点(不可能同时变大和变小了)。在相切的地方 $h(x)$ 的梯度和 $f(x,y)$ 的梯度应该是在同一条直线上的。(这一点可以这么想,在切点处两个函数的梯度都与切平面垂直,所以在一条直线上)     所以满足条件的极值点一定满足:$\nabla f(x,y)=\lambda \nabla h(x,y)$ (其中 $\lambda \neq 0$),然后和原来的等式方程 $h(x,y)=0$ 联立,然后只要解出这个方程组,就可以得到问题的解析解了。当然也存在解不出来的情况,就需要用罚函数法之类的方法求数值解了。     为了方便和好记,就把原来的优化问题写成 $f(x,y) + \lambda h(x,y)$ 的形式,然后分别对 $\lambda,x,y$ 求偏导,并且令偏导为 $0$ 就行了,和之前得到的方程组是一样的。这种方法叫拉格朗日乘数法。     如果有多个等式约束怎么办呢,如下图:
多个约束的极值
多个约束的极值
    这里的平面和球面分别代表了两个约束 $h_1(x)$ 和 $h_2(x)$,那么这个问题的可行域就是它们相交的那个圆。这里蓝色箭头表示平面的梯度,黑色箭头表示球面的梯度,那么相交的圆的梯度就是它们的线性组合(只是直观上的~),所以在极值点的地方目标函数的梯度和约束的梯度的线性组合在一条直线上。所以就满足: $$\nabla f(x) = \lambda \sum_{i=1}^{2}\mu_{i}\nabla h_i(x)=\sum_{i=1}^{2}\lambda_{i}\nabla h_i(x)\\ h_1(x)=0\\ h_2(x)=0$$     大于2个约束的情况也一样。为了好记,将原来的约束的问题写成 $L(x,\lambda)=f(x)+\sum_{i-1}^{n}\lambda_{i}\nabla h_{i}(x)$的形式,然后对 $x$、$\lambda$ 求偏导,然后让它们为 0。结果像上面一样直接列方程组是一样的。这个可以看做是一种简记,或者是对偶问题,这个函数叫做拉格朗日函数。     再进一步,如果问题中既有等式约束,又有不等式约束怎么办呢?对于: $$\begin{align*} min \quad f(x)\\ & s.t. \quad h(x) = 0\\ &\quad \quad \quad g(x) \leq 0 \end{align*}$$     当然也同样约定不等式是 $\leq$,如果是 $\geq$ 只要取反就行了。对于这个问题先不看等式约束,对于不等式约束和目标函数的图:
不等式约束
不等式约束
    阴影部分就是可行域,也就是说可行域从原来的一条线变成了一块区域。那么能取到极值点的地方可能有两种情况: 1. 还是在 $h(x)$ 和 等值线相切的地方 2. $f(x)$ 的极值点本身就在可行域里面。     因为如果不是相切,那么同样的,对任意一个在可行域中的点,如果在它附近往里走或者往外走,$f(x)$ 一般都会变大或者变小,所以绝大部分点都不会是极值点。除非这个点刚好在交界处,且和等值线相切;或者这个点在可行域内部,但是本身就是 $f(x)$ 的极值点。如下图(维基百科上的图~):
不等式约束下的极值
不等式约束下的极值
    对于第一种情况,不等式约束就变成等式约束了,对$f(x) + \lambda h(x) + \mu g(x)$ 用拉格朗日乘子法: $$\nabla f(x)+\lambda \nabla h(x)+\mu \nabla g(x) = 0\\ h(x)=0\\ g(x)=0\\ \lambda \neq 0\\ \mu \geq 0$$     这里需要解释一下,为什么不是 $\mu \neq0$ 而是 $\mu \geq 0$。后面的约束比前面的更强。看“不等式约束”那个图,我们已经知道了问题中的可行域是在 $g(x)\leq0$ 一侧,而 $g(x)$ 的梯度是指向大于 0 的一侧,也就是不是可行域的一侧。而求的问题是极小值,所以 $f(x)$ 在交点处的梯度是指向可行域的一侧,也就是说两个梯度一定是相反的。所以也就可以确定这里的系数一定是大于 0 的。而等式约束由于不知道 $h(x)$ 的梯度方向,只能约束为 $\lambda \neq 0$,那么为什么 $\mu$ 还能等于 0 呢,因为极值点可能刚好在 $g(x)$ 上。     对于第二种情况,不等式约束就相当于没有,对 $f(x) + \lambda h(x) $ 用拉格朗日乘子法: $$\nabla f(x)+\lambda \nabla h(x)= 0\\ h(x)=0\\ g(x) \leq 0\\ \lambda \neq 0$$     最好把两种情况用同一组方程表示出来。对比一下两个问题,不同的是第一种情况中有 $\mu \geq 0$ 且 $g(x)=0$, 第二种情况 $\mu = 0$ 且 $g(x) \leq 0$ 综合两种情况,可以写成 $\mu g(x) = 0$ 且 $\mu \geq 0$ 且 $g(x) \leq 0$: $$\nabla f(x)+\lambda \nabla h(x)+\mu \nabla g(x) = 0\\ \mu g(x) = 0\\ \lambda \neq 0\\ h(x)=0\\ g(x) \leq 0$$     这个就是 KKT 条件。它的含义是这个优化问题的极值点一定满足这组方程组。(不是极值点也可能会满足,但是不会存在某个极值点不满足的情况)它也是原来的优化问题取得极值的必要条件,解出来了极值点之后还是要代入验证的。但是因为约束比较多,情况比较复杂,KKT 条件并不是对于任何情况都是满足的。要满足 KKT 条件需要有一些规范性条件(Regularity conditions),就是要求约束条件的质量不能太差,常见的比如: 1. LCQ:如果 $h(x)$ 和 $g(x)$ 都是形如 $Ax+b$ 的仿射函数,那么极值一定满足 KKT 条件。 2. LICQ:起作用的 $g(x)$ 函数(即 $g(x)$ 相当于等式约束的情况)和 $h(x)$ 函数在极值点处的梯度要线性无关,那么极值一定满足 KKT 条件。 3. Slater 条件:如果优化问题是个凸优化问题,且至少存在一个点满足 $h(x) = 0$ 和 $g(x) = 0$,极值一定满足 KKT 条件。并且满足强对偶性质(下面会讲)。 其它条件还有很多,可以看[维基百科](https://en.wikipedia.org/wiki/Karush%E2%80%93Kuhn%E2%80%93Tucker_conditions)。     问题到这里就大致解决了。但是为了更好的解决这个优化问题,数学家还找到了它的对偶问题。找一个优化问题的对偶问题的一般因为是对偶问题比原问题更好解决,并且对偶问题的解和原问题是一样的。上面的拉格朗日函数也可以看做原问题的对偶问题。     为了去掉问题中的约束,可以把它们作为惩罚项加到目标函数中 $min_{x}f(x) + M h(x) + N g(x)$ 其中 M, N 是两个很大的正数,在数值解法中可以直接这样做,这个就是罚函数法的思路 。不过在理论推导时这样做是不严谨的,除非 M, N 为无穷大。所以就把原问题改写 $L(x,\mu,\lambda) = min_{x}max_{\mu,\lambda}f(x) + \lambda h(x) + \mu g(x)$ 。这个式子可以这么理解,现在外层给定任意一个 $x_{0}$ 值,然后内层在给定的 $x_{0}$ 下优化那个函数,让它最小。然后外层选能够让内层得到的值最大的一个 $x_{0}$,得到的函数表达式就是: $$ L(x,\mu,\lambda)= \left\{\begin{matrix} f(x) & (x \quad满足约束)\\ \infty & (x \quad不满足约束)\\ \end{matrix}\right. $$ 所以 外层选的那个 $x_{0}$ 一定满足约束,否则,内层的 max 的时候会让 $\mu $ 或者 $\lambda$ 为无穷大。外层不会选那些能让内层得到无穷大的 $x$ 值。这样改写就和原来的带约束形式完全一致了,但是形式不同。这样可以利用 $max \quad min f(x) \leq min \quad max(f(x))$ 这个公式(这个很好理解,$min f(x) \leq min\quad max f(x)$, 然后就有这个公式了),得到原问题的最小值的一个下界,就是: $$min_{x}max_{\mu,\lambda}f(x) + \lambda h(x) + \mu g(x) >= max_{\mu,\lambda}min_{x}f(x) + \lambda h(x) + \mu g(x) $$     前面的就是原函数,后面的是它的一个下界。那么为什么要这样做呢? 是因为后面的一定是一个凸规划,比较好解决。但是这个只是一个下界,它们之间还是有一定的差距。这个差距叫对偶误差(duality gap)。对偶误差如果为 0 其实是一个非常好的性质,表示可以直接求解后面的问题得到原问题的解,这种性质叫强对偶性质,否则就只是弱对偶。     强对偶性质非常好,但是要求也很苛刻,比 KKT 条件要苛刻。如果问题满足强对偶一定也满足 KKT 条件,反之不一定。对于这类优化问题,KKT 条件、强对偶、规范性条件之间的关系是:
RC、KKT 和强对偶的关系
RC、KKT 和强对偶的关系
    对于强对偶 推出 KKT 可以参看这篇博客。     好了,到这里优化的知识就差不多了,现在可以快乐的解一开始那个优化问题了~ $$\begin{align*} max_{\gamma,w,b} \quad \gamma \\ &s.t. \quad y_{i}\frac {wx+b}{||w||} > \gamma \end{align*}$$     因为有$||w||$做了分母,所以约束条件是非凸函数(可以用定义验证一下)。     这里需要进行一些转化,比如由于超平面 $wx+b=0$ 可以任意同比例放缩,就限制 ||w|| = 1(在第一篇中解释过,这样做没有问题) 。所以就有: $$\begin{align*} max_{\gamma,w,b} \quad \gamma \\ &s.t. \quad y_{i}(wx+b)\geq\gamma \\ & \quad\quad\quad ||w||=1 \end{align*}$$     但是 $||w|| = 1$ 的表示解的可行域在一个球面上,也是非凸的,所以这样转化不行。其中比较讨厌的是 ||w|| 这个约束,可以把它放到优化条件中,这样通过优化条件的同含义转化有可能能把它转化为凸函数。 $$\begin{align*} max_{\gamma,w,b} \quad \frac{\gamma}{||w||} \\ &s.t. \quad y_{i}(wx+b)\geq\gamma \end{align*}$$     这样优化条件表示几何距离,$\gamma$原来表示几何距离,现在表示为函数距离了。这里需要注意,我们的目标肯定是几何距离,函数距离能因为系数放缩而变化。而应为函数距离能因为系数放缩而变化,所以可以限制 $\gamma=1$ 的,得到: $$\begin{align*} max_{\gamma,w,b} \quad \frac{1}{||w||} \\ &s.t. \quad y_{i}(wx+b)\geq1 \end{align*}$$     这样因为目标函数不是凸函数,所以还是不是凸规划的。最后目标函数同含义转化一下就行了: $$\begin{align*} max_{\gamma,w,b} \quad ||w||^2 \\ &s.t. \quad y_{i}(wx+b)\geq1 \end{align*}$$     这个是凸函数,因为 $||w||^2=\sum_{i=1}^{n}w_{i}^2$ 是凸函数(可以验证),约束也是线性的,整个规划就是一个典型的二次规划问题。这个问题直接写出它的 KKT 条件为: $$\nabla ||w||^2 +\nabla\sum_{i=1}^{n}u_{i}[y_{i}*(wx_{i}+b)-1]=0\\ u_i \geq0\\y_{i}(wx+b)\geq1\\u_{i}*[y_{i}*(wx_{i}+b)-1]=0 $$     这个问题有非常多(每个训练样本都对它有约束)约束条件,很难直接求解。对于这类二次规划问题可以用专门的软件求解,但是由于约束太多,时空复杂度都很大。但是因为这个问题是满足 Slater 条件的。所以只要解决它的对偶问题就可以了。 $$min_{w,b}max_{u}(2||w||^2+\sum_{i=1}^{n}\mu_{i}[y_{i}(wx_{i}+b)-1])\\ =max_{\mu}min_{w,b}(2||w||^2+\sum_{i=1}^{n}\mu_{i}[y_{i}(wx_{i}+b)-1])$$     如果求解上面的原问题的话和之前的二次规划难度一样。求解对偶问题时先求解: $$L(w,b,\mu) = min_{w,b}(2||w||^2-\sum_{i=1}^{n}\mu_{i}[y_{i}(wx_{i}+b)-1])$$     用求无约束极值的方法,得到方程组: $$\frac{\partial L(w,b,\mu)}{\partial w}=w-\sum_{i=1}^{n}u_{i}y_{i}x_{i}=0\\ \frac{\partial L(w,b,\mu)}{\partial b}=\sum_{i=1}^{n}\mu_{i}y_{i} = 0$$     所以有两个关系式: $$w=\sum_{i=1}^{n}u_{i}y_{i}x_{i}\\ \sum_{i=1}^{n}\mu_{i}y_{i} = 0$$     先把 $L(w,b,\mu)$ 化简一下,然后将它们带入进去: $$\frac{1}{2}||w||^2-\sum_{i=1}^{n}u_{i}[y_{i}(wx_{i}+b)-1]\\ =\frac{1}{2}||w||^2-\sum_{i=1}^{n}(u_{i}y_{i}wx_{i}+u_{i}y_{i}b-u_{i})\\ =\frac{1}{2}||w||^2-w\sum_{i=1}^{n}u_{i}y_{i}x_{i}-b\sum_{i=1}^{n}u_{i}y_{i}+\sum_{i=1}^{n}u_{i}\\ =\sum_{i=1}^{n}u_{i} - \frac{1}{2}||w||^2\\ =\sum_{i=1}^{n}u_{i} - \frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\mu_{i}\mu_{j}y_{i}y_{j}x_{i}x_{j} $$     这样之前的问题就变成了极大化这个式子,还要把之前得到的所有关于 $u$、$y$和$x$的约束都加进去,然后取反把问题变成求最小值的问题,问题就变成了: $$ min_{u}\quad\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\mu_{i}-\sum_{i=1}^{n}u_{i} \mu_{j}y_{i}y_{j}x_{i}x_{j}\\ u_{i}\geq0\\ \sum_{i=1}^{n}u_{i}y_{i}=0 $$     这个问题其实还是一个二次规划的问题,但是相比之前的那个问题而言约束简单了很多。其中需要优化的变量有 $\mu_{1},...,\mu_{n}$这 $n$ 个。对于这类问题可能会用 解二次规划的方法处理。但是这里因为这两个约束都很简单,所以直接用一般的梯度下降法或者坐标下降法的思路去做。在每一次迭代的时候,得到的所有 $\mu$ 都必须满足那两个约束条件。而第二个约束说明每次迭代至少要改变两个 $\mu$ 才有可能满足。梯度下降法每次修改所有 $n$ 个 $\mu$,不好控制,而坐标下降法每次修改一个,在这里有不能用。所以最好的方法是每次修改两个 $\mu$,由于有 $\sum_{i=1}^{n}u_{i}y_{i}=0$ 的关系,这两个 $\mu$ 的自由度其实只有 1,也就是说一个可以由另一个表示,所以其实可以用坐标下降法的思路进行优化。步骤就是: 1. 随机给出初始的 $\mu$ 值(给出的需不需要满足那个约束) 2. 选择两个要优化的 $\mu$,比如选择了 $\mu_{1}$ 和 $\mu_{2}$ 值 3. 由等式约束得到: $$ \mu_1y_1+\mu_2y_2=-\sum_{i=3}^n\mu_iy_i\\ \mu_1=(\sum_{i=3}^n\mu_iy_i-\mu_2y_2)y_1 $$ 因为 $-\sum_{i=3}^n\mu_iy_i$ 是常数,用 $\zeta$ 代替,得到: $$ \mu_1=(\zeta-\mu_2y_2)y_1 $$ 同样,先将目标函数中的 $\mu$ 提取出来,并化简,然后将它带入进去,得到: $$ 原式=\frac{1}{2}(\mu_{1}^2x_{1}^2y_{1}^2+\mu_{1}x_{1}y_{1}\mu_{2}x_{2}y_{2}+\mu_{1}x_{1}y_{1}\sum_{j=3}^{n}\mu_{j}x_{j}y_{j}+u_{2}x_{2}y_{2}u_{1}x_{1}y_{1}+\mu_{2}x_{2}y_{2}\mu_{2}x_{2}y_{2}+\mu_{2}x_{2}y_{2}\sum_{j=3}^{n}\mu_{j}x_{j}y_{j}+\sum_{i=3}^{n}u_{i}x_{i}y_{i}(u_{1}x_{1}y_{1})+\sum_{i=3}^{n}u_{i}x_{i}y_{i}(u_{2}x_{2}y_{2})+ \sum_{i=3}^{n}\sum_{j=3}^{n}u_{i}x_{i}y_{i}u_{j}x_{j}y_{j})-(\mu_{1}+\mu_{2}+\sum_{i=3}^{n}\mu_{i}) $$ 为了方便,将系数用符号代替,$v_i=\sum_{j=3}^{n}\mu x_ix_j,i=1,2$。这个式子就变成: $$ \frac12K_{11}\mu_1^{2}+\frac12K_{22}\mu_2^2+y_1y_2K_{12}\mu_1\mu_2-(\mu_1+\mu_2)+y_1v_1\mu_1+y_2v_2\mu_2+Constant $$ 将 $\mu_1$ 的表示带入: $$ \frac12K_{11}(\zeta-\mu_2y_2)^2+\frac12K_{22}\mu_2^2+y_2K_{12}(\zeta-\mu_2y_2)\mu_2-(\zeta-\mu_2y_2)y_1-\mu_2+v_1(\zeta-\mu_2y_2)+y_2v_2\mu_2+Constant $$ 然后需要对这个式子求极大值,直接求偏导为 0 的点就行了: $$ \frac{\partial L(\mu_{2})}{\partial \mu_{2}}=(K_{11}+K_{22}-2K_{12})\mu_2-K_{11}\zeta y_2+K_{12}\zeta y_2+y_1y_2-1-v_1y_2+v_2y_2=0\\ $$ 由于 $y=wx+b$,将上面得到的 $w$ 的表达式带入,得到 $f(x)=\sum_{i=1}^n\mu_iy_ix_ix+b$ ,这个就是点 x 的预测值,它与真实值的误差是 $E_i=f(x_i)-y_i$ 解出来有: $$ (K_{11} +K_{22}-2K_{12})\mu_2 = y_2(y_2-y_1 + \varsigma K_{11} - \varsigma K_{12} + v_1 - v_2)= y_2(y_2-y_1 + \varsigma K_{11} - \varsigma K_{12} + (g(x_1) - \sum\limits_{j=1}^{2}y_j\mu_jK_{1j} -b ) -(g(x_2) - \sum\limits_{j=1}^{2}y_j\mu_jK_{2j} -b))\\ => (K_{11} +K_{22}-2K_{12})\mu_2^{new,unc} = y_2((K_{11} +K_{22}-2K_{12})\mu_2^{old}y_2 +y_2-y_1 +g(x_1) - g(x_2))\\ => \mu_2^{new} = \mu_2^{old} + \frac{y2(E_1-E_2)}{K_{11} +K_{22}-2K_{12})} $$ 所以也可以得到 $\mu_{1}^{new}$ $$ \mu_{1}^{new}=-y_{1}y_{2}(\mu_2^{new})-y_{1}\sum_{i=3}^{n}\mu_{i}y_{i} $$     这样就求出来了新的 $\mu_{1}$ 和 $\mu_{2}$,表示为 $\mu_{1}^{new}$ 和 $\mu_{2}^{new}$。     但是这里对于 $\mu \geq0$ 的约束没有约束进去。对于小于 0 的 $\mu_{1}$ 和 $\mu_{2}$ 要裁剪一下: $$ \mu_1= \left\{\begin{matrix} \mu_{1}^{new} & (\mu_{1}^{new} \geq0)\\ 0 & (\mu_{1}^{new} \lt0)\\ \end{matrix}\right.\\ \mu_2= \left\{\begin{matrix} \mu_{2}^{new} & (\mu_{2}^{new} \geq0)\\ 0 & (\mu_{2}^{new} \lt0)\\ \end{matrix}\right. $$ 这个优化算法叫 SMO 算法。     有了 $\mu^{*}$之后可带入上面 $w$ 的表达式从而得到 $w*$, $b*=-/frac{max_{i:y_i=-1}w*x_i+min_{i:y_i=1}w*x_i}{2}$     但是这个分类器其实不允许任何一个点分错,这一点通过每个点 $i$ 的约束 $y_i(wx_i+b) \geq 1$ 中已经体现出来了。如果数据是线性不可分的,这个最优化问题其实是无解的,也不满足 Slater 条件,也就是说用 SMO 算法求解出来的结果是没有保证的。所以目标函数应该权衡分对的点的个数,和离直线最近的点的距离,从而得到一个最优的直线。那么如何把这个转化为优化问题呢,只要让原来目标函数中的约束宽容一些就行了。 $$ min \quad \frac{1}{2}||w||^2 + C\sum_{i=1}^{n}\zeta_i\\ y_i(wx_i+b) \geq 1-\zeta_i\\ \zeta_i \geq0 $$     这个表示允许超平面对约束条件有一些不满足,但是这会在目标函数中对它做出惩罚。不满足的约束越多,不满足的程度越大,惩罚就越大。所以超平面权衡全局,尽量满足约束,但是如果不满足约束会在 $\frac{1}{2}||w||^2$ (最小间隔最大)处得到更大的利益,也会怎么做。     这个优化问题的解法和硬间隔的问题流程几乎一样,唯一的区别就是最后一步解对偶问题时求解的 max 问题是这样的: $$ max_{u}\quad\sum_{i=1}^{n}u_{i} - \frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\mu_{i}\mu_{j}y_{i}y_{j}x_{i}x_{j}\\ C \geq u_{i}\geq0\\ \sum_{i=1}^{n}u_{i}y_{i}=0 $$     在 SMO 中也只是在 $\mu_{1}^{new}$ 和 $\mu_{2}^{new}$ 截取的时候有区别: $$ \mu_1= \left\{\begin{matrix} C & (\mu_{1}^{new} \gt C)\\ \mu_{1}^{new} & (C \geq \mu_{1}^{new} \geq0)\\ 0 & (\mu_{1}^{new} \lt0)\\ \end{matrix}\right.\\ \mu_2= \left\{\begin{matrix} C & (\mu_{2}^{new} \gt C)\\ \mu_{2}^{new} & (C \geq \mu_{2}^{new} \geq0)\\ 0 & (\mu_{2}^{new} \lt0)\\ \end{matrix}\right. $$ 其中对于 $\mu_i$ , $\mu_j$ 的选择可以随机选择,但是其实可以更加精细。选择时需要依次选择 $\mu_i$ 和 $\mu_j$。步骤就是: 1. 对于 $\mu_i$ 可以选择样本点违反 KKT 条件最严重的一个。一个 $\mu_i$ 代表一个数据点对目标的约束的系数。那么最优的 $\mu_i$ 满足:     1. $C \gt \mu_i^* \gt 0 => y_ih_i - 1= 0$     2. $\mu_i^* = 0 => y_ih_i - 1 \geq 0$     3. $\mu_i^* = C => y_ih_i - 1 \leq 0$ 先尽量选择不满足第 1 条的 $\mu_i$,因为这个经过裁剪后改动可能会更大,另外的经过裁剪可能还是在边界上。 2. 然后在用这个 $\mu_i$ 查找 $\mu_j$ ,选择 $|E_i-E_j|$ 最大的 3. 重复 2,直到找不到比较大的 $|E_i-E_j|$,那么重复 1,2,3。就是要重新选择 $\mu_i$。     这个是软间隔的最优间隔分类器。到这里为止,已经把最优间隔分类器的优化问题解决了。但是还记得之前关于 logistic 回归的两个缺点吗,现在已经解决了第二个问题。但是它的分隔面毕竟还是一个超平面,对于类似如下的数据集还是无能为力。     这个的解决办法是用核函数的方法,它的思路是把数据投影到更高维度的空间,那么原本线性不可分的数据就有可能线性可分了。 它作用的对象是点的内积,在 $$ max_{u}\quad\sum_{i=1}^{n}u_{i} - \frac{1}\\{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\mu_{i}\mu_{j}y_{i}y_{j}x_{i}x_{j}\\ u_{i}\geq0\\ \sum_{i=1}^{n}u_{i}y_{i}=0 $$ 中,由于目标函数中是关于 $x_{i}$ 和 $x_{j}$ 的内积,那么就可以把它替换成一个核函数 $K(x_i,x_j)$。核函数就是由于这个表达式中有所有关于 $x$ 的运算只有 $x_ix_j$,也就是两个数据点做内积。这种情况下把 $x_i$ 和 $x_j$ 的维度升高,比如为原本有:$x=[x_1,x_2,x_3],y=[y_1,y_2,y_3]$ 那么 $x_1x_2=x_1y_1+x_2y_2+x_3y_3$,那么如果把他们维度升高为 $x^*=[x_1x_1,x_1x_2,x_1x_3,x_2x_1,x_2x_2,x_2x_3,x_3x_1,x_3x_2,x_3x_3]$ 和 $y^*=[y_1y_1,y_1y_2,y_1y_3,y_2y_1,y_2y_2,y_2y_3,y_3y_1,y_3y_2,y_3y_3]$ 那么 $x$ 和 $y$ 就到了更高的维度,然后做点积就行了。但是这样把 $x^*$, $y^*$ 写出来再算比较慢,复杂度是 $O(n^2)$。其实 $x^*y^*$ 就相当于 $(xy)^2$, 这样结果是一样的,复杂度变成了 $O(n)$。所以具体操作的时候都会用一个函数代替原来的点积,效果就和升维,然后点积是一样的。这个函数叫做核函数,比如这里的 $(xy)^2$ 就是一个核函数。常用的核函数有: 1. 多项式核函数。 2. 高斯核函数。它可以把维度升高到无限维。 那么是不是所有关于 $x,y$ 的函数都可以做核函数呢。其实核函数必须满足 $f(x_i,y_j)$ 构成的矩阵是半正定的。这个就是 Mercer 定理。 核函数不只适用于 SVM,任何最后形式中有内积的形式的式子都能用核函数代替内积,可能会改善效果。     正是因为预测的时候只需要用到少数的几个支持向量,这个算法也叫支持向量机(SVM)。在训练的时候,其实在某一侧加上一些数据点对于最终得到的模型是没有影响的。相对于 logistic 回归它在小数据集上的表现非常好。     支持向量机已经是一个很好的算法了。它解决了上面提到的两个问题。但是也可以从另一个角度出发,我们可以考虑用其它方法解决 logisitic 和感知机只能解决线性可分数据的问题。一个比较自然的想法是将分隔函数从线性函数变成更加复杂的函数,它可以拟合更为复杂的数据集。     为此,可以将多个 logistic 或者 感知机组合起来。比如下图:图中的每一个节点表示一个logistic 回归或者感知机,然后前面一层的输出又作为后面一层的输入。这样其实就代表了一个非常复杂的复合函数,比如有四层,那么这个复合函数就是: $$ g(x)=w_3(f_2(w_2(f_1(w_1x_1+b_1))+b2))+b3 $$     其中 $f_1$ 和 $f_2$ 是可以是 sigmod 函数或者感知机的阶跃函数等等非线性函数,所以整个函数 $g$ 是高度复杂和非线性的。

    这个结构叫做神经网络(因为和大脑中的神经结构有点像),中的第一层就叫做输入层,中间的是隐藏层,最后一层叫做输出层。它相当于用对应的高度复杂非线性的函数来拟合训练数据,然后用于预测。理论上已经证明了有一个隐藏层的神经网络就能拟合大部分的曲线了,有两个隐藏层的能拟合所有函数了,包括分段函数。

    对于神经网络的损失函数和调优下次再说吧。

参考链接:

  1. 支持向量机通俗导论(理解SVM的三层境界)
  2. [支持向量机原理(四)SMO算法原理] (https://www.cnblogs.com/pinard/p/6111471.html)
  3. Karush–Kuhn–Tucker conditions
  4. Andrew Ng 的课件
  5. 拉格朗日乘数法

猜你喜欢

转载自blog.csdn.net/xinchen1102/article/details/79777538