MIT一牛人對數學在機器學習和計算機視覺的作用給的評述!

鴨脖發表於2015-04-15

1. 線性代數 (Linear Algebra)

我想國內的大學生都會學過這門課程,但是,未必每一位老師都能貫徹它的精要。這門學科對於Learning是必備的基礎,對它的透徹掌握是必不可少的。我在科大一年級的時候就學習了這門課,後來到了香港後,又重新把線性代數讀了一遍,所讀的是

Introduction to Linear Algebra (3rd Ed.)  by Gilbert Strang.

這本書是MIT的線性代數課使用的教材,也是被很多其它大學選用的經典教材。它的難度適中,講解清晰,重要的是對許多核心的概念討論得比較透徹。我個人覺得,學習線性代數,最重要的不是去熟練矩陣運算和解方程的方法——這些在實際工作中MATLAB可以代勞,關鍵的是要深入理解幾個基礎而又重要的概念:子空間(Subspace),正交(Orthogonality),特徵值和特徵向量(Eigenvalues and eigenvectors),和線性變換(Linear transform)從我的角度看來,一本線代教科書的質量,就在於它能否給這些根本概念以足夠的重視,能否把它們的聯絡講清楚。Strang的這本書在這方面是做得很好的。

而且,這本書有個得天獨厚的優勢。書的作者長期在MIT講授線性代數課(18.06),課程的videoMITOpen courseware網站上有提供。有時間的朋友可以一邊看著名師授課的錄影,一邊對照課本學習或者複習。

http://ocw.mit.edu/OcwWeb/Mathematics/18-06Spring-2005/CourseHome/index.htm

2. 概率和統計 (Probability and Statistics):

概率論和統計的入門教科書很多,我目前也沒有特別的推薦。我在這裡想介紹的是一本關於多元統計的基礎教科書:

Applied Multivariate Statistical Analysis (5th Ed.)  by Richard A. Johnson and Dean W. Wichern

這本書是我在剛接觸向量統計的時候用於學習的,我在香港時做研究的基礎就是從此打下了。實驗室的一些同學也借用這本書學習向量統計。這本書沒有特別追求數學上的深度,而是以通俗易懂的方式講述主要的基本概念,讀起來很舒服,內容也很實用。對於Linear regression, factor analysis, principal component analysis (PCA), and canonical component analysis (CCA)這些Learning中的基本方法也展開了初步的論述。

之後就可以進一步深入學習貝葉斯統計和Graphical models。一本理想的書是

Introduction to Graphical Models (draft version).  by M. Jordan and C. Bishop.

我不知道這本書是不是已經出版了(不要和Learning in Graphical Models混淆,那是個論文集,不適合初學)。這本書從基本的貝葉斯統計模型出發一直深入到複雜的統計網路的估計和推斷,深入淺出,statistical learning的許多重要方面都在此書有清楚論述和詳細講解。MIT內部可以access,至於外面,好像也是有電子版的。

3. 分析 (Analysis)

我想大家基本都在大學就學過微積分或者數學分析,深度和廣度則隨各個學校而異了。這個領域是很多學科的基礎,值得推薦的教科書莫過於

Principles of Mathematical Analysis, by Walter Rudin

有點老,但是絕對經典,深入透徹。缺點就是比較艱深——這是Rudin的書的一貫風格,適合於有一定基礎後回頭去看。

在分析這個方向,接下來就是泛函分析(Functional Analysis)

Introductory Functional Analysis with Applications, by Erwin Kreyszig.

適合作為泛函的基礎教材,容易切入而不失全面。我特別喜歡它對於譜論和運算元理論的特別關注,這對於做learning的研究是特別重要的。Rudin也有一本關於functional analysis的書,那本書在數學上可能更為深刻,但是不易於上手,所講內容和learning的切合度不如此書。

在分析這個方向,還有一個重要的學科是測度理論(Measure theory),但是我看過的書裡面目前還沒有感覺有特別值得介紹的。

4. 拓撲 (Topology)

在我讀過的基本拓撲書各有特色,但是綜合而言,我最推崇:

Topology (2nd Ed.)  by James Munkres

