贝叶斯学习
概述
贝叶斯学习将概率推理作为机器学习的基础框架。与点估计方法不同,贝叶斯方法维护参数的完整后验分布,自然地量化不确定性。本文涵盖贝叶斯推断、共轭先验、MCMC、变分推断、贝叶斯神经网络和高斯过程。
派系视角:本文聚焦数学推导与算法细节;如需从 Domingos 五学派的角度看贝叶斯派整体(图模型 / 概率编程 / 贝叶斯深度学习等子分支),见 The Master Algorithm 笔记本 — 贝叶斯派。
1. 贝���斯推断基���
1.1 贝叶斯公式
\[
p(\theta | D) = \frac{p(D | \theta) \, p(\theta)}{p(D)}
\]
| 项 | 名称 | 含义 |
|---|---|---|
| \(p(\theta \| D)\) | 后验 (Posterior) | 观察数据后对参数的信念 |
| \(p(D \| \theta)\) | 似然 (Likelihood) | 给定参数,数据出现的概率 |
| \(p(\theta)\) | 先验 (Prior) | 观察数据前对参数的信念 |
| \(p(D)\) | 证据 (Evidence) | 边际似然,归一化常数 |
其中证据(边际似然):
\[
p(D) = \int p(D|\theta) p(\theta) \, d\theta
\]
1.2 贝叶斯预测
预测时不使用单一参数估计,而是对所有可能的参数取加权平均:
\[
p(y^* | x^*, D) = \int p(y^* | x^*, \theta) \, p(\theta | D) \, d\theta
\]
这自然地将参数不确定性传播到预测中��
2. MAP vs MLE
2.1 最大似然估计(MLE)
\[
\hat{\theta}_{MLE} = \arg\max_\theta p(D|\theta) = \arg\max_\theta \sum_{i=1}^{n} \log p(x_i | \theta)
\]
- 忽略先验信息
- 可能过拟合(特别是数据少时)
2.2 最大后验估计(MAP)
\[
\hat{\theta}_{MAP} = \arg\max_\theta p(\theta|D) = \arg\max_\theta \left[\log p(D|\theta) + \log p(\theta)\right]
\]
- 先验起正则化作用
- 高斯先验 \(\theta \sim \mathcal{N}(0, \sigma^2 I)\) 等价于 L2 正则化
- 拉普拉斯先验 \(\theta \sim \text{Laplace}(0, b)\) 等价于 L1 正则化
2.3 完全贝叶斯 vs 点估计
| 方法 | 使用 | 不确定性 |
|---|---|---|
| MLE | 单一 \(\hat{\theta}\) | 无 |
| MAP | 单一 \(\hat{\theta}\) | 无(通过先验正则化) |
| 完全贝叶斯 | 整个 \(p(\theta\|D)\) | 完整不确定性量化 |
3. 共轭先验
当先验和后验属于同一分布族时,称先验为似然的共轭先验。
| 似然 | 共轭先验 | 后验 | 应用 |
|---|---|---|---|
| 伯努利 \(\text{Ber}(p)\) | Beta \(\text{Beta}(\alpha, \beta)\) | \(\text{Beta}(\alpha+k, \beta+n-k)\) | 硬币偏向 |
| 多项式 | Dirichlet | Dirichlet | 类别概率 |
| 高斯(已知方差) | 高斯 | 高斯 | 均值估计 |
| 高斯(已知均值) | 逆 Gamma | 逆 Gamma | 方差估计 |
| 泊松 | Gamma | Gamma | 频率估计 |
示例:Beta-Bernoulli
投硬币 \(n\) 次,正面 \(k\) 次:
\[
\text{先验}: p \sim \text{Beta}(\alpha, \beta)
\]
\[
\text{后验}: p | \text{data} \sim \text{Beta}(\alpha + k, \beta + n - k)
\]
\[
\text{后验均值}: \hat{p} = \frac{\alpha + k}{\alpha + \beta + n}
\]
当 \(\alpha = \beta = 1\)(均匀先验),观察 10 次 7 正面:
\[
\hat{p}_{MAP} = 7/10, \quad \hat{p}_{Bayes} = 8/12 = 0.667
\]
贝叶斯估计向先验(0.5)收缩——自动正则化。
4. MCMC 方法
当后验分布没有解析形式时,使用马尔可夫链蒙特卡洛采样。
4.1 Metropolis-Hastings
def metropolis_hastings(log_posterior, initial, n_samples, proposal_std=1.0):
samples = [initial]
current = initial
for _ in range(n_samples):
# 提议新状态
proposal = current + np.random.normal(0, proposal_std, size=current.shape)
# 接受概率
log_alpha = log_posterior(proposal) - log_posterior(current)
# 接受或拒绝
if np.log(np.random.uniform()) < log_alpha:
current = proposal
samples.append(current)
return np.array(samples)
4.2 Gibbs 采样
逐个采样每个维度,条件于其他维度:
\[
\theta_j^{(t+1)} \sim p(\theta_j | \theta_1^{(t+1)}, \ldots, \theta_{j-1}^{(t+1)}, \theta_{j+1}^{(t)}, \ldots, \theta_d^{(t)}, D)
\]
适用条件:每个条件分布容易采样。
4.3 Hamiltonian Monte Carlo(HMC)
利用哈密顿力学模拟,提高高维空间的采样效率:
- 将参数空间视为物理系统
- 引入"动量"变量辅助探索
- NUTS(No-U-Turn Sampler)自动调参
# PyMC 示例
import pymc as pm
with pm.Model() as model:
# 先验
mu = pm.Normal("mu", mu=0, sigma=10)
sigma = pm.HalfNormal("sigma", sigma=5)
# 似然
y_obs = pm.Normal("y", mu=mu, sigma=sigma, observed=data)
# NUTS 采样
trace = pm.sample(2000, tune=1000)
# 后验分析
pm.plot_trace(trace)
pm.summary(trace)
4.4 MCMC 诊断
| 诊断 | 方法 | 良好标准 |
|---|---|---|
| 收敛性 | \(\hat{R}\)(Gelman-Rubin 统计量) | \(\hat{R} < 1.01\) |
| 有效样本量 | ESS (Effective Sample Size) | ESS > 400 |
| 自相关 | Autocorrelation plot | 快速衰减 |
| 轨迹图 | Trace plot | 平稳、混合良好 |
5. 变分推断(Variational Inference)
5.1 核心思想
用一个简单分布 \(q(\theta)\) 逼近真实后验 \(p(\theta|D)\),通过最小化 KL 散度:
\[
q^*(\theta) = \arg\min_{q \in \mathcal{Q}} \text{KL}(q(\theta) \| p(\theta|D))
\]
等价于最大化 ELBO(Evidence Lower Bound):
\[
\text{ELBO}(q) = \mathbb{E}_{q}[\log p(D, \theta)] - \mathbb{E}_{q}[\log q(\theta)] = \mathbb{E}_{q}[\log p(D|\theta)] - \text{KL}(q(\theta) \| p(\theta))
\]
\[
\log p(D) = \text{ELBO}(q) + \text{KL}(q \| p) \geq \text{ELBO}(q)
\]
5.2 平均场近似(Mean-Field)
假设后验可分解为独立因子:
\[
q(\theta) = \prod_{j=1}^{d} q_j(\theta_j)
\]
每个因子的最优解:
\[
\log q_j^*(\theta_j) = \mathbb{E}_{q_{-j}}[\log p(\theta, D)] + \text{const}
\]
5.3 MCMC vs 变分推断
| 维度 | MCMC | 变分推断 |
|---|---|---|
| 准确性 | 渐近精确 | 近似(受 \(\mathcal{Q}\) 限制) |
| 速度 | 慢 | 快 |
| 可扩展性 | 差(高维困难) | 好 |
| 诊断 | 有标准方法 | 难以诊断近似质量 |
| 适用 | 小规模、需要精确后验 | 大规模、快速推断 |
6. 贝叶斯神经网络(BNN)
6.1 动机
标准神经网络给出点预测,无法量化不确定性。BNN 将权重视为随机变量:
\[
p(w|D) \propto p(D|w) p(w)
\]
6.2 近似方法
| 方法 | 原理 | 实用性 |
|---|---|---|
| VI (Bayes by Backprop) | 变分推断,重参数化技巧 | 中等 |
| MC Dropout | Dropout 作为近似 VI | 高(简单实现) |
| Deep Ensemble | 多个独立训练的模型 | 高 |
| SWAG | 基于 SGD 轨迹的高斯近似 | 中等 |
MC Dropout:
# 训练时使用 Dropout
# 预测时保持 Dropout 开启,多次前向传播
predictions = []
for _ in range(100):
pred = model(x, training=True) # 保持 Dropout
predictions.append(pred)
mean = np.mean(predictions, axis=0) # 预测均值
std = np.std(predictions, axis=0) # 不确定性
7. ��斯过程(Gaussian Process)
7.1 定义
高斯过程是函数上的分布。任意有限个点上的函数值服从多元高斯分布:
\[
f(x) \sim \mathcal{GP}(m(x), k(x, x'))
\]
其中 \(m(x)\) 是均值函数,\(k(x, x')\) 是核函数。
7.2 GP 回归
给定观测 \((X, y)\),对新输入 \(x^*\) 的预测:
\[
f^* | X, y, x^* \sim \mathcal{N}(\mu^*, \sigma^{*2})
\]
\[
\mu^* = k(x^*, X)[k(X, X) + \sigma_n^2 I]^{-1} y
\]
\[
\sigma^{*2} = k(x^*, x^*) - k(x^*, X)[k(X, X) + \sigma_n^2 I]^{-1} k(X, x^*)
\]
7.3 常用核函数
| 核函数 | 表达式 | 特点 |
|---|---|---|
| RBF(径向基) | \(k(x, x') = \sigma^2 \exp\left(-\frac{\|x-x'\|^2}{2l^2}\right)\) | 平滑,最常用 |
| Matern | \(k(x,x') = \frac{2^{1-\nu}}{\Gamma(\nu)}\left(\frac{\sqrt{2\nu}r}{l}\right)^\nu K_\nu\left(\frac{\sqrt{2\nu}r}{l}\right)\) | 可控平滑度 |
| 线性 | \(k(x, x') = \sigma^2 x^T x'\) | 贝叶斯线性回归 |
| 周期 | \(k(x, x') = \sigma^2 \exp\left(-\frac{2\sin^2(\pi\|x-x'\|/p)}{l^2}\right)\) | 周期性数据 |
7.4 GP 的优缺点
| 优势 | 劣势 |
|---|---|
| 自然的不确定性量化 | 计算复杂度 \(O(n^3)\) |
| 无需指定模型结构 | 不适合大规模数据 |
| 核函数灵活 | 高维输入困难 |
| 小数据表现好 | 核函数选择需要经验 |
参考资料
- "Pattern Recognition and Machine Learning" - Christopher Bishop
- "Machine Learning: A Probabilistic Perspective" - Kevin Murphy
- "Gaussian Processes for Machine Learning" - Rasmussen & Williams
- "Bayesian Reasoning and Machine Learning" - David Barber