掘金 人工智能 11小时前
基于MC Dropout的Aleatoric/Epistemic不确定性估计
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了Monte Carlo Dropout(MC Dropout)在深度学习中用于不确定性估计的数学基础和实践方法。MC Dropout通过在推理阶段多次使用Dropout来模拟贝叶斯近似,从而计算预测的不确定性,并将其分解为Aleatoric和Epistemic两种类型。文章提供了详细的公式推导、直观的解释和PyTorch代码示例,帮助读者理解和应用MC Dropout技术。

🧐 MC Dropout的核心在于利用Dropout模拟贝叶斯学习中的模型参数分布,通过多次前向传播来近似计算后验预测分布,从而量化预测的不确定性。

💡 预测不确定性可以分解为两类:Aleatoric不确定性(数据固有的不确定性)和Epistemic不确定性(模型由于缺乏知识带来的不确定性)。

🤔 Aleatoric不确定性衡量的是模型在单次预测中的不确定性,即使模型稳定,数据本身的模糊性也可能导致高Aleatoric不确定性。

🤯 Epistemic不确定性衡量的是模型间的预测差异,当模型对同一输入预测结果差异很大时,说明模型缺乏知识,导致高Epistemic不确定性。

💻 文章提供了PyTorch代码示例,演示了如何在分类任务中使用MC Dropout,并计算和分离Aleatoric和Epistemic不确定性,便于实践应用。

Monte Carlo Dropout( MC Dropout)用于不确定性估计的数学基础,它背后的理论来自一篇非常有影响力的论文:

"Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning " — Yarin Gal & Zoubin Ghahramani, ICML 2016

在贝叶斯学习中,预测的目标是所谓的后验预测分布(posterior predictive distribution)

p(yx,D)=p(yx,θ)p(θD)dθ1Tt=1Tp(yx,θt)p(y | x, D) = \int p(y | x, \theta) \cdot p(\theta | D) \, d\theta \\ \approx \frac{1}{T} \sum_{t=1}^T p(y|x, \theta_t)

🎯 多次 forward(每次用不同 Dropout mask):

总结:利用Dropout 模拟多个可能模型对当前输入的预测,进而估计整体的预测分布。


🧠 不确定性分解公式回顾:

总预测不确定性(预测熵):

H[yx,D]=Ep(θD)[H[yx,θ]]Aleatoric 不确定性+I[y,θx,D]Epistemic 不确定性H[y∣x,D]= \underbrace{\mathbb{E}_{p(\theta|D)}[H[y \mid x, \theta]]}_{\text{Aleatoric 不确定性}} + \underbrace{I[y, \theta \mid x, D]}_{\text{Epistemic 不确定性}}

这个公式可以直译为:

总的不确定性 = 模型之间预测差异有多大+模型内部每次预测平均有多不确定

注意 总预测不确定性(预测熵)H[yx,D]H[y|x,D]是可以直接计算的:

H[p]=plogpH[p] = -p\log p
H[yx,D]=H[Eθp(θD)[p(yx,θ)]]H[y|x,D] = H[E_{\theta\sim p(\theta|D)}[p(y|x,\theta)]]

🎯 一、什么是 Aleatoric(期望熵)?

Ep(θD)[H[yx,θ]]Aleatoric 不确定性\underbrace{\mathbb{E}_{p(\theta|D)}[H[y \mid x, \theta]]}_{\text{Aleatoric 不确定性}}

这部分的直觉是:

🔍 关键理解

即便模型本身很稳定(不同模型预测结果都差不多),但预测分布本身也可能非常模糊(比如分布为 [0.5, 0.5]) ⇒ 说明是 数据本身就模糊、含糊、不可预测 ⇒ 属于 Aleatoric 不确定性。

🧪 类比:

多个医生(模型)独立看了同一张模糊的 X 光片(难以判断),他们一致地觉得不确定 ⇒ 病人问题来自于“图像本身太模糊”。


🧠 二、什么是 Epistemic(互信息)?

I[y,θx,D]=H[yx,D]Ep(θD)[H[yx,θ]]I[y,θ∣x,D]= H[y|x,D] - \mathbb{E}_{p(\theta|D)}[H[y|x, \theta]]

即:总预测熵 减去平均单个模型预测熵

这部分衡量的是:

🧪 类比:

多个医生独立看了一张 X 光图,有的说“有病”,有的说“没病” ⇒ 模型之间不一致,说明医生之间缺乏共同知识 ⇒ 是模型的问题,不是图像的问题。


🔬 三、一个图示直觉(分类任务)

假设你输入图像 x,多次 MC Dropout 得到这些分布(横轴为类别):

情况一:模型稳定但每次都不确定(高 Aleatoric)

模型1模型2模型3
[0.5, 0.5][0.5, 0.5][0.5, 0.5]

情况二:模型都很自信但互相预测不同(高 Epistemic)

模型1模型2模型3
[0.9, 0.1][0.2, 0.8][0.1, 0.9]

总结口语解释

不确定性类型来自哪里?
Aleatoric每次模型预测“自己都不太确定”
Epistemic模型之间意见不合,不一致

✅ 四、代码示例:用 MC Dropout 分离 Aleatoric 和 Epistemic 不确定性(分类任务)

明确区分 Epistemic(模型)和 Aleatoric(数据)不确定性,你需要使用 贝叶斯建模技术(例如 MC Dropout 或 Deep Ensembles),并对每个输入进行多次预测,从而统计模型行为的分布特性

以下是一个在 分类任务中使用 MC Dropout 的完整示例(PyTorch 实现):

🔧 假设条件:


🧩 步骤 1:多次预测(T 次)

def enable_dropout(model):    """启用 Dropout 的 inference 阶段行为"""    for m in model.modules():        if isinstance(m, nn.Dropout):            m.train()def mc_predictions(model, x, T=20):    """返回 T 次 MC Dropout 预测的 softmax 概率 [T, B, C]"""    model.eval()    enable_dropout(model)    preds = []    for _ in range(T):        logits = model(x)  # 输出 logits        probs = torch.softmax(logits, dim=-1)        preds.append(probs)    return torch.stack(preds)  # shape: [T, B, C]

🧮 步骤 2:分解不确定性

def compute_uncertainty(mc_probs):    """    mc_probs: [T, B, C] — T 次 softmax 概率    返回:        - predictive_entropy: [B]        - expected_entropy:   [B]        - epistemic:          [B]        - aleatoric:          [B]    """    mean_probs = mc_probs.mean(dim=0)  # [B, C]    log_mean_probs = torch.log(mean_probs + 1e-8)    # 总预测不确定性(熵)    predictive_entropy = - (mean_probs * log_mean_probs).sum(dim=-1)  # [B]    # 每次预测的熵    log_mc_probs = torch.log(mc_probs + 1e-8)    entropies_per_sample = - (mc_probs * log_mc_probs).sum(dim=-1)  # [T, B]    expected_entropy = entropies_per_sample.mean(dim=0)  # [B]    # 模型不确定性(Epistemic) = predictive_entropy - expected_entropy    epistemic = predictive_entropy - expected_entropy    aleatoric = expected_entropy    return {        'predictive_entropy': predictive_entropy,        'epistemic': epistemic,        'aleatoric': aleatoric    }

✅ 输出解释举例:

# 你输入一个样本 x 得到的结果{    'predictive_entropy': tensor([0.98]),    'epistemic': tensor([0.65]),    'aleatoric': tensor([0.33])}

说明这个样本有:

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

MC Dropout 不确定性估计 贝叶斯学习 深度学习
相关文章