Learning中的代数结构的建立Learning是一个融会多种数学于一体的领域。说起与此有关的数学学科,我们可能会迅速联想到线性代数以及建立在向量空间基础上的统计模型——事实上,主流的论文中确实在很大程度上基于它们。R^n(n-维实向量空间)是我们在paper中见到最多的空间,它确实非常重要和实用,但是,仅仅依靠它来描述我们的世界并不足够。事实上,数学家们给我们提供了丰富得多的工具。“空间”(space),这是一个很有意思的名词,几乎出现在所有的数学分支的基础定义之中。归纳起来,所谓空间就是指一个集合以及在上面定义的某种数学结构。关于这个数学结构的定义或者公理,就成为这个数学分支的基础,一切由此而展开。还是从我们最熟悉的空间——R^n说起吧。大家平常使用这个空间的时候,除了线性运算,其实还用到了别的数学结构,包括度量结构和内积结构。·第一,它是一个拓扑空间(Topologicalspace)。而且从拓扑学的角度看,具有非常优良的性质:Normal(implyingHausdorffandRegular),LocallyCompact,Paracompact,withCountablebasis,Simplyconnected(implyingconnectedandpathconnected),Metrizable.·第二,它是一个度量空间(Metricspace)。我们可以计算上面任意两点的距离。·第三,它是一个有限维向量空间(Finitedimensionalspace)。因此,我们可以对里面的元素进行代数运算(加法和数乘),我们还可以赋予它一组有限的基,从而可以用有限维坐标表达每个元素。·第四,基于度量结构和线性运算结构,可以建立起分析(Analysis)体系。我们可以对连续函数进行微分,积分,建立和求解微分方程,以及进行傅立叶变换和小波分析。·第五,它是一个希尔伯特空间(也就是完备的内积空间)(Hilbertspace,Completeinnerproductspace)。它有一套很方便计算的内积(innerproduct)结构——这个空间的度量结构其实就是从其内积结构诱导出来。更重要的,它是完备的(Complete)——代表任何一个柯西序列(Cauchysequence)都有极限——很多人有意无意中其实用到了这个特性,不过习惯性地认为是理所当然了。·第六,它上面的线性映射构成的算子空间仍旧是有限维的——一个非常重要的好处就是,所有的线性映射都可以用矩阵唯一表示。特别的,因为它是有限维完备空间,它的泛函空间和它本身是同构的,也是R^n。因而,它们的谱结构,也就可以通过矩阵的特征值和特征向量获得。·第七,它是一个测度空间——可以计算子集的大小(面积/体积)。正因为此,我们才可能在上面建立概率分布(distribution)——这是我们接触的绝大多数连续统计模型的基础。我们可以看到,这是一个非常完美的空间,为我们的应用在数学上提供了一切的方便,在上面,我们可以理所当然地认为它具有我们希望的各种良好性质,而无须特别的证明;我们可以直接使用它的各种运算结构,而不需要从头建立;而且很多本来不一样的概念在这里变成等价的了,我们因此不再需要辨明它们的区别。以此为界,Learning的主要工作分成两个大的范畴:1.建立一种表达形式,让它处于上面讨论的R^n空间里面。2.获得了有限维向量表达后,建立各种代数算法或者统计模型进行分析和处理。这里只讨论第一个范畴。先看看,目前用得比较广泛的一些方法:1.直接基于原始数据建立表达。我们关心的最终目标是一个个现实世界中的对象:一幅图片,一段语音,一篇文章,一条交易记录,等等。这些东西大部分本身没有附着一个数值向量的。为了构造一个向量表达,我们可以把传感器中记录的数值,或者别的什么方式收集的数值数据按照一定的顺序罗列出来,就形成一个向量了。如果有n个数字,就认为它们在R^n里面。不过,这在数学上有一点小问题,在大部分情况下,根据数据产生的物理原理,这些向量的值域并不能充满整个空间。比如图像的像素值一般是正值,而且在一个有界闭集之中。这带来的问题是,对它们进行线性运算很可能得到的结果会溢出正常的范围——在大部分paper中,可能只是采用某些heuristics的手段进行简单处理,或者根本不管,很少见到在数学上对此进行深入探讨的——不过如果能解决实际问题,这也是无可厚非的,毕竟不是所有的工作都需要像纯数学那样追求严谨。2.量化(quantization)。这是在处理连续信号时被广泛采用的方式。只是习以为常,一般不提名字而已。比如一个空间信号(Vision中的image)或者时间信号,它们的domain中的值是不可数无限大的(uncountablyinfinite),不要说表示为有限维向量,即使表达为无限序列也是不可能的。在这种情况下,一般在有限域内,按照一定顺序每隔一定距离取一个点来代表其周围的点,从而形成有限维的表达。这就是信号在时域或空域的量化。这样做不可避免要丢失信息。但是,由于小邻域内信号的高度相关,信息丢失的程度往往并不显著。而且,从理论上说,这相当于在频域中的低通过率。对于有限能量的连续信号,不可能在无限高的频域中依然保持足够的强度,只要采样密度足够,丢失的东西可以任意的少。除了表示信号,对于几何形体的表达也经常使用量化,比如表示curve和surface。3.找出有限个数充分表达一个对象也许不是最困难的。不过,在其上面建立数学结构却未必了。一般来说,我们要对其进行处理,首先需要一个拓扑结构用以描述空间上的点是如何联系在一起。直接建立拓扑结构在数学上往往非常困难,也未必实用。因此,绝大部分工作采取的方式是首先建立度量结构。一个度量空间,其度量会自然地诱导出一个拓扑结构——不过,很多情况下我们似乎会无视它的存在。最简单的情况,就是使用原始向量表达的欧氏距离(Euclideandistance)作为metric。不过,由于原始表达数值的不同特性,这种方式效果一般不是特别好,未必能有效表达实际对象的相似性(或者不相似性)。因此,很多工作会有再此基础上进行度量的二次建立。方式是多种多样的,一种是寻求一个映射,把原空间的元素变换到一个新的空间,在那里欧氏距离变得更加合适。这个映射发挥的作用包括对信息进行筛选,整合,对某些部分进行加强或者抑制。这就是大部分关于featureselection,featureextraction,或者subspacelearning的文章所要做的。另外一种方式,就是直接调节距离的计算方式(有些文章称之为metriclearning)。这两种方式未必是不同的。如果映射是单射,那么它相当于在原空间建立了一个不同的度量。反过来,通过改变距离计算方式建立的度量在特定的条件下对应于某种映射。4.大家可能注意到,上面提到的度量建立方法,比如欧氏距离,它需要对元素进行代数运算。对于普通的向量空间,线性运算是天然赋予的,我们无须专门建立,所以可以直接进行度量的构造——这也是大部分工作的基础。可是,有些事物其原始表达不是一个n-tuple,它可能是一个set,一个graph,或者别的什么特别的object。怎么建立代数运算呢?一种方法是直接建立。就是给这些东西定义自己的加法和数乘。这往往不是那么直接(能很容易建立的线性运算结构早已经被建立好并广泛应用了),可能需要涉及很深的数学知识,并且要有对问题本身的深入了解和数学上的洞察力。不过,一个新的代数结构一旦建立起来,其它的数学结构,包括拓扑,度量,分析,以及内积结构也随之能被自然地诱导出来,我们也就具有了对这个对象空间进行各种数学运算和操作的基础。加法和数乘看上去简单,但是如果我们对于本来不知道如何进行加法和数乘的空间建立了这两样东西,其理论上的贡献是非常大的。(一个小问题:大家常用各种graphicalmodel,但是,每次这些model都是分别formulate,然后推导出estimation和evaluation的步骤方法。是否可能对thespaceofgraphicalmodel或者它的某个特定子集建立某种代数结构呢?(不一定是线性空间,比如群,环,广群,etc)从而使得它们在代数意义上统一起来,而相应的estimation或者evaluation也可以用过代数运算derive。这不是我的研究范围,也超出了我目前的能力和知识水平,只是我相信它在理论上的重要意义,留作一个远景的问题。事实上,数学中确实有一个分支叫做Algebraicstatistics可能在探讨类似的问题,不过我现在对此了解非常有限。)5.回到我们的正题,除了直接建立运算定义,另外一种方式就是嵌入(embedding)到某个向量空间,从而继承其运算结构为我所用。当然这种嵌入也不是乱来,它需要保持原来这些对象的某种关系。最常见的就是保距嵌入(isometricembedding),我们首先建立度量结构(绕过向量表达,直接对两个对象的距离通过某种方法进行计算),然后把这个空间嵌入到目标空间,通常是有限维向量空间,要求保持度量不变。“嵌入”是一种在数学上应用广泛的手段,其主要目标就是通过嵌入到一个属性良好,结构丰富的空间,从而利用其某种结构或者运算体系。在拓扑学中,嵌入到metricspace是对某个拓扑空间建立度量的重要手段。而在这里,我们是已有度量的情况下,通过嵌入获取线性运算的结构。除此以来,还有一种就是前些年比较热的manifoldembedding,这个是通过保持局部结构的嵌入,获取全局结构,后面还会提到。6.接下来的一个重要的代数结构,就是内积(innerproduct)结构。内积结构一旦建立,会直接诱导出一种性质良好的度量,就是范数(norm),并且进而诱导出拓扑结构。一般来说,内积需要建立在线性空间的基础上,否则连一个二元运算是否是内积都无法验证。不过,kernel理论指出,对于一个空间,只要定义一个正定核(positivekernel)——一个符合正定条件的二元运算,就必然存在一个希尔伯特空间,其内积运算等效于核运算。这个结论的重要意义在于,我们可以绕开线性空间,通过首先定义kernel的方式,诱导出一个线性空间(叫做再生核希尔伯特空间ReproducingKernelHilbertSpace),从而我们就自然获得我们所需要的度量结构和线性运算结构。这是kerneltheory的基础。在很多教科书中,以二次核为例子,把二维空间变成三维,然后告诉大家kernel用于升维。对于这种说法,我一直认为在一定程度上是误导的。事实上,kernel的最首要意义是内积的建立(或者改造),从而诱导出更利于表达的度量和运算结构。对于一个问题而言,选择一个切合问题的kernel比起关注“升维”来得更为重要。kernel被视为非线性化的重要手段,用于处理非高斯的数据分布。这是有道理的。通过nonlinearkernel改造的内积空间,其结构和原空间的结构确实不是线性关联,从这个意义上说,它实施了非线性化。不过,我们还应该明白,它的最终目标还是要回到线性空间,新的内积空间仍旧是一个线性空间,它一旦建立,其后的运算都是线性的,因此,kernel的使用就是为了寻求一个新的线性空间,使得线性运算更加合理——非线性化的改造最终仍旧是要为线性运算服务。值得一提的是,kernelization本质上说还是一种嵌入过程:对于一个空间先建立内积结构,并且以保持内积结构不变的方式嵌入到一个高维的线性空间,从而继承其线性运算体系。7.上面说到的都是从全局的方式建立代数结构的过程,但是那必须以某种全局结构为基础(无论预先定义的是运算,度量还是内积,都必须适用于全空间。)但是,全局结构未必存在或者适合,而局部结构往往简单方便得多。这里就形成一种策略,以局部而达全局——这就是流形(manifold)的思想,而其则根源于拓扑学。从拓扑学的角度说,流形就是一个非常优良的拓扑空间:符合Hausdorff分离公理(任何不同的两点都可以通过不相交的邻域分离),符合第二可数公理(具有可数的拓扑基),