目錄html
本文簡單介紹什麼是貝葉斯深度學習(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}\]ide
若是 \(z\) 是離散型變量,則將式(2)中分母積分符號 \(\int\) 改爲求和符號 \(\sum\) 便可。(機率分佈中的機率質量函數通常用大寫字母 \(P(\cdot)\) 表示,機率密度函數通常用小寫字母 \(p(\cdot)\) 表示,這裏爲了簡便,很少作區分,用連續型變量舉例)函數
一個最簡單的神經元網絡結構以下圖所示:
post
在深度學習中,\(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)都應該是一個分佈,而不是一個肯定的值。(這很貝葉斯。)以下圖所示,給出一個直觀的例子:
圖 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 中的介紹。第(3)種,蒙特卡羅 dropout,簡單而強大,不改變通常神經網絡結構,只是要求神經網絡帶 dropout 層,訓練過程和通常神經網絡一致,只是測試的時候也打開 dropout,而且測試時須要屢次對同一輸入進行前向傳播,而後能夠計算平均和統計方差。
經過以前的介紹,咱們也能夠發現,在深度學習的基礎上把權重和偏置變爲 distribution 就是貝葉斯深度學習。
貝葉斯深度學習還有如下優勢:
(1)貝葉斯深度學習比非貝葉斯深度學習更加 robust。由於咱們能夠採樣一次又一次,細微改變權重對深度學習形成的影響在貝葉斯深度學習中能夠獲得解決。
(2)貝葉斯深度學習能夠提供不肯定性(uncertainty),非 softmax 生成的機率。詳情參見 Deep Learning Is Not Good Enough, We Need Bayesian Deep Learning for Safe AI。
請不要混淆貝葉斯神經網絡和貝葉斯網絡這二者的概念。
「貝葉斯網絡(Bayesian network),又稱信念網絡(belief network)或是有向無環圖模型(directed acyclic graphical model),是一種機率圖型模型。」
而貝葉斯神經網絡(Bayesian neural network)是貝葉斯和神經網絡的結合,貝葉斯神經網絡和貝葉斯深度學習這兩個概念能夠混着用。
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
貝葉斯網絡 -- 百度百科