想象你是一家老字号中医馆的坐堂大夫,手下带着十几个学徒。你定下一条规矩:每天出诊前抓阄,随机让几个学徒“今天休息”,留下的学徒必须独立把脉开方,不许偷懒依赖别人——这是为了让每个学徒都练出真本事,防止医馆离开哪个人就转不动(这就是 Dropout)。病人来看病时,一般大夫只开一次方;但你多长了个心眼:同一个病人,反复开好几次“内部会诊”,每次随机缺席几个学徒,把他们的方子都记下来。如果几次会诊开的药方几乎一模一样,你心里有底;如果学徒们各执一词、剂量差出好几倍,你立刻知道这病没把握,赶紧请患者去做进一步检查。 这篇文章要讲的就是机器学习里的 MC Dropout(Monte Carlo Dropout)——一种给深度学习模型装上“自知之明”的轻量方法。它不需要改模型结构、不需要重新训练,只要在推理时让 Dropout 照常工作、多跑几次前向传播,就能顺便算出“我有多没把握”的分数。在医疗、自动驾驶这类犯错代价极高的场景里,它能帮我们把“预测值”和“可信度”一起交给决策者。

岗位关联

掌握 MC Dropout,等于给模型装上一个会说“我不知道”的预警器——在医疗、自动驾驶等高风险场景,它能帮你避免“自信地犯错”,是用最小改造换取模型可信度的实用技能,也是面试中高频考察的贝叶斯深度学习入门点。

目录
  1. 可视化演示
  2. 不确定性概述
  3. Dropout基础
  4. MC Dropout思想
  5. 数学原理
  6. 实现方法
  7. 量化指标
  8. 应用场景
  9. 局限与改进
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示推理时多次Dropout随机采样过程、T次预测均值方差统计计算、医疗诊断高风险场景不确定性阈值应用、以及推理延迟局限与改进策略,侧边指标实时展示采样次数与不确定性度量。

本节配有交互动效(进入视口后自动加载,约 3KB)。

MC Dropout:推理时多次随机采样 推理阶段保持Dropout激活,对同一输入进行T次随机前向传播 每次采样随机丢弃不同神经元,相当于集成多个子网络 y = avg(f₁(x), f₂(x), ..., f_T(x)) 无需改模型结构即可量化不确定性。

不确定性概述

老中医坐诊多年,碰上说不出哪里不对劲的病人,会有两种截然不同的“没把握”:一种是这病他从来没见过,翻遍医书也找不着对应——这是知识盲区;另一种病他见过上百例,可偏偏每个人的症状就是飘忽不定,今天这样明天那样——这是病情本身的随机。前者多读医书就能补,后者读再多书也消不掉。

深度学习模型也面临同样的问题。平时我们训练完一个图像分类模型,扔进一张图,它吐出一个 0.9 的置信度,看起来信心满满。但这个 0.9 可能是真的,也可能只是“无知者无畏”——因为模型根本没见过这类数据,却仍然被迫输出一个概率分布。更麻烦的是,常规训练目标只要求模型给出正确答案,从来没有教过它“什么时候该承认自己不会”。

为了区分这两种“没把握”,学界把不确定性拆成两类:认知不确定性(Epistemic Uncertainty)来自模型知识的不足——训练集里没见过这种样本,模型的参数就说不准,这种不确定性可以通过增加数据、扩大模型容量来缓解;偶然不确定性(Aleatoric Uncertainty)来自数据本身固有的噪声——比如同一张模糊照片,不同标注者可能给出不同答案,这种随机性无论喂多少数据都消不干净。

老中医的高明之处在于,他能分辨自己卡在哪儿:是缺医书(认知缺失),还是这病本来就擅长伪装(数据噪声)。MC Dropout 的出现,就是给 AI 装上了一双看清自己“卡在哪儿”的眼睛——虽然它只能给出一个粗略的分歧分数,但足以让模型学会说“我没把握”。

Dropout基础

老中医带学徒有个烦恼:如果每次出诊都带同一批人,学徒们会偷懒——反正师父在,跟着附和就行。于是他立下规矩:每次出诊前抓阄,随机让几个学徒“今天休息”,剩下的必须独立把脉、独立开方。这样一来,每个学徒都练出了单兵作战的本事,整个医馆也不再依赖任何一个特定的人。

