Machine Learning-支持向量机(SVM)(上)

支持向量机(SVM)

目录

·简介

·凸二次规划

·拉格朗日乘数法与KKT条件

·拉格朗日对偶问题

·支持向量机(SVM)

·再生核希尔伯特空间、核函数与核技巧

·软间隔(softmargin)与正则化

·SVM与逻辑回归

·SVM与神经网络

·支持向量回归机(SVR)

·SVR与多项式回归

·顺序最小化算法(SMO)

·半监督SVM

简介

支持向量机(SVM)做为一种二分类算法,与其他分类算法相比,在小的数据集上,分类效果好,泛化能力强,且可以处理非线性的分类问题,支持向量回归机(SVR)是支持向量机在回归问题上的一种推广。半监督的支持向量机(S3VM)是支持向量机在半监督学习上的一种推广。

本文主要真对SVM,系统的在数学上进行理论推导,要想在数学上推导SVM,首先要介绍三个内容:凸二次规划、拉格朗日乘数法和KKT、拉格朗日对偶问题。

凸二次规划(convex quadratic programming)

凸二次规划从名字上既可以理解,什么是凸,其目标函数二阶导数大于等于零(既目标函数为凸函数),且可行域是凸集,什么是二次,其目标函数最高是二次的,什么是规划,其解决的问题是给定条件下求目标函数的最值。为什么要单独讨论他,是因为很多数学模型都是凸二次规划模型,如:投资组合中的马科维茨模型。凸二次规划具体的数学定义如下:

考虑如下优化问题:
\min_{x} \frac{1}{2}x^TQx+c^Tx
s.t. Ax\le b

若其中A是有限维实矩阵,Q为半正定实矩阵。

上面给出的就是凸二次规划的定义。

对于凸二次规划给出几点说明

1、约束条件等式问题

标准的二次规划问题约束条件中并没有等式约束,但是当约束条件中出现等式是,可以将这个等式转化为两个不等式约束,如ax=b可以转化为ax \le b-ax \le -b 两个不等式, 所以约束条件中可以含有等式。

2、矩阵Q的问题

为什么Q是半正定矩阵问题就是凸问题。只要证明f(x)= \frac{1}{2}x^TQx+c^Tx是凸函数即可,

对于任意的x_1,x_2,有:
\begin{align} f(\frac {x_1+x_2}{2})&= \frac{1}{2}(\frac{x_1+x_2}{2})^TQ(\frac{x_1+x_2}{2})+c^T(\frac{x_1+x_2}{2}) \\ &=\frac{1}{8}x_1^TQx_1+\frac{1}{2} c^Tx_1 +\frac{1}{8}x_2^TQx_2+\frac{1}{2} c^Tx_2 + \frac{1}{8}x_1^TQx_2+\frac{1}{8}x_2^TQx_1 \end{align}

而:
\begin{align} \frac {f(x_1)+f(x_2)}{2}=\frac{1}{4}x_1^TQx_1+\frac{1}{2} c^Tx_1 +\frac{1}{4}x_2^TQx_2+\frac{1}{2} c^Tx_2 \end{align}

所以上面两公式相减,得到。
\begin{align} \frac {f(x_1)+f(x_2)}{2}- f(\frac {x_1+x_2}{2}) &=\frac{1}{8}x_1^TQx_1+\frac{1}{8}x_2^TQx_2 - \frac{1}{8}x_1^TQx_2-\frac{1}{8}x_2^TQx_1\\ &=\frac{1}{8}(x_1-x_2)^TQ(x_1-x_2)^T \end{align}

若Q是半正定矩阵,则上式大于零,有:
\frac {f(x_1)+f(x_2)}{2} \ge f(\frac {x_1+x_2}{2})

所以问题是凸的。

3、矩阵Q到底是什么。

对于f(x)= \frac{1}{2}x^TQx+c^Tx

对向量x的各个分量求二阶导,
\frac{\partial^{2}f}{\partial x_i ^2}=q_{i,i}
\frac{\partial^{2}f}{\partial x_i \partial x_j}=q_{i,j}

其中 q_{i,j}是Q的第i行第j列的元素。

所以其实Q是一个黑森矩阵,是描述这个超曲面的局部曲率。

上面就是凸二次规划问题的介绍,求解这个凸二次规划问题常用的方法为椭球法,内点法和拉格朗日法。下面详细介绍拉格朗日乘数法。

拉格朗日乘数法

其实每个模型的特点,都与其独特的数学推导过程,息息相关,在推导中用的方法一定程度上决定了最后模型的特点,如Adaboost只能用指数损失函数推导,SVM也一样,其最后的特点完全是由推导过程中,使用了拉格朗日乘数法和KKT条件所决定的。

对于一般无约束的的函数优化问题,我们可以直接求导,令导数等于零,找到极值点,再验证最大值最小值。而对于有约束的函数优化问题,可以使用拉格朗日乘数法,将其转化为无约束的函数最优化问题。

但需要特别指出的是,转化成的无约束的函数最优化,也只能求其极值,极值和最值还是有一定差别,一定要理解这个差别,拉格朗日乘数法求得的是极值,并不是最值,还有其并不能确定极值一定存在,即使转化前的目标函数是凸函数,由于存在约束条件,其也可能没有极值。转化后的目标函数如果是凸函数,由于没有约束条件,那必存在机值。以下讨论在极值存在下讨论。

其具体的推导如下:

先考虑只有等式约束的优化问题;

\min_{x} f(x)
s.t. g(x)=0

其中x是一个n维向量,x=(x_1,x_2,...x_n),这里f(x)需满足一个条件,即f(x)对向量x各个分量的偏导数连续。很明显凸二次规划的目标函数满足之一条件。

对于g(x)=0,是一个n维空间的超曲面,我们先讨论g(x)=0这个超曲面的一些性质。对于超曲面上的任意一个点x=(x_1,x_2,...x_n),这里讨论的g(x)都是连续可导的,不连续,不可导的g(x)不做讨论。由于这个超曲面是连续可导,所以其上对于任意的点x=(x_1,x_2,...x_n),都存在一个小的领域U,在邻域U里面过点x=(x_1,x_2,...x_n)的任意曲线,都可以参数化表示。

