之前看SVM核函数相关的问题,总是会碰到再生核希尔伯特空间(Reproducing Kernel Hilbert Space, RKHS)不过一直没有太仔细了解过到底是指的什么,前几天研究了一下。
希尔伯特空间
先来说一下什么是希尔伯特空间。
这个概念听起来高大上,其实是个非常简单的概念。
先说什么是线性空间
线性空间
线性空间即定义了数乘和加法的空间。这个就是具有线性结构的空间。
有了线性空间的概念之后,因为有数乘和加法,所以空间中可以找到一组基底(Basis)能够通过线性组合得到空间中所有的点。
度量空间和赋范空间
距离的定义必须满足如下三个条件:
1. d(x,y)≥0;d(x,y)=0 的充要条件是x=y即非负性
2. d(x,y)=d(y,x);对称性
3. d(x,z)+d(z,y)≥d(x,y) 满足三角不等式。
定义了距离的空间叫度量空间。
定义了距离的线性空间叫线性度量空间
接下来再定义范数||x||,范数的定义必须满足:
1. ||x||≥0即非负性
2. ||αx||=|α|||x||
3. ||x||+||y||≥||x+y||满足三角不等式
所以范数这个概念,可以看成从零点到x的距离,同时比价第二条(2),即数乘可以提取出来。
所以:由范数可以定义距离,即 因为距离的定义,不满足范数的第二条条件 因为 ||x||=d(0,x) 但 ||αx||=d(0,ax)≠|α|||x|| 举一个例子:d(x,y)=∑(xi−yi)2−−−−−−−−−−√1+∑(xi−yi)2−−−−−−−−−−√ 这个满足距离定义,但是不满足范数定义。所以范数是比距离更具体的一个东西 而定义了范数的空间,叫赋范空间和度量空间。另外完备的赋范空间叫巴拿赫空间。 而定义了范数的线性空间,叫赋范线性空间 定义了范数之后,还没有定义角度。那就再来定义角度,所以可以定义内积<x,y><script type="math/tex" id="MathJax-Element-4639"></script>如下: 1. 对称性 2. 对第一变元的线性性质,即<αx,y>=α<x,y><script type="math/tex" id="MathJax-Element-4640"><\alpha x,y> = \alpha< x,y></script> 3. 正定性 另外还要再说一下函数空间的内积。 一个函数可以看成一个无穷维的向量。 将一个函数按照x进行采样,可以得到一个函数的表示为一个向量的形式 如果采样的间隔变得无穷的小,则这个函数就可以表示为一个无穷维的向量。 所以一个函数空间的内积可以定义为: <f,g>=∫f(x)g(x)dx<script type="math/tex; mode=display" id="MathJax-Element-4643">= \int f(x)g(x)dx</script> 由内积可以导出范数,但是范数不可以导出内积。因为可以定义||x||2=<x,x> 另外函数空间的概念,还可以从另外一个角度来思考,例如: 1. 泰勒级数展开,可以看成将一个函数用{xi}∞0 作为基底表示的一个空间 2. 傅立叶级数展开,即将一个函数用三角函数的形式进行无穷维的展开 一个n维的的空间,且定义了内积,就叫欧几里德空间(即有线性结构和夹角,垂直,投影这些)。 引入无穷维的空间(一般指函数空间),具有线性结构同时定义了内积,同时还具有完备性的空间就叫希尔伯特空间 比如上面讲的傅立叶变换就是一个希尔伯特空间。 在一般的欧氏空间中,我们可以定义一个 Ax=λx 当一个矩阵可以进行特征值分解的时候,其特征向量构成了这个n维空间的一组基底 然后将其推广到 先说定义一个函数空间中无穷维的矩阵 如何其满足: 1. 正定性,即对于任意的函数f(x),都有∫∫f(x)K(x,y)f(y)dxdy≥0 2. 对称性,即K(x,y)=K(y,x) ∫K(x,y)ψ(x)dx=λψ(y) 则这个二元函数可以称为核函数 可以证明一个核函数的特征函数之间是正交的 <ψ1,ψ2>=∫ψ1(x)ψ2(x)dx=0<script type="math/tex; mode=display" id="MathJax-Element-5791">< \psi_1, \psi_2 > = \int \psi_1(\mathbf{x}) \psi_2(\mathbf{x}) d\mathbf{x} = 0</script> 所以{ψi}∞i=1是原来函数空间之中的一组基底 同时原来的核函数也可以分解成为核函数之间相乘的结果: K(x,y)=∑i=0∞λiψi(x)ψi(y) 下面就进入到正题之中。 RKHS是由核函数构成的空间。 其基底为:{λi−−√ψi}∞i=1 所以其中任意函数都可以由基底表示 f=∑i=1∞fiλi−−√ψi选出其中的两个函数,按照坐标表示如下: f=(f1,f2,...)TH和g=(g1,g2,...)TH 所以其内积为: <f,g>H=∑i=1∞figi<script type="math/tex; mode=display" id="MathJax-Element-7650">< f,g >_\mathcal{H} = \sum_{i=1}^{\infty} f_i g_i</script> 再来看核函数K(x,y)将其中一个元素固定K(x0,y),则其也可以看成一个函数 K(x0,y)=∑i=0∞λiψi(x)ψi 化成向量坐标表示形式: K(x0,y)=(λ1−−√ψ1(x),λ2−−√ψ2(x),⋯)TH 所以计算内积: <K(x0,y),K(y0,x)>H=∑i=0∞λiψi(x0)ψi(y0)=K(x0,y0)<script type="math/tex; mode=display" id="MathJax-Element-7655">< K(\mathbf{x_0},\mathbf{y}), K(\mathbf{y_0},\mathbf{x}) >_\mathcal{H} = \sum_{i=0}^{\infty} \lambda_i \psi_i (\mathbf{x_0}) \psi_i(\mathbf{y_0}) = K(\mathbf{x_0},\mathbf{y_0})</script> 上面这个性质就叫做再生性(reproducing property),所以这个空间才叫做再生核希尔伯特空间。 这个性质是非常好的,因为这样看,原本函数之间计算内积需要算无穷维的积分的,但是现在只需要算核函数就好了。 所以定义一个点的映射一个点x给其映射到一个无穷维的特征空间【即先将这个点变成一个函数,而这个函数可以看成一个无穷维的特征空间】: 得到两个特征空间上的内积为: <Φ(x),Φ(y)>H=<K(x,⋅),K(y,⋅)>H=K(x,y)<script type="math/tex; mode=display" id="MathJax-Element-7658">< \boldsymbol{\Phi} (\mathbf{x}), \boldsymbol{\Phi} (\mathbf{y}) >_\mathcal{H} = < K(\mathbf{x},\cdot), K(\mathbf{y},\cdot) >_\mathcal{H} = K(\mathbf{x},\mathbf{y})</script> 这就是kernel trick 这个相当于另一种SVM的推导形式了,即先将点映射成为kernel的形式,然后再进行那个最优化的一番推导。 然后也能推出最后跟用svm正常推导,最后把内积替换成为那个形式一样的结果。 详情见参考文献[2][3]都有推导。希尔伯特空间
核函数
再生核希尔伯特空间
SVM的kernel形式推导
参考资料
函数空间这个是上交的一个公开课:数学之旅的其中一讲。整个系列讲的都非常的不错,通过通俗的方式讲解了数学中许多高深的概念。A Story of Basis and Kernel - Part II: Reproducing Kernel Hilbert Space这个是一个中国人写的英文博客,但是它的的英文水平非常之高,读起来通俗易懂。这一篇的前一篇是讲函数空间的,也非常好,建议看一下。支持向量机:Kernel II这篇讲支持向量机的,讲的也不错。