通过对同一输入 x 进行 T 次带有 Dropout 的前向传播,我们得到一组不同的预测结果:

这里 Wt​ 代表第 t 次前向传播时,因 Dropout 随机丢弃部分神经元而产生的子网络权重。

利用这个预测分布,我们可以实现两个核心目标:

  1. 获得更稳健的预测结果(预测值)
    • 回归问题:使用这 T 个结果的平均值作为最终预测。
    • 分类问题:先计算每次预测的概率向量,然后对这些向量取平均,最后选择概率最高的类别作为最终预测。
  2. 估算模型的不确定性(置信度)
    • 计算这 T 个结果的方差 (Variance) 或标准差 (Standard Deviation)。
    • 方差越大,表示模型的多次预测结果分歧越大,模型对当前预测的不确定性越高(信心越低)。
    • 方差越小,表示模型的预测结果越一致,模型对当前预测的确定性越高(信心越高)。

这就是 MC Dropout 在预测阶段要做的事情。

一个问题是,许多推理引擎(如 ONNX Runtime)为了性能优化,默认不支持在推理阶段开启 Dropout。需要你手动设置 Dropout 为trainning状态。