设过点x=(x_1,x_2,...x_n)的任意曲线的参数表达式为:
r(t)=(x_1(t),x_2(t),...x_n(t))

则该曲线在点x处的方向导数为:
( \frac{\partial x_1}{\partial t }, \frac{\partial x_2}{\partial t }... \frac{\partial x_n}{\partial t } )| _{x}

又点x在曲面g(x)=0上,所以有:
g(x_1(t),x_2(t),...x_n(t))=0

两边关于t求导得到:
\frac{\partial g}{\partial x_1 } \frac{\partial x_1}{\partial t }+ \frac{\partial g}{\partial x_2 } \frac{\partial x_2}{\partial t }+...+ \frac{\partial g}{\partial x_n } \frac{\partial x_n}{\partial t }=0

所以有:
( \frac{\partial g}{\partial x_1 } , \frac{\partial g}{\partial x_2 } ,... \frac{\partial g}{\partial x_n })\left( \begin{array} {cccc} \frac{\partial x_1}{\partial t }\\ \frac{\partial x_2}{\partial t }\\ .\\ .\\ .\\ \frac{\partial x_n}{\partial t }\\ \end{array} \right)=0

所以两个向量是正交的,而向量( \frac{\partial g}{\partial x_1 } , \frac{\partial g}{\partial x_2 } ,... \frac{\partial g}{\partial x_n })是函数g(x_1,x_2,...x_3)的梯度方向。但是很明显这里g(x_1,x_2,...x_3)=0是一个超曲面,并不是一个函数。所以这里要区分开来。而从这个公式,可以看出,这个方向正交与过这一点的任意曲线在这一点上的方向向量,所以这个方向是曲面的法向量方向。

所以我们在此得到了一个结论:
结论一、超曲面g(x)=0的法向量是函数y=g(x)的梯度方向。

超曲面g(x)=0的性质讨论完了,我们再来看目标函数f(x)在最优点x^*处的性质。

开始我们就假设了x^*的存在,不存在的情况不做讨论,因为拉格朗日乘数法解决不了这一类问题。

结论二、对于最优点x^*,一定有f(x)在该点的梯度( \frac{\partial f}{\partial x^*_1 } , \frac{\partial f}{\partial x^*_2 } ,... \frac{\partial f}{\partial x^*_n })垂直于约束曲面。

对于上面的结论,使用反证法证明,

证明: 假设\nabla f(x_1^*,x_2^*,...x_n^*)=( \frac{\partial f}{\partial x^*_1 } , \frac{\partial f}{\partial x^*_2 } ,... \frac{\partial f}{\partial x^*_n })不垂直于约束曲面,则根据垂直的定义,必然可以在曲面g(x)=0上,找到过最优点x^*的一条曲线,使得( \frac{\partial f}{\partial x^*_1 } , \frac{\partial f}{\partial x^*_2 } ,... \frac{\partial f}{\partial x^*_n })不垂直于这条曲线在x^*点的方向向量, 则( \frac{\partial f}{\partial x^*_1 } , \frac{\partial f}{\partial x^*_2 } ,... \frac{\partial f}{\partial x^*_n })必在这条曲线的方向向量上有投影,

所以,对于点x^*,因为上面的曲线是连续可导,所以可以在曲线上可以找到点(x_1^*,x_2^*,...x_n^*)-\varepsilon,其中\varepsilon为无穷小的方向向量。

观察点(x_1^*,x_2^*,...x_n^*)-\varepsilon的f值,有:
f((x_1^*,x_2^*,...x_n^*)-\varepsilon)=f(x_1^*,x_2^*,...x_n^*)-\nabla f(x_1^*,x_2^*,...x_n^*)\varepsilon+\varepsilon^TQ\varepsilon

上面\nabla f(x_1^*,x_2^*,...x_n^*)\varepsilon为两个向量的内积,因为\nabla f(x_1^*,x_2^*,...x_n^*)与向量\varepsilon不垂直,所以\nabla f(x_1^*,x_2^*,...x_n^*)\varepsilon不为零,而Q是半正定矩阵,所以有:
\varepsilon^TQ\varepsilon \ge 0

\varepsilon时,如果取 \nabla f(x_1^*,x_2^*,...x_n^*)与向量\varepsilon内积为正的方向,对于固定的x^*,在零附近,有以下公式:
\nabla f(x_1^*,x_2^*,...x_n^*)\varepsilon \ge \varepsilon^TQ\varepsilon

因为上式后面是\varepsilon的二阶,前面是一阶,后面收敛比前面快。

由上面的不等式得到:
0\ge-\nabla f(x_1^*,x_2^*,...x_n^*)\varepsilon + \varepsilon^TQ\varepsilon

所以有:
f((x_1^*,x_2^*,...x_n^*)-\varepsilon)\le f(x_1^*,x_2^*,...x_n^*)

所以这与x^*是f(x)的极小值点相矛盾。所以假设不成立。

至此,我们得到了一下两个结论:
1、超曲面g(x)=0的法向量是函数y=g(x)的梯度方向。
2、对于最优点x^*,一定有f(x)在该点的梯度( \frac{\partial f}{\partial x^*_1 } , \frac{\partial f}{\partial x^*_2 } ,... \frac{\partial f}{\partial x^*_n })垂直于约束曲面。

由上面的两个结论可以得到,在最优点x^*处,曲面g(x)=0的法向\nabla g(x_1^*,x_2^*,...x_n^*)与目标函数f(x)在这一点的梯度\nabla f(x_1^*,x_2^*,...x_n^*)是共线的。

所以,对于目标函数的极值点,一定满足下面方程:
\nabla g(x_1^*,x_2^*,...x_n^*)=\lambda \nabla f(x_1^*,x_2^*,...x_n^*)

其中\lambda为非零常数。

此时我们构造一个函数:
L(x,\lambda)=f(x)+\lambda g(x)

这个函数就是拉格朗日函数。

因为
\frac{\partial L(x,\lambda) }{\partial x }=\nabla g(x_1^*,x_2^*,...x_n^*)+\lambda \nabla f(x_1^*,x_2^*,...x_n^*)

\frac{\partial L(x,\lambda) }{\partial \lambda }=g(x)
所以,原带约束的优化问题的极值点,必然满足

