概述
贝叶斯估计是统计推断的三大范式之一,与频率学派和似然学派并列。其核心思想是:将参数视为随机变量,利用先验知识结合观测数据获得后验分布。
本系统介绍贝叶斯估计的理论基础,包括与频率学派的核心区别、贝叶斯估计的计算方法、决策理论以及与深度学习的联系。12
频率学派 vs 贝叶斯学派
核心哲学差异
| 方面 | 频率学派 | 贝叶斯学派 |
|---|---|---|
| 参数性质 | 固定常量(但未知) | 随机变量 |
| 信息来源 | 仅来自观测数据 | 先验 + 数据 |
| 估计目标 | 点估计/置信区间 | 后验分布 |
| 评估标准 | 重复采样下的性质 | 自身一致性 |
形式化表述
频率学派(MLE):
贝叶斯学派(后验):
其中:
- :先验分布(Prior)
- :似然函数(Likelihood)
- :后验分布(Posterior)
- :边际似然(Evidence)
贝叶斯估计基本框架
贝叶斯公式
由条件概率定义出发:
共轭先验
共轭先验是指与似然函数共轭的先验分布,使得后验分布与先验分布属于同一分布族。
常见共轭先验对
| 似然函数 | 参数 | 共轭先验 | 后验分布 |
|---|---|---|---|
| 伯努利 | Beta | Beta | |
| 泊松 | Gamma | Gamma | |
| 高斯 | (已知) | Normal | Normal |
| 高斯 | (已知) | Inverse-Gamma | Inverse-Gamma |
| 多项式 | Dirichlet | Dirichlet |
示例:伯努利模型的贝叶斯估计
似然函数:
其中 是成功次数, 是失败次数。
Beta先验:
后验分布:
import numpy as np
from scipy import stats
def bayesian_bernoulli_posterior(N1, N0, a_prior=1, b_prior=1):
"""
伯努利模型的贝叶斯后验计算
Args:
N1: 成功次数
N0: 失败次数
a_prior, b_prior: Beta先验参数
"""
# 后验参数
a_post = a_prior + N1
b_post = b_prior + N0
# 后验分布
posterior = stats.beta(a_post, b_post)
return posterior
# 示例:10次成功,2次失败,均匀先验
posterior = bayesian_bernoulli_posterior(N1=10, N0=2, a_prior=1, b_prior=1)
print(f"后验均值: {posterior.mean():.4f}")
print(f"后验方差: {posterior.var():.4f}")
print(f"95%可信区间: {posterior.interval(0.95)}")最大后验估计(MAP)
MAP估计选择后验概率最大的点:
MAP与MLE的关系:
忽略归一化常数,MAP等价于:
即 带正则化的MLE。
| 正则化 | 先验 | MAP效果 |
|---|---|---|
| (权重衰减) | 高斯先验 | 倾向于小权重 |
| (LASSO) | Laplace先验 | 倾向于稀疏解 |
贝叶斯风险与决策理论
损失函数设计
贝叶斯决策的核心是选择最小化贝叶斯风险的估计量:
其中 是损失函数。
常见损失函数与最优估计
| 损失函数 | 形式 | 最优估计(后验) |
|---|---|---|
| 平方损失 | 后验均值 | |
| 0-1损失 | 后验众数(MAP) | |
| 绝对损失 | $L(\theta, \hat{\theta}) = | \theta - \hat{\theta} |
| 对数损失 | 后验预测分布 |
贝叶斯估计量
定理:在平方损失下,贝叶斯最优估计量是后验均值:
证明:
渐近理论
Bernstein-von Mises定理
定理:在正则性条件下,当样本量 时:
其中:
- :真实参数值
- :Fisher信息矩阵
意义:
- 后验分布渐近于高斯分布
- 后验均值与MLE一致(渐近有效性)
- 后验方差与Cramer-Rao下界一致
拉普拉斯近似
利用后验的渐近高斯性,可以用高斯分布近似后验:
这构成了Laplace近似的理论基础。
import torch
from torch.distributions import MultivariateNormal
def laplace_approximation(log_posterior, theta_init, num_steps=100, lr=0.1):
"""
拉普拉斯近似实现
Args:
log_posterior: 对数后验函数
theta_init: 初始点(通常用MAP)
"""
theta = theta_init.clone().requires_grad_(True)
optimizer = torch.optim.Adam([theta], lr=lr)
# 步骤1:找到MAP点
for _ in range(num_steps):
optimizer.zero_grad()
loss = -log_posterior(theta) # 最小化负对数后验
loss.backward()
optimizer.step()
map_estimate = theta.detach()
# 步骤2:计算Hessian
hessian = torch.autograd.functional.hessian(
lambda x: -log_posterior(x),
map_estimate
)
# 步骤3:近似后验协方差
covariance = torch.linalg.inv(hessian + 1e-6 * torch.eye(len(map_estimate)))
return map_estimate, covariance高维参数估计
稀疏先验与LASSO
在高维问题中(),稀疏先验可以实现变量选择:
Laplace先验:
这导致MAP估计即LASSO:
Horseshoe先验
更灵活的全局-局部收缩先验:
Horseshoe先验在零附近有 Cauchy 尾部,允许强信号保留。
class Horseshoe:
"""
Horseshoe先验实现
适用于高维稀疏信号估计
"""
def __init__(self, tau_init=1.0, lambda_init=None):
self.tau = tau_init
self.lambda_ = lambda_init
def log_prior(self, theta):
"""计算Horseshoe对数先验"""
p = len(theta)
if self.lambda_ is None:
self.lambda_ = torch.ones(p)
# 局部收缩因子
log_lambda = torch.log(self.lambda_ + 1e-8)
# 全局收缩因子
log_tau = torch.log(self.tau + 1e-8)
# Horseshoe先验的对数密度
c2 = 1.0 # scale parameter
log_horse = (
torch.log(self.lambda_) -
0.5 * torch.log(c2 + (theta / (self.tau * self.lambda_))**2)
)
return log_horse.sum() + log_tau与深度学习的联系
权重的不确定性
在贝叶斯深度学习中,神经网络的权重被视为随机变量:
预测分布通过边缘化权重得到:
预测不确定性的分解
总不确定性(偶然不确定性 + 认知不确定性):
偶然不确定性(数据固有噪声):
认知不确定性(模型不确定性):
贝叶斯视角下的正则化
| 正则化技术 | 贝叶斯解释 |
|---|---|
| 权重衰减 | 高斯先验 |
| Dropout | 近似贝叶斯推断 |
| 标签平滑 | Catoni ERM |
| 谱归一化 | Lipschitz先验 |
实践指南
先验选择原则
- 信息性先验:当有领域知识时使用
- 弱信息性先验:Jeffreys先验、Cauchy先验
- 共轭先验:计算便利性优先时使用
- Gelman先验:对于高斯数据使用
计算方法选择
| 问题规模 | 推荐方法 |
|---|---|
| 低维(<100参数) | 精确后验、共轭先验 |
| 中等维度(100-10K) | Laplace近似、变分推断 |
| 高维(>10K) | MC Dropout、SWAG、随机梯度MCMC |
常用软件
- Stan: 马尔可夫链蒙特卡洛(MCMC)
- PyMC: Python贝叶斯建模
- NumPyro: JAX加速的贝叶斯推断
- Laplace-Torch: 神经网络Laplace近似
参考
相关阅读
- 变分推断进阶 — 高维后验的近似方法
- Laplace近似深度解析 — 神经网络的后验近似
- Bayesian Neural Networks — BNN基础
- BNN不确定性量化 — 深度学习中的不确定性估计
- MC Dropout — 实用的贝叶斯近似方法