Manifold learning 流形學習

Machine Learning 雖然名字裏帶了 Learning 一個詞,讓人乍一看以爲和 Intelligence 相比不過是換了個說法而已,然而事實上這裏的 Learning 的意義要樸素得多。咱們來看一看 Machine Learning 的典型的流程就知道了,其實有時候以爲和應用數學或者更通俗的數學建模有些相似,一般咱們會有須要分析或者處理的數據,根據一些經驗和一些假設,咱們能夠構建一個模型,這個模型會有一些參數(即便是非參數化方法,也是能夠相似地看待的),根據數據來求解模型參數的過程,就叫作 Parameter Estimation,或者 Model Fitting ,可是搞機器學習的人,一般把它叫作 Learning (或者,換一個角度,叫 Training)——由於根據數據概括出一個有用的模型。git

 

說到這裏,其實咱們構造模型就相似於寫一個類,數據就是構造函數的參數,Learning 就是構造函數運行的過程,成功構造一個對象以後,咱們就完成了學習。一些 Machine Learning 的問題到這一步就結束了,另外一些狀況還會使用獲得的模型(對象)對後來的數據進行一些處理,一般會是 Inferencing 。到這個時候,又有些像統計裏的東西了,所謂「統計推斷」嘛。其實本來統計和機器學習研究的很多問題就是交叉在一塊兒的,不過兩派人從不一樣的角度來看待一樣的問題。並且,也確實有 Statistical Learning 這麼一個說法存在的,能夠把他當作是 Machine Learning 的一個子領域(或者是一個分子或者甚至就是 Machine Learning 自己)。算法

因而咱們轉入下一個話題:流形,也就是  。不知道你有沒有爲那個地球的圖片感到困惑?這是由於球面是一個很典型的流形的例子,而地球就是一個很典型的「球面」(姑且看成球面好啦)。app

有時候常常會在 paper 裏看到「嵌入在高維空間中的低維流形」,不太高維的數據對於咱們這些可憐的低維生物來講老是很難以想像,因此最直觀的例子一般都會是嵌入在三維空間中的二維或者一維流行。好比說一塊布,能夠把它當作一個二維平面,這是一個二維的歐氏空間,如今咱們(在三維)中把它扭一扭,它就變成了一個流形(固然,不扭的時候,它也是一個流形,歐氏空間是流形的一種特殊狀況)。因此,直觀上來說,一個流形比如是一個 d 維的空間,在一個 m 維的空間中 (m > d) 被扭曲以後的結果。須要注意的是,流形並非一個「形狀」,而是一個「空間」,若是你以爲「扭曲的空間」不可思議,那麼請再回憶以前一塊布的例子。機器學習

 

若是我沒弄錯的話,廣義相對論彷佛就是把咱們的時空看成一個四維流(空間三維加上時間一維)形來研究的,引力就是這個流形扭曲的結果。固然,這些都是直觀上的概念,其實流形並不須要依靠嵌入在一個「外圍空間」而存在,稍微正式一點來講,一個 d 維的流形就是一個在任意點處局部同胚於(簡單地說,就是正逆映射都是光滑的一一映射)歐氏空間 \textcal{R}^d 。實際上,正是這種局部與歐氏空間的同胚給咱們帶來了不少好處,這使得咱們在平常生活中許許多多的幾何問題均可以使用簡單的歐氏幾何來解決,由於和地球的尺度比起來,咱們的平常生活就算是一個很小的局部啦——我忽然想起《七龍珠》裏的那個界王住的那種私人小星球,走幾步就要繞一圈的感受,看來界王不只要體力好(那上面重力彷佛是地球的十倍),並且腦力也要好,初中學的必須是黎曼幾何了!ide

 

那麼,除了地球這種簡單的例子,實際應用中的數據,怎麼知道它是否是一個流形呢?因而不妨又迴歸直觀的感受。再從球面提及,若是咱們事先不知道球面的存在,那麼球面上的點,其實就是三維歐氏空間上的點,能夠用一個三元組來表示其座標。可是和空間中的普通點不同的是,它們容許出現的位置受到了必定的限制,具體到球面,能夠能夠看一下它的參數方程:函數

能夠看到,這些三維的座標其實是由兩個變量生成的,也能夠說成是它的自由度是二,也正好對應了它是一個二維的流形。有了這樣的感受以後,再來看流形學習裏常常用到的人臉的例子,就很天然了。下圖是 Isomap 論文裏的一個結果:學習

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

實際上,上面的那張圖就是 Isomap 將這個數據集從 4096 維映射到 3 維空間中,並顯示了其中 2 維的結果,圖中的小點就是每一個人臉在這個二維空間中對應的座標位置,其中一些標紅圈的點被選出來,並在旁邊畫上了該點對應的原始圖片,能夠很直觀地看出這兩個維度正好對應了 pose 的兩個自由度平滑變化的結果。

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

這裏 Isomap 正巧是一個很是典型的例子,由於它其實是經過「改造一種本來適用於歐氏空間的算法」,達到了「將流形映射到一個歐氏空間」的目的。.net

 

Isomap 所改造的這個方法叫作Multidimensional Scaling (MDS) ,MDS 是一種降維方法,它的目的就是使得降維以後的點兩兩之間的距離儘可能不變(也就是和在原是空間中對應的兩個點之間的距離要差很少)。只是 MDS 是針對歐氏空間設計的,對於距離的計算也是使用歐氏距離來完成的。若是數據分佈在一個流形上的話,歐氏距離就不適用了。

