1.MLE、MAP、Bayesian
首先要明確這三個概念。
MLE
是極大似然估計Maximum Likelihood Estimation
。其目標為求解:
MAP
是最大后驗概率Maximum A Posteriori Estimation
。其目標是求解:
這兩者的區別就是在於求解最優參數時,有沒有加入先驗知識 \(P(\theta)\)。也就是MAP融入了要估計量\(θ\)的先驗分布在其中,因此MAP
可以看做規則化的MLE
。這也就解釋了,為什么MLE比MAP更容易過擬合。因為MLE在求解最優\(θ\)時,沒有對\(θ\)有先驗的指導,因此D
中包括了一些outlier
的數據樣本時,就會很輕易讓MLE
去擬合outlier樣本。而MAP
加入了對θ
的先驗指導,例如L2
正則化,那么就不易過擬合了。
舉個例子,同樣的邏輯回歸。
未正則化的邏輯回歸就是MLE
。
正則化的邏輯回歸就是MAP
。
那么,與上述兩個概念都不同的是貝葉斯模型(Bayesion Model
),也被稱為概率圖模型。這里不是指朴素貝葉斯。而是說下面的這種學習思路。
MLE
和MAP
求解的都是一個最優的θ
值,在預測時只有最優的θ
參與預測過程。貝葉斯模型求解的是\(θ\)的后驗分布\(P(θ|D)\),而不是最大化的后驗分布。因此貝葉斯模型在某種程度上可以看作是一個集成模型,在預測時,讓所有\(θ\)都參與預測,並將預測結果以后驗概率\(P(θ|D)\)作為權重進行加和作為最終預測值。
2.Why Bayesian?
上面講述了MLE
、MAP
和Bayesian
的區別,那么為什么要用Bayesian
呢?
還舉上面邏輯回歸的例子,如果是邏輯回歸用Bayesian方式來實現,那么訓練所得的就是一個后驗分布\(P(θ|D)\),預測時需要用所有\(θ\)都產生一個預測值,然后用后驗分布加權求和。如果\(θ\)是無窮多的,一般就采樣足夠的次數,再加權求和。
優勢呢?
(1)小數據集時有優勢。因為Bayesian的學習方式是一個集成學習的方式,而集成學習在小樣本上效果是很好的。不易過擬合。
(2)一種很好地融合參數\(θ\)先驗的方式。例如LDA
模型在生成文檔時,就對參數做了很多先驗假設。
(3)更好地處理不確定性。無論MLE
和MAP
學習到的參數\(θ\)都是只有一個,因此預測結果是確定性的。這在很多情況下是不合理的。例如,一個分類模型,永遠都會輸出分類概率值最大的那一類的標簽,但是卻不能給出它對這種分類結果有多大的確信度。而Bayesian
在給出結果的同時,能夠給出對這種結果的模型確信度。如果確信度比較低,那么就可以引入人工干預,這也就是自動駕駛等場景所需要的AI Safety。
3.機器學習中的兩種不確定性
(1)偶然不確定性
偶然不確定性是由數據集引入的,而不是模型本身帶有的。即數據中的噪音使得數據有了一定bias,進而影響模型預測。
(2)認知不確定性
認知不確定性是由模型引入的,也就是模型遇到完全沒有遇到的數據的分布時,就會產生較大的認知不確定性。
而機器學習的預測不確定性是由(1)和(2)共同構成。
舉個例子。
M1
和M2
是沒有認知不確定性的。因為對於x
屬於某個分類的認識,M1
和M2
模型都給出了確定的判斷結果,沒有不穩定性。也就是M1
和M2
是認識x
的,就算M2
無法分辨x
的類屬,但是M2
是認識x
的,只是不知道它的類屬而已。M3
對x
的認識是不穩定的,即有時給出類屬1的結果,有時給出類屬2的結果,可認為M3
模型不認識x。如果是MLE
或MAP
的模型,那么一定給出的是確定的分類結果,所以體現不出對x
的認知不確定性。所以,我們需要用Bayesian
模型來表達認知的不確定性。
而預測的不確定性是由認知不確定性和偶然不確定性構成,因此M2
和M3
都是預測不確定的。因此,Bayesian
模型就是希望能夠在輸出預測值時,將對這個預測值的不確定程度也表達出來。
4.后驗分布計算方法
Bayesian的核心就是求解后驗分布\(P(θ|D)\),但是很難求。原因如下:
\(P(\theta|D)=\frac{P(D|\theta)P(\theta)}{P(D)}\) 的分母\(P(D)\)是很難求的。假設\(θ\)具有 \(\theta_1,...,\theta_n\)共\(n\)個參數,那么\(P(D)\)的計算如下:
在深度網絡中,參數規模上萬,那么要積分萬次,因此\(P(D)\)難以求解。
而MAP
中,求解的是\(argmaxP(θ|D)\)。對於所有的\(θ\)而言,分母\(P(D)\)是相同的,所以只需要求分子的值就能找出最大的\(P(θ|D)\)。
然而,Bayesian
模型要的是后驗分布,而不是max,並且直接計算是不可行的,所以就必須采用近似的方法解決后驗分布的計算問題。
有兩種近似計算方法:
(1)馬爾可夫鏈蒙特卡洛采樣
這種方法的本質是對\(θ\)進行采樣。Monte Carlo Sampling
是指對\(θ\)的多次采樣,相互之間是獨立的。但是這種采樣會效率較低。因為\(θ\)的采樣結果是有啟發性的,例如某個\(θ\)的值對預測結果很好,那么該\(θ\)值附近的其他\(θ\)值的質量應該也不錯。因此馬爾可夫鏈被引入,即本次采樣只受上一次采樣結果的影響。例如采樣多次,每次采樣依賴於前一次采樣\(θ->θ'->......->θ''''''\)。
MCMC的算法有很多。這些采樣的方法都是無偏的。最為經典的就是Gibbs Sampling
,其實就是coordinate descent
思想的應用,即采樣一個參數\(θ_i\)時,固定其他所有參數\(θ\)。然后再固定\(θ_i\)和除了\(θ_j\)的參數,去采樣\(θ_j\)。不斷循環,直到收斂。因為Markov Chain是收斂的,所以最后會收斂,證明過程略。只是這個收斂速度不會很快。還有很多其他更快的采樣方法,例如對Gibbs Sampling
改進的Collapse Gibbs Sampling
。
這些算法的具體內容本文不進行介紹。這里只是對MCMC的基本原理介紹一下。
在用Bayesian進行預測時,假設對\(θ\)采樣了\(T\)次,即\(\theta_1,...,\theta_n\)。每個\(\theta^t\)都有\(n\)維。即模型中的參數共有\(n\)個。
預測結果本來應該是\(\int_{\theta}P(y|x)P(\theta|D)d\theta\),即以后驗概率\(P(\theta|D)\) 為權重,對各個\(\theta^{t}\)預測結果的加和。當\(θ\)為一個分布時,應該是積分形式。但是問題出在后驗概率\(P(\theta^t|D)\) 無法求解,因為每個\(\theta^t\)都有\(n\)維,無法利用公式
進行求解。
因此,MCMC
按照后驗概率采樣出了一些\(\theta^1...\theta^T\)后,預測結果就可以寫為如下近似形式:\(\frac{1}{T}\sum_{t=1}^{T}P(y|x;\theta^t)\),而\(\theta^t\)是服從后驗概率\(P(\theta^t|D)\)采樣得到的。
最后,前面解釋了就算用最原始的坐標下降法,也是能夠在很多輪的采樣后,讓預測結果收斂。那么之前未收斂階段的采樣結果就要被丟棄,這個過程稱為采樣過程中的Burn-in
period。即經過了Burn-in
period之后的采樣值)\(\theta^t\)才會被用於輸出預測結果。
(2)變分推斷variational inference
與采樣方法不同,變分推斷屬於有偏估計。因為MCMC在采樣的數量不斷增大的過程中,預測的結果是逐漸與真實情況貼近的。而變分推斷是用一個簡單的分布去模擬難以求解的后驗分布,所以這種簡化一定會造成偏差,是有偏估計。
其基本思想就是用簡單的分布函數\(q(θ)\)去近似后驗概率\(P(θ|D)\)。很多時候用的是meanfield VI,即假設多個\(q(θ)\)是相互獨立的。例如:
對於后驗分布\(P(θ|D)\),我們用了三個簡單\(q\)分布去近似,且假設了這些分布是相互獨立的。第一和第三個分布是高斯分布,中間的是伯努利分布。
那么現在的問題就是一個尋找\(\mu_1, \sigma_1, \mu_2, \sigma_2\)以及\(\gamma\)的優化問題。即一個分布在已知其形式是高斯還是伯努利的情況下,再知道分布參數,以\(\mu_1, \sigma_1, \mu_2, \sigma_2\)及\(\gamma\)等,那么這個分布就是唯一確定的了。我們的目的就是找到這些能夠近似后驗分布的簡單分布,那就需要確定這些簡單分布的形式,並求出分布參數。而簡單分布的形式相當於就是我們引入的先驗,這就會對估計造成有偏影響。在變分法中,我們只能在預先定義了簡單分布的類型后,去求解最優化的分布參數。
那么具體的優化目標如何定義呢?因為衡量兩個分布是否近似的最常見的方法就是用KL
散度,因此可以從KL
散度推導出優化目標函數。
最后一項不含\(θ\),即對於所有的θ而言,都是相同的,因此在求解最優參數,\(\mu_1, \sigma_1, \mu_2, \sigma_2\)以及\(γ\)時,可以省略。
於是我們只要最大化括號內的部分\(E_q[logP(\theta,D)]+E_q[logq(\theta)]\),就可以讓KL
散度最小化,即讓兩個分布最接近。這部分也被稱為ELBO
。因此,變分推斷就變成了對ELBO
部分的最大化求解問題了。最終的求解過程,就是一個不斷化簡的過程,將θ
原有參數用新參數,\(\mu_1, \sigma_1, \mu_2, \sigma_2\)以及γ不斷替換的過程。此時,再求解最優的\(\mu_1, \sigma_1, \mu_2, \sigma_2\),以及\(γ\),就可以用坐標下降法來求解了。即固定其他參數,對某個參數求導,令導數為0等,不斷循環更新,直到收斂。
5貝葉斯神經網絡VS普通神經網絡
一圖就可以概括了。
普通神經網絡的所有參數都是一個值,網絡的預測輸出也是一個值。
貝葉斯神經網絡的所有參數都是一個分布,網絡的預測輸出也是一個分布。
從MLE
、MAP
、Bayesian
的角度再來理解一下這個事情。一個普通的神經網絡,它做的事情就是最大化地擬合數據樣本,也就是所謂的MLE
最大似然。如果給這個神經網絡中的參數添加一些先驗的約束,例如,將先驗概率設為權重w
符合均值為0
,方差為\(\frac{1}{\lambda}I^2\) 的高斯分布,則就相當於添加了 \(\lambda W^TW\) 的L2
正則化項。也就是對參數正則化后的神經網絡可看作是MAP
。而不論是MLE
還是MAP
都是上圖的左側部分。
相比於前兩者,貝葉斯方法求解的不是一個極值點,而是要每個參數的整個分布,見上圖右側,所以計算代價是很大的。這也是貝葉斯神經網絡應用的一個障礙。
6貝葉斯深度學習的實現方式
前面已經介紹了了貝葉斯神經網絡所求解的是每個參數的分布,因此計算量很大,要想構建層數很多的網絡是不現實的。
如果層數不多,則可以用Pyro
等概率編程工具。基本方法就是給出網絡本身的先驗定義,然后給出變分推斷中的q
函數的定義,那么Pyro
會自動用變分法求解出近似值的。通常假設的是網絡參數都服從高斯分布,然后在輸入數據后要學習到一個后驗分布。我們需要對這個后驗分布進行變分推斷的近似。通常也會假設網絡參數符合高斯分布(簡單分布),然后用這個高斯分布區近似后驗分布,優化的loss就是ELBO
。最后,就能夠得到每個參數所符合的一個合理高斯分布,而這些參數的高斯分布式能夠近似出后驗分布的。
另一種,貝葉斯深度學習的近似是論文Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning
提出的。也就是將采用MC Dropout
視為對貝葉斯模型的近似。
其本質是在訓練和測試階段都打開dropout
。而MC Dropout
相當於下面式子的效果,即讓每個參數\(W_i\)以一定概率有非0值或0值,並讓這種選擇符合伯努利分布。
上式\(M_i\)為參數的真實值,而diag
對角陣中的對角元素\(Z_{ij}\)服從伯努利分布。
在這種情況下,深度網絡開啟MC Dropout
后,就相當於是在用伯努利分布(簡單分布)去近似每個參數的后驗分布,這就是變分推斷。因此,有MC Dropout
的深度網絡相當於近似了一個貝葉斯模型的變分推斷。與上面提到的用Pyro實現的貝葉斯神經網絡的區別僅在於,Dropout
是用伯努利分布作為簡單分布區近似后驗分布,而不是高斯分布而已。
因此,帶MC Dropout
的網絡學到了每個參數的伯努利分布參數p
,但是網絡的輸出還是一個值。為了得到一個分布,就必須在測試的預測階段(前向傳播)中,也要開啟Dropout
,並運行多次,例如100次,然后對100個結果求均值和方差,形成一個分布。
實驗效果如下圖:
在數據樣本集中的區域,預測結果的不確定性是較低的,而在樣本稀疏區域,不確定性呈扇形擴大了。這也非常符合現實生活。例如天氣預報,總是預測明天的,比預測后天的要有把握。
最后,在樣本集較小或imbalance
的樣本集上,用貝葉斯神經網絡的效果要更好,這也變相解釋了為什么Dropout
對小樣本和imbalance
樣本集有效果的原因。