这个“随机缺席”的智慧,在深度学习中就是 Dropout。训练时,每个神经元以概率 p 保留(以 1-p 被临时丢弃,输出置 0),每次前向传播都相当于用不同的“学徒组合”在干活。反向传播时,梯度也只流过存活的那部分神经元。到了预测阶段,Dropout 通常被关掉,所有神经元一起上阵,权重按存活率缩放以保持输出尺度一致。

为什么这样做能防止过拟合?第一,随机组合迫使模型学到冗余的、分散的特征,而不是把赌注押在个别神经元上;第二,每次训练都在训练一个“瘦身版”子网络,多次迭代下来等于隐式地训练并集成了大量共享权重的子网络,这正是一种廉价的模型集成。其中的“存活率” p 就是超参数 keep_prob,通常取 0.5。

用数学语言描述,Dropout 层对激活向量施加一个伯努利掩码。

出诊规矩坚持一年后,哪怕某天几位资深学徒同时请假,医馆也能正常运转。Dropout 的价值正在于此:让网络在“缺胳膊少腿”的情况下依然稳健,这也为后面的 MC Dropout 悄悄埋下了伏笔——既然训练时神经网络已经习惯了随机缺席,那推理时为何不再用一次呢?

z∼Bernoulli(p),h~=z⊙h\displaystyle \mathbf{z} \sim \mathrm{Bernoulli}(p), \qquad \tilde{\mathbf{h}} = \mathbf{z} \odot \mathbf{h}
通俗说明:z 是一个装满 0 和 1 的开关向量,1 表示学徒今天出诊,0 表示休息;把开关和学徒的本领逐位相乘,休息的人输出直接归零。
  1. 伯努利采样以概率 p 为每个神经元独立生成一个 0/1 随机开关。
    z∼Bernoulli(p)\displaystyle \mathbf{z} \sim \mathrm{Bernoulli}(p)
  2. 逐元素相乘将开关向量与神经元的输出向量逐位相乘,被置 0 的神经元相当于当天缺席。
    h~=z⊙h\displaystyle \tilde{\mathbf{h}} = \mathbf{z} \odot \mathbf{h}

MC Dropout思想

传统看病,病人来了,老中医搭一次脉就开方。可如果那天恰好有三位最了解此病的学徒休息,这次判断可能就偏了。MC Dropout 的做法是:别急,同一个病人,多开几次会诊,每次随机缺席几位,最后把几次结论放在一起看。

放到模型上,常规推理时我们会调用 model.eval(),让 Dropout 层“下班”;MC Dropout 反其道而行之,推理时让 Dropout 继续“值班”。对同一个输入 x,重复 T 次前向传播,每次得到不同的随机掩码,也就得到 T 个不同的预测输出。这 T 次采样,就是名字里 MC(Monte Carlo,蒙特卡洛)的来历——用大量随机采样的统计结果去逼近一个精确但算不动的量。

为什么这 T 个预测有意义?贝叶斯学派认为,模型的权重应该是一个分布而非一个确定值;在权重后验 p(W|D) 下做预测,需要把所有可能的权重都“平均”一遍。真实后验难以计算,MC Dropout 相当于用带 Dropout 的网络(它等价于一个特殊的变分分布 q*(W))去近似这个后验,再对 q*(W) 做蒙特卡洛采样求平均。这就是它与贝叶斯深度学习的深刻联系。

一次会诊是碰运气,十次会诊则是统计规律。MC Dropout 用“多次采样取平均”的方式,把运气变成了概率,而且这一切都不需要改动模型结构——训练好的网络直接拿来用,只是把一次前向传播换成 T 次。

\displaystyle p(y|x,\mathcal{D}) \approx \frac{1}{T}\sum_{t=1}^{T} p(y|x,\mathbf{W}^{(t)}), \qquad \mathbf{W}^{(t)} \sim q^\*(\mathbf{W})
通俗说明:q*(W) 是“带着随机缺席规则的网络”对应的近似权重分布;每次会诊从中抽一组权重,做一次预测,T 次预测的平均就是会诊的综合结论。
  1. 权重采样每次前向传播从近似的权重分布 q*(W) 中抽取一组权重,等价于一次随机缺席组合下的预测。
    \displaystyle \mathbf{W}^{(t)} \sim q^\*(\mathbf{W})
  2. 预测平均把 T 次抽样得到的类别概率(或回归值)逐个求平均,逼近真实后验预测分布。
    p(y∣x,D)≈1T∑t=1Tp(y∣x,W(t))\displaystyle p(y|x,\mathcal{D}) \approx \frac{1}{T}\sum_{t=1}^{T} p(y|x,\mathbf{W}^{(t)})

