機器學習中的MLE、MAP、貝葉斯估計


https://zhuanlan.zhihu.com/p/140388925

1.MLE、MAP、Bayesian

首先要明確這三個概念。

MLE是極大似然估計Maximum Likelihood Estimation。其目標為求解:

\[\theta ^* = argmaxP(D|\theta) \]

MAP是最大后驗概率Maximum A Posteriori Estimation。其目標是求解:

\[\theta ^* = argmaxP(\theta|D)=argmaxP(D|\theta)P(\theta) \]

這兩者的區別就是在於求解最優參數時,有沒有加入先驗知識 \(P(\theta)\)。也就是MAP融入了要估計量\(θ\)的先驗分布在其中,因此MAP可以看做規則化的MLE。這也就解釋了,為什么MLE比MAP更容易過擬合。因為MLE在求解最優\(θ\)時,沒有對\(θ\)有先驗的指導,因此D中包括了一些outlier的數據樣本時,就會很輕易讓MLE去擬合outlier樣本。而MAP加入了對θ的先驗指導,例如L2正則化,那么就不易過擬合了。

舉個例子,同樣的邏輯回歸。

未正則化的邏輯回歸就是MLE

正則化的邏輯回歸就是MAP

那么,與上述兩個概念都不同的是貝葉斯模型(Bayesion Model),也被稱為概率圖模型。這里不是指朴素貝葉斯。而是說下面的這種學習思路。

MLEMAP求解的都是一個最優的θ值,在預測時只有最優的θ參與預測過程。貝葉斯模型求解的是\(θ\)的后驗分布\(P(θ|D)\),而不是最大化的后驗分布。因此貝葉斯模型在某種程度上可以看作是一個集成模型,在預測時,讓所有\(θ\)都參與預測,並將預測結果以后驗概率\(P(θ|D)\)作為權重進行加和作為最終預測值

2.Why Bayesian?

上面講述了MLEMAPBayesian的區別,那么為什么要用Bayesian呢?

還舉上面邏輯回歸的例子,如果是邏輯回歸用Bayesian方式來實現,那么訓練所得的就是一個后驗分布\(P(θ|D)\),預測時需要用所有\(θ\)都產生一個預測值,然后用后驗分布加權求和。如果\(θ\)是無窮多的,一般就采樣足夠的次數,再加權求和。

優勢呢?

(1)小數據集時有優勢。因為Bayesian的學習方式是一個集成學習的方式,而集成學習在小樣本上效果是很好的。不易過擬合。

(2)一種很好地融合參數\(θ\)先驗的方式。例如LDA模型在生成文檔時,就對參數做了很多先驗假設。

(3)更好地處理不確定性。無論MLEMAP學習到的參數\(θ\)都是只有一個,因此預測結果是確定性的。這在很多情況下是不合理的。例如,一個分類模型,永遠都會輸出分類概率值最大的那一類的標簽,但是卻不能給出它對這種分類結果有多大的確信度。而Bayesian在給出結果的同時,能夠給出對這種結果的模型確信度。如果確信度比較低,那么就可以引入人工干預,這也就是自動駕駛等場景所需要的AI Safety。

3.機器學習中的兩種不確定性

(1)偶然不確定性

偶然不確定性是由數據集引入的,而不是模型本身帶有的。即數據中的噪音使得數據有了一定bias,進而影響模型預測。

(2)認知不確定性

認知不確定性是由模型引入的,也就是模型遇到完全沒有遇到的數據的分布時,就會產生較大的認知不確定性。

而機器學習的預測不確定性是由(1)和(2)共同構成。

舉個例子。

img

M1M2是沒有認知不確定性的。因為對於x屬於某個分類的認識,M1M2模型都給出了確定的判斷結果,沒有不穩定性。也就是M1M2是認識x的,就算M2無法分辨x的類屬,但是M2是認識x的,只是不知道它的類屬而已。M3x的認識是不穩定的,即有時給出類屬1的結果,有時給出類屬2的結果,可認為M3模型不認識x。如果是MLEMAP的模型,那么一定給出的是確定的分類結果,所以體現不出對x的認知不確定性。所以,我們需要用Bayesian模型來表達認知的不確定性。

