1. 程式人生 > >機器學習中的代數結構的建立

機器學習中的代數結構的建立

         Learning是一個融會多種數學於一體的領域。說起與此有關的數學學科,我們可能會迅速聯想到線性代數以及建立在向量空間基礎上的統計模型——事實上,主流的論文中確實在很大程度上基於它們。

R^n (n-維實向量空間) 是我們在paper中見到最多的空間,它確實非常重要和實用,但是,僅僅依靠它來描述我們的世界並不足夠。事實上,數學家們給我們提供了豐富得多的工具。

       “空間”(space),這是一個很有意思的名詞,幾乎出現在所有的數學分支的基礎定義之中。歸納起來,所謂空間就是指一個集合以及在上面定義的某種數學結構。關於這個數學結構的定義或者公理,就成為這個數學分支的基礎,一切由此而展開。

還是從我們最熟悉的空間——R^n 說起吧。大家平常使用這個空間的時候,除了線性運算,其實還用到了別的數學結構,包括度量結構和內積結構。

· 第一,它是一個拓撲空間(Topological space)

——一而且從拓撲學的角度看,具有非常優良的性質Normal (implying Hausdorff and Regular),Locally CompactParacompactwith Countable basisSimply connected (implying connected and path connected),Metrizable

· 第二,它是一個度量空間(Metric space)

——一我們可以計算上面任意兩點的距離

· 第三,它是一個有限維向量空間(Finite dimensional space)

——一我們可以對裡面的元素進行代數運算(加法和數乘),我們還可以賦予它一組有限的基,從而可以用有限維座標表達每個元素。

· 第四,基於度量結構和線性運算結構,可以建立起分析(Analysis)體系

——一我們可以對連續函式進行微分,積分,建立和求解微分方程,以及進行傅立葉變換和小波分析。

· 第五,它是一個希爾伯特空間(也就是完備的內積空間)(Hilbert space, Complete inner product space)。

———它有一套很方便計算的內積(inner product)結構——這個空間的度量結構其實就是從其內積結構誘匯出來。更重要的,它是完備的(Complete)——代表任何一個柯西序列(Cauchy sequence)都有極限——很多人有意無意中其實用到了這個特性,不過習慣性地認為是理所當然了。

· 第六,它上面的線性對映構成的運算元空間仍舊是有限維

——一個非常重要的好處就是,所有的線性對映都可以用矩陣唯一表示。特別的,因為它是有限維完備空間,它的泛函空間和它本身是同構的,也是R^n。因而,它們的譜結構,也就可以通過矩陣的特徵值和特徵向量獲得

· 第七,它是一個測度空間——可以計運算元集的大小(面積/體積)

——一正因為此,我們才可能在上面建立概率分佈(distribution)——這是我們接觸的絕大多數連續統計模型的基礎。

我們可以看到,這是一個非常完美的空間,為我們的應用在數學上提供了一切的方便,在上面,我們可以理所當然地認為它具有我們希望的各種良好性質,而無須特別的證明;我們可以直接使用它的各種運算結構,而不需要從頭建立;而且很多本來不一樣的概念在這裡變成等價的了,我們因此不再需要辨明它們的區別。

以此為界......

Learning的主要工作分成兩個大的範疇:

一、建立一種表達形式,讓它處於上面討論的R^n空間裡面。

二、獲得了有限維向量表達後,建立各種代數演算法或者統計模型進行分析和處理。

這裡只討論第一個範疇。先看看,目前用得比較廣泛的一些方法:

1. 直接基於原始資料建立表達 

我們關心的最終目標是一個個現實世界中的物件:一幅圖片,一段語音,一篇文章,一條交易記錄,等等。這些東西大部分本身沒有附著一個數值向量的。為了構造 一個向量表達,我們可以把感測器中記錄的數值,或者別的什麼方式收集的數值資料按照一定的順序羅列出來,就形成一個向量了。如果有n個數字,就認為它們在R^n裡面。

不過,這在數學上有一點小問題,在大部分情況下,根據資料產生的物理原理,這些向量的值域並不能充滿整個空間。比如影象的畫素值一般是正值,而且在一個有界閉集之中。這帶來的問題是,對它們進行線性運算很可能得到的結果會溢位正常的範圍——在大部分paper中,可能只是採用某些heuristics的手段進行簡單處理,或者根本不管,很少見到在數學上對此進行深入探討的——不過如果能解決實際問題,這也是無可厚非的,畢竟不是所有的工作都需要像純數學那樣追求嚴謹。