\begin{cases} \frac{\partial L(x,\lambda) }{\partial x }=0 \\ \frac{\partial L(x,\lambda) }{\partial \lambda }=0 \end{cases}

其中x是向量,\lambda是标量。

解上面的方程组,即可求得原问题的极值点。

至此,我们就推出了约束条件为等式的情况。下面考虑约束条件为g(x)\le 0的情况。

考虑不等式约束的优化问题

\min_{x} f(x)
s.t. g(x)\le 0

其中x是一个n维向量,x=(x_1,x_2,...x_n),这里f(x)需满足一个条件,即f(x)对向量x各个分量的偏导数连续。很明显凸二次规划的目标函数满足之一条件。

x^*是f(x)的最优点,此时分两种情况进行讨论,x^*在g(x)=0上和x^*在g(x)<0内。

其一

x^*在g(x)=0上时,因为f(x)在g(x) \le 0上连续且可导,且由f(x)导函数也连续,所以,当极小值点x^*在g(x)=0上时,f(x)在g(x)<0没有极小值点,且f(x)在g(x)<0上的值全部大于f(x^*)

有因为梯度一定是函数上升的方向,所以\nabla f的方向一定是指向g(x)\le0的区域内部。

而在g(x)=0上,\nabla g的方向也是函数g(x)增大的方向,所以\nabla g的方向一定是指向g(x)\le0的区域外部。

所以当x^*在g(x)=0上时,\nabla f= \lambda \nabla g,其中\lambda >0

所以只要求解L(x,\lambda)关于自变量(x,\lambda)的极值点,就可以求得原始问题的极值点。即解一下方程组:
\begin{cases} \frac{\partial L(x,\lambda) }{\partial x }=0 \\ \frac{\partial L(x,\lambda) }{\partial \lambda }=0 \end{cases}

其中\lambda >0

其二

x^*在g(x)<0内部时,其约束对目标函数f(x)的极小值点不起作用,可直接\nabla f(x) =0 ,求出的向量x,就是目标函数的极小值点。

为和上面表达式统一,这种情况相当于,\lambda =0

所以只要求解L(x,\lambda)关于自变量(x,\lambda)的极值点,就可以求得原始问题的极值点。即解一下方程组:
\begin{cases} \frac{\partial L(x,\lambda) }{\partial x }=0 \\ \lambda=0 \end{cases}

KKT 条件

通过以上其一,其二情况的分析,我们得到,当\lambda=0时,必有g(x)\le 0,当\lambda \ge 0时,必有g(x)= 0

所以,\lambda与g(x)必然有一个为零,即,\lambda g(x)=0

所以此时有:
\begin{cases} \lambda \ge 0\\ g(x) \le 0\\ \lambda g(x)=0 \end{cases}

这个就是与原始问题中不等式约束对应的拉格朗日的KKT条件。也就是说当约束条件中有不等式约束时,拉格朗日乘数法解出的解,必须满足KKT条件。

到此,我们得到了拉格朗日乘数法,详细叙述如下:

拉格朗日乘数法详细描述

对于如下带约束的优化问题
\min_{x} f(x)
s.t. g(x)\le 0
其中x是一个n维向量,x=(x_1,x_2,...x_n),这里f(x)需满足一个条件,即f(x)对向量x各个分量的偏导数连续。(很明显凸二次规划的目标函数满足之一条件。)

可以转化成以下问题。
引入拉格朗日函数:
L(x,\lambda)=f(x)+\lambda g(x)
其中x为一个n维向量。

求解以下方程组
\begin{cases} \frac{\partial L(x,\lambda) }{\partial x }=0 \\ \frac{\partial L(x,\lambda) }{\partial \lambda }=0\\ \lambda \ge 0\\ g(x) \le 0\\ \lambda g(x)=0 \end{cases}

以上方程组的解的x的部分,就是原问题的最优解。其中以下条件称为KKT条件。
\begin{cases} \lambda \ge 0\\ g(x) \le 0\\ \lambda g(x)=0 \end{cases}

多个约束的拉格朗日乘数法

对于多约束优化问题如下:
\min_{x} f(x)
s.t. h_i(x)= 0   (i=1,2....m)
s.t. g_j(x)\le 0  (j=1,2....k)

其中x为n维向量,f(x)有关于x各个分量的连续一阶偏导函数。

以上优化问题,可以转化为以下问题。

定义广义拉格朗日函数:
L(x,\lambda,\mu)=f(x)+\sum_i^m \lambda_i h_i(x) +\sum_j^k \mu_jg_j(x)

其中,\lambda=(\lambda_1,\lambda_2,...\lambda_m),\mu=(\mu_1,\mu_2,...\mu_k) 为引入的拉格朗日乘数。

求解以下方程组,得到的解的x部分,就是原问题的最优解。
\begin{cases} \frac{\partial L(x,\lambda,\mu) }{\partial x }=0 \\ \frac{\partial L(x,\lambda,\mu) }{\partial \lambda_i }=0\\ \frac{\partial L(x,\lambda,\mu) }{\partial \mu_j }=0\\ \mu_j \ge 0\\ g_j(x) \le 0\\ \mu_j g_j(x)=0 \end{cases}

与原始问题中不等式约束对应的KKT条件为:
\begin{cases} \mu_j \ge 0\\ g_j(x) \le 0\\ \mu_j g_j(x)=0 \end{cases}

其中j=1,2,3...,k

自此拉格朗日乘数法推导完成。

拉格朗日对偶问题

首先要声明的是,求解带约束的规划问题,上面给出可以转换成拉格朗日函数,对未知数求导,令导数等于零,直接可以解出最优解。也就是说,原始问题已经得到解决。那为什么还要在引入拉格朗日对偶问题呢?

其实在很多时候是用不到转换成拉格朗日对偶问题的,本文的SVM推导,其实不用引入拉格朗日对偶问题也可以解决,在周志华的书和很多教程中并未对此进行说明,直接引入拉格朗日对偶问题,我认为这种推导是本末倒置的,必须先论证出引入拉个朗日对偶问题的必要性。

下面先给出什么是拉格朗日对偶,然后再给出为什么使用拉格朗日对偶。

什么是拉格朗日对偶

对于多约束优化问题如下:
\min_{x} f(x)
s.t. h_i(x)= 0   (i=1,2....m)
s.t. g_j(x)\le 0  (j=1,2....k)

