天天看點

四、降維——流形學習 (manifold learning)

zz from prfans

...............................

 dodo:流形學習 (manifold learning)

dodo

流形學習是個很廣泛的概念。這裡我主要談的是自從2000年以後形成的流形學習概念和其主要代表方法。自從2000年以後,流形學習被認為屬于非線性降維的一個分支。衆所周知,引導這一領域迅速發展的是2000年Science雜志上的兩篇文章: Isomap and LLE (Locally Linear Embedding)。

1. 流形學習的基本概念

那流形學習是什莫呢?為了好懂,我盡可能應用少的數學概念來解釋這個東西。所謂流形(manifold)就是一般的幾何對象的總稱。比如人,有中國人、美國人等等;流形就包括各種維數的曲線曲面等。和一般的降維分析一樣,流形學習把一組在高維空間中的資料在低維空間中重新表示。和以往方法不同的是,在流形學習中有一個假設,就是所處理的資料采樣于一個潛在的流形上,或是說對于這組資料存在一個潛在的流形。 對于不同的方法,對于流形性質的要求各不相同,這也就産生了在流形假設下的各種不同性質的假設,比如在Laplacian Eigenmaps中要假設這個流形是緊緻黎曼流形等。對于描述流形上的點,我們要用坐标,而流形上本身是沒有坐标的,是以為了表示流形上的點,必須把流形放入外圍空間(ambient space)中,那末流形上的點就可以用外圍空間的坐标來表示。比如R^3中的球面是個2維的曲面,因為球面上隻有兩個自由度,但是球面上的點一般是用外圍R^3空間中的坐标表示的,是以我們看到的R^3中球面上的點有3個數來表示的。當然球面還有柱坐标球坐标等表示。對于R^3中的球面來說,那末流形學習可以粗略的概括為給出R^3中的表示,在保持球面上點某些幾何性質的條件下,找出找到一組對應的内蘊坐标(intrinsic coordinate)表示,顯然這個表示應該是兩維的,因為球面的維數是兩維的。這個過程也叫參數化(parameterization)。直覺上來說,就是把這個球面盡量好的展開在通過原點的平面上。在PAMI中,這樣的低維表示也叫内蘊特征(intrinsic feature)。一般外圍空間的維數也叫觀察維數,其表示也叫自然坐标(外圍空間是歐式空間)表示,在統計中一般叫observation。

了解了流形學習的這個基礎,那末流形學習中的一些是非也就很自然了,這個下面穿插來說。由此,如果你想學好流形學習裡的方法,你至少要了解一些微分流形和黎曼幾何的基本知識。

2. 代表方法

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。這兩樣東西,保證了運作他們的程式得到了結果一般來說相對比較理想。但是,這在他們的算法中并沒有叙述。如果你直接按照他論文中的方法來實作,你可以體會一下這個結果和他們結果的差距。從此我們也可以看出,那幾個作者做學問的嚴謹态度,這是值得我們好好學習的。

另外比較有趣的是,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_1*x_2,... ,x_{k-1}*x_{k}.  Extract the component of the operator that delivers the projection on  x_1^2,...,x_k^2, x_1*x_2,... ,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找到。

3. 基本問題和個人觀點

流形學習現在還基本處于理論探讨階段,在實際中難以施展拳腳,不過在圖形學中除外。我就說說幾個基本的問題。

a. 譜方法對噪聲十分敏感。希望大家自己做做實驗體會一下,流形學習中譜方法的脆弱。

b. 采樣問題對結果的影響。

c. 收斂性

d. 一個最尴尬的事情莫過于,如果用來做識别,流形學習線性化的方法比原來非線性的方法效果要好得多,如果用原始方法做識别,那個效果叫一個差。也正因為此,使很多人對流形學習産生了懷疑。原因方方面面 : )

e. 把偏微分幾何方法引入到流形學習中來是一個很有希望的方向。這樣的工作在最近一年已經有出現的迹象。

f. 坦白說,我已不能見廬山真面目了,還是留給大家來說吧

結尾寫得有點草率,實在是精疲力盡了,不過還好主體部分寫完。

4. 結束語

做學問的人有很多種,有的人學問做得很棒,但是獨善其身者居多;有的人還談不上做學問總想兼濟天下。小弟不幸成了後一種人,總覺才學疏淺,力不從心,讓各位見笑了。

今天一位朋友(filestorm)給我分享《列子禦風》的故事,很受教育。鄙人功力不及二層,心卻念是非,口卻言利害,實在慚愧。

本文為轉載文章,原文出處:https://blog.csdn.net/zhulingchen/article/details/2123129

繼續閱讀