1. 程式人生 > >流形學習概述(轉載自CSDN)

流形學習概述(轉載自CSDN)

流形學習 (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)給我分享《列子御風》的故事,很受教育。鄙人功力不及二層,心卻念是非,口卻言利害,實在慚愧。

原文地址:http://blog.csdn.net/zhulingchen/article/details/2123129