摘要:常規的神經網絡權重是一個確定的值,貝葉斯神經網絡(BNN)中,將權重視為一個概率分布。BNN的優化常常依賴於重參數技巧(reparameterization trick),本文對該優化方法進行概要介紹。
論文地址:http://proceedings.mlr.press/v37/blundell15.pdf
網絡權重的點估計
常規神經網絡可以基於MLE或MAP對權重作點估計。
基於MLE(maximum likelihood estimation):
基於MAP(maximum a posteriori):
對權重施加先驗,等價於進行正則化。如果施加的是高斯先驗,相當於進行L2正則,如果是一個laplace先驗,相當於L1正則。
貝葉斯方法
貝葉斯推斷在給定訓練數據的情況下,計算網絡參數的后驗概率,理論上可以通過以下方式對樣本標簽所服從的分布進行預測:
Hinton等人提出對網絡權重的貝葉斯后驗分布進行變分估計,變分學習尋找參數θ,來最小化分布q(w|θ)和權重真實后驗分布之間的KL距離,這里的參數θ可理解為w所服從分布的參數,比如高斯的μ和σ:
這個loss函數就是變分自由能(variational free energy),也稱為期望下界(expected lower bound, ELBO)。
可以將loss函數簡記為:
損失函數的后半部分代表與數據相關,稱之為似然損失,前半部分與先驗有關,稱為先驗損失。該損失也被稱為最小描述長度(minimum description length, MDL)
無偏蒙特卡洛梯度
我們使用梯度下降的方式對上述損失進行優化。
在特定的條件下,期望的微分等於微分的期望。
命題1:假設ε服從分布q(ε),令w = t(θ, ε),其中t(θ, ε)是一個確定性函數,假如w的邊緣密度q(w|θ)滿足q(ε) dε = q(w|θ) dw,那么:
證明:
確定性函數 t(θ, ε)將一個隨機噪聲和變分后驗參數轉換為一個變分后驗。
令,我們可以將命題1用於優化。通過蒙特卡洛采樣,可以通過反向傳播算法對網絡進行優化。
命題1就是所謂的重參數技巧(reparameterization trick)。
變分高斯后驗
基於高斯后驗的變分學習訓練過程如下:
這里就是常規反向傳播算法得到的梯度。
基於tensorflow probability的貝葉斯全連接網絡示例
import tensorflow as tf import tensorflow_probability as tfp model = tf.keras.Sequential([ tfp.layers.DenseReparameterization(512, activation=tf.nn.relu), tfp.layers.DenseReparameterization(10), ]) logits = model(features) neg_log_likelihood = tf.nn.softmax_cross_entropy_with_logits( labels=labels, logits=logits) kl = sum(model.losses)
# loss由兩部分構成:(1)負對數似然(2)參數分布與其先驗分布(regularizer)之間的KL距離
loss = neg_log_likelihood + kl
train_op = tf.train.AdamOptimizer().minimize(loss)