前面幾篇談了一些對數學的粗淺看法。其實,如果對某門數學有興趣,最好的方法就是走進那個世界去學習和體驗。
這里說說幾本我看過后覺得不錯的數學教科書。
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),課程的video在MIT的Open 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 Theorem和Tychonoff theorem等較深的定理(很多書避開了這個)都覆蓋了。講述方式思想性很強,對于很多定理,除了給出證明過程和引導你思考其背后的原理脈絡,很多令人 贊嘆的亮點——我常讀得忘卻饑餓,不愿釋手。很多習題很有水平。
5. 流形理論 (Manifold theory):
對于拓撲和分析有一定把握時,方可開始學習流形理論,否則所學只能流于浮淺。我所使用的書是
Introduction to Smooth Manifolds. by John M. Lee
雖然書名有introduction這個單詞,但是實際上此書涉入很深,除了講授了基本的manifold, tangent space, bundle, 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還是其它別的學科,數學終究是根基所在。學好數學是做好研究的基石。學好數學的關鍵歸根結底是自己的努力,但是選擇一本好的書還是大有益 處的。不同的人有不同的知識背景,思維習慣和研究方向,因此書的選擇也因人而異,只求適合自己,不必強求一致。上面的書僅僅是從我個人角度的出發介紹的, 我的閱讀經歷實在非常有限,很可能還有比它們更好的書(不妨也告知我一聲,先說聲謝謝了)。
近日來,抽空再讀了一遍點集拓撲(Point Set Topology),這是我第三次重新學習這個理論了。我看電視劇和小說,極少能有興致看第二遍,但是,對于數學,每看一次都有新的啟發和收獲。
代 數,分析,和拓撲,被稱為是現代數學的三大柱石。最初讀拓撲,是在兩三年前,由于學習流形理論的需要。可是,隨著知識的積累,發現它是很多理論的根基。可 以說,沒有拓撲,就沒有現代意義的分析與幾何。我們在各種數學分支中接觸到的最基本的概念,比如,極限,連續,距離(度量),邊界,路徑,在現代數學中, 都源于拓撲。
拓撲學是一門非常奇妙的學科,它把最直觀的現象和最抽象的概念聯系在一起了。拓撲描述的是普遍使用的概念(比如開集,閉 集,連續),我們對這些概念習以為常,理所當然地使用著,可是,真要定義它,則需要對它們本質的最深刻的洞察。數學家們經過長時間的努力,得到了這些概念 的現代定義。這里面很多第一眼看上去,會感覺驚奇——怎么會定義成這個樣子。
首先是開集。在學習初等數學時,我們都學習開區間 (a, b)。可是,這只是在一條線上的,怎么推廣到二維空間,或者更高維空間,或者別的形體上呢?最直觀的想法,就是“一個不包含邊界的集合”。可是,問題來 了,給一個集合,何謂“邊界”?在拓撲學里面,開集(Open Set)是最根本的概念,它是定義在集合運算的基礎上的。它要求開集符合這樣的條件:開集的任意并集和有限交集仍為開集。
我最初的時 候,對于這樣的定義方式,確實百思不解。不過,讀下去,看了和做了很多證明后,發現,這樣的定義一個很重要的意義在于:它保證了開集中每個點都有一個鄰域 包含在這個集合內——所有點都和外界(補集)保持距離。這樣的理解應該比使用集合運算的定義有更明晰的幾何意義。但是,直觀的東西不容易直接形成嚴謹的定 義,使用集合運算則更為嚴格。而集合運算定義中,任意并集的封閉性是對這個幾何特點的內在保證。
另外一個例子就是“連續函數 ”(Continuous Function)。在學微積分時,一個耳熟能詳的定義是“對任意的epsilon > 0,存在delta > 0,使得 。。。。”,背后最直觀的意思就是“足夠近的點保證映射到任意小的范圍內”。可是,epsilon, delta都依賴于實空間,不在實空間的映射又怎么辦呢?拓撲的定義是“如果一個映射的值域中任何開集的原像都是開集,那么它連續。”這里就沒有 epsilon什么事了。
這里的關鍵在于,在拓撲學中,開集的最重要意義就是要傳遞“鄰域”的意思——開集本身就是所含點的鄰域。這樣連續定義成這樣就順理成章了。稍微把說法調節一下,上面的定義就變成了“對于f(x)的任意領域U,都有x的一個鄰域V,使得V里面的點都映射到U中。”
這里面,我們可以感受到為什么開集在拓撲學中有根本性的意義。既然開集傳達“鄰域”的意思,那么,它最重要的作用就是要表達哪些點靠得比較近。給出一個拓撲結構,就是要指出哪些是開集,從而指出哪些點靠得比較近,這樣就形成了一個聚集結構——這就是拓撲。
可是這也可以通過距離來描述,為什么要用開集呢,反而不直觀了。某種意義上說,拓撲是“定性”的,距離度量是“定量”的。隨著連續變形,距離會不斷變化,但是靠近的點還是靠近,因此本身固有的拓撲特性不會改變。拓撲學研究的就是這種本質特性——連續變化中的不變性。
在 拓撲的基本概念中,最令人費解的,莫過于“緊性”(Compactness)。它描述一個空間或者一個集合“緊不緊”。正式的定義是“如果一個集合的任意 開覆蓋都有有限子覆蓋,那么它是緊的”。乍一看,實在有點莫名其妙。它究竟想描述一個什么東西呢?和“緊”這個形容詞又怎么扯上關系呢?
一 個直觀一點的理解,幾個集合是“緊”的,就是說,無限個點撒進去,不可能充分散開。無論鄰域多么小,必然有一些鄰域里面有無限個點。上面關于 compactness的這個定義的玄機就在有限和無限的轉換中。一個緊的集合,被無限多的小鄰域覆蓋著,但是,總能找到其中的有限個就能蓋全。那么,后 果是什么呢?無限個點撒進去,總有一個鄰域包著無數個點。鄰域們再怎么小都是這樣——這就保證了無限序列中存在極限點。
Compact這個概念雖然有點不那么直觀,可是在分析中有著無比重要的作用。因為它關系到極限的存在性——這是數學分析的基礎。了解泛函分析的朋友都知道,序列是否收斂,很多時候就看它了。微積分中,一個重要的定理——有界數列必然包含收斂子列,就是根源于此。
在
學習拓撲,或者其它現代數學理論之前,我們的數學一直都在有限維歐氏空間之中,那是一個完美的世界,具有一切良好的屬性,Hausdorff,
Locally compact, Simply
connected,Completed,還有一套線性代數結構,還有良好定義的度量,范數,與內積。可是,隨著研究的加深,終究還是要走出這個圈子。這
個時候,本來理所當然的東西,變得不那么必然了。
兩個點必然能分開?你要證明空間是Hausdorff的。
有界數列必然存在極限點?這只在locally compact的空間如此。
一個連續體內任意兩點必然有路徑連接?這可未必。
一 切看上去有悖常理,而又確實存在。從線性代數到一般的群,從有限維到無限維,從度量空間到拓撲空間,整個認識都需要重新清理。而且,這些絕非僅是數學家的 概念游戲,因為我們的世界不是有限維向量能充分表達的。當我們研究一些不是向量能表達的東西的時候,度量,代數,以及分析的概念,都要重新建立,而起點就 在拓撲。
題目中所說到的四個詞語,都是Machine Learning以及相關領域中熱門的研究課題。表面看屬于不同的topic,實際上則是看待同一個問題的不同角度。不少文章論述了它們之間的一些聯系,讓大家看到了這個世界的奇妙。
從圖說起
這里面,最簡單的一個概念就是“圖”(Graph),它用于表示事物之間的相互聯系。每個圖有一批節點(Node),每個節點表示一個對 象,通過一些邊(Edge)把這些點連在一起,表示它們之間的關系。就這么一個簡單的概念,它對學術發展的意義可以說是無可估量的。幾乎所有領域研究的東 西,都是存在相互聯系的,通過圖,這些聯系都具有了一個統一,靈活,而又強大的數學抽象。因此,很多領域的學者都對圖有著深入探討,而且某個領域關于圖的 研究成果,可以被其它領域借鑒。
矩陣表示:讓代數進入圖的世界
在數學上,一種被普遍使用的表達就是鄰接矩陣(Adjacency Matrix)。一個有N個節點的圖,可以用一個N x N的矩陣G表示,G(i, j)用一個值表示第i個節點和第j個節點的聯系,通常來說這個值越大它們關系越密切,這個值為0表示它們不存在直接聯系。這個表達,很直接,但是非常重 要,因為它把數學上兩個非常根本的概念聯系在一起:“圖”(Graph)和“矩陣”(Matrix)。矩陣是代數學中最重要的概念,給了圖一個矩陣表達, 就建立了用代數方法研究圖的途徑。數學家們幾十年前開始就看到了這一點,并且開創了數學上一個重要的分支——代數圖論(Algebraic Graph Theory)。
代數圖論通過圖的矩陣表達來研究圖。熟悉線性代數的朋友知道,代數中一個很重要的概念叫做“譜”(Spectrum)。一個矩陣的很多 特性和它的譜結構——就是它的特征值和特征向量是密切相關的。因此,當我們獲得一個圖的矩陣表達之后,就可以通過研究這個矩陣的譜結構來研究圖的特性。通 常,我們會分析一個圖的鄰接矩陣(Adjacency Matrix)或者拉普拉斯矩陣(Laplace Matrix)的譜——這里多說一句,這兩種矩陣的譜結構剛好是對稱的。
譜:“分而治之”的代數
譜,這個詞匯似乎在不少地方出現過,比如我們可能更多聽說的頻譜,光譜,等等。究竟什么叫“譜”呢?它的概念其實并不神秘,簡單地說,譜這 個概念來自“分而治之”的策略。一個復雜的東西不好直接研究,就把它分解成簡單的分量。如果我們把一個東西看成是一些分量疊加而成,那么這些分量以及它們 各自所占的比例,就叫這個東西的譜。所謂頻譜,就是把一個信號分解成多個頻率單一的分量。
矩陣的譜,就是它的特征值和特征向量,普通的線性代數課本會告訴你定義:如果A v = c v,那么c 就是A的特征值,v就叫特征向量。這僅僅是數學家發明的一種數學游戲么?——也許有些人剛學這個的時候,并一定能深入理解這么個公式代表什么。其實,這里 的譜,還是代表了一種分量結構,它為使用“分而治之”策略來研究矩陣的作用打開了一個重要途徑。這里我們可以把矩陣理解為一個操作(operator), 它的作用就是把一個向量變成另外一個向量:y = A x。對于某些向量,矩陣對它的作用很簡單,A v = cv,相當于就把這個向量v 拉長了c倍。我們把這種和矩陣A能如此密切配合的向量v1, v2, ... 叫做特征向量,這個倍數c1, c2, ...叫特征值。那么來了一個新的向量x 的時候,我們就可以把x 分解為這些向量的組合,x = a1 v1 + a2 v2 + ...,那么A對x的作用就可以分解了:A x = A (a1 v1 + a2 v2 + ...) = a1 c1 v1 + a2 c2 v2 ... 所以,矩陣的譜就是用于分解一個矩陣的作用的。
這里再稍微延伸一點。一個向量可以看成一個關于整數的函數,就是輸入i,它返回v( i )。它可以延伸為一個連續函數(一個長度無限不可數的向量,呵呵),相應的矩陣 A 變成一個二元連續函數(面積無限大的矩陣)。這時候矩陣乘法中的求和變成了積分。同樣的,A的作用可以理解為把一個連續函數映射為另外一個連續函數,這時 候A不叫矩陣,通常被稱為算子。對于算子,上面的譜分析方法同樣適用(從有限到無限,在數學上還需要處理一下,不多說了)——這個就是泛函分析中的一個重 要部分——譜論(Spectral Theory)。
馬爾可夫過程——從時間的角度理解圖
回到“圖”這個題目,那么圖的譜是干什么的呢?按照上面的理解,似乎是拿來分解一個圖的。這里譜的作用還是分治,但是,不是直觀的理解為把 圖的大卸八塊,而是把要把在圖上運行的過程分解成簡單的過程的疊加。如果一個圖上每個節點都有一個值,那么在圖上運行的過程就是對這些值進行更新的過程。 一個簡單,大家經常使用的過程,就是馬爾可夫過程(Markov Process)。
學過隨機過程的朋友都了解馬爾可夫過程。概念很簡單——“將來只由現在決定,和過去無關”。考慮一個圖,圖上每個點有一個值,會被不斷 更新。每個點通過一些邊連接到其它一些點上,對于每個點,這些邊的值都是正的,和為1。在圖上每次更新一個點的值,就是對和它相連接的點的值加權平均。如 果圖是聯通并且非周期(數學上叫各態歷經性, ergodicity),那么這個過程最后會收斂到一個唯一穩定的狀態(平衡狀態)。
圖上的馬爾可夫更新過程,對于很多學科有著非常重要的意義。這種數學抽象,可以用在什么地方呢?(1) Google對搜索結果的評估(PageRank)原理上依賴于這個核心過程,(2) 統計中一種廣泛運用的采樣過程MCMC,其核心就是上述的轉移過程,(3) 物理上廣泛存在的擴散過程(比如熱擴散,流體擴散)和上面的過程有很重要的類比,(4) 網絡中的信息的某些歸納與交換過程和上述過程相同 (比如Random Gossiping),還有很多。非常多的實際過程通過某種程度的簡化和近似,都可以歸結為上述過程。因此,對上面這個核心過程的研究,對于很多現象的理 解有重要的意義。各個領域的科學家從本領域的角度出發研究這個過程,得出了很多實質上一致的結論,并且很多都落在了圖的譜結構的這個關鍵點上。
圖和譜在此聯姻
根據上面的定義,我們看到鄰接矩陣A其實就是這個馬爾可夫過程的轉移概率矩陣。我們把各個節點的值放在一起可以得到一個向量v,那么我們就 可以獲得對這個過程的代數表示, v(t+1) = A v(t)。穩定的時候,v = A v。我們可以看到穩定狀態就是A的一個特征向量,特征值就是1。這里譜的概念進來了。我們把A的特征向量都列出來v1, v2, ...,它們有 A vi = ci vi。vi其實就是一種很特殊,但是很簡單的狀態,對它每進行一輪更新,所有節點的值就變成原來的ci倍。如果0 < ci < 1,那么,相當于所有節點的值呈現指數衰減,直到大家都趨近于0。
一般情況下,我們開始于一個任意一個狀態u,它的更新過程就沒那么簡單了。我們用譜的方法來分析,把u分解成 u = v1 + c2 v2 + c3 v3 + ... (在數學上可以嚴格證明,對于上述的轉移概率矩陣,最大的特征值就是1,這里對應于平衡狀態v1,其它的特征狀態v2, v3, ..., 對應于特征值1 > c2 > c3 > ... > -1)。那么,我們可以看到,當更新進行了t 步之后,狀態變成 u(t) = v1 + c2^t v2 + c3^t v3 + ...,我們看到,除了代表平衡狀態的分量保持不變外,其它分量隨著t 增長而指數衰減,最后,其它整個趨近于平衡狀態。
從上面的分析看到,這個過程的收斂速度,其實是和衰減得最慢的那個非平衡分量是密切相關的,它的衰減速度取決于第二大特征值c2,c2 的大小越接近于1,收斂越慢,越接近于0,收斂越快。這里,我們看到了譜的意義。第一,它幫助把一個圖上運行的馬爾可夫過程分解為多個簡單的字過程的疊 加,這里面包含一個平衡過程和多個指數衰減的非平衡過程。第二,它指出平衡狀態是對應于最大特征值1的分量,而收斂速度主要取決于第二大特征值。
我們這里知道了第二大特征值c2對于描述這個過程是個至關重要的量,究竟是越大越好,還是越小越好呢?這要看具體解決的問題。如果你要 設計一個采樣過程或者更新過程,那么就要追求一個小的c2,它一方面提高過程的效率,另外一方面,使得圖的結構改變的時候,能及時收斂,從而保證過程的穩 定。而對于網絡而言,小的c2有利于信息的迅速擴散和傳播。
聚類結構——從空間的角度理解圖
c2的大小往往取決于圖上的聚類結構。如果圖上的點分成幾組,各自聚成一團,缺乏組與組之間的聯系,那么這種結構是很不利于擴散的。在某些 情況下,甚至需要O(exp(N))的時間才能收斂。這也符合我們的直觀想象,好比兩個大水缸,它們中間的只有一根很細的水管相連,那么就需要好長時間才 能達到平衡。有興趣的朋友可以就這個水缸問題推導一下,這個水缸系統的第二大特征值和水管流量與水缸的容積的比例直接相關,隨比例增大而下降。
對于這個現象進行推廣,數學上有一個重要的模型叫導率模型(Conductance)。具體的公式不說了,大體思想是,節點集之間的導 通量和節點集大小的平均比例和第二大特征值之間存在一個單調的上下界關系。導率描述的是圖上的節點連接的空間結合,這個模型把第二特征值c2和圖的空間聚 集結構聯系在一起了。
圖上的聚類結構越明顯, c2越大;反過來說,c2越大,聚類的結構越明顯,(c2 = 1)時,整個圖就斷裂成非連通的兩塊或者多塊了。從這個意義上說,c2越大,越容易對這個圖上的點進行聚類。機器學習中一個重要課題叫做聚類,近十年來, 基于代數圖論發展出來的一種新的聚類方法,就是利用了第二大特征值對應的譜結構,這種聚類方法叫做譜聚類(Spectral Clustering)。它在Computer Vision里面對應于一種著名的圖像分割方法,叫做Normalized Cut。很多工作在使用這種方法。其實這種方法的成功,取決于c2的大小,也就是說取決于我們如何構造出一個利于聚類的圖,另外c2的值本身也可以作為衡 量聚類質量,或者可聚類性的標志。遺憾的是,在paper里面,使用此方法者眾,深入探討此方法的內在特點者少。
歸納起來
圖是表達事物關系和傳遞擴散過程的重要數學抽象
圖的矩陣表達提供了使用代數方法研究圖的途徑
譜,作為一種重要的代數方法,其意義在于對復雜對象和過程進行分解
圖上的馬爾可夫更新過程是很多實際過程的一個重要抽象
圖的譜結構的重要意義在于通過它對馬爾可夫更新過程進行分解分析
圖的第一特征值對應于馬爾可夫過程的平衡狀態,第二特征值刻畫了這個過程的收斂速度(采樣的效率,擴散和傳播速度,網絡的穩定程度)。
圖的第二特征分量與節點的聚類結構密切相關。可以通過譜結構來分析圖的聚類結構。
馬爾可夫過程代表了一種時間結構,聚類結構代表了一種空間結構,“譜”把它們聯系在一起了,在數學刻畫了這種時與空的深刻關系。
我們所做的topic,一般有幾個階段:
Analysis: 分析問題,找到問題的關鍵
Modeling / Formulation: 對問題進行數學抽象,建立模型,或者formulate目標函數
Solving: 設計出求解的算法
Experiments: 實驗
最近的工作都集中在Solving這部分,就說說這個吧。
求解的方法
求解問題有很多不同的方法,就我知道的來說,大概有這么幾個大家族。
Heuristics。 就是根據對問題的觀察而設 計的一些簡單的方法,不一定遵循什么規范,或者有什么深刻的數學根據。這類方法往往比較簡單易懂,intuition比較明顯,很多時候 performance也挺不錯的,不見得比高深的方法差,因而在實際工程中很受歡迎,幾乎應用在全部的學科。不過,好像很多朋友對這類方法頗為不屑,認 為“沒有技術含量”,或者叫做“沒有理論深度”。
確實,有相當部分的Heuristics純粹粗制濫造,投機取巧。不過,還有很多Heuristics雖然簡單,但是切中問題要害,在 長期的復雜的實際應用中經受住了考驗。這些方法,表面看來可能只是再簡單不過的幾條四則運算公式,說不上多少理論,但是并不代表它沒有深刻的理論基礎。一 個典型的例子是Google PageRank中使用的傳導公式(簡單版本),道理和公式都很簡單,可是,做過類似工作的朋友可能都知道,它和代數圖論以及馬爾可夫隨機過程有著很深的 聯系。 又比如,Fourier Transform在剛出來的時候,僅僅是工程師的一些heuristics,后來關于它的理論已經成為了泛函分析的一個核心組成部分,也是信號處理的理 論基礎之一。
真正好的heuristics,它的好處肯定不是瞎懵出來,而是有內在原因的。對它們的原理的探索,不斷帶動理論方面的發展,甚至創造 了新的理論方向。說到這里,有人可能會argue,這是“理論家們在故弄玄虛混飯吃”。Hmm,這種說法我不能認同,但是,確實存在“把工程方法胡亂進行 理論化”的事實。什么才叫有價值的理論化,而不是故弄玄虛,確實值得思考,這里先不展開了。
Analytical Solution。 當你把 問題formulate出來后,有些情況是直接可以從問題推導出解析解的。這種情況通常存在于objective function是Linear或者Quadratic的情況。大家都很喜歡這種情況的出現,理論漂亮,實現簡潔。但是,據我的觀察,很多情況下,這種 elegance是通過減化模型換取的。把cost寫成quadratic term,把distribution假設為Gauss,很多時候都能得到這樣的結果。
我不反對進行簡化,也欣賞漂亮的analytical solution,如果它把問題解決得很好。但是,這里面有個問題,很多能獲得簡單解析解的問題已經被做過了,剩下的很多難點,未必是一個簡化模型能有效 解決的。簡化是一種很好的方法,但是,使用起來,尤其是在實際中的應用必須慎重,要清楚了解它們可能帶來的問題。
比如說,很多模型喜歡使用差的平方來衡量誤差大小。但是,這很早就被指出是unrobust的,一個很大的deviation會 dominate整個optimization,使得solution嚴重偏離方向。如果這種robustness在帶解決的問題中是一個必須考慮的要 素,那么用平方誤差就要仔細考慮了。
Numerical Optimization。 如 果formulation沒有解析解,那么自然的想法就是使用數值方法求解。目前大家常用的是基于Gradient/Hessian之類的local optimization的方法,有時會加上random initialization。如果objective function是convex的,那么這種方法保證收斂到global optimal,這是大家很希望的。convex problem無論在formulation還是在solution的階段,都是很有學問的。很多問題可以formulate成convex的,但是未必 都那么直接,這需要有這方面的基礎。Solving一個convex problem有現成的方法,但是,如果能對問題的結構有insightful的觀察,可能能利用問題本身的特點大幅度降低求解的復雜度——這往往比直接 把問題扔進solver里面等答案更有意義。
除了convex optimization,還有一種數值方法應用非常廣泛,叫做coordinate ascend或者alternate optimization。大概的思路是,幾個有關的變量,輪流選擇某個去優化,暫時固定其它的。在Machine Learning里面非常重要的Expectation-Maximization (EM算法)就屬于這個大家族。另外,很多復雜的graphical model采用的variational inference也是屬于此類。使用這類方法,有兩個問題:一個是如果幾個variable之間相互影響,變一個,其他跟著變的話,那么直接使用這種方 法可能是錯誤的,并不能保證收斂。另外一個問題是,如果problem不是convex的話,可能沒有任何保證你得到的solution和global solution有聯系。很可能,你得到的解和真正的全局最優解相差十萬八千里。這個沒有什么通用有效的途徑來解決。不過,針對具體問題的結構特點,在求 解過程中施加一定的引導是有可能的。
Dynamic Programming。 這個方 法更多見于經典計算機算法中,不過現在越來越多在Vision和Learning見到它的影子。主要思路是把大問題分解為小問題,總結小問題的 solution為大問題的solution。至于如何設計分解和綜合的過程,依賴于對問題的觀察和分析,并無通用的法則可循。用DP解決問題的洞察力需 要逐步的積累。不少經典算法就源自于DP,比如shotest path。一個可能有用的觀察是,如果問題或者模型呈現鏈狀,樹狀,或者有向無環圖結構的,可能很有希望能通過DP高效解決。
Local Exchange。 很多建立在圖上的 問題,都可以通過某種局部交換來達到全局的平衡。像Belief propagation, Junction tree等等在graphical model的重要inference方法,還有tranduction model,都用到了類似的策略。這在實踐中被證明為非常有效。但是,并不是隨便設計的局部交換過程都是收斂的。這里面需要關注兩個問題:(1)交換過程 是不是能保證某些重要的invariance不被破壞;(2)交換過程中,是不是有一個objective,比如距離全局平衡的deviation,它在 每一步都保持單調。有很多交換過程,在有向無環圖中保證收斂,但是,在帶環圖中由于信息的重復傳遞可能引起不穩定,或者不能收斂到正確的解。
Monte Carlo Sampling。 蒙特 卡羅采樣的原理非常簡單,就是用樣本平均,來逼近期望(這個可能需要用intractable的積分完成,沒法直接算)。求平均很簡單,關鍵在于采樣過 程。我們求解問題,通常是在后驗分布中采樣,這種分布在大部分問題中,不要說直接采樣了,可能連解析形式都沒法給出。如果采樣問題有效解決了,基本上我們 研究的大部分問題其實都可以通過采樣完成。
由于直接采樣往往非常困難,于是就產生了其它的方法,間接做這個事情。一種想法就是,既然p(x)不好直接采,我找一個比較容易采樣的 q(x)來逼近p(x),然后給從q(x)采出的每個樣本加一個weight,p(x) / q(x)。這在理論上被嚴格證明是對的——這種方法叫做Importance Sampling。這里的問題在于,如果q(x)和p(x)不太接近,那么采樣效率非常低下,如果在一個高維空間,可能采1000年都達不到要求。可是, 要得到一個approximate很好的q(x)本身不比直接從p(x)采樣來得容易。
還有一種聰明一點的方法,叫sequential importance sampling。在這里面q(x),不是一蹴而就建立起來的,而是每個樣本先采一部分,然后根據那部分,確定下一部分的proposal distribution,繼續采,也就是說q(x)和樣本都是dynamically built up。這個方法在vision里面一個非常著名的應用是用于tracking,相應發展出來的方法論叫做particle filtering。
另外一大類重要的采樣方法,叫Markov Chain Monte Carlo(MCMC)。這個的想法是,設計一個馬爾科夫鏈,讓它的平衡分布恰好是p(x),那么等它平衡時開始采。以前我們做隨機過程作業是已知一個 markov chain,求equilibrium distribution,設計MCMC就是反過來了。最重要的MCMC方法莫過于Metropolis-Hastings Algorithm和Gibbs Sampling,前者常被用于設計在solution space的隨機游走(Random walk),后者則是conditional sampling的基礎方法。
可是Markov過程怎么轉移呢。最簡單的Random Walk結合acceptance rate之后理論上是對的。可是,讓sampler隨便亂走,猴年馬月才能把solution space走一遍阿。于是,有人提出結合一個solution space的局部信息來引導它往有用的方向走。一個重要的方法叫做Hybric Monte Carlo(HMC),想法就是把它模擬成一個物理場,把要sample的分布視為波爾茲曼分布后獲得物理場的勢能,通過哈密頓動力學模型(其實就是牛頓 力學的推廣)來驅動sampler。可是,如果問題更為復雜呢,比如整個solution space有幾個井,sample掉到某一個井可能出不來了。為了解決這個問題,一種重要的方法叫Tempering,就是開始給分子充分加熱,讓它獲得 足夠的動能能在各個井之間來回跳,然后逐步冷卻,從而能捕捉到多個勢井。
Monte Carlo方法較早的時候主要用于統計物理,目前已經廣泛應用于計算機,生物,化學,地質學,經濟學,社會學等等的研究。這是目前所知道的用于求解復雜的 真實模型的最有效的方法。它的核心,就是猜——你直接解不出來,只好猜了,呵呵。但是,怎樣才能猜得準,則是大有學問——幾十年來各個領域關于Monte Carlo研究的工作汗牛充棟,有很多進展,但是還有很長的路要走。
和這里很多留學生一樣,我一向潛心于自己的學習和研究。可是最近,我們的世界并不寧靜,我認識的不只一個在美國的朋友受到了不太友好的挑釁——在不 知不覺中,我們可能已經身處反分裂和支持奧運的前線。我看到包括MIT CSSA在內的很多學生團體開始組織起來支持自己的祖國。我沒有具體幫上什么,但是,我對所有在用自己的行動捍衛國家榮譽的同胞懷有最深的敬意。我也希 望,我的努力,能讓外國的朋友明白中國人是值得尊敬的。
我 們的生活從來不缺乏距離的概念,無論是時間的還是空間的,可以測量的還是不可以測量的。自我們來到這個世界,就會用我們還很幼小的眼睛測量著自己和身邊的 人的距離,然后跟著距離自己最近的人學叫“媽媽”;長大了,我們學會了用“距離產生美”這種不知道屬于公理還是定理的命題,提醒自己不要和心儀的mm走得 太近;而垂垂老矣的人們則開始計算自己到生命終點的距離,盤算著什么時候該立遺囑了。
什么叫距離呢?隨便翻開一本數學教科書,你會發 現,這些書會在這個或者那個角落告訴你,所謂距離,就是一個符合對稱性和三角不等式的非負二元函數。為什么要符合對稱性和三角不等式呢——大部分的書會告 訴你,這是規定——不符合的就不是距離。少部分負責任一些的書會告訴你,不符合這些條件的“距離”會多麻煩。于是你接受了。
當你放下書 本,回到我們多姿多彩的生活中的時候,這個呆板的定義似乎不能有效地解決你生活中的問題。你去hiking的時候,入口處告訴你,從山下到山上的距離是多 少多少里路,按說上山和下山的距離是一樣的,可是當你攀到山頂又走回來的時候,心里可能犯嘀咕,怎么感覺距離不一樣呢?偉大的數學家們是不會錯的。這是相 對論!——那些費了半天勁才把洛侖茲變換搞明白的人們,生怕錯過了這個機會就沒有機會顯示自己深厚的物理底蘊了。不過,我只是相信一點,根據目前人類的進 化水平,即使把世界短跑冠軍的運動速度和地球公轉自轉速度加起來再乘以10,離光速還遠著呢。
再說一個例子,不知道男同胞們是不是發 現,當你想去接近你的夢中情人的時候,距離似乎遙不可及——走出太陽系似乎都沒有那么遠,反過來,當她想接近你的時候,這個距離比任何預先給定的正實數都 小——我有點懷疑,牛頓或者萊布尼茨當年是不是有過類似體驗,才總結出了微機分——這告訴我們為什么微機分不是女生提出的。
為了能讓距 離去解釋上面說到的現象,我們有必要把它的概念推廣一下,把對稱性去掉——很多情況下,我們甚至把三角不等式也去掉。一個著名的例子,就是 Kullback-Leibler divergence——用來描述兩個分布的“距離”。大家注意了,這里定義這個的人很聰明,為了不和數學家作對,他選擇叫做divergence,而不 是distance。不過,很多信息論和統計學的書都猶抱琵琶半遮面地告訴我們,其實可以把它YY成為某種距離。伴隨著對稱性的喪失,距離的方向性出現 了。就是說從a到b的距離,和從b到a的距離是不一樣的——恩,這種推廣看起來很適合用來計算你和你心儀的人的距離,或者山頂和山腳的距離。
小 學老師告訴我們怎么去量度兩個點之間的距離,就是拿一把尺子。可是,很多時候,你沒有機會使用直尺的。你所能做的就是從這點走到那點,看看費了多少勁—— 這就是我們大多數人在生活經驗中的距離。黎曼老先生,作為理論聯系實際的代表,第一次從在數學上總結了這種生活上的距離——geodesic distance,中文叫做測地距離。它是怎么算距離的呢?就是從起點出發,一步步走向目標,然后把每一步費了多少勁加起來。至于,每一步費了多少勁怎么 算,大家都可以有不同的算法——但是,這些都叫Riemann Metric。 為了大家計算距離時的身體健康,鼓勵大家節省能源,規定,只有按照最省事的方法到達目標,這樣算出來的才叫距離。 不過,在很多實際應用中,大家只能找到比較省事的方法,未必是“最省的”,也睜一只眼閉一只眼,把算出來的東西追加“距離”的光榮稱號。
打 破對稱性的千年枷鎖,扔掉直尺這種陳腐工具,人們獲得了空前的思想解放。男生和女生們開始附庸風雅地用曾經只存在于象牙塔的概念——距離——去評價自己和 她或者他的關系。如何評價,見仁見智——在我看來,很多人的metric里面不外乎寫了多少情書,給電信公司貢獻了多少短信費,qq/msn在線了多少時 間,又或者吃了多少頓麥當勞。。。。。。在這個定義的基礎上,“距離產生美”——這個掛在多少人口頭的箴言橫空出世了。根據距離就是費了多少勁的意思,這 句話告訴我們,只有費了很多功夫,死了無數腦細胞,才能得到,或者還得不到的才是美的;信手而獲,不需要追求的,就談不上美了。從這個意義上說,這句話和 高中的學到的“勞動產生價值”的道理是一樣的,只不過,“勞動產生價值”是物質層次的——太俗了,“距離產生美”是精神層次的,檔次和格調顯然不一樣。
感覺數學似乎總是不夠的。這些日子為了解決research中的一些問題,又在圖書館捧起了數學的教科書。
從 大學到現在,課堂上學的和自學的數學其實不算少了,可是在研究的過程中總是發現需要補充新的數學知識。Learning和Vision都是很多種數學的交 匯場。看著不同的理論體系的交匯,對于一個researcher來說,往往是非常exciting的enjoyable的事情。不過,這也代表著要充分了 解這個領域并且取得有意義的進展是很艱苦的。
記得在兩年前的一次blog里面,提到過和learning有關的數學。今天看來,我對于數學在這個領域的作用有了新的思考。
對于Learning的研究,
Linear Algebra (線性代數) 和 Statistics (統計學) 是最重要和不可缺少的。這代表了Machine Learning中最主流的兩大類方法的基礎。一種是以研究函數和變換為重點的代數方法,比如Dimension reduction,feature extraction,Kernel等,一種是以研究統計模型和樣本分布為重點的統計方法,比如Graphical model, Information theoretical models等。它們側重雖有不同,但是常常是共同使用的,對于代數方法,往往需要統計上的解釋,對于統計模型,其具體計算則需要代數的幫助。
以代數和統計為出發點,繼續往深處走,我們會發現需要更多的數學。
Calculus (微積分),只 是數學分析體系的基礎。其基礎性作用不言而喻。Learning研究的大部分問題是在連續的度量空間進行的,無論代數還是統計,在研究優化問題的時候,對 一個映射的微分或者梯度的分析總是不可避免。而在統計學中,Marginalization和積分更是密不可分——不過,以解析形式把積分導出來的情況則 不多見。
Partial Differential Equation (偏微分方程),這主要用于描述動態過程,或者仿動態過程。這個學科在Vision中用得比Learning多,主要用于描述連續場的運動或者擴散過程。比如Level set, Optical flow都是這方面的典型例子。
Functional Analysis (泛函分析), 通俗地,可以理解為微積分從有限維空間到無限維空間的拓展——當然了,它實際上遠不止于此。在這個地方,函數以及其所作用的對象之間存在的對偶關系扮演了 非常重要的角色。Learning發展至今,也在向無限維延伸——從研究有限維向量的問題到以無限維的函數為研究對象。Kernel Learning 和 Gaussian Process 是其中典型的例子——其中的核心概念都是Kernel。很多做Learning的人把Kernel簡單理解為Kernel trick的運用,這就把kernel的意義嚴重弱化了。在泛函里面,Kernel (Inner Product) 是建立整個博大的代數體系的根本,從metric, transform到spectrum都根源于此。
Measure Theory (測度理論),這 是和實分析關系非常密切的學科。但是測度理論并不限于此。從某種意義上說,Real Analysis可以從Lebesgue Measure(勒貝格測度)推演,不過其實還有很多別的測度體系——概率本身就是一種測度。測度理論對于Learning的意義是根本的,現代統計學整 個就是建立在測度理論的基礎之上——雖然初級的概率論教科書一般不這樣引入。在看一些統計方面的文章的時候,你可能會發現,它們會把統計的公式改用測度來 表達,這樣做有兩個好處:所有的推導和結論不用分別給連續分布和離散分布各自寫一遍了,這兩種東西都可以用同一的測度形式表達:連續分布的積分基于 Lebesgue測度,離散分布的求和基于計數測度,而且還能推廣到那種既不連續又不離散的分布中去(這種東西不是數學家的游戲,而是已經在實用的東西, 在Dirchlet Process或者Pitman-Yor Process里面會經常看到)。而且,即使是連續積分,如果不是在歐氏空間進行,而是在更一般的拓撲空間(比如微分流形或者變換群),那么傳統的黎曼積 分(就是大學一年級在微積分課學的那種)就不work了,你可能需要它們的一些推廣,比如Haar Measure或者Lebesgue-Stieltjes積分。
Topology(拓撲學),這 是學術中很基礎的學科。它一般不直接提供方法,但是它的很多概念和定理是其它數學分支的基石。看很多別的數學的時候,你會經常接觸這樣一些概念:Open set / Closed set,set basis,Hausdauf, continuous function,metric space, Cauchy sequence, neighborhood, compactness, connectivity。很多這些也許在大學一年級就學習過一些,當時是基于極限的概念獲得的。如果,看過拓撲學之后,對這些概念的認識會有根本性的拓 展。比如,連續函數,當時是由epison法定義的,就是無論取多小的正數epsilon,都存在xxx,使得xxx。這是需要一種metric去度量距 離的,在general topology里面,對于連續函數的定義連坐標和距離都不需要——如果一個映射使得開集的原像是開集,它就是連續的——至于開集是基于集合論定義的,不 是通常的開區間的意思。這只是最簡單的例子。當然,我們研究learning也許不需要深究這些數學概念背后的公理體系,但是,打破原來定義的概念的局限 在很多問題上是必須的——尤其是當你研究的東西它不是在歐氏空間里面的時候——正交矩陣,變換群,流形,概率分布的空間,都屬于此。
Differential Manifold (微分流形), 通俗地說它研究的是平滑的曲面。一個直接的印象是它是不是可以用來fitting一個surface什么的——當然這算是一種應用,但是這是非常初步的。 本質上說,微分流形研究的是平滑的拓撲結構。一個空間構成微分流形的基本要素是局部平滑:從拓撲學來理解,就是它的任意局部都同胚于歐氏空間,從解析的角 度來看,就是相容的局部坐標系統。當然,在全局上,它不要求和歐氏空間同胚。它除了可以用于刻畫集合上的平滑曲面外,更重要的意義在于,它可以用于研究很 多重要的集合。一個n-維線性空間的全部k-維子空間(k < n)就構成了一個微分流形——著名的Grassman Manifold。所有的標準正交陣也構成一個流形。一個變換群作用于一個空間形成的軌跡(Orbit) 也是通常會形成流形。在流形上,各種的分析方法,比如映射,微分,積分都被移植過來了。前一兩年在Learning里面火了好長時間的Manifold Learning其實只是研究了這個分支的其中一個概念的應用: embedding。其實,它還有很多可以發掘的空間。
Lie Group Theory (李群論),一 般意義的群論在Learning中被運用的不是很多,群論在Learning中用得較多的是它的一個重要方向Lie group。定義在平滑流行上的群,并且其群運算是平滑的話,那么這就叫李群。因為Learning和編碼不同,更多關注的是連續空間,因為Lie group在各種群中對于Learning特別重要。各種子空間,線性變換,非奇異矩陣都基于通常意義的矩陣乘法構成李群。在李群中的映射,變換,度量, 劃分等等都對于Learning中代數方法的研究有重要指導意義。
Graph Theory(圖論),圖, 由于它在表述各種關系的強大能力以及優雅的理論,高效的算法,越來越受到Learning領域的歡迎。經典圖論,在Learning中的一個最重要應用就 是graphical models了,它被成功運用于分析統計網絡的結構和規劃統計推斷的流程。Graphical model所取得的成功,圖論可謂功不可沒。在Vision里面,maxflow (graphcut)算法在圖像分割,Stereo還有各種能量優化中也廣受應用。另外一個重要的圖論分支就是Algebraic graph theory (代數圖論),主要運用于圖的譜分析,著名的應用包括Normalized Cut和Spectral Clustering。近年來在semi-supervised learning中受到特別關注。
小時候,老師就告訴我們,讀書講究先由薄而厚,再由厚而薄。前者是吸收和積累,后者是融會和消化。
這些年,讀了不少關于統計學習的東西,很多東西都記不清楚了。從我自己的角度看來(可能是很膚淺的),學概率和統計,關鍵是記住三個概念:測度(measure),期望(expectation),和獨立性(independence)。
測度是現代概率理論的基石。在經典的概率論里面——比如我們在本科學的那些——大多是通過舉例子和文字說明的方式告訴你概率是什么,這容易 明白,不過缺乏嚴密的公理化根基。現代概率論整個建立在測度理論的基礎上,概率的定義非常簡單,不過也很抽象——所謂“概率”,就是歸一化的測度。沒有測 度,就沒有整個概率論的大廈,所以它很重要——不過,它在實用中直接用上的機會不大,所以不是這篇文章的主體。關于獨立性,以及它的一個孿生的名 詞:Markov,也扮演著非常重要的角色,它是Graphical models的基礎。有興趣的可以去讀M. I. Jordan的書。
而在統計學習的實際應用中,就是你平時寫code,用得最多的就是期望,或者一個通俗點的版本——平均值。其實這兩者不太一樣,期望是從model出發演繹的,平均值通常是指從data出發歸納的。不過它們的關系確實非常密切。
統計學習在很多情況下,就是求平均值
我們平常說去Learn一個model——其實,在很多情況下,這就是干一件聽上去很簡單的事情,求平均值。我們知道,我們所接觸的大部分 重要的概率分布,都屬于exponential family,比如Gauss, Binomial, Multinomial, Dirichlet, Poisson, Exponential, Gamma等等分布都屬于這個家族。它的一個重要特點就是——得期望者得天下。就是說,知道了某些統計量的期望,就知道了整個model,至于model 的參數,或者就是期望本身(比如Gauss),或者不難從期望中得到。可以證明,對于這些model,對它們的最大似然估計(Maximum Likelihood estimation),就是從data中算出某些統計量的平均值作為model的期望。
在Bayes學習中,我們還考慮先驗分布(prior)。在這里,model的估計還是求平均值。所謂prior是怎么來的?就是以前 曾經觀察過的data那里總結得到的,然后以prior的形式影響當前的model估計。一般而言,使用exponential family,我們通常會使用conjugate prior,這種prior,基本就是沿著剛才說的,假想我們已經看過一些data的思路得到的,它的形式和data mean幾乎如出一轍。而帶了prior的估計,還是在求平均值,不過這里的平均值就是(假想)以前觀察過的數據和當前的數據合在一起求平均。
對于更加復雜的Graphical model,每個節點的estimate和update,很多時候,其實是做了這樣的事情——把其它節點傳來的平均值和這個節點接觸的數據的平均值混合進 行新的平均。從最簡單的Gauss, 到更加復雜的Gaussian Mixture Model, Latent Dirichlet Allocation, Markov Random Field, Generalized Kalman Filtering概莫能外——大家可以仔細看看它們的每一個update公式,看看哪個不是在求平均值。
怎樣求平均值
平均值是很重要的。不過怎么求呢?這似乎是小學初中就解決了的問題。不過,求平均值的世界其實是如此博大精深。如果說它是少林武學,我現在這點水平,也就夠在嵩山下掃掃地罷了。很多在世界上赫赫有名的數學家,窮畢生心血,方能一窺堂奧。
雖然,只有掃地的水平,不過起碼也看過大師們練武。這門學問主要有兩個方面:得到data求平均值,得到model求期望。
先說說求data的平均值。這太簡單了,有什么好說的。不就是加法和乘法么,小學學過算術的人都會算,即使沒學過,拿個計算器也照樣算。在 通常的實數空間內,確實很簡單;不過對于一般的求平均值的情況,就非常非常困難了。一般來說,求平均值有兩個流派,一種是基于線性代數(linear algebra),另外一種是基于度量空間(metric space)。前面一種大家很熟悉:
m = (x1 + x2 + ... + xn) * (1/n)。
這是我們讀了這么多年書最常見的平均值。不過,這樣定義太局限了,它要求這些東西能做加法和數乘——我不得不說,這個要求實在太高,只有線性空間 (這種空間是數學里面的貴族,它們什么好處都全了)能夠滿足——對于數學領域更廣大的人民群眾(各種更一般的數學結構,比如群,拓撲流形),加法和數乘簡 直是一種奢侈得不切實際的活動。
其實平均值是一個非常廣泛的概念,不僅僅存在于線性空間中,還為廣大人民群眾服務。對于某個度量空間,它的一般性定義是這么給出的
使得 d(m, x1) + d(m, x2) + ... + d(m, xn) 最小的那個m
也就是說,求平均值是一個優化問題。關于這個問題,在不同的空間中有不同的答案:在最高級的希爾伯特空間中(定義了內積的完備線性空間),m就是上 面給出的基于線性代數的形式。所以說,基于線性代數的定義僅僅是基于度量空間的定義的一個特例。不過由于這個特例被廣泛使用,所以大家一說平均值就想起 它,而不是一般形式。在推廣一些的巴拿赫空間中(定義了范數的完備線性空間),上述的問題是一個凸優化問題,因為范數必然是凸函數。它具有唯一的最優解。
最困難的是在非線性空間中。一個典型的例子是黎曼流形(注意,這里我們只討論黎曼流形,對于更為一般的拓撲流形或者微分流形,因為不具有 度量結構,所以不能定義均值。)在黎曼流形上,兩點間的距離是通過測地距離給出的。在黎曼流形上,通過測地距離定義的平均值,叫做黎曼中心。一部分朋友對 于這幾個術語可能不太熟悉,還是舉個形象點的例子。比如,在地球上給出幾個地點,你要在地面上找一個“平均地點”,使得它到那幾個地點的“地面距離”的平 方和最小。如果,用傳統的算術方法拿這些地點的三維坐標來算,你估計得在那鉆個油井了。對于“球面平均”問題(專門一點的說法叫做特殊正交群SO(3)的 黎曼中心,恩,這個名詞我也有點暈),到了在本世紀,在數學里依舊可以發paper,目前還沒有一般情況下的解析解。
別的領域我不懂,不過“球面平均”在vision里面價值是很大的,它是對三維旋轉變換建立統計模型的基礎——我們再一次看到了求平均 值對于統計的重要意義。球面平均求的是“平均”的旋轉,如果對于一般的仿射變換(Affiine transform),“平均”的變換又怎么求呢?這是個open problem,留待大家思考。
怎樣求期望
說完從data求平均值,再說說從model得到期望(expectation)——這們學問就更博大了。雖然,期望的定義很簡單——求和或者積分就行了。不過,它的實際計算,對于很多實際模型是intractable的。
概率論最早源于擲色子,我們的前輩數學家們為了破解求復雜模型求期望的問題,提出的方法就是擲色子。在學術上,美其名曰“蒙特卡羅方法”(Monte Carlo)。原理很簡單,不斷地擲色子來大量采樣,然后從采來的樣本求平均值來逼近模型的期望。
擲色子是世界上最有學問的之一,正因為如此,我們對于“賭神”,“賭王”之類的人物崇拜猶如滔滔江水,因為它們擲色子擲得好。無數的統計學家把畢生經歷奉獻給擲色子(采樣)事業,并且做出偉大成就。關于采樣的專著和文獻,汗牛充棟。
擲色子就這么難么?是的。據估算,即使對于一個復雜度不高的model,要得到一個可以接受的估計,所需的樣本量往往大得驚人,而且指數增 長。如果不掌握要領,你即使擲到宇宙末日,估計離一個靠譜的估計還遠著呢。采樣技術名目繁多,最流行的莫過于重要性采樣(importance sampling)和馬爾科夫鏈蒙特卡羅過程(MCMC)。具體就不多說了。
http://dahua.spaces.live.com/blog/cns!28AF4251DF30CA42!2489.entry
7月9日
Learning中的代數結構的建立
Learning是一個融會多種數學于一體的領域。說起與此有關的數學學科,我們可能會迅速聯想到線性代數以及建立在向量空間基礎上的統計模型——事實上,主流的論文中確實在很大程度上基于它們。
R^n (n-維實向量空間) 是我們在paper中見到最多的空間,它確實非常重要和實用,但是,僅僅依靠它來描述我們的世界并不足夠。事實上,數學家們給我們提供了豐富得多的工具。
“空間”(space),這是一個很有意思的名詞,幾乎出現在所有的數學分支的基礎定義之中。歸納起來,所謂空間就是指一個集合以及在上面定義的某種數學結構。關于這個數學結構的定義或者公理,就成為這個數學分支的基礎,一切由此而展開。
還是從我們最熟悉的空間——R^n 說起吧。大家平常使用這個空間的時候,除了線性運算,其實還用到了別的數學結構,包括度量結構和內積結構。
第 一,它是一個拓撲空間(Topological space)。而且從拓撲學的角度看,具有非常優良的性質:Normal (implying Hausdorff and Regular), Locally Compact,
Paracompact, with Countable basis, Simply 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的主要工作分成兩個大的范疇:
這里只討論第一個范疇。先看看,目前用得比較廣泛的一些方法:
不過,這在數學上有一點小問題,在大部分情況下,根據數據產生的物理原理,這些向量的值域并不能 充滿整個空間。比如圖像的像素值一般是正值,而且在一個有界閉集之中。這帶來的問題是,對它們進行線性運算很可能得到的結果會溢出正常的范圍——在大部分 paper中,可能只是采用某些heuristics的手段進行簡單處理,或者根本不管,很少見到在數學上對此進行深入探討的——不過如果能解決實際問 題,這也是無可厚非的,畢竟不是所有的工作都需要像純數學那樣追求嚴謹。
這樣做不可避免要丟失信息。但是,由于小鄰域內信號的高度相關,信息丟失的程度往往并不顯著。而且,從理論上說,這相當于在頻域中的低通過率。對于有限能量的連續信號,不可能在無限高的頻域中依然保持足夠的強度,只要采樣密度足夠,丟失的東西可以任意的少。
除了表示信號,對于幾何形體的表達也經常使用量化,比如表示curve和surface。
最簡單的情況,就是使用原始向量表達的歐氏距離 (Euclidean distance)作為metric。不過,由于原始表達數值的不同特性,這種方式效果一般不是特別好,未必能有效表達實際對象的相似性(或者不相似 性)。因此,很多工作會有再此基礎上進行度量的二次建立。方式是多種多樣的,一種是尋求一個映射,把原空間的元素變換到一個新的空間,在那里歐氏距離變得 更加合適。這個映射發揮的作用包括對信息進行篩選,整合,對某些部分進行加強或者抑制。這就是大部分關于feature selection,feature extraction,或者subspace learning的文章所要做的。另外一種方式,就是直接調節距離的計算方式(有些文章稱之為metric learning)。
這兩種方式未必是不同的。如果映射是單射,那么它相當于在原空間建立了一個不同的度量。反過來,通過改變距離計算方式建立的度量在特定的條件下對應于某種映射。
一種方法是直接建立。就是給這些東西定義自己的加法和數乘。這往往不是那么直接(能很容易建 立的線性運算結構早已經被建立好并廣泛應用了),可能需要涉及很深的數學知識,并且要有對問題本身的深入了解和數學上的洞察力。不過,一個新的代數結構一 旦建立起來,其它的數學結構,包括拓撲,度量,分析,以及內積結構也隨之能被自然地誘導出來,我們也就具有了對這個對象空間進行各種數學運算和操作的基 礎。加法和數乘看上去簡單,但是如果我們對于本來不知道如何進行加法和數乘的空間建立了這兩樣東西,其理論上的貢獻是非常大的。
(一個 小問題:大家常用各種graphical model,但是,每次這些model都是分別formulate,然后推導出estimation和evaluation的步驟方法。是否可能 對"the space of graphical model"或者它的某個特定子集建立某種代數結構呢?(不一定是線性空間,比如群,環,廣群, etc)從而使得它們在代數意義上統一起來,而相應的estimation或者evaluation也可以用過代數運算derive。這不是我的研究范 圍,也超出了我目前的能力和知識水平,只是我相信它在理論上的重要意義,留作一個遠景的問題。事實上,數學中確實有一個分支叫做 Algebraic statistics 可能在探討類似的問題,不過我現在對此了解非常有限。)
“嵌入”是一種在數學上應用廣泛的手段,其主要目標就是通過嵌入到一個屬性良好,結構豐富的空間,從而利 用其某種結構或者運算體系。在拓撲學中,嵌入到metric space是對某個拓撲空間建立度量的重要手段。而在這里,我們是已有度量的情況下,通過嵌入獲取線性運算的結構。除此以來,還有一種就是前些年比較熱的 manifold embedding,這個是通過保持局部結構的嵌入,獲取全局結構,后面還會提到。
在很多教科書中,以二 次核為例子,把二維空間變成三維,然后告訴大家kernel用于升維。對于這種說法,我一直認為在一定程度上是誤導的。事實上,kernel的最首要意義 是內積的建立(或者改造),從而誘導出更利于表達的度量和運算結構。對于一個問題而言,選擇一個切合問題的kernel比起關注“升維”來得更為重要。
kernel被視為非線性化的重要手段,用于處理非高斯的數據分布。這是有道理的。通過nonlinear kernel改造的內積空間,其結構和原空間的結構確實不是線性關聯,從這個意義上說,它實施了非線性化。不過,我們還應該明白,它的最終目標還是要回到 線性空間,新的內積空間仍舊是一個線性空間,它一旦建立,其后的運算都是線性的,因此,kernel的使用就是為了尋求一個新的線性空間,使得線性運算更 加合理——非線性化的改造最終仍舊是要為線性運算服務。
值得一提的是,kernelization本質上說還是一種嵌入過程:對于一個空間先建立內積結構,并且以保持內積結構不變的方式嵌入到一個高維的線性空間,從而繼承其線性運算體系。
從拓撲學的角度說,流形就是一個非常優良的拓撲空間:符合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所報告的在 高維空間(比如人臉)運用流形方法獲得性能提升,其實未必是因為“流形”本身所起的作用,而很可能是其它方面的因素。
李代數和李 群的關系是非常漂亮的。它把變換的微變化轉換成了線性空間的代數運算,使得移植傳統的基于線性空間的模型和算法到李空間變得可能。而且李代數中的矩陣比起 變換本身的矩陣甚至更能反映變換的特性。幾何變換的李代數矩陣的譜結構就能非常方便地用于分析變換的幾何特性。
最后,回頭總結一下關于 嵌入這個應用廣泛的策略,在learning中的isometry, kernel和manifold embedding都屬于此范疇,它們分別通過保持原空間的度量結構,內積結構和局部結構來獲得到目標(通常是向量空間)的嵌入,從而獲得全局的坐標表 達,線性運算和度量,進而能被各種線性算法和模型所應用。
在獲得這一系列好處的同時,也有值得我們注意的地方。首先,嵌入只是一種數學 手段,并不能取代對問題本身的研究和分析。一種不恰當的原始結構或者嵌入策略,很多時候甚至適得其反——比如稀疏空間的流形嵌入,或者選取不恰當的 kernel。另外,嵌入適合于分析,而未必適合于重建或者合成。這是因為嵌入是一個單射(injection),目標空間不是每一個點都和原空間能有效 對應的。嵌入之后的運算往往就打破了原空間施加的限制。比如兩個元素即使都是從原空間映射過來,它們的和卻未必有原像,這時就不能直接地回到原空間了。當 然可以考慮在原空間找一個點它的映射與之最近,不過這在實際中的有效性是值得商榷的。
和Learning有關的數學 世界是非常廣博的,我隨著學習和研究的深入,越來越發現在一些我平常不注意的數學分支中有著適合于問題的結構和方法。比如,廣群(groupoid)和廣 代數(algebroid)能克服李群和李代數在表示連續變換過程中的一些困難——這些困難困擾了我很長時間。解決問題和建立數學模型是相輔相成的,一方 面,一個清晰的問題將使我們有明確的目標去尋求合適的數學結構,另一方面,對數學結構的深入理解對于指導問題的解決也是有重要作用的。對于解決一個問題來 說,數學工具的選擇最重要的是適合,而不是高深,但是如果在現有數學方法陷入困難的時候,尋求更高級別的數學的幫助,往往能柳暗花明。數學家長時間的努力 解決的很多問題,并不都是理論游戲,他們的解決方案中很多時候蘊含著我們需要的東西,而且可能導致對更多問題的解決——但是我們需要時間去學習和發現它 們。