数学原理

会诊开完了,老中医手里攥着一叠方子。他需要两个数字来总结:第一,大伙儿最终倾向的剂量是多少——这是会诊纪要;第二,大伙儿的剂量差得有多离谱——这是争议记录。两个数字一起看,才能决定这方子敢不敢直接开。

MC Dropout 给出的正是这两个数字。对输入 x 执行 T 次带 Dropout 的前向传播,得到 T 个预测值 {ŷ⁽¹⁾, ……, ŷ⁽ᵀ⁾}。最终预测取它们的平均值,不确定性用它们的方差来衡量。均值相当于把 T 个“意见”融合成一个稳健的结论,方差则量化了这 T 个意见彼此背离的程度。

值得注意的是,这些公式同时服务于两个目标:均值让最终决策更稳(相当于投票),方差让人知道该不该信这个决策。老中医把纪要和争议记录同时夹进病历,MC Dropout 则把预测值和不确定度一起返回给调用方——这是它与普通 Dropout 最大的不同。

μ^(x)≈1T∑t=1Ty^(t)(x),σ^2(x)≈1T∑t=1T(y^(t)(x)−μ^(x))2\displaystyle \hat{\mu}(x) \approx \frac{1}{T}\sum_{t=1}^{T} \hat{y}^{(t)}(x), \qquad \hat{\sigma}^2(x) \approx \frac{1}{T}\sum_{t=1}^{T} \left(\hat{y}^{(t)}(x) - \hat{\mu}(x)\right)^2
通俗说明:均值是“众人商议后的统一意见”,方差是“众人意见的分歧程度”——方差越大,模型越没把握。
  1. 累加预测值把 T 次前向传播的输出全部加起来,T 越大,采样越稳定。
    ∑t=1Ty^(t)(x)\displaystyle \sum_{t=1}^{T} \hat{y}^{(t)}(x)
  2. 求平均除以 T 得到预测均值,作为模型对该输入的最终输出。
    μ^(x)≈1T∑t=1Ty^(t)(x)\displaystyle \hat{\mu}(x) \approx \frac{1}{T}\sum_{t=1}^{T} \hat{y}^{(t)}(x)
  3. 计算偏差平方每次预测与均值差值的平方,度量该次意见偏离纪要的程度。
    (y^(t)(x)−μ^(x))2\displaystyle \left(\hat{y}^{(t)}(x) - \hat{\mu}(x)\right)^2
  4. 对偏差平方再平均得到方差 σ̂²,即意见分歧的量化指标。
    σ^2(x)≈1T∑t=1T(y^(t)(x)−μ^(x))2\displaystyle \hat{\sigma}^2(x) \approx \frac{1}{T}\sum_{t=1}^{T} \left(\hat{y}^{(t)}(x) - \hat{\mu}(x)\right)^2

实现方法

医馆把会诊流程写成了标准作业程序(SOP):通知要会的学徒 → 每人独立发言 → 记录员誊写意见 → 最后由统计师汇总分歧。有了 SOP,换哪个科室都能照搬。MC Dropout 的代码实现同样只有四步,任何 PyTorch 模型都能套用。

第一步,把模型切到“训练模式”(model.train()),让 Dropout 层在推理时继续随机丢弃;第二步,在 torch.no_grad() 下对同一个输入跑 T 次前向传播——不开梯度,省显存也省时间;第三步,把每次的输出收集到一个数组里;第四步,对数组沿采样维度求均值和方差,得到预测与不确定度。整个过程不需要改一行模型结构,也不需要重新训练。

T 怎么取?通常 20~100 次足够。T 太小,方差估计的噪声大,统计结果不稳定;T 太大,推理耗时线性上涨,延迟敏感的场景扛不住。实际工程里可以先用 50 次摸一版,再根据延迟预算调整。如果 GPU 显存紧张,可以分多个小 batch 循环跑,而不是一次性把 T 个结果全部装进显存。

会诊 SOP 之所以可复制,是因为它不依赖具体病情——同样的流程既能看伤寒,也能看跌打。MC Dropout 也一样:模型结构不用改、训练流程不用动,只是推理时多跑几次前向传播。它把“估计不确定性”这个听起来很数学的问题,简化成了一个 for 循环。