而預測的不確定性是由認知不確定性和偶然不確定性構成,因此M2M3都是預測不確定的。因此,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)=\int_{\theta }...\int _{\theta_n}P(D,\theta)d\theta_1d\theta_2...d\theta_n \]

在深度網絡中,參數規模上萬,那么要積分萬次,因此\(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\)維,無法利用公式

\[P(\theta|D)=\frac{P(D|\theta)P(\theta)}{P(D)}, P(D)=\int_{\theta_1}...\int_{\theta_2}P(D,\theta)d\theta_1d\theta_2...\theta_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(\theta_1,\theta_2,\theta_3|D)=q(\theta_1|\mu1,\sigma1)q(\theta_1|\gamma)q(\theta_3|\mu2,\sigma2) \]

對於后驗分布\(P(θ|D)\),我們用了三個簡單\(q\)分布去近似,且假設了這些分布是相互獨立的。第一和第三個分布是高斯分布,中間的是伯努利分布。

那么現在的問題就是一個尋找\(\mu_1, \sigma_1, \mu_2, \sigma_2\)以及\(\gamma\)的優化問題。即一個分布在已知其形式是高斯還是伯努利的情況下,再知道分布參數,以\(\mu_1, \sigma_1, \mu_2, \sigma_2\)\(\gamma\)等,那么這個分布就是唯一確定的了。我們的目的就是找到這些能夠近似后驗分布的簡單分布,那就需要確定這些簡單分布的形式,並求出分布參數。而簡單分布的形式相當於就是我們引入的先驗,這就會對估計造成有偏影響。在變分法中,我們只能在預先定義了簡單分布的類型后,去求解最優化的分布參數。

那么具體的優化目標如何定義呢?因為衡量兩個分布是否近似的最常見的方法就是用KL散度,因此可以從KL散度推導出優化目標函數。

\[KL(q(\theta)||P(\theta|D))=E_q[log(q(\theta)/P(\theta|D))]=-(E_q[logP(\theta,D)]+E_q[logq(\theta)])+E_q(logP(D)) \]

最后一項不含\(θ\),即對於所有的θ而言,都是相同的,因此在求解最優參數,\(\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普通神經網絡

一圖就可以概括了。

img

普通神經網絡的所有參數都是一個值,網絡的預測輸出也是一個值。

貝葉斯神經網絡的所有參數都是一個分布,網絡的預測輸出也是一個分布。

MLEMAPBayesian的角度再來理解一下這個事情。一個普通的神經網絡,它做的事情就是最大化地擬合數據樣本,也就是所謂的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值,並讓這種選擇符合伯努利分布。

\[\begin{array}{l} W_i=M_i\cdot diag([z_{i,j}]_{j=1}^{K_i} ) \\ z_{i,j}\sim Bernoulli(p_i) \ for \ i = 1,...,L,\ j = 1,...K_{i-1} \end{array} \]

上式\(M_i\)為參數的真實值,而diag對角陣中的對角元素\(Z_{ij}\)服從伯努利分布。

在這種情況下,深度網絡開啟MC Dropout后,就相當於是在用伯努利分布(簡單分布)去近似每個參數的后驗分布,這就是變分推斷。因此,有MC Dropout的深度網絡相當於近似了一個貝葉斯模型的變分推斷。與上面提到的用Pyro實現的貝葉斯神經網絡的區別僅在於,Dropout是用伯努利分布作為簡單分布區近似后驗分布,而不是高斯分布而已。

因此,帶MC Dropout的網絡學到了每個參數的伯努利分布參數p,但是網絡的輸出還是一個值。為了得到一個分布,就必須在測試的預測階段(前向傳播)中,也要開啟Dropout,並運行多次,例如100次,然后對100個結果求均值和方差,形成一個分布。

實驗效果如下圖:

img

在數據樣本集中的區域,預測結果的不確定性是較低的,而在樣本稀疏區域,不確定性呈扇形擴大了。這也非常符合現實生活。例如天氣預報,總是預測明天的,比預測后天的要有把握。

最后,在樣本集較小或imbalance的樣本集上,用貝葉斯神經網絡的效果要更好,這也變相解釋了為什么Dropout對小樣本和imbalance樣本集有效果的原因。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM