深度学习模型不确定性方法对比

©PaperWeekly 原创 · 作者|崔克楠

学校|上海交通大学博士生

研究方向|异构信息网络、推荐系统

本文以 NeurIPS 2019 的 Can You Trust Your Model’s Uncertainty? Evaluating Predictive Uncertainty Under Dataset Shift 论文为主线,回顾近年顶级机器学习会议对于 dataset shift 和 out-of-distribution dataset 问题相关的论文,包括了 Temperature scaling [1],DeepEnsemble [2],Monte-Carlo Dropout [3] 等方法。而 [4] 在统一的数据集上对上述一系列方法,测试了他们在 data shift 和 out-of-distribution 问题上的 accuracy 和 calibration。 

Temperature Scaling [1]

在介绍 temperature scaling 之前,首先需要了解什么叫做 calibrated? 

神经网络在分类时会输出“置信度”分数和预测结果。理想情况下,这些分数应该与真实正确性的可能性相匹配。例如,如果我们将 80% 的置信度分配给 100 个样本,那么我们就会期望 80% 样本的预测实际上是正确的。如果是这样,我们说模型是经过校准的。 

而 Temperature scaling 则是一个非常简单的后处理步骤,能够帮助模型进行校准。一种可视化校准的简单方法是将精度作为置信度的函数绘制(reliability diagram)。下边左边的可靠性图表中,我们可以看到一个在 CIFAR-100 上训练的 DenseNet 是极度自信的。然而,使用 Temperature scaling,模型就得到了校准。

具体怎么做 temperature scaling 呢,对于分类问题,网络最后一层往往会输出 logits,而 logits 进一步传给 softmax 函数来得到各个类别的概率,而 temperature scaling 对这一步骤修改为:

实现层面也很简单,在 PyTorch 的实现如下:

class Model(torch.nn.Module):
    def __init__(self):
        # ...
        self.temperature = torch.nn.Parameter(torch.ones(1))

    def forward(self, x):
        # ...
        # logits = final output of neural network
        return logits / self.temperature

但要注意的是,上述方法需要在 validation set 上进行优化,来学习参数 temperature,而不能在 training set 上进行学习,所以 Temperature scaling 是一个 post process,即后处理步骤,这种方法也暂时只能用于分类任务,不能用于回归。

Dee

  • 13
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 C 语言中实现深度学习模型可以使用一些开源的库,比如 Caffe、TensorFlow 等。这些库都提供了一系列的函数和工具,帮助你定义、训练和测试深度学习模型。 首先,你需要准备好训练数据和测试数据。训练数据用于训练深度学习模型,测试数据用于评估模型的准确性。 然后,你需要使用 C 语言编写程序,使用这些库中的函数来定义深度学习模型的结构。这通常包括确定模型的输入和输出,以及模型中间的各个层的结构。 接下来,你可以使用训练数据来训练模型。这一过程通常包括多次迭代训练数据,并使用各种优化算法来最小化模型的错误率。 最后,你可以使用测试数据来评估模型的准确性。如果模型的表现满意,就可以将它用于实际应用中。 希望这些信息对你有帮助! ### 回答2: 使用C语言实现一个深度学习模型的可执行算法相对来说比较困难。因为深度学习模型通常依赖于大规模的矩阵运算和复杂的神经网络结构,而C语言并不擅长处理这些复杂的计算和数据结构。 C语言主要用于系统级编程和底层开发,它更适合与硬件进行交互以及执行高性能的计算任务。如果想要实现一个深度学习模型,通常会选择使用更适合进行科学计算和机器学习的语言,如Python、C++、Java等。 在C语言中实现一个深度学习模型需要自行处理矩阵运算、激活函数、神经网络的构建等一系列复杂的计算任务,这不仅工作量大而且容易出错。相比之下,使用Python等高级语言编写深度学习模型会更加简洁和方便,因为它们提供了更丰富的科学计算库(如NumPy、TensorFlow、PyTorch)和高级的深度学习框架。 总结来说,使用C语言实现一个深度学习模型可执行算法相对复杂且不够高效,建议选择更适合的高级语言和深度学习框架。 ### 回答3: 使用C语言实现一个深度学习模型的可执行算法是具有一定挑战性的任务。深度学习模型通常使用Python等高级语言实现,因为这些语言提供了丰富的库和框架来简化深度学习的开发和训练过程。然而,对于特定的应用场景,使用C语言来实现深度学习模型也是可行的。 使用C语言来实现深度学习模型,首先需要编写底层的计算和矩阵运算库。这是因为深度学习模型的训练和推理过程主要涉及到大规模的矩阵乘法和非线性激活函数等计算。在编写这些库时,需要考虑高效的内存管理和并行计算等问题,以提高算法的性能。 其次,需要编写深度学习模型的前向传播和反向传播算法。前向传播算法用于将输入数据通过神经网络的各层进行计算,得到输出结果;反向传播算法则用于根据损失函数的梯度更新网络的权重参数。这部分编程涉及到矩阵运算和各种激活函数的计算,需要正确实现这些计算以保证算法的正确性和有效性。 最后,还需要实现一些辅助功能,例如数据预处理、参数初始化和模型保存等。这些功能能够提高算法的鲁棒性和实用性。 由于C语言相对于高级语言来说缺乏一些便利的特性,例如自动内存管理和现成的深度学习库,所以使用C语言实现深度学习模型的算法会更加复杂和繁琐。但是,对于一些嵌入式设备和资源有限的场景,使用C语言来实现深度学习模型是一种合理的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值