量化指标

老中医给会诊制度加了一条规矩:分歧小于一成的,直接开方子(绿灯);分歧三成左右的,请二诊复核(黄灯);分歧超过五成的,转诊大医院或重新检查(红灯)。方差本身只是一个数字,加上业务规则,才变成可执行的决策动作。

MC Dropout 的量化指标因任务而异。回归任务(比如预测房价、温度)直接用预测方差 σ̂² 或标准差 σ̂ 作为不确定度;分类任务更常用平均预测概率的熵——如果 T 次采样对各类别概率分歧很大,平均概率会趋于均匀分布,熵就高;如果每次采样都确定地投给同一类,平均概率趋于 one-hot,熵就低。也可以取 T 次 softmax 输出在各类别上的方差之和,工程上两者都常见。

在实际系统中,我们会设一个阈值 τ:σ̂² < τ 时自动放行,否则转人工。这个阈值不需要重新训练模型,只需要在验证集上画一条“不确定度-准确率”曲线来挑选。红绿灯规则一旦建立,AI 就从“永远自信的实习生”变成了“知道何时该请示的靠谱助手”。

p^k=1T∑t=1Tpk(t),H[p^]=−∑k=1Kp^klog⁡p^k\displaystyle \hat{p}_k = \frac{1}{T}\sum_{t=1}^{T} p_k^{(t)}, \qquad H[\hat{p}] = -\sum_{k=1}^{K} \hat{p}_k \log \hat{p}_k
通俗说明:p̂ 是 T 次投票后各类别的平均得票率;熵衡量这个投票分布的“混乱程度”——越是五五开,熵越高,模型越没把握。
  1. 平均类别概率先把 T 次 softmax 输出按类别求平均,得到平均得票率 p̂。
    p^k=1T∑t=1Tpk(t)\displaystyle \hat{p}_k = \frac{1}{T}\sum_{t=1}^{T} p_k^{(t)}
  2. 计算熵和对每个类别的 p̂_k log p̂_k 求和,再取负号,得到熵值。
    H[p^]=−∑k=1Kp^klog⁡p^k\displaystyle H[\hat{p}] = -\sum_{k=1}^{K} \hat{p}_k \log \hat{p}_k
  3. 判定区间熵接近 log K 说明各类别概率均匀、模型近似瞎猜;熵接近 0 说明多次采样结论一致、模型很笃定。

应用场景

老中医把会诊 SOP 推广到了急诊科和影像科。急诊科病人病情变化快,等不起;影像科片子信息密度高,容易看漏。两个科室的共性是:犯错代价极高,所以“有没有把握”和“结论是什么”同样重要。

医疗影像是最典型的落地场景。以肺结节 CT 筛查为例,模型对每个像素做分割时跑 T 次 MC Dropout,能生成一张“不确定性热力图”:结节边缘的像素天然难分,热力图在这里亮起高不确定性,提醒放射科医生重点复核;如果一张片子里有大片区域都亮红,系统会直接标记“建议人工重读”,而不是硬着头皮输出结论。

自动驾驶同样受益。目标检测模型输出的每个边界框都附上一个“分歧分数”:夜间视野差、逆光、罕见车型,都会让 MC Dropout 的采样方差变大。决策模块拿到高方差信号后,会降低该目标的置信权重、放慢车速或请求驾驶员接管,而不是在犹豫中一脚油门踩下去。这种“不确定度感知”的决策链,是功能安全评审时的重要加分项。

这类系统的共同流程是:把方差或熵作为“风险信号”接入业务决策链——在主动学习场景里,这个信号还能反过来指导数据标注:优先把高方差的样本送去人工标注,同样的标注预算能换来更大的模型精度提升。会诊制度的价值,不在于让每个预测都正确,而在于让错误发生在有准备的地方。

局限与改进

会诊制度并非万能。老中医发现三个问题:第一,学徒们拜的是同一位师父,可能共享同样的知识盲区,开十次会诊也发现不了;第二,每次会诊都要占用所有人半天时间,成本不低;第三,学徒们给出的“自信程度”未必等于真实水平——大家越是同门同派,越容易互相印证错误。

