人人都喜歡美劇《生活大爆炸》。Sheldon 和朋友們的生活看似單調,但是自有其獨特的精彩。捧腹之餘,理工科出身的觀眾不免也想看看 Sheldon 到底在做怎樣的研究,特別是和我們自己相關的工作。果然,在第四季第 2 集中我們看到了下圖中的公式(用紅框標出)——貝葉斯定理!該定理素以其簡單而優雅的形式、深刻而雋永的意義而聞名,在今天的機器學習大潮中,貝葉斯定理仍會扮演重要的角色,而且其作用將日益凸顯。
1. 貝葉斯定理
貝葉斯定理是英國數學家貝葉斯提出的,當時的目標是要解決所謂「逆機率」問題。在前貝葉斯時代處理機率問題的時候,總是先取一定假設(比如拋硬幣時,每次出現正反面的機率相同),然後在假設下討論一定事件的機率(比如說連續出現 10 次正面的機率)。「逆機率」則反過來考慮問題,比如說,如果連續出現 10 次正面,我們想知道一次拋硬幣時出現正反面的機率。貝葉斯定理的相關論文在貝葉斯去世後才發表,此後法國大數學家拉普拉斯對這一理論進行了深入的研究,使之成為我們今天使用的形式,如下圖所示。
貝葉斯定理的公式並不複雜。上圖中 P 表示機率,取值在 0 和 1 之間,即相應事件發生的機率。等式中 D 表示資料,也就是說,我們在某一活動中觀測到資料 D。H 代表導致資料 D 發生的假設,或者可以直觀的理解為原因。多個不同假設可以產生同樣的資料 D,比如我們早晨離開家時發現當前並沒有下雨但是道路是溼的,那麼這可能是由於凌晨時下雨造成的,也可能是因為給草坪澆水的結果,當然也許是由於是自來水管道洩露,甚至外星人故意把路面弄溼和我們開個玩笑也是一種可能性。P(Y|X) 符號中的豎線表示條件機率,就是如果 X 成立下 Y 發生的機率。貝葉斯定理公式的等號左邊是該定理要計算的目標,即後驗機率,指在觀測到資料 D 時假設 H 成立的可能性。例如,P(下雨|路溼) 就是觀測到路面溼這一事實時,其原因是由於下雨。公式右邊分子有兩項,前者是假設 H 成立的可能性,常稱為先驗機率,源自經驗和知識。後者 P(D|H) 叫做似然機率,是假設 H 成立的前提下,觀測到資料 D 的機率,例如下雨的情況下路溼的可能性。分母的 P(D) 是資料 D 發生的機率,這一項可以對 P(D|H) 針對各種可能性積分(消掉 H)而獲得,因此稱為邊際機率。很多情況下,我們並不在乎後驗機率的絕對值,只要能夠比較不同假設(或原因)的可能性就可以決策,所以我們常常不需要真正計算 P(D)。
貝葉斯定理說明在評判現象背後的原因時,不僅要看這個原因的可能性有多大(先驗機率),也要看這一原因產生現象的機率(似然機率)。還用道路溼這個例子來看:凌晨下雨後路面變溼的機率確實存在(但是也可能由於道路過於乾燥而沒有溼潤的跡象),但是可能不如自來水管道洩露的情況下把路弄溼的機率高,即 P(道路溼|凌晨時下雨) < P(道路溼|自來水管道洩露),但是另一方面,凌晨時下雨的機率遠大於自來水管道洩露的機率(至少在我居住的城市和小區是如此),即 P(凌晨時下雨)>>P(自來水管道洩露)。綜合兩方面因素,我們認為還是凌晨下雨是更加可能的原因。
2. 貝葉斯定理的意義
形式如此簡單的貝葉斯定理被譽為「永遠不死的理論」,為什麼如此重要呢?我們從三個角度來考察:機率理論、科學方法和人腦認知。
首先,從理論意義上來講,貝葉斯定理為機率論提供了新的基礎。傳統機率論學者實際屬於頻率學派,總是根據先驗知識先假定一個先驗機率(即確定機率分佈的型別和引數),然後以此為基礎進行機率推演。然而,在很多情況下先驗機率並非能夠精確獲得,我們的認知總是存在各種各樣的不確定性。換言之,絕大多數現象無法用「客觀機率」刻畫,只能從現有事實出發用我們腦中的「主觀機率」加以統攝。貝葉斯學派則完全把自己放在觀察者的角色,把先驗機率看做是一種信念,透過觀測資料不斷修正前提假設,從而形成新的信念。不僅如此,在繼續觀測到新的資料後,我們還可以不斷使用貝葉斯原理把現有信念和觀測資料整合,從而持續更新後驗機率並使得「主觀機率」不斷逼近「客觀機率」。
其次,科學研究方法角度看,貝葉斯定理提供了一種發現的邏輯。頻率學派實際上是認為現象背後的規律(例如機率分佈和引數)是以柏拉圖的「理念」形式客觀存在的,只是我們不知道而已。貝葉斯學派則認為「理念」存在與否並不重要,只要我們能夠以越來越強的信念瞭解規律就好。事實上,科學史上只有愛因斯坦等極少的幾位大哲在狹義和廣義相對論等極少的例子上能夠完全從公設出發建立理論體系,然後讓別人從實驗證明其理論完全於觀測資料吻合。更多的例如電磁理論和量子理論的大量發現,都是在觀測資料基礎上尋找最佳的理論解釋才能建立的。典型的例子是普朗克定理的發現,普朗克發現只有使用量子假說才能完美的解釋黑體輻射問題,從而開啟了量子理論的大門。
第三,從認知科學角度看,貝葉斯定理與大腦的認知機制存在極高的吻合度。仔細思考一下,就會發現我們在日常生活中在不停的利用貝葉斯定理。就以共享單車——ofo 小黃車為例來說,我們當然知道小黃車的顏色。然而,眼睛識別到的顏色實際上是光照的光譜和小黃車本身顏色光譜疊加的後果,即光照在小黃車上反射進入我們的眼睛,在不同的光照效果下我們看到的顏色差別可以非常之大,比如在夜間甚至可以完全看不出黃色。不過,不管白天黑夜,我們似乎總是能夠正確的找到小黃車(現在的問題是我總是看到太多的小黃車和其它共享單車)。這就是因為人腦能夠根據光照情況的先驗機率和光照下小黃車顏色變化的規律(似然機率),自動推斷在當前光照情況下單車是否是小黃車的後驗機率。當然,人腦並不真正進行精確的機率運算,而是使用某種巧妙的近似機制(例如神經脈衝的數量、形狀等)完成推理過程。目前,基於貝葉斯模型的人腦認知理論已經獲得長足的進步,能夠有效解釋概念學習、物體識別、感知-運動整合和歸納等多種人腦認知行為。
3. 貝葉斯理論和其它人工智慧理論
基於貝葉斯理論的學習和推斷是人工智慧的重要分支。那麼,從類腦計算角度來看,貝葉斯理論和其它人工智慧方法,特別是深度學習方法,又是什麼關係呢?我們用下圖做一個概要性的說明。
美國天才心理學家 Marr 認為理解和分析人腦需要三個層次的努力,即計算層、演算法層和實現層。
計算層關注功能和介面,也就是人類某種認知行為完成的功能以及相應的輸入和輸出。典型的計算機任務包括視覺處理、記憶、理解、推理、語言、學習和創造等等。計算層不關心該實現功能的方法和物質基礎。
演算法層關注的是人類認知行為的實現方法,但不關心具體的物質基礎。比如說,人腦學習的基本機制是神經突觸可塑性,但是這裡的神經元可以是生物神經元,也可以是矽基電路實現的神經元電路,也可以是由軟體實現的神經元程式。深度神經網路也可以看做是影像分類、物體檢測等認知活動的演算法,而貝葉斯定理及其衍生出的方法實際上也提出了實現人腦行為的一大類演算法。有趣的是,深度神經網路和貝葉斯方法似乎更多的是互補關係。深度神經網路擅長解決影像分類和物體檢測問題,似乎主要對應視覺皮層的功能,而貝葉斯方法更適合於更加抽象的認知活動,例如歸納、推理和感知-運動整合等,對應於海馬區、小腦等多個腦區的功能。
實現層解決用何種硬體(包括生物機制)實現相應演算法。地球生物在漫長的進化過程中,最終採用神經元作為計算單元。也就是說,人腦的物質基礎是神經元細胞連結而成的脈衝神經網路。而另一方面,當我們製造類腦計算機的時候,從目前技術來看,積體電路似乎是唯一可行的途徑。值得說明的是,雖然演算法層應該與實現層完全正交,不過實際上演算法層總會對應於最適當的實現層,而實現層也總會對演算法層有所制約。對於貝葉斯演算法來說,數位電路完全可以作為實現層(即不必追求實現層與人腦的相似性),當然需要透過電路設計增強其隨機取樣和計算的能力。對於實現神經突觸可塑性演算法來說,類比電路和憶阻器(memristor)是比較直觀的硬體基礎,而用數位電路實現神經突觸可塑性就比較麻煩,例如在 IBM 的 TrueNorth 計算機中需要 2000 多個邏輯閘才能搭建一個神經元。然而,數位電路在整合度和器件效能的一致性上具有極大優勢。
總結上面的分析,應該說,貝葉斯理論是類腦計算的一個演算法框架。以這個框架為基礎,根據人腦認知行為的計算層要求,我們可以構造出相應的演算法。以上演算法可以使用計算機以軟體形式實現,也可以設計專用的積體電路進行加速計算。
4. 貝葉斯計算
貝葉斯計算的核心就是求解後驗機率,其方法包括馬爾可夫鏈蒙特卡洛(Markov chain Monte Carlo,MCMC)方法和變分法。這裡我們主要關注 MCMC 方法,因為其與人腦感知過程更為接近。MCMC 的思想是根據似然機率對隨機取樣進行選擇,並使得采樣過程形成的馬爾可夫鏈收斂到目標後驗機率。實現 MCMC 的具體演算法很多,下面我們給出最經典的 Metropolis–Hastings(MH)演算法的虛擬碼。該演算法有三個主要步驟:1. 從一個已知機率分佈 q(建議分佈)上獲得隨機取樣 X,2. 計算當前樣本 X 的接受函式α,3. 如果 X 更好,則接受 X,否則以機率α接受 X。經過足夠多的迭代取樣後,按照上述 MH 演算法得到的取樣資料將服從我們想要的後驗分佈。
MH 演算法的形式並不複雜,但是計算量可以極大,尤其在高維資料空間的收斂速度經常變得難以接受。其中,主要的複雜度在於需要大量樣本,即需要大量次數的迭代才能達到收斂狀態。而且,由於每一個狀態都與前一狀態相關,一般說來 MCMC 的並行比較困難,研究界普遍認為簡單的多鏈並行效果不佳。除此之外,MH 演算法涉及到大量隨機抽樣(每次迭代需要兩個隨機數),傳統計算機上無法產生真隨機數,而偽隨機數往往需要大數計算,執行時效率很低。
5. 貝葉斯計算機
前面的描述實際上已經揭示出我們的企圖:既然貝葉斯計算如此重要、計算量又如此之高,但是現有計算機並不適合貝葉斯計算,那麼解決之道只能是設計新的硬體了。從硬體設計角度看,我們需要解決兩個問題:1. 怎樣儘可能直接的支援取樣計算,即怎樣用最少的邏輯單元產生常見的離散機率分佈?2. 怎樣支援硬體並行執行?
上圖中給出了一種利用 FPGA 的可程式設計單元實現隨機取樣的電路設計方法。上圖(a)是原始的 FPGA 可程式設計單元,其中可程式設計邏輯用查詢表實現。也就是說,需要實現的邏輯功能的真值表儲存在 SRAM 儲存器中,各個輸入變數的組合其實對應於查詢真值表的地址。這樣一來,我們只要對真值表進行程式設計,就可以讓可程式設計單元實現任意邏輯函式,當然此時對應每一個輸入組合的輸出的確定性的。在上圖(b)中,我們把輸入分成兩組,一組是正常的數字訊號(in),另一組接隨機數發生器(rand),相應的真值表則實現功能 rand<in。這樣一來,輸出就具有了不確定性。為什麼這樣做呢?這是由於隨機數發生器只能產生特定機率分佈的隨機數(例如均勻分佈),透過上述邏輯我們可以對這種分佈進行剪裁(例如 rand<in)或組合(例如把兩個產生均勻分佈的 0 和 1 的隨機門進行加法運算可以形成二項式分佈的隨機數),從而形成更為多樣的機率變數。上面的描述針對離散分佈,連續分佈的隨機變數的處理是類似的,不過需要使用浮點運算單元作為基礎電路。
有了前述的隨機組合邏輯,我們還可以引入儲存單元(例如 D 觸發器),形成隨機時序電路。對電路結構進行適當的程式設計,我們就可以構造出計算 MCMC 的電路結構。然而,這樣的電路還是隻能順序執行,也就是說只是提高了基本計算的效能。Calderhead 在 2014 年的美國科學院會刊上發表了一篇題為「A general construction for parallelizing Metropolis−Hastings algorithms」的論文,提出了一種能夠有效的實現並行化 MH 演算法的方法。其思想是引入一個新的離散隨機變數,把原有馬爾可夫鏈的機率計算轉換為條件機率計算,然後透過條件機率對多個並行取樣進行取捨,整個過程依然滿足細緻平穩的收斂條件。對我們的貝葉斯硬體來說,改演算法提供了一種平行計算的框架。
以上的硬體當然也可以組織為處理器,下圖是一種可能的貝葉斯計算機體系結構。該處理器以前面的隨機邏輯單元作為基本計算電路,而並行 MCMCMCMC 則透過程式設計實現。既然是處理器,那麼程式設計又怎樣實現呢?顯然,一個合適的程式設計模型是機率程式,例如 Stanford 設計的 STAN 語言和 MIT 設計的 Church 語言。機率程式的基本元素是機率變數,即其中的變數不再是確定性的,而是遵循某種機率。
在我們的規劃中,貝葉斯計算機將作為類腦計算的底盤,從而允許我們開發並實驗一系列的認知方法,例如單詞學習、長期和短期記憶模型、歸納、物理規律學習、感知-運動整合、理論學習等等。
6. 總結
到這裡讓我們的貝葉斯之旅先告一段落,我們工作還在繼續,而我們的目標當然是人工智慧的聖盃——構造象人那樣學習和思考的機器,即「強人工智慧」。甚至還要更好:事實上,人腦並不能進行精確的機率數值計算,因此雖然群體行為往往可以用貝葉斯原理解釋,而個人行為則可能由於隨機採用出現巨大偏差,那麼我們的貝葉斯計算機能否成為「比人還好」的學習和思考機器呢?儘管聽起來有點離經叛道,但我們總想試試、而且也值得試試,難道不是嗎?
作者簡介:鄧仰東,發射資本資深科學顧問,中國清華大學軟體學院副教授、博導,美國卡內基梅隆大學計算機工程專業博士。發射資本(LH Ventures)是一家專注於投資孵化由深度科技驅動的創業公司的超早期風險投資機構,由合力投資(Empower Investment)與多位深具使命感的科學家共同創立,投資領域覆蓋機器智慧、生物及材料科技。歡迎訪問 www.launchhill.com 或致信 info@launchhill.com 瞭解更多。