其中x为n维向量,f(x)有关于x各个分量的连续一阶偏导函数。

由上面的推导,可以得到拉格朗日函数:
L(x,\lambda,\mu)=f(x)+\sum_i^m \lambda_i h_i(x) +\sum_j^k \mu_jg_j(x)
其中,\lambda=(\lambda_1,\lambda_2,...\lambda_m),\mu=(\mu_1,\mu_2,...\mu_k) 为引入的拉格朗日乘数。且向量\mu的每个分量大于等于零

其拉格朗日对偶函数定义为:
\Gamma( \lambda,\mu)=\inf_x L(x,\lambda,\mu)=\inf_x (f(x)+\sum_i^m \lambda_i h_i(x) +\sum_j^k \mu_jg_j(x))
其中,\lambda=(\lambda_1,\lambda_2,...\lambda_m),\mu=(\mu_1,\mu_2,...\mu_k) 为引入的拉格朗日乘数。且向量\mu的每个分量大于等于零

上面定义了拉格朗日对偶函数,下面推出拉格朗日对偶问题。

对拉格朗日对偶函数\Gamma( \lambda,\mu)进行分析。设\widetilde{x}是原始优化问题可行域内的一个点,x^*是原始问题的最优解。

因为下确界的定义有:
\inf_x L(x,\lambda,\mu)\le L(\widetilde{x},\lambda,\mu)

因为\widetilde{x}是原始优化问题可行域内的一个点,所以有:

h_i(\widetilde{x}) =0
g_j(\widetilde{x})\le 0
\mu_j\ge 0
所以有
\sum_i^m \lambda_i h_i(\widetilde{x}) +\sum_j^k \mu_jg_j(\widetilde{x})\le 0

所以有:
L(\widetilde{x},\lambda,\mu) \le f(\widetilde{x})

所以:
\Gamma( \lambda,\mu)=\inf_x L(x,\lambda,\mu)\le L(\widetilde{x},\lambda,\mu) \le f(\widetilde{x})

因为\widetilde{x} 是可行域中任意一点,所以对于最优解x^*也必须满足上面不等式,即:
\Gamma( \lambda,\mu)\le f(x^*)

所以,拉格朗日对偶函数确定了原始问题最优解的下界。

由于对于任意满足条件(\mu的每个分量大于等于零)的\lambda,\mu,上面不等式都成立,所以有:
\sup_{\lambda,\mu}\Gamma( \lambda,\mu)\le f(x^*)

试想如果上面的等号成立,那么我们就可以把原始问题求f(x)的最小值,转换成一下问题:
\max_{\lambda,\mu}\Gamma( \lambda,\mu)
s.t. 向量\mu的每个分量大于等于零。

如果能转化成上面问题,可以看出原问题的下确界等于上面问题的上确界,所以上面这个问题称作原问题的拉格朗日对偶问题。

这样我们就定义了什么是拉格朗日对偶问题。但是上面我们假设不等式中等式成立,也就是说在有些时候不等式中等式是不成立的,此时,什么时候等式成立成了关键问题,所以我们引入以下两个概念,强对偶和弱对偶。

强对偶和弱对偶

对于以下不等式
\sup_{\lambda,\mu}\Gamma( \lambda,\mu)\le f(x^*)
其中向量x^*为原始约束优化问题的最优解。

我们定义如果\sup_{\lambda,\mu}\Gamma( \lambda,\mu)= f(x^*)
那么原始约束的优化问题和以下问题成强对偶关系。
\max_{\lambda,\mu}\Gamma( \lambda,\mu)
s.t. 向量\mu的每个分量大于等于零。

我们定义如果\sup_{\lambda,\mu}\Gamma( \lambda,\mu)< f(x^*)
那么原始约束的优化问题和以下问题成弱对偶关系。
\max_{\lambda,\mu}\Gamma( \lambda,\mu)
s.t. 向量\mu的每个分量大于等于零。

所以如果两者成强对偶关系,那么我们可以将原问题转化成对偶问题来求,至于为什么大费周章的把原问题转化成对偶问题来解,在后面的文章详细分析。

现在又有一个新问题摆在我们的面前,就是什么时候是强对偶问题,什么时候是弱对偶问题。对于这个问题我们给出以下定理判断。

在证明强弱对偶问题的定理时,需要用到一下引理,所以先给出以下引理,再给出判断强弱对偶问题的定理。

引理(凸集分离定理)

设集合S1,S2是R^n(n≥1)中的两个不相交的非空凸集,则存在一个超平面分离S1,S2,既存在v∈R^n,v≠0以及b∈R 使得:
v⋅x+b \ge 0, \forall x∈S1,(1)且:
v⋅x+b \le 0, \forall x∈S2.(2)

证明:
定义集合S=S_1-S_2=\{x-y | x\in S_1 ,y\in S_2 \}。则对任意的z_1\in S ,z_2\in S
必存在x_1,x_2\in S_1y_1,y_2\in S_2有下式成立。
z_1=x_1-y_1\\ z_2=x_2-y_2\\
所以对任意的t\in [0,1]
(t)z_1+(1-t)z_2=(t)x_1-(t)y_1 +(1-t)x_2-(1-t)y_2=(t)x_1+(1-t)x_2-((t)y_1 +(1-t)y_2)\\
因为集合S1,S2是R^n(n≥1)中的两个不相交的非空凸集,

所以对任意的t\in [0,1](t)z_1+(1-t)z_2\in S
所以集合S也是非空凸集合。且向量0不属于集合S。

对于以上不包含零向量的凸集合S,构造集合A=S\bigcup \partial S
其中\partial S表示S的边界。所以对于集合A是R^n的一个闭凸子集。
因为A是闭凸集,所以必然存在x^*\in A使得:
x^*=\inf_{y\in A}{||y||^2}

可以证明对\forall z∈A,都有内积(z,x^*)\ge0

x^*为零向量,则结论显然成立,以下在x^*\neq 0的情况下讨论。

用反证法证明以上结论,假设存在向量\beta\in A.有
(\beta,x^*)<0