MC Dropout 的局限恰好对应这三条。首先,它只是对贝叶斯后验的变分近似,近似精度有限——各次采样共享网络权重,掩码高度相关,相当于“近亲开会”,得到的方差可能偏小、过度自信。其次,推理成本是原来的 T 倍,T 取大了延迟扛不住,T 取小了方差又不稳。最后,它的不确定度分数未必经过良好校准:方差为 0.1 的预测不一定真的比 0.5 的更准,需要专门的校准评估。

改进方向也围绕这三点展开:想要更强的表达力,用深度集成(Deep Ensembles)分别训练多个独立模型,代价更高但方差更可靠;想要更好的校准,在 MC Dropout 之后加温度缩放,或用可靠性图观察分数与真实准确率的偏差;想要更精确的贝叶斯推断,可以用 Bayes by Backprop 等方法直接学习权重分布的参数,但实现复杂度会显著上升。

所以会诊制度最好的定位是一把“性价比极高的尺子”——它测不出千分尺级别的精度,但能快速告诉你“大概有多没把握”。在绝大多数需要工程落地、又不想大动干戈的场景里,MC Dropout 仍然是最轻量、最好用的那台测量仪。

AI 应用场景

医学影像辅助诊断

阶段:模型部署与可信评估

解决的问题:传统计算机辅助诊断系统给出病灶位置却不给置信度,医生无法判断该信任还是忽略,导致误检结果直接干扰临床决策。MC Dropout 每次分割输出附带像素级方差热力图,高分歧区域自动标红,医生按图复核,“哪里值得怀疑”一目了然。

具体案例:某三甲医院肺结节筛查系统采用 3D U-Net 分割 CT 影像,推理时做 T=30 次 MC Dropout 采样,生成不确定性热力图。系统对热力图高亮区占比超过 30% 的片子自动转人工重读,上线后误检率下降 41%,同期人工复核工作量仅增加 17%。

自动驾驶目标检测

阶段:感知与决策融合

解决的问题:目标检测在夜间、雨雾、异形车等场景下误检成本极高;传统检测器只输出坐标和置信度,而 softmax 置信度天然偏高,无法反映真实把握。MC Dropout 给出每个边界框的方差,决策模块据此区分“该刹车”还是“该加速”。

具体案例:某自动驾驶公司用轻量检测器加 MC Dropout,对每个检测框做 T=30 次采样,将方差传给规划模块:方差超阈值时,该目标的跟踪权重降级、车辆减速并请求远程安全员介入。路测数据显示,高方差样本仅占总数的 6%,却覆盖了 73% 的人工接管事件,说明方差信号精准锁定了危险场景。

主动学习数据标注

阶段:数据迭代与标注提效

解决的问题:标注预算有限时,随机抽样本送标注效率低下。MC Dropout 让模型对每个未标注样本输出一个“分歧分数”,优先挑选模型最没把握的样本送人工标注,让每一份标注预算都花在刀刃上。

具体案例:工业质检场景中,用 MC Dropout 对 50 万张未标注零件图排序,取方差最高的 2 万张送人工标注。只用了 4% 的标注预算,模型在关键缺陷类别的召回率提升 18%,而随机抽样达到同样效果需要标注近 10 万张。

Python 演示

python38 行
import torchimport torch.nn as nnimport numpy as np class MLP(nn.Module):    def __init__(self, in_dim=2, hidden=64, p=0.5):        super().__init__()        self.net = nn.Sequential(            nn.Linear(in_dim, hidden),            nn.ReLU(),            nn.Dropout(p),            nn.Linear(hidden, hidden),            nn.ReLU(),            nn.Dropout(p),            nn.Linear(hidden, 1)        )     def forward(self, x):        return self.net(x)  def mc_dropout_predict(model, x, T=50):    model.train()    preds = []    with torch.no_grad():        for _ in range(T):            preds.append(model(x).cpu().numpy())    preds = np.concatenate(preds, axis=1)    return preds.mean(axis=1), preds.var(axis=1)  if __name__ == "__main__":    torch.manual_seed(42)    model = MLP()    x = torch.randn(4, 2)    mean, var = mc_dropout_predict(model, x, T=50)    print("预测均值:", mean)    print("预测方差:", var)
目的:演示 MC Dropout 的标准四步流程——训练模式下开启 Dropout、循环 T 次前向传播、收集输出、计算均值和方差。
  1. model.train()让 Dropout 层在推理时继续随机丢弃,这是 MC Dropout 的灵魂一步;若误用 eval() 则方差恒为 0。
  2. preds.append(model(x).cpu().numpy())把每次前向传播的输出追加到列表,T 次后得到 T 组预测。
  3. np.concatenate(preds, axis=1)把 T 个形状为 (N,1) 的输出拼成 (N,T) 矩阵,方便后续按列统计。
  4. preds.mean(axis=1)对 T 次预测取平均,得到最终预测值,相当于会诊纪要。
  5. preds.var(axis=1)对 T 次预测求方差,得到每个样本的不确定度,相当于争议记录。