2. 量化(quantization)

這是在處理連續訊號時被廣泛採用的方式。只是習以為常,一般不提名字而已。比如一個空間訊號(Vision中的image)或者時間訊號,它們的domain中的值是不可數無限大的(uncountably infinite),不要說表示為有限維向量,即使表達為無限序列也是不可能的。在這種情況下,一般在有限域內,按照一定順序每隔一定距離取一個點來代表其周圍的點,從而形成有限維的表達。這就是訊號在時域或空域的量化。

這樣做不可避免要丟失資訊。但是,由於小鄰域內訊號的高度相關,資訊丟失的程度往往並不顯著。而且,從理論上說,這相當於在頻域中的低通過率。對於有限能量的連續訊號,不可能在無限高的頻域中依然保持足夠的強度,只要取樣密度足夠,丟失的東西可以任意的少。

除了表示訊號,對於幾何形體的表達也經常使用量化,比如表示curve和surface。

3. 找出有限個數充分表達一個物件也許不是最困難的

不過,在 其上面建立數學結構卻未必了。一般來說,我們要對其進行處理,首先需要一個拓撲結構用以描述空間上的點是如何聯絡在一起。直接建立拓撲結構在數學上往往非常困難,也未必實用。因此,絕大部分工作採取的方式是首先建立度量結構。一個度量空間,其度量會自然地誘匯出一個拓撲結構——不過,很多情況下我們似乎會無視它的存在。

最簡單的情況,就是使用原始向量表達的歐氏距離(Euclidean distance)作為metric。 不過,由於原始表達數值的不同特性,這種方式效果一般不是特別好,未必能有效表達實際物件的相似性(或者不相似性)。因此,很多工作會有再此基礎上進行度 量的二次建立。方式是多種多樣的,一種是尋求一個對映,把原空間的元素變換到一個新的空間,在那裡歐氏距離變得更加合適。這個對映發揮的作用包括對資訊進 行篩選,整合,對某些部分進行加強或者抑制。這就是大部分關於feature selection,feature extraction,或者subspace learning的文章所要做的。另外一種方式,就是直接調節距離的計算方式(有些文章稱之為metric learning)。

這兩種方式未必是不同的。如果對映是單射,那麼它相當於在原空間建立了一個不同的度量。反過來,通過改變距離計算方式建立的度量在特定的條件下對應於某種對映。

4. 大家可能注意到,上面提到的度量建立方法,比如歐氏距離,它需要對元素進行代數運算

對於普通的向量空間,線性運算是天然賦予的,我們無須專門建立,所以可以直接進行度量的構造——這也是大部分工作的基礎。可是,有些事物其原始表達不是一個n-tuple,它可能是一個set,一個graph,或者別的什麼特別的object。怎麼建立代數運算呢?

一 種方法是直接建立。就是給這些東西定義自己的加法和數乘。這往往不是那麼直接(能很容易建立的線性運算結構早已經被建立好並廣泛應用了),可能需要涉及 很深的數學知識,並且要有對問題本身的深入瞭解和數學上的洞察力。不過,一個新的代數結構一旦建立起來,其它的數學結構,包括拓撲,度量,分析,以及內積 結構也隨之能被自然地誘匯出來,我們也就具有了對這個物件空間進行各種數學運算和操作的基礎。加法和數乘看上去簡單,但是如果我們對於本來不知道如何進行 加法和數乘的空間建立了這兩樣東西,其理論上的貢獻是非常大的。

(一個小問題:大家常用各種graphical model,但是,每次這些model都是分別formulate,然後推匯出estimation和evaluation的步驟方法。是否可能對"the space of graphical model"或者它的某個特定子集建立某種代數結構呢?(不一定是線性空間,比如群,環,廣群, etc)從而使得它們在代數意義上統一起來,而相應的estimation或者evaluation也可以用過代數運算derive。這不是我的研究範圍,也超出了我目前的能力和知識水平,只是我相信它在理論上的重要意義,留作一個遠景的問題。事實上,數學中確實有一個分支叫做 Algebraic statistics 可能在探討類似的問題,不過我現在對此瞭解非常有限。)

5. 除了直接建立運算定義,另外一種方式就是嵌入(embedding)到某個向量空間,從而繼承其運算結構為我所用

當然這種嵌入也不是亂來,它需要保持原來這些物件的某種關係。最常見的就是保距嵌入(isometric embedding),我們首先建立度量結構繞過向量表達,直接對兩個物件的距離通過某種方法進行計算),然後把這個空間嵌入到目標空間,通常是有限維向量空間,要求保持度量不變。

