Fortuna 简介:不确定性量化库

正确估计预测不确定性对于涉及关键决策的应用至关重要。不确定性可用于评估模型预测的可靠性、触发人为干预或决定模型是否可以在野外安全部署。

我们介绍了 Fortuna ,这是一个用于不确定性量化的开源库。Fortuna 提供校准方法,例如共形预测,这些方法可以应用于任何经过训练的神经网络,以获得经过校准的不确定性估计值。 该库还支持许多贝叶斯推理方法,这些方法可以应用于用 Flax 编写的深度神经网络。 该库使运行基准测试变得容易,并将使从业者能够利用先进的不确定性量化技术来构建强大而可靠的人工智能解决方案。

对深度学习过度自信的问题

如果你曾经看过经过训练的深度神经网络分类器返回的类别概率,你可能会发现一个类别的概率比其他类别大得多。例如,像这样:

p = [0.0001,0.0002,...,0.9991,0.0003,...,0.0001]

如果大多数预测都是这样,那么你的模型可能过于自信。为了评估分类器返回的概率的有效性,我们可以将其与在抵御数据集上获得的实际精度进行比较。事实上,很自然地假设正确分类的数据点的比例应与预测类别的估计概率大致相匹配。这个概念被称为 校准 [郭C.等人,2017]

不幸的是,许多经过训练的深度神经网络校准不当,这意味着预测类别的估计概率远高于正确分类的输入数据点的比例。换句话说,分类器过于自信。

在实践中,过于自信可能会有问题。由于人工智能做出的健康诊断过于自信,医生可能不会下令进行额外的相关检查。自动驾驶汽车可能会决定不刹车,因为它自信地评估出前面的物体不是人。州长可能会决定撤离城镇,因为人工智能估计发生重大自然灾害的可能性太高。在这些应用和许多其他应用中,校准后的不确定性估计值对于评估模型预测的可靠性、回归人类决策者或决定模型是否可以安全部署至关重要。

Fortuna:不确定性量化库

有许多已发布的技术可以估计或校准预测的不确定性,例如贝叶斯推断 [Wilson A.G.,2020年]、温度标度 [郭C.等人 ,2017年] 和共角预测 [Angelopoulos A.N.等人 ,2022年]。 但是,用于不确定性量化的现有工具和库范围狭窄,不能在一个地方提供广泛的技术。这导致了巨大的开销,阻碍了生产系统采用不确定性。

为了填补这一空白,我们推出了Fortuna,这是一个用于不确定性量化的库,它汇集了文献中的重要方法,并通过标准化和直观的界面向用户提供这些方法。

例如,假设你有 Tens orFlow.Tensor 格式的训练、校准和测试数据加载器,即 train_data_loader、calib_data_loader 和 test_data_loader。 此外,你还有一个用 Flax 编写的深度学习模型 ,即模型。然后你可以使用 Fortuna 来:

  1. 拟合后验分布;
  2. 校准模型输出;
  3. 做出经过校准的预测;
  4. 估计不确定性估计;
  5. 计算评估指标。

以下代码可以为你完成所有这些操作。

from fortuna.data import DataLoader
from fortuna.prob_model.classification import ProbClassifier
from fortuna.metric.classification import expected_calibration_error

# convert data loaders
train_data_loader = DataLoader.from_tensorflow_data_loader(train_data_loader)
calib_data_loader = DataLoader.from_tensorflow_data_loader(calib_data_loader)
test_data_loader = DataLoader.from_tensorflow_data_loader(test_data_loader)

# define and train a probabilistic model
prob_model = ProbClassifier(model=model)
train_status = prob_model.train(train_data_loader=train_data_loader, calib_data_loader=calib_data_loader)

# make predictions and estimate uncertainty
test_inputs_loader = test_data_loader.to_inputs_loader()
test_means = prob_model.predictive.mean(inputs_loader=test_inputs_loader)
test_modes = prob_model.predictive.mode(inputs_loader=test_inputs_loader, means=test_means)

# compute the expected calibration error and plot a reliability diagram
test_targets = test_data_loader.to_array_targets()
ece = expected_calibration_error(preds=test_modes, probs=test_means, targets=test_targets)

上面的代码使用了多个默认选项,包括 作为后验推理方法的 S WAG [Maddox W.J. 等人,2019 年] 、用于校准模型输出的温度标度 [Guo C. 等人,2017] 、标准的高斯先验分布,以及后验拟合和校准过程的配置。您可以轻松配置所有这些组件,如果您正在寻找特定的配置或想要比较多个配置,我们强烈建议您这样做。