常见误区

误区很多人以为只要把模型设置成 eval 模式、多跑几次 forward 就有不确定性了。结果发现多次输出的方差是 0,还以为是模型太自信,其实是 Dropout 根本没生效。

正解MC Dropout 的关键恰恰是让 Dropout 层在推理时“继续开工”。eval 模式会关闭 Dropout,T 次前向传播得到的是同一个确定性结果,方差恒为 0。正确做法是调用 model.train(),或手动把 Dropout 层设为 training 状态,同时配合 torch.no_grad() 关闭梯度计算。

为何常见:大家平时训练完模型就切 eval 模式已成肌肉记忆,惯性思维下自然以为推理就该用 eval,忽略了 MC Dropout 正是要打破这条常规。

误区认为把丢弃概率调大,每次采样的网络差异就越大,方差自然更大,能更“诚实”地反映模型没把握。

正解dropout 概率是超参数,影响的是掩码的离散程度;预测方差主要反映模型对输入的置信度,不是简单地随 p 升高而升高。p 过大会破坏模型表达能力,所有子网络都太弱,方差反而可能失真或崩坏。实际使用中,p 应与训练时保持一致,而不是在推理时随意调节。

为何常见:把“随机性大小”和“不确定性大小”划等号,忽略了不确定性是数据与模型交互的结果,不是单靠加大噪声就能模拟出来的。

误区既然 Dropout 训练时被比作“隐式集成”,那 MC Dropout 的 T 次采样就是训练了 T 个独立模型,效果与深度集成(Deep Ensembles)等同甚至更好。

正解MC Dropout 的 T 次前向共享同一套权重,掩码之间高度相关,相当于“近亲开小会”——如果网络整体学歪了,多次采样会一致地错;深度集成用不同随机种子独立训练 T 个模型,表达力更强,但训练和推理成本都高出 T 倍。两者有关系但不等价。

为何常见:从“集成学习视角”理解 Dropout 的训练,容易顺水推舟地把推理阶段的多次采样也当成真正独立的模型集成。

误区模型多次输出几乎一致(方差趋近 0),就认为这个预测一定是对的,放心大胆交给下游使用。

正解方差小只能说明“多次采样意见一致”,但如果模型整体学歪了,所有子网络共享同一个错误偏置,就会一致地错——这叫校准失败。工程上需要用可靠性图或“不确定度-准确率”曲线验证:方差 0.1 的预测是否真的比方差 0.5 的更准,而不是想当然。

为何常见:人容易把“自信”等同于“有实力”,模型也一样——一致性只能说明内部没有分歧,不能说明与外部真相一致。

面试题

Q1. MC Dropout 中"MC"指的是什么?

单选题 · easy

  • A.蒙特卡洛近似后验推断← 正确答案
  • B.模型压缩与加速技术
  • C.多头注意力网络结构
  • D.多尺度特征融合方法

答案:A。MC 是 Monte Carlo(蒙特卡洛)的缩写,指用 T 次随机采样去近似难以精确计算的贝叶斯后验预测分布。模型压缩、多头注意力、多尺度融合虽然都是深度学习常见概念,但都不是 MC Dropout 中 MC 的含义。

Q2. MC Dropout 在推理时应该如何设置 Dropout 层?

单选题 · easy

  • A.推理时关闭 Dropout 层
  • B.推理时保持 Dropout 开启← 正确答案
  • C.推理时移除所有 Dropout
  • D.推理时禁用全部归一化

答案:B。MC Dropout 的核心就是让 Dropout 层在推理时继续随机丢弃神经元,从而得到多样化的预测结果。关闭或移除 Dropout 都会让多次前向传播的输出完全相同,方差恒为 0,无法量化不确定性。

Q3. 在回归任务中,MC Dropout 用什么统计量衡量不确定性?

单选题 · easy

  • A.softmax 输出的预测熵
  • B.多次预测的方差数值← 正确答案
  • C.模型损失函数的数值
  • D.梯度范数的统计值