這本書是Munkres教授長期執教MIT拓撲課的心血所凝。對於一般拓撲學(General topology)有全面介紹,而對於代數拓撲(Algebraic topology)也有適度的探討。此書不需要特別的數學知識就可以開始學習,由淺入深,從最基本的集合論概念(很多書不屑講這個)到Nagata-Smirnov TheoremTychonoff theorem等較深的定理(很多書避開了這個)都覆蓋了。講述方式思想性很強,對於很多定理,除了給出證明過程和引導你思考其背後的原理脈絡,很多令人讚歎的亮點——我常讀得忘卻飢餓,不願釋手。很多習題很有水平。

5. 流形理論 (Manifold theory)

對於拓撲和分析一定把握時,方可開始學習流形理論,否則所學只能流於浮淺。我所使用的書是

Introduction to Smooth Manifolds.  by John M. Lee

雖然書名有introduction這個單詞,但是實際上此書涉入很深,除了講授了基本的manifoldtangent spacebundle, sub-manifold等,還探討了諸如綱理論(Category theory)德拉姆上同調(De Rham cohomology)積分流形等一些比較高階的專題。對於李群和李代數也有相當多的討論。行文通俗而又不失嚴謹,不過對某些記號方式需要熟悉一下。

雖然李群論是建基於平滑流形的概念之上,不過,也可能從矩陣出發直接學習李群和李代數——這種方法對於急需使用李群論解決問題的朋友可能更加實用。而且,對於一個問題從不同角度看待也利於加深理解。下面一本書就是這個方向的典範:

Lie Groups, Lie Algebras, and Representations: An Elementary Introduction.  by Brian C. Hall

此書從開始即從矩陣切入,從代數而非幾何角度引入矩陣李群的概念。並通過定義運算的方式建立exponential mapping,並就此引入李代數。這種方式比起傳統的通過左不變向量場(Left-invariant vector field)的方式定義李代數更容易為人所接受,也更容易揭示李代數的意義。最後,也有專門的論述把這種新的定義方式和傳統方式聯絡起來。

————————————————————————————

無論是研究Vision, Learning還是其它別的學科,數學終究是根基所在學好數學是做好研究的基石學好數學的關鍵歸根結底是自己的努力,但是選擇一本好的書還是大有益處的。不同的人有不同的知識背景,思維習慣和研究方向,因此書的選擇也因人而異,只求適合自己,不必強求一致。上面的書僅僅是從我個人角度的出發介紹的,我的閱讀經歷實在非常有限,很可能還有比它們更好的書(不妨也告知我一聲,先說聲謝謝了)。

 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Learning中的代數結構的建立

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的主要工作分成兩個大的範疇:

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

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

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

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

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

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

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

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

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

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

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

4.    大家可能注意到,上面提到的度量建立方法,比如歐氏距離,它需要對元素進行代數運算。對於普通的向量空間,線性運算是天然賦予的,我們無須專門建立,所以可以直接進行度量的構造——這也是大部分工作的基礎。可是,有些事物其原始表達不是一個n-tuple,它可能是一個set,一個graph,或者別的什麼特別的object。怎麼建立代數運算呢?

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

(一個小問題:大家常用各種graphical model,但是,每次這些model都是分別formulate,然後推匯出estimationevaluation的步驟方法。是否可能對"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.    流形在實際應用中起重要作用的還有兩個方面:一個是研究幾何形體的性質(我們暫且不談這個),還有就是它和代數結構的結合形成的李群(Lie group)和李代數(Lie algebra)當我們研究的物件是變換本身的時候,它們構成的空間是有其特殊性的,比如所有子空間投影形成了Grassmann流形,所有的可逆線性運算元,或者仿射運算元,也形成各自的流形。對他們的最重要操作是變換的結合,而不是加法數乘,因此,它們上面定義的更合適的代數結構應該是和不是線性空間。而群和微分流形的結合體——李群則成為它們最合適的描述體系——其切空間則構成了一種加強的線性空間李代數,用於描述其區域性變化特性。

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

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

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

Learning有關的數學世界是非常廣博的,我隨著學習和研究的深入,越來越發現在一些我平常不注意的數學分支中有著適合於問題的結構和方法。比如,廣群

相關文章