所以由向量\beta,x^*可以构造构造一个垂直于向量\beta-x^*的向量\mu,构造方式如下:
\mu=\beta-\frac{\beta-x^*}{||\beta-x^*||}\frac{(\beta,\beta-x^*)}{||\beta-x^*||} = \frac{(x^*,x^*)-(x^*,\beta)}{||\beta-x^*||^2}\beta-\frac{(\beta,\beta)-(\beta,x^*)}{||\beta-x^*||^2} x^*

\lambda=\frac{(x^*,x^*)-(x^*,\beta)}{||\beta-x^*||^2},则1-\lambda=\frac{(\beta,\beta)-(\beta,x^*)}{||\beta-x^*||^2},

所以\mu=\lambda \beta+(1-\lambda )x^*

\lambda的表达式得到,\lambda \in (0,1)

所以,推导出向量\mu \in A

又因为\mu-x^*=\lambda \beta-\lambda x^*=\lambda (\beta- x^*),所以\mu-x^*\beta- x^*共线,所以\mu也垂直于\mu-x^*

所以:
||\mu||^2=||\mu-x^*+x^*||^2=||\mu-x^*||^2+||x^*||^2 \le ||x^*||^2

所以,与x^*=\inf_{y\in A}{||y||^2}相矛盾。所以假设不成立。

所以对于构造的凸集合S,可以找到一个向量\nu,对\forall z \in S,有
(\nu, z)\ge 0

而集合S中的元素可写为z=x-y,x\in S_1,y \in S_2.

所以有:
(\nu,(x-y))\ge 0

b=-\sup_{y\in S_2}\{(\nu, y)\}

所以有:
(v,x)+b \ge 0, \forall x∈S1,(1)

而此时刚好:
(\nu ,y)+b \le 0, \forall y∈S2.(2)

所以引理得到证明。

定理(强对偶充分条件定理):

对于多约束优化问题如下:
\min_{x} f(x)
s.t. h_i(x)= 0   (i=1,2....m)
s.t. g_j(x)\le 0  (j=1,2....k)
其中x为n维向量,f(x)有关于x各个分量的连续一阶偏导函数。这里h_i(x)已经化简为行满秩。

如果以上问题是一个凸优化问题,函数g_j(x)是凸函数,函数h_i(x)是放射函数, 且存在\widetilde{x}∈relintD(定义域的相对内部)使得:g_j(\widetilde{x})<0, 对任意的j=1,2,...k,h_i(\widetilde{x})= 0  对任意的 (i=1,2....m) ,则原问题和对偶问题是强对偶的。

证明:
首先我们定义集合:
\cal{G}=\{(g_1(x),g_2(x)...g_k(x),h_1(x),h_2(x)...h_m(x),f(x)) \in R^k\times R^m\times R|x \in D \}
其中集合D为拉格朗日函数的定义域,注意这个地方不是原问题的可行域,因为转化成拉格朗日函数时,不存在可行域。

接着我们引入上镜图的概念,定义集合
\cal{A}=\{p+(u,0,t) \in R^k\times R^m\times R| p \in \cal{G},u\in R^k ,0\in R^m.t \in R ,u \succeq 0,t \ge 0 \}

由上镜集的定义,可以看出,上镜集是集合\cal{G}沿着前k个坐标轴和最后一个坐标轴的正向运动覆盖的区域。

因为函数f(x)是凸函数,函数g_j(x)是凸函数,函数h_i(x)是放射函数,所以集合\cal{G}也是凸函数,所以其上镜图\cal{A}也是个凸集。

我们令:
\cal{B}=\{(u,0,t) \in R^k\times R^m\times R| p \in \cal{G},u\in R^k ,0\in R^m.t \in R ,u \preceq 0,t \le p^* \}

其中p^*=inf\{ t|(\mu,\lambda,t )\in \cal{G}, \mu \preceq 0 ,\lambda=0 \}

p^*的定义可以看出,p^*就是原问题的最小值f(x^*).

可以根据凸集的定义,可以验证集合\cal{B}也是凸集。

\cal{A}\cal{B}定义,可以得到\cal{A}\cal{B}的交集为空。此时由凸集分离定理,可得到,存在一个非零向量( \mu_0,\lambda_0,t_0 ) \in R^k\times R^m\times R,以及b \in R使得:
( \mu_0,\lambda_0,t_0)(g_1(x)+u_1,..g_k(x)+u_k,h_1(x),h_2(x)..h_m(x),f(x)+t)+b\ge 0 ,\forall (g_1(x)+u_1,..g_k(x)+u_k,h_1(x),h_2(x)..h_m(x),f(x)+t)∈ \cal{A}
( \mu_0,\lambda_0,t_0)(u,0,t)+b\le 0 ,\forall (u,0 , t)∈ \cal{B}

其中\mu_0=(\mu_1,...\mu_k),\lambda_0=(\lambda_1,...\lambda_m)

可化简为:
\sum_j^k{\mu_j(g_j(x)+u_j)}+\sum_i^m\lambda_ih_i(x)+t_0(f(x)+t)+b\ge 0 ,\forall (g_1(x)+u_1,..g_k(x)+u_k,h_1(x),h_2(x)..h_m(x),f(x)+t)∈ \cal{A}
再化简为
\sum_j^k{\mu_jg_j(x) }+\sum_i^m\lambda_ih_i(x)+t_0 f(x) +b + \mu_0 u + t_0t \ge 0 ,\forall (g_1(x)+u_1,..g_k(x)+u_k,h_1(x),h_2(x)..h_m(x),f(x)+t)∈ \cal{A} , (1)
上式对所有的x \in D,u \succeq 0,t \ge 0成立。

\mu_0 u + t_0t +b\le 0 ,\forall (u,0 , t)∈ \cal{B} ,(2)
上式对所有的x \in D,u \preceq 0,t \le p^*成立。

由(1)式的任意性,可得\mu_0\succeq0 ,t_0>0 ,令u从右侧趋近于0,t从右侧趋近于0,可得到:
\sum_j^k{\mu_jg_j(x) }+\sum_i^m\lambda_ih_i(x)+t_0 f(x) +b \ge 0

由(2)式得,u从左侧趋近于0,t从左侧趋近于 p^* ,可得到:
t_0p^*\le -b

所以:
\sum_j^k{\mu_jg_j(x) }+\sum_i^m\lambda_ih_i(x)+t_0 f(x) \ge t_0p^*

