基于变分推断的贝叶斯神经网络(Bayesian Neural Networks via Variational Inference)算法原理与不确定性量化机制
题目描述
在传统深度神经网络中,模型参数通常是确定性的点估计。然而,这种确定性模型无法量化预测的不确定性(包括认知不确定性和偶然不确定性),这在许多安全敏感的应用中至关重要。贝叶斯神经网络将神经网络中的权重和偏置视为概率分布而非固定值,从而能捕捉模型的不确定性。但直接对BNN进行贝叶斯推断(计算后验分布)是难以处理的。本题目将讲解如何使用变分推断来近似求解BNN的后验分布,从而实现一个可训练、能输出预测不确定性的贝叶斯神经网络。
循序渐进讲解
第一步:贝叶斯神经网络的核心思想与传统网络的对比
-
传统神经网络:
- 参数:权重 \(w\) 是一个确定的数值(例如,通过梯度下降学到的一个最优值)。
- 输出:对于输入 \(x\),输出一个确定的预测值(例如分类概率或回归值)。
- 局限:无法知道模型对自己预测的“信心”或“不确定性”。例如,面对训练数据分布之外的输入,模型仍会给出一个高置信度的错误预测。
-
贝叶斯神经网络:
- 参数:权重 \(w\) 被视为随机变量,服从一个先验分布 \(p(w)\)(例如,均值为0的高斯分布)。
- 目标:在观察到数据集 \(D = \{ (x_i, y_i) \}_{i=1}^{N}\) 后,计算权重的后验分布 \(p(w | D)\)。
- 预测:对于新输入 \(x^*\),预测不再是一个点,而是一个分布。预测分布通过对所有可能的权重积分得到:
\[ p(y^* | x^*, D) = \int p(y^* | x^*, w) \, p(w | D) \, dw \]
这个积分称为**贝叶斯模型平均**。预测分布的方差可以量化不确定性。
第二步:变分推断(Variational Inference)—— 近似后验的核心工具
直接计算真实后验 \(p(w | D)\) 是难解的(因为涉及到复杂模型证据的计算)。变分推断将其转化为一个优化问题:
- 引入变分分布:我们选择一个参数化的分布族 \(q_\theta(w)\)(例如高斯分布),其参数为 \(\theta\)(例如均值和方差)。
- 优化目标——最小化KL散度:我们寻找参数 \(\theta\),使得 \(q_\theta(w)\) 尽可能接近真实后验 \(p(w | D)\)。这等价于最大化证据下界:
\[ \text{ELBO}(\theta) = \mathbb{E}_{q_\theta(w)}[\log p(D | w)] - \text{KL}(q_\theta(w) \| p(w)) \]
- 第一项(似然期望):鼓励变分分布 \(q\) 选择那些能使数据似然 \(p(D|w)\) 高的权重。这对应传统训练中的拟合数据。
- 第二项(负KL散度):鼓励变分分布 \(q\) 不要偏离先验 \(p(w)\) 太远。这起到了正则化的作用,防止过拟合。
- 最大化ELBO就是在拟合数据和保持模型简单之间取得平衡,最终得到一个近似后验 \(q_\theta(w) \approx p(w | D)\)。
第三步:具体实现——重参数化技巧与损失函数构造
为了用随机梯度下降优化ELBO,需要解决两个问题:如何从 \(q_\theta(w)\) 采样以计算期望的梯度,以及如何参数化 \(q\)。
- 变分分布的参数化:
- 对于神经网络中的每一个权重参数 \(w_j\),我们不再学习一个标量值,而是学习其变分分布的参数。最常见的是使用对角高斯分布:
\[ q_\theta(w_j) = \mathcal{N}(w_j | \mu_j, \sigma_j^2) \]
其中 $ \theta = \{ \mu_j, \sigma_j \} $ 就是我们需要学习的参数(每个权重对应一个均值 $ \mu $ 和一个标准差 $ \sigma $)。
- 这意味着网络的参数量翻倍(每个权重多了 \(\sigma\)),但带来了不确定性量化的能力。
- 重参数化技巧:
- 直接对 \(w \sim q_\theta(w)\) 采样是一个随机操作,其梯度无法直接反向传播。
- 技巧:引入一个辅助的随机噪声变量 \(\epsilon \sim \mathcal{N}(0,1)\),将采样过程改写为:
\[ w = \mu + \sigma \odot \epsilon \]
其中 $ \odot $ 是逐元素乘法。这样,随机性被转移到了 $ \epsilon $,而 $ w $ 相对于参数 $ (\mu, \sigma) $ 的梯度路径就是确定性的,可以正常反向传播。
- 损失函数:
- 我们的目标是最小化负的ELBO(即损失函数 \(\mathcal{L} = -\text{ELBO}\)):
\[ \mathcal{L}(\theta) = -\mathbb{E}_{q_\theta(w)}[\log p(D | w)] + \text{KL}(q_\theta(w) \| p(w)) \]
- 第一项(负对数似然):对于一个小批量数据 \(\{(x_i, y_i)\}\),我们采样一组权重 \(w \sim q_\theta(w)\),用这组权重进行一次前向传播,计算预测与真实标签的损失(例如交叉熵或均方误差)。这给出了似然项的一个无偏估计。
- 第二项(KL散度):由于我们选择了高斯先验(例如 \(p(w) = \mathcal{N}(0,1)\))和高斯变分后验,这个KL散度有解析解。对于每个权重参数 \(w_j\):
\[ \text{KL}(\mathcal{N}(\mu_j, \sigma_j^2) \| \mathcal{N}(0,1)) = \frac{1}{2} (\mu_j^2 + \sigma_j^2 - \log(\sigma_j^2) - 1) \]
将所有参数的KL散度求和即可。
第四步:训练与预测(不确定性量化)
-
训练过程:
- 在每个训练批次中:
a. 从标准高斯分布采样噪声 \(\epsilon\)。
b. 通过重参数化得到当前批次的权重样本:\(w = \mu + \sigma \odot \epsilon\)。
c. 用这组权重 \(w\) 对输入做前向传播,计算负对数似然损失。
d. 计算当前变分分布与先验分布的KL散度损失。
e. 总损失 = 负对数似然损失 + KL散度损失。
f. 反向传播,更新变分参数 \(\mu\) 和 \(\sigma\)。
- 在每个训练批次中:
-
预测与不确定性量化:
- 训练完成后,我们得到了近似后验 \(q_{\theta^*}(w)\)。
- 对于一个新输入 \(x^*\),进行 T次前向传播(蒙特卡洛采样):
对于 \(t=1\) 到 \(T\):
采样一组权重:\(w^{(t)} \sim q_{\theta^*}(w)\)。
计算预测:\(\hat{y}^{(t)} = f_{w^{(t)}}(x^*)\)。 - 预测结果:
- 预测均值(点估计):\(\frac{1}{T} \sum_{t=1}^{T} \hat{y}^{(t)}\)
- 预测不确定性:用 \(\{ \hat{y}^{(t)} \}\) 的方差来衡量。如果是分类任务,可以计算预测概率的熵。这捕捉了模型因参数不确定性而产生的认知不确定性(模型不知道的程度)。
总结
通过以上步骤,我们将一个传统神经网络转化为了一个基于变分推断的贝叶斯神经网络。其核心是用参数化的变分分布去逼近权重参数的真实贝叶斯后验,并通过最大化ELBO进行训练。在预测时,通过多次采样进行蒙特卡洛积分,既能得到预测值,又能得到模型的不确定性估计。这种方法虽然增加了计算开销(参数量翻倍,需要多次采样),但在需要模型可靠性和不确定性评估的领域(如自动驾驶、医疗诊断)具有重要价值。