使用模式

Fortuna 提供三种使用模式:1/ 从 Flax 模型 开始 ,2/ 从模型输出 开始 ,3/ 从不确定性估计开始。 他们的管道如下图所示,每个管道都从其中一个绿色面板开始。上面的代码片段是使用 Fortuna 的示例,从 Flax 模型开始,它允许使用贝叶斯推理程序训练模型。或者,您可以从模型输出开始,也可以直接从自己的不确定性估计值开始。后两种模式都 与 框架无关,可帮助您从 训练的模型开始获得经过校准的不确定性估计值。

1/ 从不确定性估计开始

从不确定性估算开始,兼容性要求最低,这是与库交互的最快级别。这种使用模式为分类和回归提供了共形预测方法。它们采用 n umpy.ndarray 格式的不确定性估计值,并返回严格的预测集,这些预测保留了用户给定的概率水平。在一维回归任务中,共形集可以被视为置信度或可信区间的校准版本。

请注意,如果您在输入中提供的不确定性估计值不准确,则等角集可能很大且无法使用。因此,如果您的应用程序允许,请考虑下面详细介绍的 “从模型输出 开始” 和 “从 Flax 模型 开始” 使用模式。

2/ 从模型输出开始

此模式假设你已经在某个框架中训练了一个模型,并使用每个输入数据点的 n umpy.ndarray 格式的模型输出到达 Fortuna。此使用模式允许您校准模型输出、估计不确定性、计算指标和获得等角集。

与 “从不确定性估计值 开始” 使用模式相比,从模型输出 开始可以 提供更好的控制,因为它可以确保对不确定性估计值进行了适当的校准。但是,如果模型是使用经典方法训练的,则模型不确定性(又名认识论)的量化结果可能很差。为了缓解此问题,请考虑 “从 Flax 模型 开始” 使用模式。

3/ 从 Flax 模型开始

从 Flax 模型开始,比 “从不确定性估计 开始” 和 “从模型输出 开始” 使用模式具有更高的兼容性要求,因为它需要用 Fla x 编写的深度学习模型。但是,它使您能够用可扩展的贝叶斯推理程序代替标准模型训练,这可能会显著改善预测不确定性的量化。

贝叶斯方法的工作原理是通过模型参数的不确定性来表示在给定有限信息的情况下哪个解是正确的不确定性。这种不确定性被称为 “认识论” 的不确定性。由于神经网络可以表示许多不同的解,对应于其参数的不同设置,因此贝叶斯方法对深度学习的影响尤其大。我们提供了许多可扩展的贝叶斯推理程序,这些程序通常可用于提供不确定性估计,并提高准确性和校准,基本上没有训练时间开销。

结论

我们宣布Fortuna正式上市,这是一款用于深度学习中不确定性量化的库。Fortuna汇集了文献中的重要方法,例如共形方法、温度标度和贝叶斯推理,并通过标准化和直观的界面将其提供给用户。要开始使用 Fortuna,您可以查阅以下资源:

  • GitHub
  • 官方文档

试试 Fortuna,告诉我们你的想法! 我们鼓励你向图书馆投稿或留下你的建议和贡献——只需创建 议题 或打开拉取请求即可。 在我们方面,我们将继续改进Fortuna,增加其对不确定性量化方法的覆盖范围,并添加更多示例,以展示其在多种情景中的用处。


作者简介

Gianluca Detommaso 是 亚马逊云科技 的应用科学家。他目前正在研究深度学习中的不确定性量化。在业余时间,Gianluca喜欢练习运动,吃美味的食物和学习新技能。

阿尔贝托·加斯帕林自 2021年7月起担任亚马逊社区购物的应用科学家。他的兴趣包括自然语言处理、信息检索和不确定性量化。他是美食和葡萄酒爱好者。

米歇尔·多尼尼 是 亚马逊云科技 的高级应用科学家。他领导着一支研究负责任人工智能的科学家团队,他的研究兴趣是算法公平性和可解释的机器学习。

马蒂亚斯·西格 是 亚马逊云科技 的首席应用科学家

塞德里克·阿尚博 是 亚马逊云科技 的首席应用科学家,也是欧洲学习与智能系统实验室的研究员。

安德鲁·戈登·威尔逊 是纽约大学库兰特数学科学研究所和数据科学中心的副教授,也是 亚马逊云科技 的亚马逊访问学者。他特别参与为贝叶斯和概率深度学习、可扩展的高斯过程、贝叶斯优化和受物理启发的机器学习构建方法。