流形学习 (manifold learning)算法
zz from prfans
...............................
dodo:流形学习 (manifold learning)markdown
dodoapp
流形学习是个很普遍的概念。这里我主要谈的是自从2000年之后造成的流形学习概念和其主要表明方法。自从2000年之后,流形学习被认为属于非线性降维的一个分支。众所周知,引导这一领域迅速发展的是2000年Science杂志上的两篇文章: Isomap and LLE (Locally Linear Embedding)。框架
那流形学习是什莫呢?为了好懂,我尽量应用少的数学概念来解释这个东西。所谓流形(manifold)就是通常的几何对象的总称。好比人,有中国人、美国人等等;流形就包括各类维数的曲线曲面等。和通常的降维分析同样,流形学习把一组在高维空间中的数据在低维空间中从新表示。和以往方法不一样的是,在流形学习中有一个假设,就是所处理的数据采样于一个潜在的流形上,或是说对于这组数据存在一个潜在的流形。 对于不一样的方法,对于流形性质的要求各不相同,这也就产生了在流形假设下的各类不一样性质的假设,好比在Laplacian Eigenmaps中要假设这个流形是紧致黎曼流形等。对于描述流形上的点,咱们要用坐标,而流形上自己是没有坐标的,因此为了表示流形上的点,必须把流形放入外围空间(ambient space)中,那末流形上的点就能够用外围空间的坐标来表示。好比R^3中的球面是个2维的曲面,由于球面上只有两个自由度,可是球面上的点通常是用外围R^3空间中的坐标表示的,因此咱们看到的R^3中球面上的点有3个数来表示的。固然球面还有柱坐标球坐标等表示。对于R^3中的球面来讲,那末流形学习能够粗略的归纳为给出R^3中的表示,在保持球面上点某些几何性质的条件下,找出找到一组对应的内蕴坐标(intrinsic coordinate)表示,显然这个表示应该是两维的,由于球面的维数是两维的。这个过程也叫参数化(parameterization)。直观上来讲,就是把这个球面尽可能好的展开在经过原点的平面上。在PAMI中,这样的低维表示也叫内蕴特征(intrinsic feature)。通常外围空间的维数也叫观察维数,其表示也叫天然坐标(外围空间是欧式空间)表示,在统计中通常叫observation。ide
了解了流形学习的这个基础,那末流形学习中的一些是非也就很天然了,这个下面穿插来讲。由此,若是你想学好流形学习里的方法,你至少要了解一些微分流形和黎曼几何的基本知识。函数
a) Isomap。工具
Josh Tenenbaum的Isomap开创了一个数据处理的新战场。在没有具体说Isomap以前,有必要先说说MDS(Multidimensional Scaling)这个方法。咱们国内的不少人知道PCA,却不少人不知道MDS。PCA和MDS是相互对偶的两个方法。MDS就是理论上保持欧式距离的一个经典方法,MDS最先主要用于作数据的可视化。因为MDS获得的低维表示中心在原点,因此又能够说保持内积。也就是说,用低维空间中的内积近似高维空间中的距离。经典的MDS方法,高维空间中的距离通常用欧式距离。学习
Isomap就是借窝生蛋。他的理论框架就是MDS,可是放在流形的理论框架内,原始的距离换成了流形上的测地线(geodesic)距离。其它如出一辙。所谓的测地线,就是流形上加速度为零的曲线,等同于欧式空间中的直线。咱们常常听到说测地线是流形上两点之间距离最短的线。其实这末说是不严谨的。流形上两点之间距离最短的线是测地线,可是反过来不必定对。另外,若是任意两个点之间都存在一个测地线,那末这个流形必须是连通的邻域都是凸的。Isomap就是把任意两点的测地线距离(准确地说是最短距离)做为流形的几何描述,用MDS理论框架理论上保持这个点与点之间的最短距离。在Isomap中,测地线距离就是用两点之间图上的最短距离来近似的,这方面的算法是通常计算机系中用的图论中的经典算法。优化
若是你曾细致地看过Isomap主页上的matlab代码,你就会发现那个代码的实现复杂度远超与实际论文中叙述的算法。在那个代码中,除了论文中写出的算法外,还包括了 outlier detection和embedding scaling。这两样东西,保证了运行他们的程序获得告终果通常来讲相对比较理想。可是,这在他们的算法中并无叙述。若是你直接按照他论文中的方法来实现,你能够体会一下这个结果和他们结果的差距。今后咱们也能够看出,那几个做者作学问的严谨态度,这是值得咱们好好学习的。ui
另外比较有趣的是,Tenenbaum根本不是作与数据处理有关算法的人,他是作计算认知科学(computational cognition science)的。在作这个方法的时候,他还在stanford,02年就去了MIT开创一派,成了CoCoSci 的掌门人,他的组成长十分迅速。可是有趣的是,在Isomap以后,他包括他在MIT带的学生就历来再也没有作过相似的工做。其缘由我今年夏天有所耳闻。他在今年参加 UCLA Alan Yuille 组织的一个summer school上说,(不是原文,是大意)咱们常常忘了作研究的原始出发点是什莫。他作Isomap就是为了找一个好的visual perception的方法,他还坚持了他的方向和信仰,computational cognition,他没有随波逐流。而由他引导起来的 manifold learning 却快速的发展成了一个新的方向。
这是一个值得咱们好好思考的问题。咱们作一个东西,选择一个研究方向到底是为了什莫。你考虑过吗?
(固然,此问题也在问我本身)
b) LLE (Locally linear Embedding)
LLE在做者写出的表达式看,是个具备十分对称美的方法. 这种看上去的对称对于启发人很重要。LLE的思想就是,一个流形在很小的局部邻域上能够近似当作欧式的,就是局部线性的。那末,在小的局部邻域上,一个点就能够用它周围的点在最小二乘意义下最优的线性表示。LLE把这个线性拟合的系数当成这个流形局部几何性质的刻画。那末一个好的低维表示,就应该也具备一样的局部几何,因此利用一样的线性表示的表达式,最终写成一个二次型的形式,十分天然优美。
注意在LLE出现的两个加和优化的线性表达,第一个是求每一点的线性表示系数的。虽然原始公式中是写在一块儿的,可是求解时,是对每个点分别来求得。第二个表示式,是已知全部点的线性表示系数,来求低维表示(或嵌入embedding)的,他是一个总体求解的过程。这两个表达式的转化正好中间转了个弯,使一些人困惑了,特别后面一个公式写成一个二次型的过程并非那末直观,不少人每每在此卡住,而阻碍了全面的理解。我推荐你们去精读 Saul 在JMLR上的那篇LLE的长文。那篇文章不管在方法表达仍是英文书写,我认为都是精品,值得好好玩味学习。
另外值得强调的是,对于每一点处拟合获得的系数归一化的操做特别重要,若是没有这一步,这个算法就没有效果。可是在原始论文中,他们是为了保持数据在平行移动下embedding不变。
LLE的matlab代码写得简洁明了,是一个样板。
在此有必要提提Lawrence Saul这我的。在Isomap和LLE的做者们中,Saul算是惟一一个以流形学习(并不限于)为研究对象开创学派的人。Saul早年主要作参数模型有关的算法。自从LLE之后,坐阵UPen创造了一个个佳绩。主要成就在于他的两个出色学生,Kilian Weinberger和 Fei Sha,作的方法。拿了不少奖,在此很少说,能够到他主页上去看。Weinberger把学习核矩阵引入到流形学习中来。他的这个方法在流形学习中影响到不是很显著,倒是在 convex optimization 中人人得知。Fei Sha不用多说了,machine learning中一个闪亮的新星,中国留学生之骄傲。如今他们一个在Yahoo,一个在Jordan手下作PostDoc。
c) Laplacian Eigenmaps
要说哪个方法被作的全面,那莫非LE莫属。若是只说LE这个方法自己,是不新的,许多年前在作mesh相关的领域就开始这莫用。可是放在黎曼几何的框架内,给出完整的几何分析的,应该是Belkin和Niyogi(LE做者)的功劳。
LE的基本思想就是用一个无向有权图来描述一个流形,而后经过用图的嵌入(graph embedding)来找低维表示。说白了,就是保持图的局部邻接关系的状况把这个图从高维空间中从新画在一个低维空间中(graph drawing)。
在至今为止的流行学习的典型方法中,LE是速度最快、效果相对来讲不怎莫样的。可是LE有一个其余方法没有的特色,就是若是出现outlier状况下,它的鲁棒性(robustness)特别好。
后来Belkin和Niyogi又分析了LE的收敛性。你们不要忽视这个问题,很重要。鼓励有兴趣数学功底不错的人好好看看这篇文章。
d) Hessian Eigenmaps
若是你对黎曼几何不懂,基本上看不懂这个方法。又加做者表达的抽象,因此绝大多数人对这个方法了解不透彻。在此我就根据我本身的理解说说这个方法。
这个方法有两个重点:(1)若是一个流形是局部等距(isometric)欧式空间中一个开子集的,那末它的Hessian矩阵具备d+1维的零空间。(2)在每一点处,Hessian系数的估计。
首先做者是经过考察局部Hessian的二次型来得出结论的,若是一个流形局部等距于欧式空间中的一个开子集,那末由这个流形patch 到开子集到的映射函数是一个线性函数,线性函数的二次混合导数为零,因此局部上由Hessian系数构成的二次型也为零,这样把每一点都考虑到,过渡到全局的Hessian矩阵就有d+1维的零空间,其中一维是常函数构成的,也就是1向量。其它的d维子空间构成等距坐标。这就是理论基础的大意,固然做者在介绍的时候,为了保持理论严谨,做了一个由切坐标到等距坐标的过渡。
另一个就是局部上Hessian系数的估计问题。我在此引用一段话:
If you approximate a function f(x) by a quadratic expansion
f(x) = f(0) + (grad f)^T x + x^T Hf x + rem
then the hessian is what you get for the quadratic component. So simply over a given neighborhood, develop the operator that approximates a function by its projection on 1, x_1,...,x_k, x_1^2,...,x_k^2, x_1x2,... ,x{k-1}x_{k}. Extract the component of the operator that delivers the projection on x_1^2,...,x_k^2, x_1x2,... ,x{k-1}x_{k}.
dave
这段话是我在初学HE时候,写信问Dave Donoho,他给个人回信。但愿你们领会。若是你了解了上述基本含义,再去细看两遍原始论文,也许会有更深的理解。因为HE牵扯到二阶导数的估计,因此对噪声很敏感。另外,HE的原始代码中在计算局部切坐标的时候,用的是奇异值分解(SVD),因此若是想用他们的原始代码跑一下例如图像之类的真实数据,就特别的慢。其实把他们的代码改一下就能够了,利用通常PCA的快速计算方法,计算小尺寸矩阵的特征向量便可。还有,在原始代码中,他把Hessian系数归一化了,这也就是为什莫他们叫这个方法为 Hessian LLE 的缘由之一。
Dave Dohono是学术界公认的大牛,在流形学习这一块,是他带着他的一个学生作的,Carrie Grimes。如今这个女×××员在Google作 project leader,学术界女生同窗的楷模 : )
e) LTSA (Local tangent space alignment)
很荣幸,这个是国内学者(浙江大学数学系的老师ZHANG Zhenyue)为第一做者作的一个在流行学习中最出色的方法。因为这个方法是由纯数学作数值分析出身的老师所作,因此原始论文看起来公式一大堆,好像很难似的。其实这个方法很是直观简单。
象 Hessian Eigenmaps 同样,流形的局部几何表达先用切坐标,也就是PCA的主子空间中的坐标。那末对于流形一点处的切空间,它是线性子空间,因此能够和欧式空间中的一个开子集创建同构关系,最简单的就是线性变换。在微分流形中,就叫作切映射 (tangential map),是个很天然很基础的概念。把切坐标求出来,创建出切映射,剩下的就是数值计算了。最终这个算法划归为一个很简单的跌代加和形式。若是你已经明白了MDS,那末你就很容易明白,这个算法本质上就是MDS的从局部到总体的组合。
这里主要想重点强调一下,那个论文中使用的一个从局部几何到总体性质过渡的alignment技术。在spectral method(特征分解的)中,这个alignment方法特别有用。只要在数据的局部邻域上你的方法能够写成一个二次项的形式,就能够用。
其实LTSA最先的版本是在02年的DOCIS上。这个alignment方法在02年末Brand的 charting a manifold 中也出现,隐含在Hessian Eigenmaps中。在HE中,做者在从局部的Hessian矩阵过渡到全局的Hessian矩阵时,用了两层加号,其中就隐含了这个 alignment方法。后来国内一个叫 ZHAO Deli 的学生用这个方法从新写了LLE,发在Pattern Recognition上,一个短文。能够预见的是,这个方法还会被发扬光大。
ZHA Hongyuan 后来专门做了一篇文章来分析 alignment matrix 的谱性质,有兴趣地能够找来看看。
f) MVU (Maximum variance unfolding)
这个方法刚发出来之后,名字叫作Semi-definite Embedding (SDE)。构建一个局部的稀疏欧式距离矩阵之后,做者经过必定约束条件(主要是保持距离)来学习到一个核矩阵,对这个核矩阵作PCA就获得保持距离的 embedding,就这莫简单。可是就是这个方法得了多少奖,本身能够去找找看。我的观点认为,这个方法之因此被如此受人赏识,不管在vision仍是在learning,除了给流形学习这一领域带来了一个新的解决问题的工具以外,还有两个重点,一是核方法(kernel),二是半正定规划(semi-definite programming),这两股风不管在哪一个方向(learning and Vision)上都吹得正猛。
g) S-Logmaps
aa
这个方法不太被人所知,可是我认为这个是流形学习发展中的一个典型的方法(其实其余还有不少人也这莫认为)。就效果来讲,这个方法不算好,说它是一个典型的方法,是由于这个方法应用了黎曼几何中一个很直观的性质。这个性质和法坐标(normal coordinate)、指数映射(exponential map)和距离函数(distance function)有关。
若是你了解黎曼几何,你会知道,对于流形上的一条测地线,若是给定初始点和初始点处测地线的切方向,那莫这个测地线就能够被惟一肯定。这是由于在这些初始条件下,描述测地线的偏微分方程的解是惟一的。那末流形上的一条测地线就能够和其起点处的切平面上的点创建一个对应关系。咱们能够在这个切平面上找到一点,这个点的方向就是这个测地线在起点处的切方向,其长度等于这个测地线上的长。这样的一个对应关系在局部上是一一对应的。那末这个在切平面上的对应点在切平面中就有一个坐标表示,这个表示就叫作测地线上对应点的法坐标表示(有的也叫指数坐标)。那末反过来,咱们能够把切平面上的点映射到流形上,这个映射过程就叫作指数映射(Logmap就倒过来)。若是流形上每个点均可以这样在同一个切平面上表示出来,那末咱们就能够获得保持测地线长度的低维表示。若是这样作获得,流形必须能够被单坐标系统所覆盖。
若是给定流形上的采样点,若是要找到法坐标,咱们须要知道两个东西,一是测地线距离,二是每一个测地线在起点处的切方向。第一个东西好弄,利用Isomap中的方法直接就能够解决,关键是第二个。第二个做者利用了距离函数的梯度,这个梯度和那个切方向是一个等价的关系,通常的黎曼几何书中都有叙述。做者利用一个局部切坐标的二次泰勒展开来近似距离函数,而距离是知道的,就是测地线距离,局部切坐标也知道,那末经过求一个简单的最小二乘问题就能够估计出梯度方向。
若是明白这个方法的几何原理,你再去看那个方法的结果,你就会明白为什莫在距离中心点比较远的点的embedding均可以清楚地看到在一条条线上,效果不太好。
bb
最近这个思想被北大的一个年轻的老师 LIN Tong 发扬光大,就是ECCV‘06上的那篇,还有即将刊登出的TPAMI上的 Riemannian Manifold Learning,实为国内研究学者之荣幸。Lin的方法效果很是好,可是虽然取名叫Riemannian,没有应用到黎曼几何自己的性质,这样使他的方法更容易理解。
Lin也是以一个切空间为基准找法坐标,这个出发点和思想和Brun(S-Logmaps)的是同样的。可是Lin全是在局部上操做的,在得出切空间原点处局部邻域的法坐标之后,Lin采用逐步向外扩展的方法找到其余点的法坐标,在某一点处,保持此点到它邻域点的欧式距离和夹角,而后转化成一个最小二乘问题求出此点的法坐标,这样未知的利用已知的逐步向外扩展。说白了就像缝网同样,从几个临近的已知点开始,逐渐向外扩散的缝。效果好是必然的。
有人作了个好事情,作了个系统,把几个方法的matlab代码放在了一块儿 http://www.math.umn.edu/~wittman/mani/
以上提到方法论文,均可以用文中给出的关键词借助google.com找到。
流形学习如今还基本处于理论探讨阶段,在实际中难以施展拳脚,不过在图形学中除外。我就说说几个基本的问题。
a. 谱方法对噪声十分敏感。但愿你们本身作作实验体会一下,流形学习中谱方法的脆弱。
b. 采样问题对结果的影响。
c. 收敛性
d. 一个最尴尬的事情莫过于,若是用来作识别,流形学习线性化的方法比原来非线性的方法效果要好得多,若是用原始方法作识别,那个效果叫一个差。也正由于此,使不少人对流形学习产生了怀疑。缘由方方面面 : )
e. 把偏微分几何方法引入到流形学习中来是一个颇有但愿的方向。这样的工做在最近一年已经有出现的迹象。
f. 坦白说,我已不能见庐山真面目了,仍是留给你们来讲吧
结尾写得有点草率,实在是精疲力尽了,不过还好主体部分写完。
作学问的人有不少种,有的人学问作得很棒,可是独善其身者居多;有的人还谈不上作学问总想兼济天下。小弟不幸成了后一种人,总觉才学疏浅,力不从心,让各位见笑了。
今天一位朋友(filestorm)给我分享《列子御风》的故事,很受教育。鄙人功力不及二层,心却念是非,口却言利害,实在惭愧。