貝葉斯深度學習(bayesian deep learning)

wuliytTaotao發表於2019-01-17

  本文簡單介紹什麼是貝葉斯深度學習(bayesian deep learning),貝葉斯深度學習如何用來預測,貝葉斯深度學習和深度學習有什麼區別。對於貝葉斯深度學習如何訓練,本文只能大致給個介紹。(不敢誤人子弟)

  在介紹貝葉斯深度學習之前,先來回顧一下貝葉斯公式。

貝葉斯公式

\[p(z|x) = \frac{p(x, z)}{p(x)} = \frac{p(x|z)p(z)}{p(x)} \tag{1}\]

其中,\(p(z|x)\) 被稱為後驗概率(posterior),\(p(x, z)\) 被稱為聯合概率,\(p(x|z)\) 被稱為似然(likelihood),\(p(z)\) 被稱為先驗概率(prior),\(p(x)\) 被稱為 evidence。

  如果再引入全概率公式 \(p(x) = \int p(x|z)p(z) dz\),式(1)可以再變成如下形式:
\[p(z|x) = \frac{p(x|z)p(z)}{\int p(x|z)p(z) dz} \tag{2}\]

  如果 \(z\) 是離散型變數,則將式(2)中分母積分符號 \(\int\) 改成求和符號 \(\sum\) 即可。(概率分佈中的概率質量函式一般用大寫字母 \(P(\cdot)\) 表示,概率密度函式一般用小寫字母 \(p(\cdot)\) 表示,這裡為了簡便,不多做區分,用連續型變數舉例)

什麼是貝葉斯深度學習?

  一個最簡單的神經元網路結構如下圖所示:


貝葉斯深度學習(bayesian deep learning)
圖 1 神經元

  在深度學習中,\(w_i, (i = 1,...,n)\)\(b\) 都是一個確定的值,例如 \(w_1 = 0.1, b = 0.2\)。即使我們通過梯度下降(gradient decent)更新 \(w_i = w_i - \alpha\cdot\frac{\partial J}{\partial w_i}\),我們仍未改變 “\(w_i\)\(b\) 都是一個確定的值” 這一事實。

  那什麼是貝葉斯深度學習?將 \(w_i\)\(b\) 由確定的值變成分佈(distributions),這就是貝葉斯深度學習。

  貝葉斯深度學習認為每一個權重(weight)和偏置(bias)都應該是一個分佈,而不是一個確定的值。(這很貝葉斯。)如下圖所示,給出一個直觀的例子:


貝葉斯深度學習(bayesian deep learning)
圖 2 貝葉斯深度學習示意圖

圖 2 展示了一個結構為 4x3x1 的貝葉斯神經網路。(輸入層神經元個數為 4,中間隱含層神經元個數為 3,輸出層神經元個數為 1。)

貝葉斯深度學習如何進行預測?

  說了這麼多,貝葉斯神經網路該怎麼用?網路的權重和偏置都是分佈,分佈咋用,取樣唄。想要像非貝葉斯神經網路那樣進行前向傳播(feed-forward),我們可以對貝葉斯神經網路的權重和偏置進行取樣,得到一組引數,然後像非貝葉斯神經網路那樣用即可。

  當然,我們可以對權重和偏置的分佈進行多次取樣,得到多個引數組合,引數的細微改變對模型結果的影響在這裡就可以體現出來。這也是貝葉斯深度學習的優勢之一,多次取樣最後一起得到的結果更加 robust。

貝葉斯深度學習如何進行訓練?

  對於非貝葉斯神經網路,在各種超引數固定的情況下,我們訓練一個神經網路想要的就是各個層之間的權重和偏置。對於貝葉斯深度學習,我們訓練的目的就是得到權重和偏置的分佈。這個時候就要用到貝葉斯公式了。

  給定一個訓練集 \(D= \{( \bm{x}_1, y_1), (\bm{x}_2, y_2),..., (\bm{x}_m, y_m)\}\),我們用 \(D\) 訓練一個貝葉斯神經網路,則貝葉斯公式可以寫為如下形式:
\[ p(w|\bm{x}, y) = \frac{p(y|\bm{x}, w)p(w)}{\int p(y|\bm{x}, w)p(w) dw} \tag{3} \]

  式(3)中,我們想要得到的是 \(w\) 的後驗概率 $p(w|\bm{x}, y) $,先驗概率 \(p(w)\) 是我們可以根據經驗也好瞎猜也好是知道的,例如初始時將 \(p(w)\) 設成標準正太分佈,似然 \(p(y|\bm{x}, w)\) 是一個關於 \(w\) 的函式。當 \(w\) 等於某個值時,式(3)的分子很容易就能算出來,但我們想要得到後驗概率 \(p(w|\bm{x}, y)\),按理還要將分母算出來。但事實是,分母這個積分要對 \(w\) 的取值空間上進行,我們知道神經網路的單個權重的取值空間可以是實數集 \(R\),而這些權重一起構成的空間將相當複雜,基本沒法積分。所以問題就出現在分母上。

  貝葉斯深度學習的訓練方法目前有以下幾種:(請參考Deep Bayesian Neural Networks. -- Stefano Cosentino
(1)Approximating the integral with MCMC
(2)Using black-box variational inference (with Edward)
(3)Using MC (Monte Carlo) dropout

  第(1)種情況最好理解,用 MCMC(Markov Chains Monte Carlo) 取樣去近似分母的積分。第(2)種直接用一個簡單點的分佈 \(q\) 去近似後驗概率的分佈 \(p\),即不管分母怎麼積分,直接最小化分佈 \(q\)\(p\) 之間的差異,如可以使用 KL散度 計算。詳情可以參考貝葉斯程式設計框架 Edward 中的介紹。

貝葉斯深度學習和深度學習有什麼區別?

  通過之前的介紹,我們也可以發現,在深度學習的基礎上把權重和偏置變為 distribution 就是貝葉斯深度學習。

  貝葉斯深度學習還有以下優點:
(1)貝葉斯深度學習比非貝葉斯深度學習更加 robust。因為我們可以取樣一次又一次,細微改變權重對深度學習造成的影響在貝葉斯深度學習中可以得到解決。
(2)貝葉斯深度學習可以提供不確定性(uncertainty),非 softmax 生成的概率。詳情參見 Deep Learning Is Not Good Enough, We Need Bayesian Deep Learning for Safe AI

貝葉斯神經網路(Bayesian neural network)和貝葉斯網路(Bayesian network)?

  請不要混淆貝葉斯神經網路和貝葉斯網路這兩者的概念。

  “貝葉斯網路(Bayesian network),又稱信念網路(belief network)或是有向無環圖模型(directed acyclic graphical model),是一種概率圖型模型。”

  而貝葉斯神經網路(Bayesian neural network)是貝葉斯和神經網路的結合,貝葉斯神經網路和貝葉斯深度學習這兩個概念可以混著用。

References

Eric J. Ma - An Attempt At Demystifying Bayesian Deep Learning
Deep Bayesian Neural Networks. -- Stefano Cosentino
Edward -- A library for probabilistic modeling, inference, and criticism.
Deep Learning Is Not Good Enough, We Need Bayesian Deep Learning for Safe AI
貝葉斯網路 -- 百度百科

相關文章