正确估计预测不确定性是涉及关键决策的应用中的基础。不确定性可用于评估模型预测的可靠性,触发人类干预或确定是否可以安全部署在野外。
Fortuna是一个用于不确定性量化的库,可让用户轻松运行基准并为生产系统带来不确定性。 Fortuna提供了从任何框架中编写的预训练模型开始的校准和保形方法,它进一步支持了几种贝叶斯推理方法,从用亚麻编写的深度学习模型开始。该语言的目的是对于不熟悉不确定性量化的从业者而言是直观的,并且是高度可配置的。
检查文档以获取快速启动,示例和参考。
Fortuna提供了三种不同的用法模式:从不确定性估计,从模型输出到亚麻模型。这些根据自己的应用程序决定的限制服务。它们的管道在下图中描绘了,每个图都是从一个绿色面板开始的。

从不确定性估计值开始的兼容性要求最小,它是与库的交互的最快水平。这种用法模式提供了用于分类和回归的共形预测方法。这些对输入中的不确定性进行了估计,并返回一组严格的预测集,以保留用户赋予的概率水平。在一维回归任务中,可以将保形设置视为校准版本或可靠的间隔。
请注意,如果您在输入中提供的不确定性估计是不准确的,则保形集可能很大且无法使用。因此,如果您的应用程序允许,请考虑从模型输出和亚麻模型使用模式。
例子。假设您要使用覆盖误差error校准可靠的间隔,每个间隔对应于不同的测试输入变量。我们假设可靠的间隔将作为下限和上限的数组传递,分别是test_lower_bounds和test_upper_bounds 。您还具有针对多个验证输入计算的可靠间隔的下限和上限,分别为val_lower_bounds和val_upper_bounds 。 val_targets表示相应的验证目标数组。以下代码会产生共形预测间隔,即您测试可靠的间隔的校准版本。
from fortuna . conformal import QuantileConformalRegressor
conformal_intervals = QuantileConformalRegressor (). conformal_interval (
val_lower_bounds = val_lower_bounds , val_upper_bounds = val_upper_bounds ,
test_lower_bounds = test_lower_bounds , test_upper_bounds = test_upper_bounds ,
val_targets = val_targets , error = error )从模型输出开始,假设您已经在某些框架中训练了一个模型,并以numpy.ndarray格式的模型输出到达Fortuna。这种使用模式使您可以校准模型输出,估计不确定性,计算指标并获得保形集。
与来自不确定性估计的使用模式相比,该模式提供了更好的控制,因为它可以确保对不确定性估计进行了适当的校准。但是,如果该模型已经接受了经典方法的培训,则导致的模型(又称认识论)不确定性的定量可能很差。为了减轻此问题,请考虑来自亚麻模型使用模式。
例子。假设您有验证和测试模型输出,分别为val_outputs和test_outputs 。此外,您有一些验证和目标变量数组,分别是val_targets和test_targets 。以下代码提供了一个最小的分类示例,以获得校准的预测熵估计。
from fortuna . output_calib_model import OutputCalibClassifier
calib_model = OutputCalibClassifier ()
status = calib_model . calibrate ( outputs = val_outputs , targets = val_targets )
test_entropies = calib_model . predictive . entropy ( outputs = test_outputs )从亚麻模型开始,比不确定性估计和模型输出模式的兼容性要求更高,因为它需要用亚麻编写的深度学习模型。但是,它使您可以用可扩展的贝叶斯推理程序代替标准模型训练,这可能会显着改善预测不确定性的量化。
例子。假设您具有从输入到逻辑的Flax分类深度学习模型model ,输出维度为output_dim 。此外,您分别进行了一些培训,验证和校准tensorflow数据加载器train_data_loader , val_data_loader和test_data_loader 。以下代码提供了一个最小的分类示例,以获取校准的概率估计。
from fortuna . data import DataLoader
train_data_loader = DataLoader . from_tensorflow_data_loader ( train_data_loader )
calib_data_loader = DataLoader . from_tensorflow_data_loader ( val_data_loader )
test_data_loader = DataLoader . from_tensorflow_data_loader ( test_data_loader )
from fortuna . prob_model import ProbClassifier
prob_model = ProbClassifier ( model = model )
status = prob_model . train ( train_data_loader = train_data_loader , calib_data_loader = calib_data_loader )
test_means = prob_model . predictive . mean ( inputs_loader = test_data_loader . to_inputs_loader ())注意:在安装Fortuna之前,您需要在虚拟环境中安装JAX。
您可以通过打字来安装fortuna
PIP安装AWS-Fortuna
另外,您可以使用诗歌构建包装。如果您选择这种方式,请首先安装诗歌并将其添加到您的路径中(请参阅此处)。然后输入
诗歌安装
所有依赖项将安装在其所需版本上。考虑将以下标志添加到上面的命令:
-E transformers如果想使用型号和数据集,则可以通过拥抱脸部。-E sagemaker如果您想安装在Amazon Sagemaker上运行Fortuna所需的依赖项。-E docs如果要安装狮身人面像依赖关系以构建文档。-E notebooks如果您想使用Jupyter笔记本电脑。最后,您可以访问诗歌通过打字poetry shell创建的Virtualenv,也可以使用run命令(例如poetry run python在Virtualenv中执行命令。
在 /示例目录中找到了几个用法示例。
我们提供一条简单的管道,使您能够以最小的努力在亚马逊萨吉式制造商上运行Fortuna。
config_dir ,这是通往主要配置目录的绝对路径,而config_filename ,它是主配置文件的名称(无.yaml扩展),输入python并运行以下: from fortuna . sagemaker import run_training_job
run_training_job ( config_dir = config_dir , config_filename = config_filename )引用Fortuna:
@Article {ditommaso2023fortuna,
title = {fortuna:深度学习中的不确定性量化库},
作者= {Ditommaso,Gianluca和Gasparin,Alberto和Donini,Michele和Seege,Matthias和Wilson,Andrew Gordon和Archambeau,Cedric},Cedric},
journal = {arxiv preprint arxiv:2302.04019},
年= {2023}
}
如果您想为该项目做出贡献,请参阅我们的贡献指南。
该项目已根据APACHE-2.0许可获得许可。有关更多信息,请参见许可证。