因为t_0\ge0 有两种情形,
第一种情况若t_0>0,两边同时除以t_0,得到L(x,\mu/t_0,\lambda_0/t_0) \ge p^*

所以
\sup_{\lambda,\mu}\Gamma( \lambda,\mu)\ge p^*= f(x^*)

又由于拉格朗日对偶本来
\sup_{\lambda,\mu}\Gamma( \lambda,\mu)\le f(x^*)

所以
\sup_{\lambda,\mu}\Gamma( \lambda,\mu)= p^*= f(x^*)

所以此时原问题和拉格朗日对偶问题是强对偶关系。

第二种情况若t_0=0,有

\sum_j^k{\mu_jg_j(x) }+\sum_i^m\lambda_ih_i(x) \ge0

此时因为定理的条件中有,存在\widetilde{x}∈relintD,有g_j(\widetilde{x})<0,j=(1,2,...k)

因为g_i(x)是凸函数,必有连续性,必然存在g_i(x)\le 0,i=(1,2,...k)的解集的一个真闭子集U,使得\forall x \in Ug_j(x)<0,j=(1,2,...k)

\mu_0\succeq0,所以在U上
\sum_j^k{\mu_jg_j(x) }\le0

所以
\sum_i^m\lambda_ih_i(x) \ge- \sum_j^k{\mu_jg_j(x) } \ge0

在集合U上,因为仿射函数\sum_i^m\lambda_ih_i(x) 必须恒等于零,因为若不很等于零,在U上必然不能有零点,这与h_i(\widetilde{x})=0$矛盾。

所以,\sum_i^m\lambda_ih_i(x)=0

所以\lambda_0=0.\mu_0=0,所以向量(\mu_0,\lambda_0,t_0)=0,这与凸集分离定理中(\mu_0,\lambda_0,t_0)非零矛盾,所以t_0不能等于0.所以定理得到证明。

Slater条件

所以由这个定理可以轻松简单的判断一个原问题和拉格朗日对偶问题是强对偶关系还是弱对偶关系。

只需要看是否满足定理中的条件:
对于一个凸优化问题,存在\widetilde{x}∈relintD(定义域的相对内部)使得:g_j(\widetilde{x})<0, 对任意的j=1,2,...k成立,h_i(\widetilde{x})= 0  对任意的 (i=1,2....m) 成立。

这个条件也被称为Slater条件。

自此,我们就引入了判断朗格朗日对偶为强对偶的条件。下面我们给出为什么使用拉格朗日对偶问题。

为什么使用拉格朗日对偶问题

如上面的分析,我们对拉格朗日函数中的未知数进行求导,既可以得到原问题的最优解,为何还有再引入拉格朗日对偶问题,之所以多此一举的使用拉格朗日对偶问题,主要有以下两点原因。

原因1

大大缩减了计算量,不论是直接解原问题,还是对拉格朗日函数求导,令导数等于零,其计算量都和自变量x的维度有关,如果x的维度很高时,这两种方法求解时的计算量就会变大,而不论x的维度多高,转化成拉格朗日对偶问题,其未知数\mu.\lambda的数量和约束条件的多少有关。从而大大减少了计算量。

原因2

\Gamma( \lambda,\mu)=\inf_x L(x,\lambda,\mu)=\inf_x (f(x)+\sum_i^m \lambda_i h_i(x) +\sum_j^k \mu_jg_j(x))

对任意的满足L(x,\lambda,\mu)定义域的\lambda_1,\lambda_2,有:

\begin{align} \Gamma(\frac{ \lambda_1+\lambda_2}{2},\mu)&=\inf_x L(x,\frac{ \lambda_1+\lambda_2}{2},\mu)\\ &=\inf_x (f(x)+\sum_i^m \frac{ \lambda_1+\lambda_2}{2} h_i(x) +\sum_j^k \mu_jg_j(x))\\ &=\inf_x (\frac{f(x)}{2}+\frac{f(x)}{2}+\sum_i^m \frac{ \lambda_1+\lambda_2}{2} h_i(x) +\frac{\sum_j^k \mu_jg_j(x)}{2}+\frac{\sum_j^k \mu_jg_j(x)}{2} )\\ &=\inf_x(\frac{ L( x , \lambda_1 , \mu )}{2}+\frac{L( x , \lambda_2 , \mu )}{2})\\ &\ge \inf_x(\frac{ L( x , \lambda_1 , \mu )}{2})+\inf_x( \frac{ L( x , \lambda_2 , \mu )}{2}))\\ &=\frac{ \Gamma( \lambda_1 ,\mu)}{2}+ \frac{\Gamma( \lambda_2 ,\mu)}{2}\\ \end{align}

所以\Gamma( \lambda,\mu)一定为一个凹函数。-\Gamma( \lambda,\mu)一定是一个凸函数。

也就是说不论原问题是不是凸优化问题,拉格朗日对偶问题一定是可以转化为凸优化问题。所以这就是有时引入拉格朗日对偶问题的必要性。

原因3

特别的在SVM中,引入拉格朗日对偶问题,有一个至关重要的原因,是可以方便的引入核函数。这点在下面SVM的推导中说明。

支持向量机(SVM)

和其他模型推导不一样,支持向量机模型的推导并不是从损失函数出发,其推导过程只是在中途化简时用到损失函数。

支持向量机模型其实是一个凸二次规划问题,所以其推导从凸二次规划出发。下面我们就具体的介绍怎么把支持向量机转化成凸二次规划问题。

设训练样本集D=\{(x_1,y_1),(x_2,y_2) ,(x_3,y_3)...(x_m,y_m)\},y_i \in \{-1,+1 \},
其中x_i=(x_{i1},x_{i2},x_{i3},...x_{in})代表第i个样本点的n个属性值,y_i是第i个样本点的label。
现在需要找一个超平面将样本集中的正负样本分开。首先考虑简单的形式,如果可以找到两个凸集S_1,S_2,使得正样本集在凸集S_1内,负样本集在凸集S_2内,那么由上面介绍的凸集分离定理,存在一个超平面,可以将正负样本完美的分离。如下图所示:

图1.PNG

由上图可以看出,可以将训练样本集D完美分开的超平面有很多个,现在我们要找到泛化能力最强的一个,也就是说当样本增加时,这个超平面还可以尽可能的将样本完美分离。我下面试着找到这个超平面。

