Une bonne estimation de l'incertitude prédictive est fondamentale dans les applications qui impliquent des décisions critiques. L'incertitude peut être utilisée pour évaluer la fiabilité des prédictions du modèle, déclencher une intervention humaine ou décider si un modèle peut être déployé en toute sécurité dans la nature.
Fortuna est une bibliothèque pour la quantification de l'incertitude qui permet aux utilisateurs de gérer facilement les références et d'apporter l'incertitude aux systèmes de production. Fortuna fournit des méthodes d'étalonnage et de conformité à partir de modèles pré-formés écrits dans n'importe quel cadre, et il prend en place plusieurs méthodes d'inférence bayésiennes à partir de modèles d'apprentissage en profondeur écrit en lin. La langue est conçue pour être intuitive pour les praticiens qui ne connaissent pas la quantification de l'incertitude et sont très configurables.
Vérifiez la documentation pour un start qui rapide, des exemples et des références.
Fortuna propose trois modes d'utilisation différents: à partir des estimations d'incertitude, des sorties du modèle et des modèles de lin. Ceux-ci desservent les utilisateurs selon les contraintes dictées par leurs propres applications. Leurs pipelines sont représentés dans la figure suivante, chacune à partir de l'un des panneaux verts.

À partir des estimations de l'incertitude, des exigences de compatibilité minimale et c'est le niveau d'interaction le plus rapide avec la bibliothèque. Ce mode d'utilisation offre des méthodes de prédiction conforme pour la classification et la régression. Ceux-ci prennent des estimations d'incertitude en entrée et renvoient des ensembles de prédictions rigoureuses qui conservent un niveau de probabilité donné par l'utilisateur. Dans les tâches de régression unidimensionnelle, des ensembles conformes peuvent être considérés comme des versions calibrées de confiance ou d'intervalles crédibles.
Pensez que si l'incertitude estime que vous fournissez dans les entrées est inexacte, les ensembles conformes peuvent être grands et inutilisables. Pour cette raison, si votre application le permet, veuillez considérer les sorties du modèle et les modes d'utilisation des modèles de lin.
Exemple. Supposons que vous souhaitiez calibrer des intervalles crédibles avec error de couverture, chacune correspondant à une variable d'entrée de test différente. Nous supposons que des intervalles crédibles sont passés sous forme de tableaux de limites inférieures et supérieures, respectivement test_lower_bounds et test_upper_bounds . Vous avez également des limites inférieures et supérieures d'intervalles crédibles calculés pour plusieurs entrées de validation, respectivement val_lower_bounds et val_upper_bounds . Le tableau correspondant des cibles de validation est indiqué par val_targets . Le code suivant produit des intervalles de prédiction conformes , c'est-à-dire des versions calibrées de vous tester des intervalles crédibles.
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 ) À partir des sorties du modèle, vous suppose que vous avez déjà formé un modèle dans un cadre et arrivez à Fortuna avec des sorties de modèle au format numpy.ndarray pour chaque point de données d'entrée. Ce mode d'utilisation vous permet de calibrer les sorties de votre modèle, d'estimer l'incertitude, de calculer des mesures et d'obtenir des ensembles conformes.
Par rapport au mode d'utilisation des estimations de l'incertitude, celle-ci offre un meilleur contrôle, car il peut s'assurer que les estimations de l'incertitude ont été calibrées de manière appropriée. Cependant, si le modèle avait été formé avec des méthodes classiques, la quantification qui en résulte de l'incertitude du modèle (aka épistémique) peut être médiocre. Pour atténuer ce problème, veuillez considérer le mode d'utilisation des modèles de lin.
Exemple. Supposons que vous ayez respectivement des sorties de validation et de test, respectivement val_outputs et test_outputs . De plus, vous avez quelques tableaux de validation et de variables cibles, respectivement val_targets et test_targets . Le code suivant fournit un exemple de classification minimal pour obtenir des estimations d'entropie prédictive calibrées.
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 )À partir des modèles de lin, a des exigences de compatibilité plus élevées que les estimations d'incertitude et des modes d'utilisation des sorties du modèle, car il nécessite des modèles d'apprentissage en profondeur écrit en lin. Cependant, il vous permet de remplacer la formation des modèles standard par des procédures d'inférence bayésien évolutives, ce qui peut améliorer considérablement la quantification de l'incertitude prédictive.
Exemple. Supposons que vous ayez un model d'apprentissage en profondeur de classification de lin des entrées aux logits, avec une dimension de sortie donnée par output_dim . De plus, vous avez des formations de formation, de validation et d'étalonnage TensorFlow train_data_loader , val_data_loader et test_data_loader , respectivement. Le code suivant fournit un exemple de classification minimal pour obtenir des estimations de probabilité calibrées.
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 ())Remarque: Avant d'installer Fortuna, vous devez installer Jax dans votre environnement virtuel.
Vous pouvez installer Fortuna en tapant
pip installer AWS-Fortuna
Alternativement, vous pouvez créer le package à l'aide de la poésie. Si vous choisissez de poursuivre de cette façon, installez d'abord la poésie et ajoutez-la à votre chemin (voir ici). Puis taper
Installation de poésie
Toutes les dépendances seront installées dans leurs versions requises. Envisagez d'ajouter les drapeaux suivants à la commande ci-dessus:
-E transformers si vous souhaitez utiliser des modèles et des ensembles de données à partir de la face des câlins.-E sagemaker si vous souhaitez installer les dépendances nécessaires pour exécuter Fortuna sur Amazon Sagemaker.-E docs Si vous souhaitez installer des dépendances Sphinx pour construire la documentation.-E notebooks si vous souhaitez travailler avec des cahiers Jupyter. Enfin, vous pouvez accéder au virtualenv que la poésie créée en tapant poetry shell , soit exécuter des commandes dans le virtualEnv à l'aide de la commande run , par exemple poetry run python .
Plusieurs exemples d'utilisation sont trouvés dans le répertoire / exemples.
Nous offrons un pipeline simple qui vous permet d'exécuter Fortuna sur Amazon Sagemaker avec un minimum d'effort.
config_dir , c'est le chemin absolu du répertoire de configuration principal, et config_filename , c'est le nom du fichier de configuration principal (sans extension .yaml), entrez python et exécutez ce qui suit: from fortuna . sagemaker import run_training_job
run_training_job ( config_dir = config_dir , config_filename = config_filename )Pour citer Fortuna:
@article {detommaso2023fortuna,
Titre = {Fortuna: une bibliothèque pour la quantification de l'incertitude dans Deep Learning},
Auteur = {Detommaso, Gianluca et Gasparin, Alberto et Donini, Michele et Seeger, Matthias et Wilson, Andrew Gordon et Archambeau, Cedric},
journal = {arXiv Preprint Arxiv: 2302.04019},
année = {2023}
}
Si vous souhaitez contribuer au projet, veuillez vous référer à nos directives de contribution.
Ce projet est concédé sous licence Apache-2.0. Voir la licence pour plus d'informations.