“嵌入”是一種在數學上應用廣泛的手段,其主要目標就是通過嵌入到一個屬性良好,結構豐富的空間,從而利用其某種結構或者運算體系。在拓撲學中,嵌入到metric space對某個拓撲空間建立度量的重要手段。而在這裡,我們是已有度量的情況下,通過嵌入獲取線性運算的結構。除此以來,還有一種就是前些年比較熱的manifold embedding,這個是通過保持區域性結構的嵌入,獲取全域性結構,後面還會提到。

6. 接下來的一個重要的代數結構,就是內積(inner product)結構

內積結構一旦建立,會直接誘匯出一種性質良好的度量,就是範數(norm),並且進而誘匯出拓撲結構。一般來說,內積需要建立線上性空間的基礎上,否則連一個二元運算是否是內積都無法驗證。不過,kernel理論指出,對於一個空間,只要定義一個正定核(positive kernel)——一個符合正定條件的二元運算,就必然存在一個希爾伯特空間,其內積運算等效於核運算。這個結論的重要意義在於,我們可以繞開線性空間,通過首先定義kernel的方式,誘匯出一個線性空間(叫做再生核希爾伯特空間 Reproducing Kernel Hilbert Space),從而我們就自然獲得我們所需要的度量結構和線性運算結構。這是kernel theory的基礎。

在很多教科書中,以二次核為例子,把二維空間變成三維,然後告訴大家kernel用於升維。對於這種說法,我一直認為在一定程度上是誤導的。事實上,kernel的最首要意義是內積的建立(或者改造),從而誘匯出更利於表達的度量和運算結構。對於一個問題而言,選擇一個切合問題的kernel比起關注“升維”來得更為重要。

kernel被視為非線性化的重要手段,用於處理非高斯的資料分佈。這是有道理的。通過nonlinear kernel改造的內積空間,其結構和原空間的結構確實不是線性關聯,從這個意義上說,它實施了非線性化。不過,我們還應該明白,它的最終目標還是要回到線性空間,新的內積空間仍舊是一個線性空間,它一旦建立,其後的運算都是線性的,因此,kernel的使用就是為了尋求一個新的線性空間,使得線性運算更加合理——非線性化的改造最終仍舊是要為線性運算服務。

值得一提的是,kernelization本質上說還是一種嵌入過程:對於一個空間先建立內積結構,並且以保持內積結構不變的方式嵌入到一個高維的線性空間,從而繼承其線性運算體系。

7. 上面說到的都是從全域性的方式建立代數結構的過程,但是那必須以某種全域性結構為基礎(無論預先定義的是運算,度量還是內積,都必須適用於全空間。)但是,全域性結構未必存在或者適合,而區域性結構往往簡單方便得多。這裡就形成一種策略,以區域性而達全域性——這就是流形(manifold)的思想,而其則根源於拓撲學。

從拓撲學的角度說,流形就是一個非常優良的拓撲空間:符合Hausdorff分離公理任何不同的兩點都可以通過不相交的鄰域分離),符合第二可數公理(具有可數的拓撲基),並且更重要的是,區域性同胚於R^n。因此,一個正則(Regular)流形基本就具有了各種最良好的拓撲特性。而區域性同胚於R^n,代表了它至少在區域性上可以繼承R^n的各種結構,比如線性運算和內積,從而建立分析體系。事實上,拓撲流形繼承這些結構後形成的體系,正是現代流形理論研究的重點。繼承了分析體系的流形,就形成了微分流形(Differential manifold),這是現代微分幾何的核心。而微分流形各點上的切空間(Tangent Space),則獲得了線性運算的體系。而進一步繼承了局部內積結構的流形,則形成黎曼流形(Riemann manifold),而流形的全域性度量體系——測地距離(geodesics)正是通過對區域性度量的延伸來獲得。進一步的,當流行本身的拓撲結構和切空間上的線性結構發生關係——也就獲得一簇拓撲關聯的線性空間——向量叢(Vector bundle)。