答案:B。回归任务的输出是连续数值,T 次采样的方差 σ̂² 直接反映了预测值围绕均值的离散程度,方差越大表示模型越没把握。熵是针对分类概率分布设计的指标,损失函数和梯度范数则与不确定性没有直接关系。

Q4. 以下哪一类不确定性可以通过增加训练数据来缓解?

单选题 · mid

  • A.偶然不确定性(数据固有噪声)
  • B.认知不确定性(模型知识盲区)← 正确答案
  • C.两类不确定性都无法缓解
  • D.两类不确定性都能完全消除

答案:B。认知不确定性来自模型没见过某类数据,补充相应样本后模型的“知识盲区”缩小,不确定性随之下降。偶然不确定性来自数据本身固有的噪声(如模糊图像、传感器干扰),即使增加数据也无法消除,只能通过更好的传感器或任务设计来规避。

Q5. MC Dropout 与贝叶斯神经网络的关系是什么?

单选题 · mid

  • A.是完全无关的两种方法
  • B.等价于精确贝叶斯推断
  • C.是变分推断的近似实现← 正确答案
  • D.是马尔可夫链精确采样

答案:C。MC Dropout 被证明等价于一种特殊的变分推断:带 Dropout 的网络对应一个近似的权重后验分布 q*(W),推理时的 T 次采样是对这个分布的蒙特卡洛近似。它是近似方法,不是精确贝叶斯推断,也不是 MCMC 精确采样。

Q6. 分类任务中,MC Dropout 常用哪个指标量化不确定性?

单选题 · mid

  • A.多次采样预测的熵值← 正确答案
  • B.网络参数矩阵范数
  • C.优化器学习率大小
  • D.训练数据样本数量

答案:A。分类任务先对 T 次 softmax 输出按类别求平均概率,再计算熵。熵接近 0 表示类别概率集中,模型有把握;熵接近 log K 表示概率均匀分散,模型近似瞎猜。参数范数、学习率、样本数量都不是不确定性指标。

Q7. 实现 MC Dropout 需要哪些关键步骤?

多选题 · mid

  • A.训练阶段正常使用 Dropout 层← 正确答案
  • B.推理阶段必须关闭 Dropout
  • C.多次前向传播收集预测结果← 正确答案
  • D.对结果计算均值与方差指标← 正确答案

答案:ACD。MC Dropout 的前提是模型在训练时就用过 Dropout(A 对);推理时恰恰要“开启”而非关闭 Dropout(B 错);然后循环 T 次前向传播收集输出(C 对);最后对输出计算均值和方差得到预测与不确定度(D 对)。

Q8. 以下哪些是 MC Dropout 的已知局限?

多选题 · hard

  • A.后验近似精度不够高← 正确答案
  • B.需要 T 倍推理计算开销← 正确答案
  • C.方差估计可能过度自信← 正确答案
  • D.模型无需任何结构改动

答案:ABC。A 对,MC Dropout 是变分近似,精度有限;B 对,推理要做 T 次前向传播,耗时是原来的 T 倍;C 对,多次采样共享权重、掩码相关,方差可能偏小、过度自信;D 是优点而非局限,不能选。

Q9. 关于 MC Dropout 的推理过程,下列说法正确的是?

单选题 · mid

  • A.模型越有把握,预测方差越大
  • B.模型越有把握,预测方差越小← 正确答案
  • C.预测方差与模型把握程度无关
  • D.方差只取决于 dropout 概率

答案:B。MC Dropout 用多次采样的方差反映模型把握程度:意见越一致(方差小),模型越自信;分歧越大(方差大),模型越没把握。方差主要由输入样本与模型知识的匹配程度决定,而不是只由 dropout 概率决定。

Q10. 关于 MC Dropout 与深度集成的区别,以下说法正确的是?

多选题 · hard

  • A.MC Dropout 的所有采样共享同一套权重← 正确答案
  • B.MC Dropout 的掩码之间高度相关← 正确答案
  • C.深度集成独立训练多个模型← 正确答案
  • D.MC Dropout 与深度集成完全等价

答案:ABC。MC Dropout 的 T 次前向传播共享同一套训练好的权重,只是掩码不同且高度相关(所以 A、B 对);深度集成是用不同随机种子独立训练多个模型再平均(C 对);两者有相似之处但不等价,深度集成的多样性更强、效果通常更好,但成本也高得多(D 错)。