和所有监督模型一样,训练样本集的最后一个维度y是样本的label,由上图可以看出超平面所在的空间对应的是样本点的属性空间,这个空间与label所在的维度空间没有关系, 先不考虑这个维度,所以下面说的样本点特指的是剔除了label的样本点。

设这个完美的超平面方程为:

\vec{w}^T\vec{x}+b=0

第一步:首先求出样本空间任意点\vec{x_i}=(x_{i1},x_{i2}...x_{in})(其中n为样本点的n个属性)到这个超平面的距离。

由超平面的方程可以得到,超平面的法向量为\vec{w},则单位法向量为\frac{\vec{w}}{||\vec{w}||}

设这个距离为d, 则\vec{x_i}\pm d\frac{\vec{w}}{||\vec{w}||}是点x在超平面上的投影点(法向量指向\vec{x_i}一侧时是减,法向量不指向\vec{x_i} 一侧时是加)。 则有下面方程成立:
\vec{w}^T(\vec{x_i}\pm d\frac{\vec{w}}{||\vec{w}||})+b=0

所以:
d=\frac{|\vec{w}^T\vec{x_i}+b|}{||w||}

以上求出了样本点到超平面的距离。

第二步:求阴性样本到阳性样本之间的最小距离。
对于每个label等于1的样本点\vec{x_i}有下面公式成立:
\vec{w}^T\vec{x_i}+b>0
对于每个label等于-1的样本点\vec{x_i}有下面公式成立:
\vec{w}^T\vec{x_i}+b<0

所以存在\varepsilon_1>0,\varepsilon_2<0,使下是成立:
\begin{cases} \vec{w}^T\vec{x_i}+b\ge \varepsilon_1 ,y_i=1\\ \vec{w}^T\vec{x_i}+b \le \varepsilon_2,y_i=-1 \end{cases}

而且使上述等式成立的阳性样本和阴性样本可以找到。

此时,令b=b_1+\frac{\varepsilon_1+\varepsilon_2}{2}

则有
\begin{cases} \vec{w}^T\vec{x_i}+b_1 \ge \frac{\varepsilon_1-\varepsilon_2}{2}>0 ,y_i=1\\ \vec{w}^T\vec{x_i}+b_1 \le \frac{\varepsilon_2-\varepsilon_1}{2}<0,y_i=-1 \end{cases}

所以有:
\begin{cases} \vec{w^*}^T\vec{x_i}+b^*\ge 1,y_i=1\\ \vec{w^*}^T\vec{x_i}+b^* \le -1,y_i=-1 \end{cases}

这个公式可以看出,通过调整初始的w,b得到的w^*,b^*只差统一的一个倍数或者统一的一个平移。

所以求出 w^*,b^*即是求出w,b, 所以这里为了后面表述方便,令w,b代替以上公式中的w^*,b^*.所以有:

\begin{cases} \vec{w}^T\vec{x_i}+b\ge 1,y_i=1\\ \vec{w}^T\vec{x_i}+b \le -1,y_i=-1 \end{cases}

所以此时阳性样本到阴性样本之间的最小距离为:
min_{x_i,x_j} r= min_{x_i,x_j}\{ \frac{|\vec{w}^T\vec{x_i}+b|}{||w||}+\frac{|\vec{w}^T\vec{x_j}+b|}{||w||}\}

其中x_i为阳性样本点,x_j为阴性样本点

因为
\begin{cases} \vec{w}^T\vec{x_i}+b\ge 1,y_i=1\\ \vec{w}^T\vec{x_j}+b \le -1,y_j=-1 \end{cases}
所以:
|\vec{w}^T\vec{x}+b|\ge 1 ,\forall x \in D

取使得上述不等式中等号成立的阳性样本点和阴性样本点,则这个最小距离可求出如下:

min_{x_i,x_j} r= \frac{2}{||w||}

所以对于训练样本集D,阳性样本点和阴性样本点的最小距离为:
\frac{2}{||w||}

要使得模型泛化性能好,支持向量机的做法是,最大化这个距离。这就是支持向量机的本质。

在上述过程中,满足不等式中等号的样本点称为支持向量。因为最后推导的这个距离和其他的点(向量)没有任何关系,只与这些点有关,所以者些被称为支持向量。

第三步:最大化上述距离。

我们得到了阴性样本和阳性样本之间的最小距离:
\frac{2}{||w||}
现在要寻找w,b使得这个距离最大化。

既转化为以下问题:
\max_{w,b} \frac{2}{||w||}
s.t.y_i(\vec{w}^T\vec{x_i}+b)\ge 1 ,(i=1,2...m)

以上问题右等价于以下问题:
\min_{w,b} \frac{1}{2} ||w||^2
s.t.y_i(\vec{w}^T\vec{x_i}+b)\ge 1 ,(i=1,2...m)

这个优化问题就是支持向量机(SVM)的常见形式。

注意上述问题中w,b是自变量,约束条件都是仿射函数,所以上述优化问题是一个凸优化。且是一个凸二次规划问题。

对于这个凸二次规划问题,由上文的分析,我们引入拉格朗日函数:

L(\vec{w},b,\vec{\alpha})=\frac{1}{2}||w||^2+\sum_{i=1}^m\alpha_i(1-y_i(\vec{w}^T\vec{x_i}+b))

因为此时自变量的维度是n+m+1维,解起来还是比较麻烦,所以转化为拉格朗日对偶问题解决。

由于上面的是凸二次规划,满足slater条件,所以其拉格朗日对偶问题是强对偶,其对偶问题的最优值就是原问题的最优值。

第四步:下面导出拉格朗日对偶问题:

上面的拉格朗日函数对各个维度求偏导得到:
\frac{\partial L(\vec{w},b,\vec{\alpha}) }{\partial \vec{w}}= \vec{w}-\sum_{i=1}^m\alpha_iy_i \vec{x_i}=0
\frac{\partial L(\vec{w},b,\vec{\alpha}) }{\partial b}=\sum_{i=1}^m\alpha_iy_i=0

所以:
\vec{w}-\sum_{i=1}^m\alpha_iy_i \vec{x_i}=0
\sum_{i=1}^m\alpha_iy_i=0