雖然manifold theory作為現代幾何學的核心,是一個博大精深的領域,但是它在learning中的應用則顯得非常狹窄。事實上,對於manifold,很多做learning的朋友首先反應的是ISOMAP, LLE, eigenmap之類的演算法。這些都屬於embedding。當然,這確實是流形理論的一個重要方面。嚴格來說,這要求是從原空間到其映像的微分同胚對映,因此,嵌入後的空間在區域性上具有相同的分析結構,同時也獲得了各種好處——全域性的線性運算和度量。不過,這個概念在learning的應用中被相當程度的放寬了——微分同胚並不能被完全保證,而整個分析結構也不能被完全保持。大家更關注的是保持區域性結構中的某個方面——不過這在實際應用中的折衷方案也是可以理解的。事實表明,當原空間中的資料足夠密集的情況下,這些演算法工作良好。

Learning中流形應用的真正問題在於它被過濫地運用於稀疏空間(Sparse space),事實上在高維空間中撒進去幾千乃至幾十萬點,即使最相鄰的幾點也難稱為區域性了,區域性的範圍和全域性的範圍其實已經沒有了根本差別,連區域性的概念都立不住腳的時候,後面基於其展開的一切工作也都沒有太大的意義。事實上,稀疏空間有其本身的規律和法則通過區域性形成全域性的流形思想從本質上是不適合於此的。雖然,流形是一種非常美的理論,但是再漂亮的理論也需要用得其所——它應該用於解決具有密集資料分佈的低維空間。至於,一些paper所報告的在高維空間(比如人臉)運用流形方法獲得性能提升,其實未必是因為“流形”本身所起的作用,而很可能是其它方面的因素。

8. 流形在實際應用中起重要作用的還有兩個方面:

(1)研究幾何形體的性質(我們暫且不談這個),

(2)它和代數結構的結合形成的李群(Lie group)和李代數(Lie algebra)

當我們研究的物件是變換本身的時候,它們構成的空間是有其特殊性的,比如所有子空間投影形成了Grassmann流形,所有的可逆線性運算元,或者仿射運算元,也形成各自的流形。對他們的最重要操作是變換的結合,而不是加法數乘,因此,它們上面定義的更合適的代數結構應該是和不是線性空間。而群和微分流形的結合體——李群則成為它們最合適的描述體系——而其切空間則構成了一種加強的線性空間李代數,用於描述其區域性變化特性。

李代數和李群的關係是非常漂亮的。它把變換的微變化轉換成了線性空間的代數運算,使得移植傳統的基於線性空間的模型和演算法到李空間變得可能。而且李代數中的矩陣比起變換本身的矩陣甚至更能反映變換的特性。幾何變換的李代數矩陣的譜結構就能非常方便地用於分析變換的幾何特性

最後,回頭總結一下關於嵌入這個應用廣泛的策略,在learning中的isometry, kernel和manifold embedding都屬於此範疇,它們分別通過保持原空間的度量結構,內積結構和區域性結構來獲得到目標(通常是向量空間)的嵌入,從而獲得全域性的座標表達,線性運算和度量,進而能被各種線性演算法和模型所應用。

在獲得這一系列好處的同時,也有值得我們注意的地方。首先嵌入只是一種數學手段,並不能取代對問題本身的研究和分析。一種不恰當的原始結構或者嵌入策略,很多時候甚至適得其反——比如稀疏空間的流形嵌入,或者選取不恰當的kernel。另外,嵌入適合於分析,而未必適合於重建或者合成。這是因為嵌入是一個單射(injection),目標空間不是每一個點都和原空間能有效對應的。嵌入之後的運算往往就打破了原空間施加的限制。比如兩個元素即使都是從原空間對映過來,它們的和卻未必有原像,這時就不能直接地回到原空間了。當然可以考慮在原空間找一個點它的對映與之最近,不過這在實際中的有效性是值得商榷的。

         和Learning有關的數學世界是非常廣博的,我隨著學習和研究的深入,越來越發現在一些我平常不注意的數學分支中有著適合於問題的結構和方法。比如,廣群(groupoid)和廣代數(algebroid)能克服李群和李代數在表示連續變換過程中的一些困難——這些困難困擾了我很長時間。解決問題和建立數學模型是相輔相成的,一方面,一個清晰的問題將使我們有明確的目標去尋求合適的數學結構,另一方面,對數學結構的深入理解對於指導問題的解決也是有重要作用的。對於解決一個問題來說,數學工具的選擇最重要的是適合,而不是高深,但是如果在現有數學方法陷入困難的時候,尋求更高級別的數學的幫助,往往能柳暗花明。數學家長時間的努力解決的很多問題,並不都是理論遊戲,他們的解決方案中很多時候蘊含著我們需要的東西,而且可能導致對更多問題的解決——但是我們需要時間去學習和發現它們。