讓咱們再回到地球——這個在三維空間中的二維流形,假設咱們要在三維空間中計算北極點和南極點的距離,這很容易,就是兩點相連的線段的長度,但是,若是要在這個流形上算距離就不能這樣子算了,咱們總不能從北極打個洞鑽到南極去吧?要沿着地球表面走才行,固然,若是我隨便沿着什麼路線走一遍,而後數出總共走了多少步做爲距離,這是不成的,由於這樣一來若是我沿着不一樣的路線走,豈不是會獲得不一樣的距離值?總而言之,咱們如今須要一個新的定義在地球表面(流形)上的距離度量,理論上來講,任意知足測度的 4 個條件的函數均可以被定義爲距離,不過,爲了和歐氏空間對應起來,這裏選擇一個直線距離的推廣定義。

還記得初中學的「兩點之間,線段最短」嗎?如今,咱們反過來講,把線段的概念推廣一下,變成「兩點之間最短的曲線是線段」,因而流形上的距離定義也就等同於歐氏空間了:流形上兩個點之間的距離就是鏈接兩個點的「線段」的長度。雖然只是置換了一個概念,可是如今二者統一塊兒來了,不過,在流形上的線段大概就不必定是「直」的了(因而直線也變成不必定是「直」的了),一般又稱做是「測地線」。對於球面這個簡單的流形來講,任意一條線段一定是在一個「大圓」上的,因而球面上的直線其實都是一些大圓,也形成了球面這個流形上沒有平行線等一系列尷尬的局面(任意兩條直線均相交)。


回到 Isomap ,它主要作了一件事情,就是把 MDS 中原始空間中距離的計算從歐氏距離換爲了流形上的測地距離。固然,若是流形的結構事先不知道的話,這個距離是無法算的,因而 Isomap 經過將數據點鏈接起來構成一個鄰接 Graph 來離散地近似原來的流形,而測地距離也相應地經過 Graph 上的最短路徑來近似了。以下圖所示:設計

這個東西叫作Swiss Roll ,姑且把它看做一塊捲起來的布好了。圖中兩個標黑圈的點,若是經過外圍歐氏空間中的歐氏距離來計算的話,會是捱得很近的點,但是在流形上它們其實是距離很遠的點:紅色的線是 Isomap 求出來的流形上的距離。能夠想像,若是是原始的 MDS 的話,降維以後確定會是很暴力地直接把它投影到二維空間中,徹底無視流形結構,而 Isomap 則能夠成功地將流形「展開」以後再作投影。

除了 Isomap 以外,Manifold Embedding 的算法還有不少不少,包括 Locally Linear Embedding 、Laplacian Eigenmaps 、Hessian Eigenmaps 、Local Tangent Space Alignment、Semidefinite Embedding (Maximum Variance Unfolding) 等等。哪一個好哪一個壞也很差說,它們都各有特色,並且也各自有很多變種。網上有一個 Matlab 的 demo ,給出了幾種流行的 manifold embedding 算法在一些 synthetic manifold 上的結果和對比,能夠有一個直觀的認識。

另外一方面是改造現有算法使其適合流形結構甚至專門針對流形的特色來設計新的算法,比較典型的是 graph regularized semi-supervised learning 。簡單地說,在 supervised learning 中,咱們只能利用有 label 的數據,而(一般都會有不少的)沒有 label 的數據則白白浪費掉。在流形假設下,雖然這些數據沒有 label ,可是仍然是能夠有助於 Learn 出流形的結構的,而學出了流形結構以後實際上咱們就是對原來的問題又多了一些認識,因而理所固然地指望能獲得更好的結果嘍。

固然,全部的這些都是基於同一個假設,那就是數據是分佈在一個流形上的(部分算法可能會有稍微寬鬆一些的假設),然而 real world 的數據,究竟哪些是分別在流形上的呢?這個倒是很難說。不過,除了典型的 face 和 hand written digit 以外,你們也有把基於流形的算法直接用在諸如 text 看起來好像也流形沒有什麼關係的數據上,效果彷佛也還不錯。對象

 

話說回來,雖然和實際應用結合起來是很是重要的一個問題,可是也並非決定性的,特別是對於搞理論方面的人來講。我想,對於他們來講,其實也像是在作應用啦,不過是把數學裏的東西應用到機器學習所研究的問題裏來,並且其中關係錯綜複雜,圖論、代數、拓撲、幾何……彷彿是十八路諸侯齊聚一堂,因此讓我總以爲要再花 500 年來惡補數學才行啊!

 

不過我表示能夠理解其中存在的潛在的 happy 之處,就比如你玩遊戲,先玩了《天地劫:神魔至尊傳》,而後再玩《天地劫序章:幽城幻劍錄》的時候,會發現裏面的人物、劇情逐漸地聯繫起來,也許甚至只是在一個地方出現過的一個徹底不起眼的配角,當你再在另外一地方忽然看到他是,一系列的線索瞬間被聯繫起來,全局的畫面漸漸浮現,那種 happy 的感受,大概就是所謂的「撥雲見日」了吧!

 

最後是總結:所謂 Machine Learning 裏的 Learning ,就是在創建一個模型以後,經過給定數據來求解模型參數。而 Manifold Learning 就是在模型裏包含了對數據的流形假設。

轉自: http://www.javashuo.com/article/p-vlaonasp-nd.html, 感謝分享!

參考:

http://blog.pluskid.org/?p=533

相關文章
相關標籤/搜索