有關流形學習論文

有關流形學習論文

  流形學習

  流形學習是個很廣泛的概念。這裡我主要談的是自從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}.

  這段話是我在初學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

  這個方法不太被人所知,但是我認為這個是流形學習發展中的一個典型的方法(其實其他還有很多人也這莫認為)。就效果來說,這個方法不算好,說它是一個典型的方法,是因為這個方法應用了黎曼幾何中一個很直觀的性質。這個性質和法座標(normal coordinate)、指數對映(exponential map)和距離函式(distance function)有關。

  如果你瞭解黎曼幾何,你會知道,對於流形上的一條測地線,如果給定初始點和初始點處測地線的切方向,那莫這個測地線就可以被唯一確定。這是因為在這些初始條件下,描述測地線的偏微分方程的解是唯一的。那末流形上的一條測地線就可以和其起點處的切平面上的點建立一個對應關係。我們可以在這個切平面上找到一點,這個點的方向就是這個測地線在起點處的切方向,其長度等於這個測地線上的長。這樣的一個對應關係在區域性上是一一對應的。那末這個在切平面上的對應點在切平面中就有一個座標表示,這個表示就叫做測地線上對應點的法座標表示(有的也叫指數座標)。那末反過來,我們可以把切平面上的點對映到流形上,這個對映過程就叫做指數對映(Logmap就倒過來)。如果流形上每一個點都可以這樣在同一個切平面上表示出來,那末我們就可以得到保持測地線長度的低維表示。如果這樣做得到,流形必須可以被單座標系統所覆蓋。

  如果給定流形上的取樣點,如果要找到法座標,我們需要知道兩個東西,一是測地線距離,二是每個測地線在起點處的切方向。第一個東西好弄,利用Isomap中的方法直接就可以解決,關鍵是第二個。第二個作者利用了距離函式的梯度,這個梯度和那個切方向是一個等價的關係,一般的黎曼幾何書中都有敘述。作者利用一個區域性切座標的二次泰勒展開來近似距離函式,而距離是知道的,就是測地線距離,區域性切座標也知道,那末透過求一個簡單的最小二乘問題就可以估計出梯度方向。

  如果明白這個方法的幾何原理,你再去看那個方法的結果,你就會明白為什莫在距離中心點比較遠的點的embedding都可以清楚地看到在一條條線上,效果不太好。

  最近這個思想被北大的一個年輕的老師 LIN Tong 發揚光大,就是ECCV‘06上的那篇,還有即將刊登出的TPAMI上的 Riemannian Manifold Learning,實為國內研究學者之榮幸。Lin的方法效果非常好,但是雖然取名叫Riemannian,沒有應用到黎曼幾何本身的性質,這樣使他的方法更容易理解。

  Lin也是以一個切空間為基準找法座標,這個出發點和思想和Brun(S-Logmaps)的是一樣的。但是Lin全是在區域性上操作的,在得出切空間原點處區域性鄰域的法座標以後,Lin採用逐步向外擴充套件的方法找到其他點的法座標,在某一點處,保持此點到它鄰域點的歐式距離和夾角,然後轉化成一個最小二乘問題求出此點的法座標,這樣未知的利用已知的逐步向外擴充套件。說白了就像縫網一樣,從幾個臨近的已知點開始,逐漸向外擴散的縫。效果好是必然的。

  淺談流形學習

  bypluskid, on 2010-05-29, in Machine Learning76 comments

  總覺得即使是“淺談”兩個字,還是讓這個標

  題有些過大了,更何況我自己也才剛剛接觸這麼一個領域。不過懶得想其他標題了,想起來要扯一下這個話題,也是因為和朋友聊起我自己最近在做的方向。Manifold Learning 或者僅僅 Manifold 本身通常就聽起來頗有些深奧的感覺,不過如果並不是想要進行嚴格的理論推導的話,也可以從許多直觀的例子得到一些感性的認識,正好我也就借這個機會來簡單地談一下這個話題吧,或者說至少是我到目前為止對這它的認識。 這兩個詞,在談 Manifold 之前,不妨先說說 Learning ,也就是 Machine Learning 。而說道 Machine Learning 而不提一下 Artificial Intelligence 的話似乎又顯得有些不厚道。人說 AI 是一門最悲劇的學科,因為每當它的一個子領域發展得像模像樣之後,就立馬自立門戶,從此和 AI “再無瓜葛”了,而 Machine Learning 大概要算是最新的一個典型吧。這就讓人有點奇怪,比如說數學,分門別類總算是夠多了吧?可以不管怎麼分,大家兄弟姐妹也都還承認自己是叫“數學”的。那 AI 呢?我覺得這裡有很大一部分

  是它自身定位的問題。

  反正現在我是不太清楚 AI 是做什麼的,不知道其他人到底清楚不清楚。Wikipedia 上

  說 Artificial intelligence (AI) is the intelligence of machines and the branch of computer

  science that aims to create it.

  可是這相當於一個 tautology ,因為到底什麼又是the intelligence of machines呢?一開始的時候,大牛們都野心勃勃,而且好像也是信心滿滿,就好像曾經廣泛認為“牛頓定理揭示了宇宙真理,科學剩下的事情只要按照公式來做計算就可以了”一樣,大家可能覺得,不出幾十年,人類就可以不用思考,交給 AI 來做了。不過我這裡並不想再多說諸如什麼是“思考”,什麼是“智慧”之類的以及隨之而來的“圖靈測試”之類的話題。我想說的是,到頭來,AI 到底是什麼,這還是一個問題,或者說,AI 在一開始定了一個過高的目標,幾十年後,發現情況並不像當年那麼樂觀,卻又有些下不了臺了。

  這個時候,AI 的一些旁枝或者子領域果斷放下面子,丟掉了那個近乎玄幻的目標,逐漸發展成為“正常”的學科,所以也就不再好稱為 AI 了。或者說現在的 AI 有兩個意思,一個廣義的 AI ,包括了所有相關的以及派生的領域,另一個則是狹義的或者經典的 AI ,專門指那些仍然在執著地追求著真正的“智慧”的部分,或者說得不好聽一點,就

  是剩下的部分。

  Machine Learning 作為離家出走的典型,雖然名字裡帶了 Learning 一個詞,讓人乍一看覺得和 Intelligence 相比不過是換了個說法而已,然而事實上這裡的 Learning 的意義要樸素得多。我們來看一看 Machine Learning 的典型的流程就知道了,其實有時候覺得和應用數學或者更通俗的數學建模有些類似,通常我們會有需要分析或者處理的資料,根據一些經驗和一些假設,我們可以構建一個模型,這個模型會有一些引數(即使是非引數化方法,也是可以類似地看待的),根據資料來求解模型引數的過程,就叫做 Parameter Estimation ,或者 Model Fitting ,但是搞機器學習的人,通常把它叫做 Learning (或者,換一個角度,叫 Training)——因為根據資料歸納出一個有用的模型,這和我們人類“學習”的過程還是挺類似的吧。不過,如果拋開無聊的摳字眼遊戲的話,我們可以看到,Machine Learning 已經拋棄了“智慧”的高帽子,它的目的就是要解決具

  體的問題——而並不關心是否是透過一種“智慧”的方式類解決的。

  說到這裡,其實我們構造模型就類似於寫一個類,資料就是建構函式的引數,Learning 就是建構函式執行的過程,成功構造一個物件之後,我們就完成了學習。一些 Machine Learning 的問題到這一步就結束了,另一些情況還會使用得到的模型(物件)對後來的資料進行一些處理,通常會是Inferencing。到這個時候,又有些像統計裡的東西了,所謂“統計推斷”嘛。其實原本統計和機器學習研究的不少問題就是交叉在一起的,不過兩派人從不同的角度來看待同樣的問題。而且,也確實有 Statistical Learning 這麼一個說法存在的,可以把他看成是 Machine Learning 的一個子領域(或者是一個分子或

  者甚至就是 Machine Learning 本身)。

  到這裡,如果你還沒有因為不斷地摳字眼而煩躁的話,

  我已經忍無可忍了。所以,我就假定你已經瞭解了什麼叫 Learning ,或者是已經噁心到懶得去了解了。於是我們轉入下一個話題:流形,也就是 Manifold 。不知道你有沒有為我在本文開頭放上的那個地球的圖片感到困惑?這是因為球面是一個很典型的流

  形的例子,而地球就是一個很典型的“球面”啦(姑且當作球面好啦)。

  有時候經常會在 paper 裡看到“嵌入在高維空間中的低維流形”,不過高維的資料對於我們這些可憐的低維生物來說總是很難以想像,所以最直觀的例子通常都會是嵌入在三維空間中的二維或者一維流行。比如說一塊布,可以把它看成一個二維平面,這是一個

  二維的歐氏空間,現在我們(在三維)中把它扭一扭,它就變成了一個流形(當然,不

  扭的時候,它也是一個流形,歐氏空間是流形的一種特殊情況)。

  所以,直觀上來講,一個流形好比是一個 d 維的空間,在一個 m 維的空間中 (m > d) 被扭曲之後的結果。需要注意的是,流形並不是一個“形狀”,而是一個“空間”,如果你覺得“扭曲的空間”難以想象,那麼請再回憶之前一塊布的例子。如果我沒弄錯的話,廣義相對論似乎就是把我們的時空當作一個四維流(空間三維加上時間一維)形來研究的,引力就是這個流形扭曲的結果。當然,這些都是直觀上的概念,其實流形並不需要依靠嵌入在一個“外圍空間”而存在,稍微正式一點來說,一個 d 維的流形就是一個在任意點出區域性同胚於(簡單地說,就是正逆對映都是光滑的一一對映)歐氏空間。

  實際上,正是這種區域性與歐氏空間的同

  胚給我們帶來了很多好處,這使得我們在日常生活中許許多多的幾何問題都可以使用簡單的歐氏幾何來解決,因為和地球的尺度比起來,我們的日常生活就算是一個很小的區域性啦——我突然想起《七龍珠》裡的那個界王住的那種私人小星球,走幾步就要繞一圈的感覺,看來界王不僅要體力好(那上面重力似乎是地球的十倍),而且腦力也要好,

  初中學的必須是黎曼幾何了!

  那麼,除了地球這種簡單的例子,實際應用中的資料,怎麼知道它是不是一個流形呢?於是不妨又迴歸直觀的感覺。再從球面說起,如果我們事先不知道球面的存在,那麼球面上的點,其實就是三維歐氏空間上的點,可以用一個三元組來表示其座標。但是和空間中的普通點不一樣的是,它們允許出現的位置受到了一定的限制,具體到球面,可以

  可以看一下它的引數方程:

  可以看到,這些三維的座標實際上是由兩個變數和生成的,也可以說成是它的自由度是二,也正好對應了它是一個二維的流形。有了這樣的感覺之後,再來看流形學習裡經

  常用到的人臉的例子,就很自然了。下圖是Isomap論文裡的一個結果:

  這裡的圖片來自同一張人臉(好吧,其實是人臉模型),每張圖片是 64×64 的灰度圖,如果把點陣圖按照列(或行)拼起來,就可以得到一個 4096 維的向量,這樣一來,每一張圖片就可以看成是 4096 維歐氏空間中的一個點。很顯然,並不是 4096 維空間中任意一個點都可以對應於一張人臉圖片的,這就類似於球面的情形,我們可以假定所有可以是人臉的 4096 維向量實際上分佈在一個 d 維 (d < 4096) 的子空間中。而特定到Isomap的人臉這個例子,實際上我們知道所有的 698 張圖片是拍自同一個人臉(模型),不過是在不同的 pose 和光照下拍攝的,如果把 pose (上下和左右)當作兩個自由度,而光照當作一個自由度,那麼這些圖片實際只有三個自由度,換句話說,存在一個類似於球面一樣的引數方程(當然,解析式是沒法寫出來的),給定一組引數(也就是上下、左右的 pose 和光照這三個值),就可以生成出對應的 4096 維的座標來。

  換句話說,這是一個嵌入在 4096 維歐氏空間中的一個 3 維流形。

  實際上,上面的那張圖就是Isomap將這個資料集從 4096 維對映到 3 維空間中,並顯示了其中 2 維的結果,圖中的小點就是每個人臉在這個二維空間中對應的座標位置,其中一些標紅圈的點被選出來,並在旁邊畫上了該點對應的原始圖片,可以很直觀地看

  出這兩個維度正好對應了 pose 的兩個自由度平滑變化的結果。

  就我目前所知,把流形引入到機器學習領域來主要有兩種用途:一是將原來在歐氏空間中適用的演算法加以改造,使得它工作在流形上,直接或間接地對流形的結構和性質加以利用;二是直接分析流形的結構,並試圖將其對映到一個歐氏空間中,再在得到的結果

  上運用以前適用於歐氏空間的演算法來進行學習。

  這裡Isomap正巧是一個非常典型的例子,因為它實際上是透過“改造一種原本適用於歐

  氏空間的演算法”,達到了“將流形對映到一個歐氏空間”的目的。

  Isomap所改造的這個方法叫做Multidimensional Scaling (MDS),MDS 是一種降維方法,它的目的就是使得降維之後的點兩兩之間的距離儘量不變(也就是和在原是空間中對應的兩個點之間的距離要差不多)。只是 MDS 是針對歐氏空間設計的,對於距離的計算也是使用歐氏距離來完成的。如果資料分佈在一個流形上的話,歐氏距離就不適用了。 讓我們再回到地球——這個在三維空間中的二維流形,假設我們要在三維空間中計算北極點和南極點的距離,這很容易,就是兩點相連的線段的長度,可是,如果要在這個流形上算距離就不能這樣子算了,我們總不能從北極打個洞鑽到南極去吧?要沿著地球表面走才行,當然,如果我隨便沿著什麼路線走一遍,然後數出總共走了多少步作為距離,這是不成的,因為這樣一來如果我沿著不同的路線走,豈不是會得到不同的距離值?總而言之,我們現在需要一個新的定義在地球表面(流形)上的距離度量,理論上來說,任意滿足測度的 4 個條件的函式都可以被定義為距離,不過,為了和歐氏空間對應起

  來,這裡選擇一個直線距離的推廣定義。

  還記得初中學的“兩點之間,線段最短”嗎?現在,我們反過來說,把線段的概念推廣一下,變成“兩點之間最短的曲線是線段”,於是流形上的距離定義也就等同於歐氏空間了:流形上兩個點之間的距離就是連線兩個點的“線段”的長度。雖然只是置換了一個概念,但是現在兩者統一起來了,不過,在流形上的線段大概就不一定是“直”的了(於是直線也變成不一定是“直”的了),通常又稱作是“測地線”。對於球面這個簡單的流形來說,任意一條線段必定是在一個“大圓”上的,於是球面上的直線其實都是一些大圓,也造成了球面這個流形上沒有平行線等一系列尷尬的局面(任意兩條直線均相交),如果你看

  過一些數學科普八卦類的書,應該會回憶起不少東西啦!

  回到Isomap,它主要做了一件事情,就是把 MDS 中原始空間中距離的計算從歐氏距離換為了流形上的測地距離。當然,如果流形的結構事先不知道的話,這個距離是沒法算的,於是Isomap透過將資料點連線起來構成一個鄰接 Graph 來離散地近似原來的流形,而測地距離也相應地透過 Graph 上的最短路徑來近似了。

  流形學習

  流形學習是個很廣泛的概念。這裡我主要談的是自從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}.

  這段話是我在初學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

  這個方法不太被人所知,但是我認為這個是流形學習發展中的一個典型的方法(其實其他還有很多人也這莫認為)。就效果來說,這個方法不算好,說它是一個典型的方法,是因為這個方法應用了黎曼幾何中一個很直觀的性質。這個性質和法座標(normal coordinate)、指數對映(exponential map)和距離函式(distance function)有關。

  如果你瞭解黎曼幾何,你會知道,對於流形上的一條測地線,如果給定初始點和初始點處測地線的切方向,那莫這個測地線就可以被唯一確定。這是因為在這些初始條件下,描述測地線的偏微分方程的解是唯一的。那末流形上的一條測地線就可以和其起點處的切平面上的點建立一個對應關係。我們可以在這個切平面上找到一點,這個點的方向就是這個測地線在起點處的切方向,其長度等於這個測地線上的長。這樣的一個對應關係在區域性上是一一對應的。那末這個在切平面上的對應點在切平面中就有一個座標表示,這個表示就叫做測地線上對應點的法座標表示(有的也叫指數座標)。那末反過來,我們可以把切平面上的點對映到流形上,這個對映過程就叫做指數對映(Logmap就倒過來)。如果流形上每一個點都可以這樣在同一個切平面上表示出來,那末我們就可以得到保持測地線長度的低維表示。如果這樣做得到,流形必須可以被單座標系統所覆蓋。

  如果給定流形上的取樣點,如果要找到法座標,我們需要知道兩個東西,一是測地線距離,二是每個測地線在起點處的切方向。第一個東西好弄,利用Isomap中的方法直接就可以解決,關鍵是第二個。第二個作者利用了距離函式的梯度,這個梯度和那個切方向是一個等價的關係,一般的黎曼幾何書中都有敘述。作者利用一個區域性切座標的二次泰勒展開來近似距離函式,而距離是知道的,就是測地線距離,區域性切座標也知道,那末透過求一個簡單的最小二乘問題就可以估計出梯度方向。

  如果明白這個方法的幾何原理,你再去看那個方法的結果,你就會明白為什莫在距離中心點比較遠的點的embedding都可以清楚地看到在一條條線上,效果不太好。

  最近這個思想被北大的一個年輕的老師 LIN Tong 發揚光大,就是ECCV‘06上的那篇,還有即將刊登出的TPAMI上的 Riemannian Manifold Learning,實為國內研究學者之榮幸。Lin的方法效果非常好,但是雖然取名叫Riemannian,沒有應用到黎曼幾何本身的性質,這樣使他的方法更容易理解。

  Lin也是以一個切空間為基準找法座標,這個出發點和思想和Brun(S-Logmaps)的是一樣的。但是Lin全是在區域性上操作的,在得出切空間原點處區域性鄰域的法座標以後,Lin採用逐步向外擴充套件的方法找到其他點的法座標,在某一點處,保持此點到它鄰域點的歐式距離和夾角,然後轉化成一個最小二乘問題求出此點的法座標,這樣未知的利用已知的逐步向外擴充套件。說白了就像縫網一樣,從幾個臨近的已知點開始,逐漸向外擴散的縫。效果好是必然的。

  淺談流形學習

  bypluskid, on 2010-05-29, in Machine Learning76 comments

  總覺得即使是“淺談”兩個字,還是讓這個標

  題有些過大了,更何況我自己也才剛剛接觸這麼一個領域。不過懶得想其他標題了,想起來要扯一下這個話題,也是因為和朋友聊起我自己最近在做的方向。Manifold Learning 或者僅僅 Manifold 本身通常就聽起來頗有些深奧的感覺,不過如果並不是想要進行嚴格的理論推導的話,也可以從許多直觀的例子得到一些感性的認識,正好我也就借這個機會來簡單地談一下這個話題吧,或者說至少是我到目前為止對這它的認識。 這兩個詞,在談 Manifold 之前,不妨先說說 Learning ,也就是 Machine Learning 。而說道 Machine Learning 而不提一下 Artificial Intelligence 的話似乎又顯得有些不厚道。人說 AI 是一門最悲劇的學科,因為每當它的一個子領域發展得像模像樣之後,就立馬自立門戶,從此和 AI “再無瓜葛”了,而 Machine Learning 大概要算是最新的一個典型吧。這就讓人有點奇怪,比如說數學,分門別類總算是夠多了吧?可以不管怎麼分,大家兄弟姐妹也都還承認自己是叫“數學”的。那 AI 呢?我覺得這裡有很大一部分

  是它自身定位的問題。

  反正現在我是不太清楚 AI 是做什麼的,不知道其他人到底清楚不清楚。Wikipedia 上

  說 Artificial intelligence (AI) is the intelligence of machines and the branch of computer

  science that aims to create it.

  可是這相當於一個 tautology ,因為到底什麼又是the intelligence of machines呢?一開始的時候,大牛們都野心勃勃,而且好像也是信心滿滿,就好像曾經廣泛認為“牛頓定理揭示了宇宙真理,科學剩下的事情只要按照公式來做計算就可以了”一樣,大家可能覺得,不出幾十年,人類就可以不用思考,交給 AI 來做了。不過我這裡並不想再多說諸如什麼是“思考”,什麼是“智慧”之類的以及隨之而來的“圖靈測試”之類的話題。我想說的是,到頭來,AI 到底是什麼,這還是一個問題,或者說,AI 在一開始定了一個過高的目標,幾十年後,發現情況並不像當年那麼樂觀,卻又有些下不了臺了。

  這個時候,AI 的一些旁枝或者子領域果斷放下面子,丟掉了那個近乎玄幻的目標,逐漸發展成為“正常”的學科,所以也就不再好稱為 AI 了。或者說現在的 AI 有兩個意思,一個廣義的 AI ,包括了所有相關的以及派生的領域,另一個則是狹義的或者經典的 AI ,專門指那些仍然在執著地追求著真正的“智慧”的部分,或者說得不好聽一點,就

  是剩下的部分。

  Machine Learning 作為離家出走的典型,雖然名字裡帶了 Learning 一個詞,讓人乍一看覺得和 Intelligence 相比不過是換了個說法而已,然而事實上這裡的 Learning 的意義要樸素得多。我們來看一看 Machine Learning 的典型的流程就知道了,其實有時候覺得和應用數學或者更通俗的數學建模有些類似,通常我們會有需要分析或者處理的資料,根據一些經驗和一些假設,我們可以構建一個模型,這個模型會有一些引數(即使是非引數化方法,也是可以類似地看待的),根據資料來求解模型引數的過程,就叫做 Parameter Estimation ,或者 Model Fitting ,但是搞機器學習的人,通常把它叫做 Learning (或者,換一個角度,叫 Training)——因為根據資料歸納出一個有用的模型,這和我們人類“學習”的過程還是挺類似的吧。不過,如果拋開無聊的摳字眼遊戲的話,我們可以看到,Machine Learning 已經拋棄了“智慧”的高帽子,它的目的就是要解決具

  體的問題——而並不關心是否是透過一種“智慧”的方式類解決的。

  說到這裡,其實我們構造模型就類似於寫一個類,資料就是建構函式的引數,Learning 就是建構函式執行的過程,成功構造一個物件之後,我們就完成了學習。一些 Machine Learning 的問題到這一步就結束了,另一些情況還會使用得到的模型(物件)對後來的資料進行一些處理,通常會是Inferencing。到這個時候,又有些像統計裡的東西了,所謂“統計推斷”嘛。其實原本統計和機器學習研究的不少問題就是交叉在一起的,不過兩派人從不同的角度來看待同樣的問題。而且,也確實有 Statistical Learning 這麼一個說法存在的,可以把他看成是 Machine Learning 的一個子領域(或者是一個分子或

  者甚至就是 Machine Learning 本身)。

  到這裡,如果你還沒有因為不斷地摳字眼而煩躁的話,

  我已經忍無可忍了。所以,我就假定你已經瞭解了什麼叫 Learning ,或者是已經噁心到懶得去了解了。於是我們轉入下一個話題:流形,也就是 Manifold 。不知道你有沒有為我在本文開頭放上的那個地球的圖片感到困惑?這是因為球面是一個很典型的流

  形的例子,而地球就是一個很典型的“球面”啦(姑且當作球面好啦)。

  有時候經常會在 paper 裡看到“嵌入在高維空間中的低維流形”,不過高維的資料對於我們這些可憐的低維生物來說總是很難以想像,所以最直觀的例子通常都會是嵌入在三維空間中的二維或者一維流行。比如說一塊布,可以把它看成一個二維平面,這是一個

  二維的歐氏空間,現在我們(在三維)中把它扭一扭,它就變成了一個流形(當然,不

  扭的時候,它也是一個流形,歐氏空間是流形的一種特殊情況)。

  所以,直觀上來講,一個流形好比是一個 d 維的空間,在一個 m 維的空間中 (m > d) 被扭曲之後的結果。需要注意的是,流形並不是一個“形狀”,而是一個“空間”,如果你覺得“扭曲的空間”難以想象,那麼請再回憶之前一塊布的例子。如果我沒弄錯的話,廣義相對論似乎就是把我們的時空當作一個四維流(空間三維加上時間一維)形來研究的,引力就是這個流形扭曲的結果。當然,這些都是直觀上的概念,其實流形並不需要依靠嵌入在一個“外圍空間”而存在,稍微正式一點來說,一個 d 維的流形就是一個在任意點出區域性同胚於(簡單地說,就是正逆對映都是光滑的一一對映)歐氏空間。

  實際上,正是這種區域性與歐氏空間的同

  胚給我們帶來了很多好處,這使得我們在日常生活中許許多多的幾何問題都可以使用簡單的歐氏幾何來解決,因為和地球的尺度比起來,我們的日常生活就算是一個很小的區域性啦——我突然想起《七龍珠》裡的那個界王住的那種私人小星球,走幾步就要繞一圈的感覺,看來界王不僅要體力好(那上面重力似乎是地球的十倍),而且腦力也要好,

  初中學的必須是黎曼幾何了!

  那麼,除了地球這種簡單的例子,實際應用中的資料,怎麼知道它是不是一個流形呢?於是不妨又迴歸直觀的感覺。再從球面說起,如果我們事先不知道球面的存在,那麼球面上的點,其實就是三維歐氏空間上的點,可以用一個三元組來表示其座標。但是和空間中的普通點不一樣的是,它們允許出現的位置受到了一定的限制,具體到球面,可以

  可以看一下它的引數方程:

  可以看到,這些三維的座標實際上是由兩個變數和生成的,也可以說成是它的自由度是二,也正好對應了它是一個二維的流形。有了這樣的感覺之後,再來看流形學習裡經

  常用到的人臉的例子,就很自然了。下圖是Isomap論文裡的一個結果:

  這裡的圖片來自同一張人臉(好吧,其實是人臉模型),每張圖片是 64×64 的灰度圖,如果把點陣圖按照列(或行)拼起來,就可以得到一個 4096 維的向量,這樣一來,每一張圖片就可以看成是 4096 維歐氏空間中的一個點。很顯然,並不是 4096 維空間中任意一個點都可以對應於一張人臉圖片的,這就類似於球面的情形,我們可以假定所有可以是人臉的 4096 維向量實際上分佈在一個 d 維 (d < 4096) 的子空間中。而特定到Isomap的人臉這個例子,實際上我們知道所有的 698 張圖片是拍自同一個人臉(模型),不過是在不同的 pose 和光照下拍攝的,如果把 pose (上下和左右)當作兩個自由度,而光照當作一個自由度,那麼這些圖片實際只有三個自由度,換句話說,存在一個類似於球面一樣的引數方程(當然,解析式是沒法寫出來的),給定一組引數(也就是上下、左右的 pose 和光照這三個值),就可以生成出對應的 4096 維的座標來。

  換句話說,這是一個嵌入在 4096 維歐氏空間中的一個 3 維流形。

  實際上,上面的那張圖就是Isomap將這個資料集從 4096 維對映到 3 維空間中,並顯示了其中 2 維的結果,圖中的小點就是每個人臉在這個二維空間中對應的座標位置,其中一些標紅圈的點被選出來,並在旁邊畫上了該點對應的原始圖片,可以很直觀地看

  出這兩個維度正好對應了 pose 的兩個自由度平滑變化的結果。

  就我目前所知,把流形引入到機器學習領域來主要有兩種用途:一是將原來在歐氏空間中適用的演算法加以改造,使得它工作在流形上,直接或間接地對流形的結構和性質加以利用;二是直接分析流形的結構,並試圖將其對映到一個歐氏空間中,再在得到的結果

  上運用以前適用於歐氏空間的演算法來進行學習。

  這裡Isomap正巧是一個非常典型的例子,因為它實際上是透過“改造一種原本適用於歐

  氏空間的演算法”,達到了“將流形對映到一個歐氏空間”的目的。

  Isomap所改造的這個方法叫做Multidimensional Scaling (MDS),MDS 是一種降維方法,它的目的就是使得降維之後的點兩兩之間的距離儘量不變(也就是和在原是空間中對應的兩個點之間的距離要差不多)。只是 MDS 是針對歐氏空間設計的,對於距離的計算也是使用歐氏距離來完成的。如果資料分佈在一個流形上的話,歐氏距離就不適用了。 讓我們再回到地球——這個在三維空間中的二維流形,假設我們要在三維空間中計算北極點和南極點的距離,這很容易,就是兩點相連的線段的長度,可是,如果要在這個流形上算距離就不能這樣子算了,我們總不能從北極打個洞鑽到南極去吧?要沿著地球表面走才行,當然,如果我隨便沿著什麼路線走一遍,然後數出總共走了多少步作為距離,這是不成的,因為這樣一來如果我沿著不同的路線走,豈不是會得到不同的距離值?總而言之,我們現在需要一個新的定義在地球表面(流形)上的距離度量,理論上來說,任意滿足測度的 4 個條件的函式都可以被定義為距離,不過,為了和歐氏空間對應起

  來,這裡選擇一個直線距離的推廣定義。

  還記得初中學的“兩點之間,線段最短”嗎?現在,我們反過來說,把線段的概念推廣一下,變成“兩點之間最短的曲線是線段”,於是流形上的距離定義也就等同於歐氏空間了:流形上兩個點之間的距離就是連線兩個點的“線段”的長度。雖然只是置換了一個概念,但是現在兩者統一起來了,不過,在流形上的線段大概就不一定是“直”的了(於是直線也變成不一定是“直”的了),通常又稱作是“測地線”。對於球面這個簡單的流形來說,任意一條線段必定是在一個“大圓”上的,於是球面上的直線其實都是一些大圓,也造成了球面這個流形上沒有平行線等一系列尷尬的局面(任意兩條直線均相交),如果你看

  過一些數學科普八卦類的書,應該會回憶起不少東西啦!

  回到Isomap,它主要做了一件事情,就是把 MDS 中原始空間中距離的計算從歐氏距離換為了流形上的測地距離。當然,如果流形的結構事先不知道的話,這個距離是沒法算的,於是Isomap透過將資料點連線起來構成一個鄰接 Graph 來離散地近似原來的流形,而測地距離也相應地透過 Graph 上的最短路徑來近似了。

  流形學習

  流形學習是個很廣泛的概念。這裡我主要談的是自從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}.

  這段話是我在初學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

  這個方法不太被人所知,但是我認為這個是流形學習發展中的一個典型的方法(其實其他還有很多人也這莫認為)。就效果來說,這個方法不算好,說它是一個典型的方法,是因為這個方法應用了黎曼幾何中一個很直觀的性質。這個性質和法座標(normal coordinate)、指數對映(exponential map)和距離函式(distance function)有關。

  如果你瞭解黎曼幾何,你會知道,對於流形上的一條測地線,如果給定初始點和初始點處測地線的切方向,那莫這個測地線就可以被唯一確定。這是因為在這些初始條件下,描述測地線的偏微分方程的解是唯一的。那末流形上的一條測地線就可以和其起點處的切平面上的點建立一個對應關係。我們可以在這個切平面上找到一點,這個點的方向就是這個測地線在起點處的切方向,其長度等於這個測地線上的長。這樣的一個對應關係在區域性上是一一對應的。那末這個在切平面上的對應點在切平面中就有一個座標表示,這個表示就叫做測地線上對應點的法座標表示(有的也叫指數座標)。那末反過來,我們可以把切平面上的點對映到流形上,這個對映過程就叫做指數對映(Logmap就倒過來)。如果流形上每一個點都可以這樣在同一個切平面上表示出來,那末我們就可以得到保持測地線長度的低維表示。如果這樣做得到,流形必須可以被單座標系統所覆蓋。

  如果給定流形上的取樣點,如果要找到法座標,我們需要知道兩個東西,一是測地線距離,二是每個測地線在起點處的切方向。第一個東西好弄,利用Isomap中的方法直接就可以解決,關鍵是第二個。第二個作者利用了距離函式的梯度,這個梯度和那個切方向是一個等價的關係,一般的黎曼幾何書中都有敘述。作者利用一個區域性切座標的二次泰勒展開來近似距離函式,而距離是知道的,就是測地線距離,區域性切座標也知道,那末透過求一個簡單的最小二乘問題就可以估計出梯度方向。

  如果明白這個方法的幾何原理,你再去看那個方法的結果,你就會明白為什莫在距離中心點比較遠的點的embedding都可以清楚地看到在一條條線上,效果不太好。

  最近這個思想被北大的一個年輕的老師 LIN Tong 發揚光大,就是ECCV‘06上的那篇,還有即將刊登出的TPAMI上的 Riemannian Manifold Learning,實為國內研究學者之榮幸。Lin的方法效果非常好,但是雖然取名叫Riemannian,沒有應用到黎曼幾何本身的性質,這樣使他的方法更容易理解。

  Lin也是以一個切空間為基準找法座標,這個出發點和思想和Brun(S-Logmaps)的是一樣的。但是Lin全是在區域性上操作的,在得出切空間原點處區域性鄰域的法座標以後,Lin採用逐步向外擴充套件的方法找到其他點的法座標,在某一點處,保持此點到它鄰域點的歐式距離和夾角,然後轉化成一個最小二乘問題求出此點的法座標,這樣未知的利用已知的逐步向外擴充套件。說白了就像縫網一樣,從幾個臨近的已知點開始,逐漸向外擴散的縫。效果好是必然的。

  淺談流形學習

  bypluskid, on 2010-05-29, in Machine Learning76 comments

  總覺得即使是“淺談”兩個字,還是讓這個標

  題有些過大了,更何況我自己也才剛剛接觸這麼一個領域。不過懶得想其他標題了,想起來要扯一下這個話題,也是因為和朋友聊起我自己最近在做的方向。Manifold Learning 或者僅僅 Manifold 本身通常就聽起來頗有些深奧的感覺,不過如果並不是想要進行嚴格的理論推導的話,也可以從許多直觀的例子得到一些感性的認識,正好我也就借這個機會來簡單地談一下這個話題吧,或者說至少是我到目前為止對這它的認識。 這兩個詞,在談 Manifold 之前,不妨先說說 Learning ,也就是 Machine Learning 。而說道 Machine Learning 而不提一下 Artificial Intelligence 的話似乎又顯得有些不厚道。人說 AI 是一門最悲劇的學科,因為每當它的一個子領域發展得像模像樣之後,就立馬自立門戶,從此和 AI “再無瓜葛”了,而 Machine Learning 大概要算是最新的一個典型吧。這就讓人有點奇怪,比如說數學,分門別類總算是夠多了吧?可以不管怎麼分,大家兄弟姐妹也都還承認自己是叫“數學”的。那 AI 呢?我覺得這裡有很大一部分

  是它自身定位的問題。

  反正現在我是不太清楚 AI 是做什麼的,不知道其他人到底清楚不清楚。Wikipedia 上

  說 Artificial intelligence (AI) is the intelligence of machines and the branch of computer

  science that aims to create it.

  可是這相當於一個 tautology ,因為到底什麼又是the intelligence of machines呢?一開始的時候,大牛們都野心勃勃,而且好像也是信心滿滿,就好像曾經廣泛認為“牛頓定理揭示了宇宙真理,科學剩下的事情只要按照公式來做計算就可以了”一樣,大家可能覺得,不出幾十年,人類就可以不用思考,交給 AI 來做了。不過我這裡並不想再多說諸如什麼是“思考”,什麼是“智慧”之類的以及隨之而來的“圖靈測試”之類的話題。我想說的是,到頭來,AI 到底是什麼,這還是一個問題,或者說,AI 在一開始定了一個過高的目標,幾十年後,發現情況並不像當年那麼樂觀,卻又有些下不了臺了。

  這個時候,AI 的一些旁枝或者子領域果斷放下面子,丟掉了那個近乎玄幻的目標,逐漸發展成為“正常”的學科,所以也就不再好稱為 AI 了。或者說現在的 AI 有兩個意思,一個廣義的 AI ,包括了所有相關的以及派生的領域,另一個則是狹義的或者經典的 AI ,專門指那些仍然在執著地追求著真正的“智慧”的部分,或者說得不好聽一點,就

  是剩下的部分。

  Machine Learning 作為離家出走的典型,雖然名字裡帶了 Learning 一個詞,讓人乍一看覺得和 Intelligence 相比不過是換了個說法而已,然而事實上這裡的 Learning 的意義要樸素得多。我們來看一看 Machine Learning 的典型的流程就知道了,其實有時候覺得和應用數學或者更通俗的數學建模有些類似,通常我們會有需要分析或者處理的資料,根據一些經驗和一些假設,我們可以構建一個模型,這個模型會有一些引數(即使是非引數化方法,也是可以類似地看待的),根據資料來求解模型引數的過程,就叫做 Parameter Estimation ,或者 Model Fitting ,但是搞機器學習的人,通常把它叫做 Learning (或者,換一個角度,叫 Training)——因為根據資料歸納出一個有用的模型,這和我們人類“學習”的過程還是挺類似的吧。不過,如果拋開無聊的摳字眼遊戲的話,我們可以看到,Machine Learning 已經拋棄了“智慧”的高帽子,它的目的就是要解決具

  體的問題——而並不關心是否是透過一種“智慧”的方式類解決的。

  說到這裡,其實我們構造模型就類似於寫一個類,資料就是建構函式的引數,Learning 就是建構函式執行的過程,成功構造一個物件之後,我們就完成了學習。一些 Machine Learning 的問題到這一步就結束了,另一些情況還會使用得到的模型(物件)對後來的資料進行一些處理,通常會是Inferencing。到這個時候,又有些像統計裡的東西了,所謂“統計推斷”嘛。其實原本統計和機器學習研究的不少問題就是交叉在一起的,不過兩派人從不同的角度來看待同樣的問題。而且,也確實有 Statistical Learning 這麼一個說法存在的,可以把他看成是 Machine Learning 的一個子領域(或者是一個分子或

  者甚至就是 Machine Learning 本身)。

  到這裡,如果你還沒有因為不斷地摳字眼而煩躁的話,

  我已經忍無可忍了。所以,我就假定你已經瞭解了什麼叫 Learning ,或者是已經噁心到懶得去了解了。於是我們轉入下一個話題:流形,也就是 Manifold 。不知道你有沒有為我在本文開頭放上的那個地球的圖片感到困惑?這是因為球面是一個很典型的流

  形的例子,而地球就是一個很典型的“球面”啦(姑且當作球面好啦)。

  有時候經常會在 paper 裡看到“嵌入在高維空間中的低維流形”,不過高維的資料對於我們這些可憐的低維生物來說總是很難以想像,所以最直觀的例子通常都會是嵌入在三維空間中的二維或者一維流行。比如說一塊布,可以把它看成一個二維平面,這是一個

  二維的歐氏空間,現在我們(在三維)中把它扭一扭,它就變成了一個流形(當然,不

  扭的時候,它也是一個流形,歐氏空間是流形的一種特殊情況)。

  所以,直觀上來講,一個流形好比是一個 d 維的空間,在一個 m 維的空間中 (m > d) 被扭曲之後的結果。需要注意的是,流形並不是一個“形狀”,而是一個“空間”,如果你覺得“扭曲的空間”難以想象,那麼請再回憶之前一塊布的例子。如果我沒弄錯的話,廣義相對論似乎就是把我們的時空當作一個四維流(空間三維加上時間一維)形來研究的,引力就是這個流形扭曲的結果。當然,這些都是直觀上的概念,其實流形並不需要依靠嵌入在一個“外圍空間”而存在,稍微正式一點來說,一個 d 維的流形就是一個在任意點出區域性同胚於(簡單地說,就是正逆對映都是光滑的一一對映)歐氏空間。

  實際上,正是這種區域性與歐氏空間的同

  胚給我們帶來了很多好處,這使得我們在日常生活中許許多多的幾何問題都可以使用簡單的歐氏幾何來解決,因為和地球的尺度比起來,我們的日常生活就算是一個很小的區域性啦——我突然想起《七龍珠》裡的那個界王住的那種私人小星球,走幾步就要繞一圈的感覺,看來界王不僅要體力好(那上面重力似乎是地球的十倍),而且腦力也要好,

  初中學的必須是黎曼幾何了!

  那麼,除了地球這種簡單的例子,實際應用中的資料,怎麼知道它是不是一個流形呢?於是不妨又迴歸直觀的感覺。再從球面說起,如果我們事先不知道球面的存在,那麼球面上的點,其實就是三維歐氏空間上的點,可以用一個三元組來表示其座標。但是和空間中的普通點不一樣的是,它們允許出現的位置受到了一定的限制,具體到球面,可以

  可以看一下它的引數方程:

  可以看到,這些三維的座標實際上是由兩個變數和生成的,也可以說成是它的自由度是二,也正好對應了它是一個二維的流形。有了這樣的感覺之後,再來看流形學習裡經

  常用到的人臉的例子,就很自然了。下圖是Isomap論文裡的一個結果:

  這裡的圖片來自同一張人臉(好吧,其實是人臉模型),每張圖片是 64×64 的灰度圖,如果把點陣圖按照列(或行)拼起來,就可以得到一個 4096 維的向量,這樣一來,每一張圖片就可以看成是 4096 維歐氏空間中的一個點。很顯然,並不是 4096 維空間中任意一個點都可以對應於一張人臉圖片的,這就類似於球面的情形,我們可以假定所有可以是人臉的 4096 維向量實際上分佈在一個 d 維 (d < 4096) 的子空間中。而特定到Isomap的人臉這個例子,實際上我們知道所有的 698 張圖片是拍自同一個人臉(模型),不過是在不同的 pose 和光照下拍攝的,如果把 pose (上下和左右)當作兩個自由度,而光照當作一個自由度,那麼這些圖片實際只有三個自由度,換句話說,存在一個類似於球面一樣的引數方程(當然,解析式是沒法寫出來的),給定一組引數(也就是上下、左右的 pose 和光照這三個值),就可以生成出對應的 4096 維的座標來。

  換句話說,這是一個嵌入在 4096 維歐氏空間中的一個 3 維流形。

  實際上,上面的那張圖就是Isomap將這個資料集從 4096 維對映到 3 維空間中,並顯示了其中 2 維的結果,圖中的小點就是每個人臉在這個二維空間中對應的座標位置,其中一些標紅圈的點被選出來,並在旁邊畫上了該點對應的原始圖片,可以很直觀地看

  出這兩個維度正好對應了 pose 的兩個自由度平滑變化的結果。

  就我目前所知,把流形引入到機器學習領域來主要有兩種用途:一是將原來在歐氏空間中適用的演算法加以改造,使得它工作在流形上,直接或間接地對流形的結構和性質加以利用;二是直接分析流形的結構,並試圖將其對映到一個歐氏空間中,再在得到的結果

  上運用以前適用於歐氏空間的演算法來進行學習。

  這裡Isomap正巧是一個非常典型的例子,因為它實際上是透過“改造一種原本適用於歐

  氏空間的演算法”,達到了“將流形對映到一個歐氏空間”的目的。

  Isomap所改造的這個方法叫做Multidimensional Scaling (MDS),MDS 是一種降維方法,它的目的就是使得降維之後的點兩兩之間的距離儘量不變(也就是和在原是空間中對應的兩個點之間的距離要差不多)。只是 MDS 是針對歐氏空間設計的,對於距離的計算也是使用歐氏距離來完成的。如果資料分佈在一個流形上的話,歐氏距離就不適用了。 讓我們再回到地球——這個在三維空間中的二維流形,假設我們要在三維空間中計算北極點和南極點的距離,這很容易,就是兩點相連的線段的長度,可是,如果要在這個流形上算距離就不能這樣子算了,我們總不能從北極打個洞鑽到南極去吧?要沿著地球表面走才行,當然,如果我隨便沿著什麼路線走一遍,然後數出總共走了多少步作為距離,這是不成的,因為這樣一來如果我沿著不同的路線走,豈不是會得到不同的距離值?總而言之,我們現在需要一個新的定義在地球表面(流形)上的距離度量,理論上來說,任意滿足測度的 4 個條件的函式都可以被定義為距離,不過,為了和歐氏空間對應起

  來,這裡選擇一個直線距離的推廣定義。

  還記得初中學的“兩點之間,線段最短”嗎?現在,我們反過來說,把線段的概念推廣一下,變成“兩點之間最短的曲線是線段”,於是流形上的距離定義也就等同於歐氏空間了:流形上兩個點之間的距離就是連線兩個點的“線段”的長度。雖然只是置換了一個概念,但是現在兩者統一起來了,不過,在流形上的線段大概就不一定是“直”的了(於是直線也變成不一定是“直”的了),通常又稱作是“測地線”。對於球面這個簡單的流形來說,任意一條線段必定是在一個“大圓”上的,於是球面上的直線其實都是一些大圓,也造成了球面這個流形上沒有平行線等一系列尷尬的局面(任意兩條直線均相交),如果你看

  過一些數學科普八卦類的書,應該會回憶起不少東西啦!

  回到Isomap,它主要做了一件事情,就是把 MDS 中原始空間中距離的計算從歐氏距離換為了流形上的測地距離。當然,如果流形的結構事先不知道的`話,這個距離是沒法算的,於是Isomap透過將資料點連線起來構成一個鄰接 Graph 來離散地近似原來的流形,而測地距離也相應地透過 Graph 上的最短路徑來近似了。

  流形學習

  流形學習是個很廣泛的概念。這裡我主要談的是自從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}.

  這段話是我在初學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

  這個方法不太被人所知,但是我認為這個是流形學習發展中的一個典型的方法(其實其他還有很多人也這莫認為)。就效果來說,這個方法不算好,說它是一個典型的方法,是因為這個方法應用了黎曼幾何中一個很直觀的性質。這個性質和法座標(normal coordinate)、指數對映(exponential map)和距離函式(distance function)有關。

  如果你瞭解黎曼幾何,你會知道,對於流形上的一條測地線,如果給定初始點和初始點處測地線的切方向,那莫這個測地線就可以被唯一確定。這是因為在這些初始條件下,描述測地線的偏微分方程的解是唯一的。那末流形上的一條測地線就可以和其起點處的切平面上的點建立一個對應關係。我們可以在這個切平面上找到一點,這個點的方向就是這個測地線在起點處的切方向,其長度等於這個測地線上的長。這樣的一個對應關係在區域性上是一一對應的。那末這個在切平面上的對應點在切平面中就有一個座標表示,這個表示就叫做測地線上對應點的法座標表示(有的也叫指數座標)。那末反過來,我們可以把切平面上的點對映到流形上,這個對映過程就叫做指數對映(Logmap就倒過來)。如果流形上每一個點都可以這樣在同一個切平面上表示出來,那末我們就可以得到保持測地線長度的低維表示。如果這樣做得到,流形必須可以被單座標系統所覆蓋。

  如果給定流形上的取樣點,如果要找到法座標,我們需要知道兩個東西,一是測地線距離,二是每個測地線在起點處的切方向。第一個東西好弄,利用Isomap中的方法直接就可以解決,關鍵是第二個。第二個作者利用了距離函式的梯度,這個梯度和那個切方向是一個等價的關係,一般的黎曼幾何書中都有敘述。作者利用一個區域性切座標的二次泰勒展開來近似距離函式,而距離是知道的,就是測地線距離,區域性切座標也知道,那末透過求一個簡單的最小二乘問題就可以估計出梯度方向。

  如果明白這個方法的幾何原理,你再去看那個方法的結果,你就會明白為什莫在距離中心點比較遠的點的embedding都可以清楚地看到在一條條線上,效果不太好。

  最近這個思想被北大的一個年輕的老師 LIN Tong 發揚光大,就是ECCV‘06上的那篇,還有即將刊登出的TPAMI上的 Riemannian Manifold Learning,實為國內研究學者之榮幸。Lin的方法效果非常好,但是雖然取名叫Riemannian,沒有應用到黎曼幾何本身的性質,這樣使他的方法更容易理解。

  Lin也是以一個切空間為基準找法座標,這個出發點和思想和Brun(S-Logmaps)的是一樣的。但是Lin全是在區域性上操作的,在得出切空間原點處區域性鄰域的法座標以後,Lin採用逐步向外擴充套件的方法找到其他點的法座標,在某一點處,保持此點到它鄰域點的歐式距離和夾角,然後轉化成一個最小二乘問題求出此點的法座標,這樣未知的利用已知的逐步向外擴充套件。說白了就像縫網一樣,從幾個臨近的已知點開始,逐漸向外擴散的縫。效果好是必然的。

  淺談流形學習

  bypluskid, on 2010-05-29, in Machine Learning76 comments

  總覺得即使是“淺談”兩個字,還是讓這個標

  題有些過大了,更何況我自己也才剛剛接觸這麼一個領域。不過懶得想其他標題了,想起來要扯一下這個話題,也是因為和朋友聊起我自己最近在做的方向。Manifold Learning 或者僅僅 Manifold 本身通常就聽起來頗有些深奧的感覺,不過如果並不是想要進行嚴格的理論推導的話,也可以從許多直觀的例子得到一些感性的認識,正好我也就借這個機會來簡單地談一下這個話題吧,或者說至少是我到目前為止對這它的認識。 這兩個詞,在談 Manifold 之前,不妨先說說 Learning ,也就是 Machine Learning 。而說道 Machine Learning 而不提一下 Artificial Intelligence 的話似乎又顯得有些不厚道。人說 AI 是一門最悲劇的學科,因為每當它的一個子領域發展得像模像樣之後,就立馬自立門戶,從此和 AI “再無瓜葛”了,而 Machine Learning 大概要算是最新的一個典型吧。這就讓人有點奇怪,比如說數學,分門別類總算是夠多了吧?可以不管怎麼分,大家兄弟姐妹也都還承認自己是叫“數學”的。那 AI 呢?我覺得這裡有很大一部分

  是它自身定位的問題。

  反正現在我是不太清楚 AI 是做什麼的,不知道其他人到底清楚不清楚。Wikipedia 上

  說 Artificial intelligence (AI) is the intelligence of machines and the branch of computer

  science that aims to create it.

  可是這相當於一個 tautology ,因為到底什麼又是the intelligence of machines呢?一開始的時候,大牛們都野心勃勃,而且好像也是信心滿滿,就好像曾經廣泛認為“牛頓定理揭示了宇宙真理,科學剩下的事情只要按照公式來做計算就可以了”一樣,大家可能覺得,不出幾十年,人類就可以不用思考,交給 AI 來做了。不過我這裡並不想再多說諸如什麼是“思考”,什麼是“智慧”之類的以及隨之而來的“圖靈測試”之類的話題。我想說的是,到頭來,AI 到底是什麼,這還是一個問題,或者說,AI 在一開始定了一個過高的目標,幾十年後,發現情況並不像當年那麼樂觀,卻又有些下不了臺了。

  這個時候,AI 的一些旁枝或者子領域果斷放下面子,丟掉了那個近乎玄幻的目標,逐漸發展成為“正常”的學科,所以也就不再好稱為 AI 了。或者說現在的 AI 有兩個意思,一個廣義的 AI ,包括了所有相關的以及派生的領域,另一個則是狹義的或者經典的 AI ,專門指那些仍然在執著地追求著真正的“智慧”的部分,或者說得不好聽一點,就

  是剩下的部分。

  Machine Learning 作為離家出走的典型,雖然名字裡帶了 Learning 一個詞,讓人乍一看覺得和 Intelligence 相比不過是換了個說法而已,然而事實上這裡的 Learning 的意義要樸素得多。我們來看一看 Machine Learning 的典型的流程就知道了,其實有時候覺得和應用數學或者更通俗的數學建模有些類似,通常我們會有需要分析或者處理的資料,根據一些經驗和一些假設,我們可以構建一個模型,這個模型會有一些引數(即使是非引數化方法,也是可以類似地看待的),根據資料來求解模型引數的過程,就叫做 Parameter Estimation ,或者 Model Fitting ,但是搞機器學習的人,通常把它叫做 Learning (或者,換一個角度,叫 Training)——因為根據資料歸納出一個有用的模型,這和我們人類“學習”的過程還是挺類似的吧。不過,如果拋開無聊的摳字眼遊戲的話,我們可以看到,Machine Learning 已經拋棄了“智慧”的高帽子,它的目的就是要解決具

  體的問題——而並不關心是否是透過一種“智慧”的方式類解決的。

  說到這裡,其實我們構造模型就類似於寫一個類,資料就是建構函式的引數,Learning 就是建構函式執行的過程,成功構造一個物件之後,我們就完成了學習。一些 Machine Learning 的問題到這一步就結束了,另一些情況還會使用得到的模型(物件)對後來的資料進行一些處理,通常會是Inferencing。到這個時候,又有些像統計裡的東西了,所謂“統計推斷”嘛。其實原本統計和機器學習研究的不少問題就是交叉在一起的,不過兩派人從不同的角度來看待同樣的問題。而且,也確實有 Statistical Learning 這麼一個說法存在的,可以把他看成是 Machine Learning 的一個子領域(或者是一個分子或

  者甚至就是 Machine Learning 本身)。

  到這裡,如果你還沒有因為不斷地摳字眼而煩躁的話,

  我已經忍無可忍了。所以,我就假定你已經瞭解了什麼叫 Learning ,或者是已經噁心到懶得去了解了。於是我們轉入下一個話題:流形,也就是 Manifold 。不知道你有沒有為我在本文開頭放上的那個地球的圖片感到困惑?這是因為球面是一個很典型的流

  形的例子,而地球就是一個很典型的“球面”啦(姑且當作球面好啦)。

  有時候經常會在 paper 裡看到“嵌入在高維空間中的低維流形”,不過高維的資料對於我們這些可憐的低維生物來說總是很難以想像,所以最直觀的例子通常都會是嵌入在三維空間中的二維或者一維流行。比如說一塊布,可以把它看成一個二維平面,這是一個

  二維的歐氏空間,現在我們(在三維)中把它扭一扭,它就變成了一個流形(當然,不

  扭的時候,它也是一個流形,歐氏空間是流形的一種特殊情況)。

  所以,直觀上來講,一個流形好比是一個 d 維的空間,在一個 m 維的空間中 (m > d) 被扭曲之後的結果。需要注意的是,流形並不是一個“形狀”,而是一個“空間”,如果你覺得“扭曲的空間”難以想象,那麼請再回憶之前一塊布的例子。如果我沒弄錯的話,廣義相對論似乎就是把我們的時空當作一個四維流(空間三維加上時間一維)形來研究的,引力就是這個流形扭曲的結果。當然,這些都是直觀上的概念,其實流形並不需要依靠嵌入在一個“外圍空間”而存在,稍微正式一點來說,一個 d 維的流形就是一個在任意點出區域性同胚於(簡單地說,就是正逆對映都是光滑的一一對映)歐氏空間。

  實際上,正是這種區域性與歐氏空間的同

  胚給我們帶來了很多好處,這使得我們在日常生活中許許多多的幾何問題都可以使用簡單的歐氏幾何來解決,因為和地球的尺度比起來,我們的日常生活就算是一個很小的區域性啦——我突然想起《七龍珠》裡的那個界王住的那種私人小星球,走幾步就要繞一圈的感覺,看來界王不僅要體力好(那上面重力似乎是地球的十倍),而且腦力也要好,

  初中學的必須是黎曼幾何了!

  那麼,除了地球這種簡單的例子,實際應用中的資料,怎麼知道它是不是一個流形呢?於是不妨又迴歸直觀的感覺。再從球面說起,如果我們事先不知道球面的存在,那麼球面上的點,其實就是三維歐氏空間上的點,可以用一個三元組來表示其座標。但是和空間中的普通點不一樣的是,它們允許出現的位置受到了一定的限制,具體到球面,可以

  可以看一下它的引數方程:

  可以看到,這些三維的座標實際上是由兩個變數和生成的,也可以說成是它的自由度是二,也正好對應了它是一個二維的流形。有了這樣的感覺之後,再來看流形學習裡經

  常用到的人臉的例子,就很自然了。下圖是Isomap論文裡的一個結果:

  這裡的圖片來自同一張人臉(好吧,其實是人臉模型),每張圖片是 64×64 的灰度圖,如果把點陣圖按照列(或行)拼起來,就可以得到一個 4096 維的向量,這樣一來,每一張圖片就可以看成是 4096 維歐氏空間中的一個點。很顯然,並不是 4096 維空間中任意一個點都可以對應於一張人臉圖片的,這就類似於球面的情形,我們可以假定所有可以是人臉的 4096 維向量實際上分佈在一個 d 維 (d < 4096) 的子空間中。而特定到Isomap的人臉這個例子,實際上我們知道所有的 698 張圖片是拍自同一個人臉(模型),不過是在不同的 pose 和光照下拍攝的,如果把 pose (上下和左右)當作兩個自由度,而光照當作一個自由度,那麼這些圖片實際只有三個自由度,換句話說,存在一個類似於球面一樣的引數方程(當然,解析式是沒法寫出來的),給定一組引數(也就是上下、左右的 pose 和光照這三個值),就可以生成出對應的 4096 維的座標來。

  換句話說,這是一個嵌入在 4096 維歐氏空間中的一個 3 維流形。

  實際上,上面的那張圖就是Isomap將這個資料集從 4096 維對映到 3 維空間中,並顯示了其中 2 維的結果,圖中的小點就是每個人臉在這個二維空間中對應的座標位置,其中一些標紅圈的點被選出來,並在旁邊畫上了該點對應的原始圖片,可以很直觀地看

  出這兩個維度正好對應了 pose 的兩個自由度平滑變化的結果。

  就我目前所知,把流形引入到機器學習領域來主要有兩種用途:一是將原來在歐氏空間中適用的演算法加以改造,使得它工作在流形上,直接或間接地對流形的結構和性質加以利用;二是直接分析流形的結構,並試圖將其對映到一個歐氏空間中,再在得到的結果

  上運用以前適用於歐氏空間的演算法來進行學習。

  這裡Isomap正巧是一個非常典型的例子,因為它實際上是透過“改造一種原本適用於歐

  氏空間的演算法”,達到了“將流形對映到一個歐氏空間”的目的。

  Isomap所改造的這個方法叫做Multidimensional Scaling (MDS),MDS 是一種降維方法,它的目的就是使得降維之後的點兩兩之間的距離儘量不變(也就是和在原是空間中對應的兩個點之間的距離要差不多)。只是 MDS 是針對歐氏空間設計的,對於距離的計算也是使用歐氏距離來完成的。如果資料分佈在一個流形上的話,歐氏距離就不適用了。 讓我們再回到地球——這個在三維空間中的二維流形,假設我們要在三維空間中計算北極點和南極點的距離,這很容易,就是兩點相連的線段的長度,可是,如果要在這個流形上算距離就不能這樣子算了,我們總不能從北極打個洞鑽到南極去吧?要沿著地球表面走才行,當然,如果我隨便沿著什麼路線走一遍,然後數出總共走了多少步作為距離,這是不成的,因為這樣一來如果我沿著不同的路線走,豈不是會得到不同的距離值?總而言之,我們現在需要一個新的定義在地球表面(流形)上的距離度量,理論上來說,任意滿足測度的 4 個條件的函式都可以被定義為距離,不過,為了和歐氏空間對應起

  來,這裡選擇一個直線距離的推廣定義。

  還記得初中學的“兩點之間,線段最短”嗎?現在,我們反過來說,把線段的概念推廣一下,變成“兩點之間最短的曲線是線段”,於是流形上的距離定義也就等同於歐氏空間了:流形上兩個點之間的距離就是連線兩個點的“線段”的長度。雖然只是置換了一個概念,但是現在兩者統一起來了,不過,在流形上的線段大概就不一定是“直”的了(於是直線也變成不一定是“直”的了),通常又稱作是“測地線”。對於球面這個簡單的流形來說,任意一條線段必定是在一個“大圓”上的,於是球面上的直線其實都是一些大圓,也造成了球面這個流形上沒有平行線等一系列尷尬的局面(任意兩條直線均相交),如果你看

  過一些數學科普八卦類的書,應該會回憶起不少東西啦!

  回到Isomap,它主要做了一件事情,就是把 MDS 中原始空間中距離的計算從歐氏距離換為了流形上的測地距離。當然,如果流形的結構事先不知道的話,這個距離是沒法算的,於是Isomap透過將資料點連線起來構成一個鄰接 Graph 來離散地近似原來的流形,而測地距離也相應地透過 Graph 上的最短路徑來近似了。

最近訪問