所以原拉格朗日函数可以消掉w,b,得到以下函数:
L(\vec{\alpha})= \sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m \alpha_i\alpha_jy_iy_j\vec{x_i}^T\vec{x_j}

所以拉格朗日对偶问题为:
\max_{\vec{\alpha}}(\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m \alpha_i\alpha_jy_iy_j\vec{x_i}^T\vec{x_j})
s.t.\alpha_i\ge 0, \sum_{i=1}^m\alpha_iy_i=0

由上面拉格朗日对偶问题的分析,这个也是一个凸优化,且这个优化问题的自变量的维度只有m维,比原问题减小了n+1维,所以大大减小了计算量。

但是在m很大是求解这个问题还是很麻烦,未解决这个问题引入顺序最小化(SMO)算法,大大缩短计算时间,SMO算法在下面介绍,这里为了SVM的推导接着进行。

对于上面拉格朗日对偶问题,我们用SMO算法解出\vec{\alpha},带入到以下等式:
\vec{w}-\sum_{i=1}^m\alpha_iy_i \vec{x_i}=0

可求得w,由于原始的带约束的凸二次规划中,约束条件中是不等式约束,所以转化为拉格朗日函数求解时,会伴随KKT条件:
\begin{cases} \alpha_i \ge 0\\ 1-y_i(\vec{w}^T\vec{x_i}+b)\le 0\\ \alpha_j (1-y_i(\vec{w}^T\vec{x_i}+b))=0 \end{cases}

所以此时可以得到,解出的\alpha_i要么大于零,要么等于零。当\alpha_i大于零时,其1-y_i(\vec{w}^T\vec{x_i}+b)=0,此时可反解出b。

这样我们就求出了一开始需要的超平面
\vec{w}^t\vec{x}+b=0

需要注意的是,由\vec{w}=\sum_{i=1}^m\alpha_iy_i \vec{x_i} 0
得到,在求的\alpha_i后,求解\vec{w}时,\alpha_i=0对应的样本点是没有起作用的,求\vec{w}时,解起作用的是\alpha_i>0的点,当\alpha_i>0时,由KKT条件,得到1-y_i(\vec{w}^T\vec{x_i}+b)=0,这些点被称为支持向量。

也就是说最终模型求解出来后,仅仅与支持向量有关,与其他点没关系。

至此,我们推导出了SVM的基本款。为什么说是基本款,因为以上模型只支持最简单的数据集是线性可分的问题。所以要对其扩展,扩展方向有两个,一个是数据集非线性可分,一个是数据集不可分。对于解决非线性的问题,我们引入核函数。对于不可分的问题,我们引入松弛变量。下面分别介绍。

再生核希尔伯特空间、核函数与核技巧

在上面的推导过程中,训练数据集是线性可分的,如果上面的数据集D如下图分布,我们是不可能找到一个平面将其阴性样本和阳性样本分开的。

非线性数据集图1.PNG

此时我们要想使用SVM,必须做一个变换。

如上图所示数据集,可以第i个样本点\vec{x_i}=(x_{i1},x_{i2})的极坐标变换为
\begin{cases} x_{i1} =r_i·cos\theta_i \\ x_{i2} =r_i·sin\theta_i \end{cases}

可以反解出r_i,\theta_i为:
\begin{cases} r_i =\sqrt{x_{i1}^2+x_{i2}^2} \\ \theta_i= \arctan {\frac{x_{i2}}{x_{i1}}} \end{cases}

把上面的映射关系设为:(r_i,\theta_i)=\phi( (x_{i1},x_{i2}) )=\phi( \vec{x_i} )

所以原数据集的分布图可以转化为下图:

非线性数据集图2.PNG

此时若用(r,\theta)当成新的直角坐标,数据集是线性可分的,是可以使用上面推导的SVM的。

此时SVM求解时的拉格朗日对偶问题如下:
\max_{\vec{\alpha}}(\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m \alpha_i\alpha_jy_iy_j (r_i,\theta_i) ^T(r_j,\theta_j))
s.t.\alpha_i\ge 0, \sum_{i=1}^m\alpha_iy_i=0

对于上述公式中的(r_i,\theta_i) ^T(r_j,\theta_j),有:

(r_i,\theta_i)^T(r_j,\theta_j)= ((r_i,\theta_i), (r_j,\theta_j) ) = (\phi( \vec{x_i} ),\phi( \vec{x_j} ))=\phi( \vec{x_i} )^T\phi( \vec{x_j} )

此时SVM求解时的拉格朗日对偶问题如下:
\max_{\vec{\alpha}}(\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m \alpha_i\alpha_jy_iy_j \phi( \vec{x_i} )^T\phi( \vec{x_j} ))
s.t.\alpha_i\ge 0, \sum_{i=1}^m\alpha_iy_i=0

可以看到,这个问题并没有变量r,\theta,所以我们只要通过样本点\vec{x_i}和\vec{x_j}能直接求得\phi( \vec{x_i} )^T\phi( \vec{x_j} ),那么问题就大大的简单了,

我们设:
\kappa ( \vec{x_i},\vec{x_j})=\phi( \vec{x_i} )^T\phi( \vec{x_j} )

如果能找到函数\kappa,我们根本不需要知道\phi的具体表达式,直接求解以下问题即可:
\max_{\vec{\alpha}}(\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m \alpha_i\alpha_jy_iy_j \kappa ( \vec{x_i},\vec{x_j}))
s.t.\alpha_i\ge 0, \sum_{i=1}^m\alpha_iy_i=0

所以问题的关键就转化成了两个问题,其一、对于任意的数据集,\phi是否存在,如果\phi根本不存在,这就行不通。其二、\phi如果存在,那么怎么求得\kappa.

Cover定理

对于一个复杂的模式分类问题,若该分类问题的样本空间不是稠密的,则将其分类问题非线性地投射到高维空间将比投射到低维空间更可能是线性可分的。

根据cover定理,若原问题线性不可分,则将其映射到比原空间更高的维度空间上,其更容易线性可分,但是也可能线性不可分的,定理中只说了更容易线性可分。但是如果样本空间中维度是有限维的,我们下面还可以证明,一定存在一个映射\phi,将其映射到更高维上时,问题线性可分。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270