通过对同一输入 x 进行 T 次带有 Dropout 的前向传播,我们得到一组不同的预测结果:
这里 Wt 代表第 t 次前向传播时,因 Dropout 随机丢弃部分神经元而产生的子网络权重。
利用这个预测分布,我们可以实现两个核心目标:
- 获得更稳健的预测结果(预测值)
- 回归问题:使用这 T 个结果的平均值作为最终预测。
- 分类问题:先计算每次预测的概率向量,然后对这些向量取平均,最后选择概率最高的类别作为最终预测。
- 估算模型的不确定性(置信度)
- 计算这 T 个结果的方差 (Variance) 或标准差 (Standard Deviation)。
- 方差越大,表示模型的多次预测结果分歧越大,模型对当前预测的不确定性越高(信心越低)。
- 方差越小,表示模型的预测结果越一致,模型对当前预测的确定性越高(信心越高)。
这就是 MC Dropout 在预测阶段要做的事情。
一个问题是,许多推理引擎(如 ONNX Runtime)为了性能优化,默认不支持在推理阶段开启 Dropout。需要你手动设置 Dropout 为trainning状态。